automerge-rb 0.1.1

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 (481) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +175 -0
  4. data/ext/automerge_ext/automerge_ext.c +1805 -0
  5. data/ext/automerge_ext/extconf.rb +132 -0
  6. data/lib/automerge/version.rb +6 -0
  7. data/lib/automerge.rb +110 -0
  8. data/rust-toolchain.toml +4 -0
  9. data/vendor/automerge-rust/Cargo.lock +1909 -0
  10. data/vendor/automerge-rust/Cargo.toml +15 -0
  11. data/vendor/automerge-rust/automerge/Cargo.toml +78 -0
  12. data/vendor/automerge-rust/automerge/README.md +5 -0
  13. data/vendor/automerge-rust/automerge/benches/load_save.rs +102 -0
  14. data/vendor/automerge-rust/automerge/benches/map.rs +260 -0
  15. data/vendor/automerge-rust/automerge/benches/range.rs +37 -0
  16. data/vendor/automerge-rust/automerge/benches/sync.rs +95 -0
  17. data/vendor/automerge-rust/automerge/examples/README.md +7 -0
  18. data/vendor/automerge-rust/automerge/examples/quickstart.rs +57 -0
  19. data/vendor/automerge-rust/automerge/examples/watch.rs +94 -0
  20. data/vendor/automerge-rust/automerge/fuzz/Cargo.toml +29 -0
  21. data/vendor/automerge-rust/automerge/fuzz/fuzz_targets/load.rs +37 -0
  22. data/vendor/automerge-rust/automerge/src/autocommit.rs +1286 -0
  23. data/vendor/automerge-rust/automerge/src/automerge/current_state.rs +546 -0
  24. data/vendor/automerge-rust/automerge/src/automerge/tests.rs +2023 -0
  25. data/vendor/automerge-rust/automerge/src/automerge.rs +2071 -0
  26. data/vendor/automerge-rust/automerge/src/autoserde.rs +128 -0
  27. data/vendor/automerge-rust/automerge/src/change.rs +357 -0
  28. data/vendor/automerge-rust/automerge/src/change_graph.rs +1215 -0
  29. data/vendor/automerge-rust/automerge/src/change_queue.rs +46 -0
  30. data/vendor/automerge-rust/automerge/src/clock.rs +206 -0
  31. data/vendor/automerge-rust/automerge/src/columnar/column_range/boolean.rs +83 -0
  32. data/vendor/automerge-rust/automerge/src/columnar/column_range/delta.rs +148 -0
  33. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/group.rs +138 -0
  34. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/simple.rs +76 -0
  35. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic.rs +93 -0
  36. data/vendor/automerge-rust/automerge/src/columnar/column_range/key.rs +272 -0
  37. data/vendor/automerge-rust/automerge/src/columnar/column_range/obj_id.rs +202 -0
  38. data/vendor/automerge-rust/automerge/src/columnar/column_range/opid_list.rs +329 -0
  39. data/vendor/automerge-rust/automerge/src/columnar/column_range/raw.rs +38 -0
  40. data/vendor/automerge-rust/automerge/src/columnar/column_range/rle.rs +216 -0
  41. data/vendor/automerge-rust/automerge/src/columnar/column_range/value.rs +547 -0
  42. data/vendor/automerge-rust/automerge/src/columnar/column_range.rs +17 -0
  43. data/vendor/automerge-rust/automerge/src/columnar/encoding/boolean.rs +197 -0
  44. data/vendor/automerge-rust/automerge/src/columnar/encoding/col_error.rs +88 -0
  45. data/vendor/automerge-rust/automerge/src/columnar/encoding/column_decoder.rs +133 -0
  46. data/vendor/automerge-rust/automerge/src/columnar/encoding/decodable_impls.rs +175 -0
  47. data/vendor/automerge-rust/automerge/src/columnar/encoding/delta.rs +96 -0
  48. data/vendor/automerge-rust/automerge/src/columnar/encoding/encodable_impls.rs +200 -0
  49. data/vendor/automerge-rust/automerge/src/columnar/encoding/leb128.rs +82 -0
  50. data/vendor/automerge-rust/automerge/src/columnar/encoding/properties.rs +178 -0
  51. data/vendor/automerge-rust/automerge/src/columnar/encoding/raw.rs +101 -0
  52. data/vendor/automerge-rust/automerge/src/columnar/encoding/rle.rs +239 -0
  53. data/vendor/automerge-rust/automerge/src/columnar/encoding.rs +67 -0
  54. data/vendor/automerge-rust/automerge/src/columnar/splice_error.rs +47 -0
  55. data/vendor/automerge-rust/automerge/src/columnar.rs +14 -0
  56. data/vendor/automerge-rust/automerge/src/convert.rs +112 -0
  57. data/vendor/automerge-rust/automerge/src/cursor.rs +296 -0
  58. data/vendor/automerge-rust/automerge/src/decoding.rs +475 -0
  59. data/vendor/automerge-rust/automerge/src/error.rs +159 -0
  60. data/vendor/automerge-rust/automerge/src/exid.rs +238 -0
  61. data/vendor/automerge-rust/automerge/src/hydrate/list.rs +140 -0
  62. data/vendor/automerge-rust/automerge/src/hydrate/map.rs +132 -0
  63. data/vendor/automerge-rust/automerge/src/hydrate/tests.rs +40 -0
  64. data/vendor/automerge-rust/automerge/src/hydrate/text.rs +89 -0
  65. data/vendor/automerge-rust/automerge/src/hydrate.rs +368 -0
  66. data/vendor/automerge-rust/automerge/src/indexed_cache.rs +113 -0
  67. data/vendor/automerge-rust/automerge/src/iter/doc.rs +603 -0
  68. data/vendor/automerge-rust/automerge/src/iter/keys.rs +93 -0
  69. data/vendor/automerge-rust/automerge/src/iter/list_range.rs +433 -0
  70. data/vendor/automerge-rust/automerge/src/iter/map_range.rs +316 -0
  71. data/vendor/automerge-rust/automerge/src/iter/spans.rs +601 -0
  72. data/vendor/automerge-rust/automerge/src/iter/tools.rs +427 -0
  73. data/vendor/automerge-rust/automerge/src/iter/values.rs +36 -0
  74. data/vendor/automerge-rust/automerge/src/iter.rs +25 -0
  75. data/vendor/automerge-rust/automerge/src/legacy/mod.rs +364 -0
  76. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/actor_id.rs +25 -0
  77. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/change_hash.rs +29 -0
  78. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/element_id.rs +27 -0
  79. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/mod.rs +31 -0
  80. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/object_id.rs +36 -0
  81. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op.rs +668 -0
  82. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op_type.rs +26 -0
  83. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/opid.rs +25 -0
  84. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/scalar_value.rs +63 -0
  85. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/element_id.rs +66 -0
  86. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/key.rs +49 -0
  87. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/mod.rs +4 -0
  88. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/object_id.rs +74 -0
  89. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/opid.rs +68 -0
  90. data/vendor/automerge-rust/automerge/src/lib.rs +315 -0
  91. data/vendor/automerge-rust/automerge/src/marks.rs +478 -0
  92. data/vendor/automerge-rust/automerge/src/op_set2/change/batch.rs +2002 -0
  93. data/vendor/automerge-rust/automerge/src/op_set2/change/collector.rs +974 -0
  94. data/vendor/automerge-rust/automerge/src/op_set2/change.rs +332 -0
  95. data/vendor/automerge-rust/automerge/src/op_set2/columns.rs +714 -0
  96. data/vendor/automerge-rust/automerge/src/op_set2/meta.rs +174 -0
  97. data/vendor/automerge-rust/automerge/src/op_set2/op.rs +1363 -0
  98. data/vendor/automerge-rust/automerge/src/op_set2/op_set/elems.rs +43 -0
  99. data/vendor/automerge-rust/automerge/src/op_set2/op_set/found_op.rs +60 -0
  100. data/vendor/automerge-rust/automerge/src/op_set2/op_set/index.rs +197 -0
  101. data/vendor/automerge-rust/automerge/src/op_set2/op_set/insert.rs +179 -0
  102. data/vendor/automerge-rust/automerge/src/op_set2/op_set/mark_index.rs +292 -0
  103. data/vendor/automerge-rust/automerge/src/op_set2/op_set/marks.rs +86 -0
  104. data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_iter.rs +1295 -0
  105. data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_query.rs +82 -0
  106. data/vendor/automerge-rust/automerge/src/op_set2/op_set/top_op.rs +50 -0
  107. data/vendor/automerge-rust/automerge/src/op_set2/op_set/visible.rs +290 -0
  108. data/vendor/automerge-rust/automerge/src/op_set2/op_set.rs +1793 -0
  109. data/vendor/automerge-rust/automerge/src/op_set2/parents.rs +133 -0
  110. data/vendor/automerge-rust/automerge/src/op_set2/skip_list.rs +714 -0
  111. data/vendor/automerge-rust/automerge/src/op_set2/types.rs +769 -0
  112. data/vendor/automerge-rust/automerge/src/op_set2.rs +18 -0
  113. data/vendor/automerge-rust/automerge/src/patches/patch.rs +95 -0
  114. data/vendor/automerge-rust/automerge/src/patches/patch_builder.rs +382 -0
  115. data/vendor/automerge-rust/automerge/src/patches/patch_log.rs +584 -0
  116. data/vendor/automerge-rust/automerge/src/patches.rs +7 -0
  117. data/vendor/automerge-rust/automerge/src/query/list_state.rs +230 -0
  118. data/vendor/automerge-rust/automerge/src/query/seek_mark.rs +142 -0
  119. data/vendor/automerge-rust/automerge/src/read.rs +326 -0
  120. data/vendor/automerge-rust/automerge/src/sequence_tree.rs +662 -0
  121. data/vendor/automerge-rust/automerge/src/storage/bundle/builder.rs +942 -0
  122. data/vendor/automerge-rust/automerge/src/storage/bundle/error.rs +42 -0
  123. data/vendor/automerge-rust/automerge/src/storage/bundle/meta.rs +23 -0
  124. data/vendor/automerge-rust/automerge/src/storage/bundle/storage.rs +146 -0
  125. data/vendor/automerge-rust/automerge/src/storage/bundle.rs +210 -0
  126. data/vendor/automerge-rust/automerge/src/storage/change/change_actors.rs +311 -0
  127. data/vendor/automerge-rust/automerge/src/storage/change/change_op_columns.rs +621 -0
  128. data/vendor/automerge-rust/automerge/src/storage/change/compressed.rs +51 -0
  129. data/vendor/automerge-rust/automerge/src/storage/change/op_with_change_actors.rs +1 -0
  130. data/vendor/automerge-rust/automerge/src/storage/change.rs +523 -0
  131. data/vendor/automerge-rust/automerge/src/storage/chunk.rs +312 -0
  132. data/vendor/automerge-rust/automerge/src/storage/columns/column.rs +42 -0
  133. data/vendor/automerge-rust/automerge/src/storage/columns/column_builder.rs +199 -0
  134. data/vendor/automerge-rust/automerge/src/storage/columns/column_specification.rs +340 -0
  135. data/vendor/automerge-rust/automerge/src/storage/columns/raw_column.rs +286 -0
  136. data/vendor/automerge-rust/automerge/src/storage/columns.rs +355 -0
  137. data/vendor/automerge-rust/automerge/src/storage/document/compression.rs +362 -0
  138. data/vendor/automerge-rust/automerge/src/storage/document.rs +411 -0
  139. data/vendor/automerge-rust/automerge/src/storage/load/change_collector.rs +15 -0
  140. data/vendor/automerge-rust/automerge/src/storage/load.rs +136 -0
  141. data/vendor/automerge-rust/automerge/src/storage/parse/leb128.rs +302 -0
  142. data/vendor/automerge-rust/automerge/src/storage/parse.rs +619 -0
  143. data/vendor/automerge-rust/automerge/src/storage/save/document.rs +27 -0
  144. data/vendor/automerge-rust/automerge/src/storage.rs +26 -0
  145. data/vendor/automerge-rust/automerge/src/sync/bloom.rs +161 -0
  146. data/vendor/automerge-rust/automerge/src/sync/message_builder.rs +118 -0
  147. data/vendor/automerge-rust/automerge/src/sync/state.rs +214 -0
  148. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/bloom.rs +162 -0
  149. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/mod.rs +625 -0
  150. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/state.rs +120 -0
  151. data/vendor/automerge-rust/automerge/src/sync.rs +2482 -0
  152. data/vendor/automerge-rust/automerge/src/text_diff/LICENSE +201 -0
  153. data/vendor/automerge-rust/automerge/src/text_diff/myers.rs +332 -0
  154. data/vendor/automerge-rust/automerge/src/text_diff/replace.rs +139 -0
  155. data/vendor/automerge-rust/automerge/src/text_diff/utils.rs +119 -0
  156. data/vendor/automerge-rust/automerge/src/text_diff.rs +515 -0
  157. data/vendor/automerge-rust/automerge/src/text_value.rs +276 -0
  158. data/vendor/automerge-rust/automerge/src/transaction/commit.rs +34 -0
  159. data/vendor/automerge-rust/automerge/src/transaction/inner.rs +1403 -0
  160. data/vendor/automerge-rust/automerge/src/transaction/manual_transaction.rs +147 -0
  161. data/vendor/automerge-rust/automerge/src/transaction/owned_transaction.rs +266 -0
  162. data/vendor/automerge-rust/automerge/src/transaction/result.rs +21 -0
  163. data/vendor/automerge-rust/automerge/src/transaction/transactable.rs +203 -0
  164. data/vendor/automerge-rust/automerge/src/transaction.rs +513 -0
  165. data/vendor/automerge-rust/automerge/src/types.rs +749 -0
  166. data/vendor/automerge-rust/automerge/src/validation.rs +29 -0
  167. data/vendor/automerge-rust/automerge/src/value.rs +763 -0
  168. data/vendor/automerge-rust/automerge/tests/batch_insert.rs +1034 -0
  169. data/vendor/automerge-rust/automerge/tests/block_tests.rs +887 -0
  170. data/vendor/automerge-rust/automerge/tests/convert_string_to_text.rs +72 -0
  171. data/vendor/automerge-rust/automerge/tests/diff_marks.rs +1508 -0
  172. data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_change.automerge +0 -0
  173. data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_doc.automerge +0 -0
  174. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_has_incorrect_meta.automerge +0 -0
  175. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_ok.automerge +0 -0
  176. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_overlong.automerge +0 -0
  177. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks.automerge +0 -0
  178. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_compressed.automerge +0 -0
  179. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_out_of_order.automerge +0 -0
  180. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/action-is-48.automerge +0 -0
  181. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
  182. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/incorrect_max_op.automerge +0 -0
  183. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/invalid_deflate_stream.automerge +0 -0
  184. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/missing_actor.automerge +0 -0
  185. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/overflow_in_length.automerge +0 -0
  186. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_deps.automerge +0 -0
  187. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_ops.automerge +0 -0
  188. data/vendor/automerge-rust/automerge/tests/test.rs +2668 -0
  189. data/vendor/automerge-rust/automerge/tests/test_mark_patches.rs +41 -0
  190. data/vendor/automerge-rust/automerge/tests/test_save_load_orphans.rs +84 -0
  191. data/vendor/automerge-rust/automerge/tests/text.rs +1098 -0
  192. data/vendor/automerge-rust/automerge/tests/text_encoding.rs +640 -0
  193. data/vendor/automerge-rust/automerge-c/CMakeLists.txt +439 -0
  194. data/vendor/automerge-rust/automerge-c/Cargo.toml +22 -0
  195. data/vendor/automerge-rust/automerge-c/README.md +233 -0
  196. data/vendor/automerge-rust/automerge-c/build.rs +21 -0
  197. data/vendor/automerge-rust/automerge-c/cbindgen.toml +48 -0
  198. data/vendor/automerge-rust/automerge-c/cmake/Cargo.toml.in +22 -0
  199. data/vendor/automerge-rust/automerge-c/cmake/automerge-c-config.cmake.in +99 -0
  200. data/vendor/automerge-rust/automerge-c/cmake/cbindgen.toml.in +48 -0
  201. data/vendor/automerge-rust/automerge-c/cmake/config.h.in +58 -0
  202. data/vendor/automerge-rust/automerge-c/cmake/enum-string-functions-gen.cmake +183 -0
  203. data/vendor/automerge-rust/automerge-c/cmake/file-regex-replace.cmake +33 -0
  204. data/vendor/automerge-rust/automerge-c/cmake/file-touch.cmake +35 -0
  205. data/vendor/automerge-rust/automerge-c/docs/CMakeLists.txt +39 -0
  206. data/vendor/automerge-rust/automerge-c/docs/img/brandmark.png +0 -0
  207. data/vendor/automerge-rust/automerge-c/examples/CMakeLists.txt +42 -0
  208. data/vendor/automerge-rust/automerge-c/examples/README.md +9 -0
  209. data/vendor/automerge-rust/automerge-c/examples/quickstart.c +131 -0
  210. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/result.h +30 -0
  211. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack.h +130 -0
  212. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack_callback_data.h +53 -0
  213. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/string.h +29 -0
  214. data/vendor/automerge-rust/automerge-c/src/actor_id.rs +193 -0
  215. data/vendor/automerge-rust/automerge-c/src/byte_span.rs +227 -0
  216. data/vendor/automerge-rust/automerge-c/src/change.rs +356 -0
  217. data/vendor/automerge-rust/automerge-c/src/cursor.rs +168 -0
  218. data/vendor/automerge-rust/automerge-c/src/doc/list.rs +636 -0
  219. data/vendor/automerge-rust/automerge-c/src/doc/map.rs +556 -0
  220. data/vendor/automerge-rust/automerge-c/src/doc/mark.rs +296 -0
  221. data/vendor/automerge-rust/automerge-c/src/doc/utils.rs +46 -0
  222. data/vendor/automerge-rust/automerge-c/src/doc.rs +1009 -0
  223. data/vendor/automerge-rust/automerge-c/src/index.rs +84 -0
  224. data/vendor/automerge-rust/automerge-c/src/item.rs +2177 -0
  225. data/vendor/automerge-rust/automerge-c/src/items.rs +401 -0
  226. data/vendor/automerge-rust/automerge-c/src/lib.rs +11 -0
  227. data/vendor/automerge-rust/automerge-c/src/obj.rs +216 -0
  228. data/vendor/automerge-rust/automerge-c/src/result.rs +653 -0
  229. data/vendor/automerge-rust/automerge-c/src/sync/have.rs +42 -0
  230. data/vendor/automerge-rust/automerge-c/src/sync/message.rs +146 -0
  231. data/vendor/automerge-rust/automerge-c/src/sync/state.rs +262 -0
  232. data/vendor/automerge-rust/automerge-c/src/sync.rs +7 -0
  233. data/vendor/automerge-rust/automerge-c/src/utils/result.c +33 -0
  234. data/vendor/automerge-rust/automerge-c/src/utils/stack.c +106 -0
  235. data/vendor/automerge-rust/automerge-c/src/utils/stack_callback_data.c +9 -0
  236. data/vendor/automerge-rust/automerge-c/src/utils/string.c +46 -0
  237. data/vendor/automerge-rust/automerge-c/test/CMakeLists.txt +67 -0
  238. data/vendor/automerge-rust/automerge-c/test/actor_id_tests.c +140 -0
  239. data/vendor/automerge-rust/automerge-c/test/base_state.c +17 -0
  240. data/vendor/automerge-rust/automerge-c/test/base_state.h +39 -0
  241. data/vendor/automerge-rust/automerge-c/test/byte_span_tests.c +119 -0
  242. data/vendor/automerge-rust/automerge-c/test/cmocka_utils.c +91 -0
  243. data/vendor/automerge-rust/automerge-c/test/cmocka_utils.h +42 -0
  244. data/vendor/automerge-rust/automerge-c/test/cursor_tests.c +263 -0
  245. data/vendor/automerge-rust/automerge-c/test/doc_state.c +27 -0
  246. data/vendor/automerge-rust/automerge-c/test/doc_state.h +17 -0
  247. data/vendor/automerge-rust/automerge-c/test/doc_tests.c +335 -0
  248. data/vendor/automerge-rust/automerge-c/test/enum_string_tests.c +148 -0
  249. data/vendor/automerge-rust/automerge-c/test/files/brave-ape-49.automerge +0 -0
  250. data/vendor/automerge-rust/automerge-c/test/item_tests.c +313 -0
  251. data/vendor/automerge-rust/automerge-c/test/list_tests.c +544 -0
  252. data/vendor/automerge-rust/automerge-c/test/macro_utils.c +38 -0
  253. data/vendor/automerge-rust/automerge-c/test/macro_utils.h +23 -0
  254. data/vendor/automerge-rust/automerge-c/test/main.c +33 -0
  255. data/vendor/automerge-rust/automerge-c/test/map_tests.c +1610 -0
  256. data/vendor/automerge-rust/automerge-c/test/mark_tests.c +124 -0
  257. data/vendor/automerge-rust/automerge-c/test/ported_wasm/basic_tests.c +1642 -0
  258. data/vendor/automerge-rust/automerge-c/test/ported_wasm/cursor_tests.c +108 -0
  259. data/vendor/automerge-rust/automerge-c/test/ported_wasm/suite.c +17 -0
  260. data/vendor/automerge-rust/automerge-c/test/ported_wasm/sync_tests.c +1280 -0
  261. data/vendor/automerge-rust/automerge-c/test/str_utils.c +15 -0
  262. data/vendor/automerge-rust/automerge-c/test/str_utils.h +17 -0
  263. data/vendor/automerge-rust/automerge-test/Cargo.toml +17 -0
  264. data/vendor/automerge-rust/automerge-test/README.md +3 -0
  265. data/vendor/automerge-rust/automerge-test/src/lib.rs +487 -0
  266. data/vendor/automerge-rust/hexane/CHANGELOG.md +34 -0
  267. data/vendor/automerge-rust/hexane/Cargo.toml +47 -0
  268. data/vendor/automerge-rust/hexane/README.md +292 -0
  269. data/vendor/automerge-rust/hexane/RESULTS.txt +20 -0
  270. data/vendor/automerge-rust/hexane/TODO +18 -0
  271. data/vendor/automerge-rust/hexane/benches/insert.rs +82 -0
  272. data/vendor/automerge-rust/hexane/benches/seek.rs +77 -0
  273. data/vendor/automerge-rust/hexane/benches/splice.rs +82 -0
  274. data/vendor/automerge-rust/hexane/src/aggregate.rs +288 -0
  275. data/vendor/automerge-rust/hexane/src/boolean.rs +478 -0
  276. data/vendor/automerge-rust/hexane/src/columndata.rs +2540 -0
  277. data/vendor/automerge-rust/hexane/src/cursor.rs +756 -0
  278. data/vendor/automerge-rust/hexane/src/delta.rs +793 -0
  279. data/vendor/automerge-rust/hexane/src/encoder.rs +639 -0
  280. data/vendor/automerge-rust/hexane/src/leb128.rs +82 -0
  281. data/vendor/automerge-rust/hexane/src/lib.rs +95 -0
  282. data/vendor/automerge-rust/hexane/src/pack.rs +325 -0
  283. data/vendor/automerge-rust/hexane/src/raw.rs +314 -0
  284. data/vendor/automerge-rust/hexane/src/rle.rs +928 -0
  285. data/vendor/automerge-rust/hexane/src/slab/tree.rs +1373 -0
  286. data/vendor/automerge-rust/hexane/src/slab/writer.rs +535 -0
  287. data/vendor/automerge-rust/hexane/src/slab.rs +224 -0
  288. data/vendor/automerge-rust/hexane/src/test.rs +108 -0
  289. data/vendor/bundle/ruby/3.3.0/bin/rake +29 -0
  290. data/vendor/bundle/ruby/3.3.0/bin/rake-compiler +29 -0
  291. data/vendor/bundle/ruby/3.3.0/bin/rake-compiler-dock +29 -0
  292. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/History.rdoc +1732 -0
  293. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Manifest.txt +32 -0
  294. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/README.rdoc +845 -0
  295. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Rakefile +97 -0
  296. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/design_rationale.rb +54 -0
  297. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/hoe/minitest.rb +30 -0
  298. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/assertions.rb +850 -0
  299. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/autorun.rb +6 -0
  300. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/benchmark.rb +452 -0
  301. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/compress.rb +94 -0
  302. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/error_on_warning.rb +11 -0
  303. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/expectations.rb +321 -0
  304. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/hell.rb +11 -0
  305. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/manual_plugins.rb +16 -0
  306. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/mock.rb +327 -0
  307. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/parallel.rb +72 -0
  308. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride.rb +4 -0
  309. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride_plugin.rb +135 -0
  310. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/spec.rb +353 -0
  311. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test.rb +238 -0
  312. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test_task.rb +324 -0
  313. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/unit.rb +42 -0
  314. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest.rb +1250 -0
  315. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/metametameta.rb +150 -0
  316. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_assertions.rb +1677 -0
  317. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_benchmark.rb +137 -0
  318. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_mock.rb +1213 -0
  319. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_reporter.rb +437 -0
  320. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_spec.rb +1159 -0
  321. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test.rb +1374 -0
  322. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test_task.rb +57 -0
  323. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/History.rdoc +2454 -0
  324. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  325. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/README.rdoc +155 -0
  326. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  327. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  328. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  329. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  330. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  331. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  332. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  333. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  334. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  335. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  336. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  337. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  338. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/exe/rake +27 -0
  339. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  340. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  341. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  342. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  343. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  344. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  345. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  346. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  347. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  348. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  349. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  350. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  351. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  352. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  353. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  354. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  355. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  356. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  357. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  358. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  359. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  360. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  361. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  362. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  363. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  364. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  365. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  366. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  367. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  368. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  369. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  370. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  371. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  372. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  373. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  374. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  375. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  376. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  377. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  378. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  379. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  380. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  381. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  382. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  383. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/rake.gemspec +102 -0
  384. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Gemfile +8 -0
  385. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/History.md +695 -0
  386. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/LICENSE.txt +20 -0
  387. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/README.md +476 -0
  388. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Rakefile +15 -0
  389. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/appveyor.yml +22 -0
  390. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/bin/rake-compiler +24 -0
  391. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/cucumber.yml +4 -0
  392. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/compile.feature +79 -0
  393. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-compile.feature +23 -0
  394. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package-multi.feature +15 -0
  395. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package.feature +14 -0
  396. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-compile.feature +22 -0
  397. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-no-native-compile.feature +33 -0
  398. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-package.feature +24 -0
  399. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/package.feature +40 -0
  400. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/compilation.rb +70 -0
  401. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/cross_compilation.rb +27 -0
  402. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/execution.rb +52 -0
  403. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/folders.rb +32 -0
  404. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/gem.rb +46 -0
  405. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/java_compilation.rb +7 -0
  406. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/env.rb +10 -0
  407. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/file_template_helpers.rb +137 -0
  408. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/generator_helpers.rb +123 -0
  409. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/platform_extension_helpers.rb +27 -0
  410. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/baseextensiontask.rb +90 -0
  411. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/compiler_config.rb +38 -0
  412. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensioncompiler.rb +51 -0
  413. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensiontask.rb +589 -0
  414. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/javaextensiontask.rb +321 -0
  415. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bin/cross-ruby.rake +189 -0
  416. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bootstrap.rake +11 -0
  417. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/common.rake +10 -0
  418. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/cucumber.rake +23 -0
  419. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/gem.rake +15 -0
  420. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/rspec.rake +9 -0
  421. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  422. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  423. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  424. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  425. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  426. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  427. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  428. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  429. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  430. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  431. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  432. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  433. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  434. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  435. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  436. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  437. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  438. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  439. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  440. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  441. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  442. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  443. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  444. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  445. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  446. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  447. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  448. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  449. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  450. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  451. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  452. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  453. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  454. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  455. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  456. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  457. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  458. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  459. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  460. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  461. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  462. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  463. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  464. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  465. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  466. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  467. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  468. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  469. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  470. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  471. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  472. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  473. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  474. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  475. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  476. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  477. data/vendor/bundle/ruby/3.3.0/specifications/minitest-5.27.0.gemspec +32 -0
  478. data/vendor/bundle/ruby/3.3.0/specifications/rake-13.4.2.gemspec +26 -0
  479. data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-1.3.1.gemspec +33 -0
  480. data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  481. metadata +584 -0
@@ -0,0 +1,942 @@
1
+ use std::borrow::Cow;
2
+ use std::cmp::Ordering;
3
+ use std::collections::HashMap;
4
+ use std::marker::PhantomData;
5
+ use std::ops::Range;
6
+
7
+ use crate::op_set2::change::{length_prefixed_bytes, shift_range, ActorMapper};
8
+ use crate::op_set2::op::{Op, OpBuilder};
9
+ use crate::op_set2::types::{ActionCursor, ActorCursor, ActorIdx, KeyRef, MetaCursor};
10
+ use crate::op_set2::{ReadOpError, ScalarValue};
11
+ use crate::storage::columns::{compression, ColumnType};
12
+ use crate::storage::{ChunkType, Header, RawColumn, RawColumns};
13
+ use crate::types::{ChangeHash, ObjId, OpId};
14
+
15
+ use hexane::{
16
+ BooleanCursor, ColumnCursor, CursorIter, DeltaCursor, Encoder, RawCursor, StrCursor, UIntCursor,
17
+ };
18
+
19
+ use super::{Bundle, BundleChange, BundleMetadata, BundleStorage, ParseError};
20
+
21
+ pub(crate) struct BundleBuilder<'a> {
22
+ mapper: ActorMapper<'a>,
23
+ change_writer: BundleChangeWriter<'a>,
24
+ op_writer: BundleOpWriter<'a>,
25
+ builders: Vec<ChangeBuilder>,
26
+ last: Option<(ObjId, KeyRef<'a>)>,
27
+ preds: HashMap<OpId, Vec<OpId>>,
28
+ max_op: u64,
29
+ }
30
+
31
+ impl<'a> BundleBuilder<'a> {
32
+ pub(super) fn from_change_meta(
33
+ mut changes: Vec<BundleMetadata<'a>>,
34
+ mut mapper: ActorMapper<'a>,
35
+ ) -> BundleBuilder<'a> {
36
+ let mut builders: Vec<_> = changes
37
+ .iter()
38
+ .enumerate()
39
+ .map(|(index, e)| ChangeBuilder {
40
+ actor: e.actor,
41
+ seq: e.seq,
42
+ change: index,
43
+ start_op: e.start_op,
44
+ max_op: e.start_op + e.num_ops() as u64 - 1,
45
+ })
46
+ .collect();
47
+
48
+ builders.sort_unstable_by(|a, b| a.actor.cmp(&b.actor).then(a.seq.cmp(&b.seq)));
49
+
50
+ builders
51
+ .iter()
52
+ .enumerate()
53
+ .for_each(|(index, b)| changes[b.change].builder = index);
54
+
55
+ let mut change_writer = BundleChangeWriter::new(changes.len());
56
+ for c in &changes {
57
+ change_writer.add(c, &mut mapper);
58
+ }
59
+
60
+ let op_writer = BundleOpWriter::default();
61
+
62
+ BundleBuilder {
63
+ mapper,
64
+ change_writer,
65
+ op_writer,
66
+ builders,
67
+ last: None,
68
+ preds: HashMap::default(),
69
+ max_op: 0,
70
+ }
71
+ }
72
+
73
+ pub(crate) fn process_op(&mut self, op: Op<'a>) {
74
+ let next = Some((op.obj, op.elemid_or_key()));
75
+ let flush = self.last != next;
76
+
77
+ self.process_op_internal(op, flush);
78
+
79
+ if flush {
80
+ self.last = next;
81
+ }
82
+ }
83
+
84
+ fn process_op_internal(&mut self, op: Op<'a>, flush: bool) {
85
+ self.max_op = std::cmp::max(self.max_op, op.id.counter());
86
+
87
+ if flush {
88
+ self.flush_deletes();
89
+ }
90
+
91
+ let pred = self.preds.remove(&op.id).unwrap_or_default();
92
+
93
+ let op = op.build(pred);
94
+
95
+ if let Some(index) = self.builders_index(op.id) {
96
+ self.op_writer.add(op, index, &mut self.mapper);
97
+ }
98
+ }
99
+
100
+ pub(crate) fn process_succ(&mut self, op_id: OpId, succ_id: OpId) {
101
+ self.max_op = std::cmp::max(self.max_op, succ_id.counter());
102
+ self.preds.entry(succ_id).or_default().push(op_id);
103
+ }
104
+
105
+ pub(crate) fn flush_deletes(&mut self) {
106
+ if let Some((obj, key)) = self.last.take() {
107
+ for (id, pred) in &self.preds {
108
+ let op = Op::del(*id, obj, key.clone());
109
+ let op = op.build(pred.to_vec());
110
+ if let Some(index) = self.builders_index(op.id) {
111
+ self.op_writer.add(op, index, &mut self.mapper);
112
+ }
113
+ }
114
+ self.preds.clear();
115
+ }
116
+ }
117
+
118
+ pub(crate) fn finish(mut self) -> Bundle {
119
+ self.flush_deletes();
120
+
121
+ let mut mapper = self.mapper;
122
+
123
+ mapper.build_mapping(None);
124
+
125
+ let mut data = vec![];
126
+
127
+ let deps = self.change_writer.external.clone();
128
+ let actors = mapper.iter().collect::<Vec<_>>();
129
+
130
+ leb128::write::unsigned(&mut data, deps.len() as u64).unwrap();
131
+ for hash in &deps {
132
+ data.extend(hash.as_bytes());
133
+ }
134
+
135
+ leb128::write::unsigned(&mut data, actors.len() as u64).unwrap();
136
+ for actor in &actors {
137
+ length_prefixed_bytes(actor, &mut data);
138
+ }
139
+
140
+ let mut change_bytes = vec![];
141
+ let change_cols = self.change_writer.finish(&mapper, &mut change_bytes);
142
+ let (changes_data, changes_meta) = change_cols.write(&mut data, change_bytes);
143
+
144
+ let mut ops_bytes = vec![];
145
+ let ops_cols = self.op_writer.finish(&mapper, &mut ops_bytes);
146
+ let (ops_data, ops_meta) = ops_cols.write(&mut data, ops_bytes);
147
+
148
+ let header = Header::new(ChunkType::Bundle, &data);
149
+
150
+ let mut bytes = Vec::with_capacity(header.len() + data.len());
151
+ header.write(&mut bytes);
152
+ bytes.extend(data);
153
+
154
+ let bytes = Cow::Owned(bytes);
155
+
156
+ let ops_data = shift_range(ops_data, header.len());
157
+ let changes_data = shift_range(changes_data, header.len());
158
+
159
+ let storage = BundleStorage {
160
+ bytes,
161
+ header,
162
+ ops_meta,
163
+ ops_data,
164
+ deps,
165
+ actors,
166
+ changes_meta,
167
+ changes_data,
168
+ _phantom: PhantomData,
169
+ };
170
+
171
+ Bundle { storage }
172
+ }
173
+
174
+ fn builders_index(&self, id: OpId) -> Option<usize> {
175
+ self.builders
176
+ .binary_search_by(|builder| {
177
+ builder
178
+ .actor
179
+ .cmp(&id.actor())
180
+ .then_with(|| match id.counter() {
181
+ c if c < builder.start_op => Ordering::Greater,
182
+ c if c > builder.max_op => Ordering::Less,
183
+ _ => Ordering::Equal,
184
+ })
185
+ })
186
+ .ok()
187
+ }
188
+ }
189
+
190
+ #[derive(Default)]
191
+ pub(crate) struct BundleChangeWriter<'a> {
192
+ len: usize,
193
+ cap: usize,
194
+ seen: HashMap<ChangeHash, usize>,
195
+ external: Vec<ChangeHash>,
196
+ actor: Encoder<'a, ActorCursor>,
197
+ seq: Encoder<'a, DeltaCursor>,
198
+ start_op: Encoder<'a, DeltaCursor>,
199
+ max_op: Encoder<'a, DeltaCursor>,
200
+ timestamp: Encoder<'a, DeltaCursor>,
201
+ message: Encoder<'a, StrCursor>,
202
+ dep_count: Encoder<'a, UIntCursor>,
203
+ deps: Encoder<'a, DeltaCursor>,
204
+ extra_count: Encoder<'a, UIntCursor>,
205
+ extra: Vec<u8>,
206
+ }
207
+
208
+ impl<'a> BundleChangeWriter<'a> {
209
+ fn new(cap: usize) -> Self {
210
+ BundleChangeWriter {
211
+ cap,
212
+ ..Default::default()
213
+ }
214
+ }
215
+
216
+ fn add(&mut self, change: &BundleMetadata<'a>, mapper: &mut ActorMapper<'_>) {
217
+ assert!(self.len < self.cap);
218
+ mapper.process_actor(change.actor);
219
+ self.seen.insert(change.hash, self.len);
220
+ self.len += 1;
221
+ self.actor.append(ActorIdx::from(change.actor));
222
+ self.seq.append(change.seq as i64);
223
+ self.start_op.append(change.start_op as i64);
224
+ self.max_op.append(change.max_op as i64);
225
+ self.message.append(change.message.clone());
226
+ self.timestamp.append(change.timestamp);
227
+ self.extra_count.append(change.extra.len() as u64);
228
+ self.extra.extend_from_slice(&change.extra);
229
+ self.dep_count.append(change.deps.len() as u64);
230
+ for d in &change.deps {
231
+ if let Some(i) = self.seen.get(d) {
232
+ self.deps.append(*i as i64);
233
+ } else {
234
+ let index = self.cap + self.external.len();
235
+ self.seen.insert(*d, index);
236
+ self.external.push(*d);
237
+ self.deps.append(index as i64);
238
+ }
239
+ }
240
+ }
241
+
242
+ fn finish(self, mapper: &ActorMapper<'_>, data: &mut Vec<u8>) -> BundleChangeColumns {
243
+ let remap = move |a: &ActorIdx| mapper.mapping[usize::from(*a)].as_ref();
244
+ let actor = self.actor.save_to_and_remap(data, remap);
245
+ let seq = self.seq.save_to(data);
246
+ let start_op = self.start_op.save_to(data);
247
+ let max_op = self.max_op.save_to(data);
248
+ let timestamp = self.timestamp.save_to(data);
249
+ let message = self.message.save_to(data);
250
+ let dep_count = self.dep_count.save_to(data);
251
+ let deps = self.deps.save_to_unless_empty(data);
252
+ let extra_count = self.extra_count.save_to(data);
253
+ let start = data.len();
254
+ data.extend_from_slice(&self.extra);
255
+ let extra = start..data.len();
256
+ BundleChangeColumns {
257
+ actor,
258
+ seq,
259
+ start_op,
260
+ max_op,
261
+ timestamp,
262
+ message,
263
+ dep_count,
264
+ deps,
265
+ extra_count,
266
+ extra,
267
+ }
268
+ }
269
+ }
270
+
271
+ #[derive(Default)]
272
+ pub(crate) struct BundleOpWriter<'a> {
273
+ obj_actor: Encoder<'a, ActorCursor>,
274
+ obj_ctr: Encoder<'a, DeltaCursor>,
275
+ key_actor: Encoder<'a, ActorCursor>,
276
+ key_ctr: Encoder<'a, DeltaCursor>,
277
+ key_str: Encoder<'a, StrCursor>,
278
+ id_actor: Encoder<'a, ActorCursor>,
279
+ id_ctr: Encoder<'a, DeltaCursor>,
280
+ insert: Encoder<'a, BooleanCursor>,
281
+ action: Encoder<'a, ActionCursor>,
282
+ value_meta: Encoder<'a, MetaCursor>,
283
+ value: Encoder<'a, RawCursor>,
284
+ pred_count: Encoder<'a, UIntCursor>,
285
+ pred_actor: Encoder<'a, ActorCursor>,
286
+ pred_ctr: Encoder<'a, DeltaCursor>,
287
+ expand: Encoder<'a, BooleanCursor>,
288
+ mark_name: Encoder<'a, StrCursor>,
289
+ }
290
+
291
+ impl<'a> BundleOpWriter<'a> {
292
+ fn add(&mut self, op: OpBuilder<'a>, _index: usize, mapper: &mut ActorMapper<'a>) {
293
+ mapper.process_op(&op);
294
+ self.id_actor.append(op.id.actoridx());
295
+ self.id_ctr.append(op.id.icounter());
296
+ self.obj_actor.append(op.obj.actor());
297
+ self.obj_ctr.append(op.obj.icounter());
298
+ self.key_actor.append(op.key.actor());
299
+ self.key_ctr.append(op.key.icounter());
300
+ self.key_str.append(op.key.key_str());
301
+ self.insert.append(op.insert);
302
+ self.action.append(op.action);
303
+ self.value_meta.append(op.value.meta());
304
+ self.value.append(op.value.to_raw());
305
+ self.pred_count.append(op.pred.len() as u64);
306
+ for p in &op.pred {
307
+ self.pred_actor.append(p.actoridx());
308
+ self.pred_ctr.append(p.icounter());
309
+ }
310
+ self.expand.append(op.expand);
311
+ self.mark_name.append(op.mark_name);
312
+ }
313
+
314
+ fn finish(self, mapper: &ActorMapper<'a>, data: &mut Vec<u8>) -> BundleOpsColumns {
315
+ let remap = move |a: &ActorIdx| mapper.mapping[usize::from(*a)].as_ref();
316
+ let obj_actor = self.obj_actor.save_to_and_remap_unless_empty(data, remap);
317
+ let obj_ctr = self.obj_ctr.save_to_unless_empty(data);
318
+ let key_actor = self.key_actor.save_to_and_remap_unless_empty(data, remap);
319
+ let key_ctr = self.key_ctr.save_to_unless_empty(data);
320
+ let key_str = self.key_str.save_to_unless_empty(data);
321
+ let id_actor = self.id_actor.save_to_and_remap(data, remap);
322
+ let id_ctr = self.id_ctr.save_to(data);
323
+ let insert = self.insert.save_to(data);
324
+ let action = self.action.save_to_unless_empty(data);
325
+ let value_meta = self.value_meta.save_to_unless_empty(data);
326
+ let value = self.value.save_to_unless_empty(data);
327
+ let pred_count = self.pred_count.save_to_unless_empty(data);
328
+ let pred_actor = self.pred_actor.save_to_and_remap_unless_empty(data, remap);
329
+ let pred_ctr = self.pred_ctr.save_to_unless_empty(data);
330
+ let expand = self.expand.save_to_unless_empty(data);
331
+ let mark_name = self.mark_name.save_to_unless_empty(data);
332
+
333
+ BundleOpsColumns {
334
+ id_actor,
335
+ id_ctr,
336
+ obj_actor,
337
+ obj_ctr,
338
+ key_actor,
339
+ key_ctr,
340
+ key_str,
341
+ insert,
342
+ action,
343
+ value_meta,
344
+ value,
345
+ pred_count,
346
+ pred_actor,
347
+ pred_ctr,
348
+ expand,
349
+ mark_name,
350
+ }
351
+ }
352
+ }
353
+
354
+ #[derive(Default)]
355
+ pub(crate) struct BundleOpsColumns {
356
+ pub(crate) id_actor: Range<usize>,
357
+ pub(crate) id_ctr: Range<usize>,
358
+ pub(crate) obj_actor: Range<usize>,
359
+ pub(crate) obj_ctr: Range<usize>,
360
+ pub(crate) key_actor: Range<usize>,
361
+ pub(crate) key_ctr: Range<usize>,
362
+ pub(crate) key_str: Range<usize>,
363
+ pub(crate) insert: Range<usize>,
364
+ pub(crate) action: Range<usize>,
365
+ pub(crate) value_meta: Range<usize>,
366
+ pub(crate) value: Range<usize>,
367
+ pub(crate) pred_count: Range<usize>,
368
+ pub(crate) pred_actor: Range<usize>,
369
+ pub(crate) pred_ctr: Range<usize>,
370
+ pub(crate) expand: Range<usize>,
371
+ pub(crate) mark_name: Range<usize>,
372
+ }
373
+
374
+ #[derive(Default)]
375
+ pub(crate) struct BundleChangeColumns {
376
+ actor: Range<usize>,
377
+ seq: Range<usize>,
378
+ max_op: Range<usize>,
379
+ start_op: Range<usize>,
380
+ timestamp: Range<usize>,
381
+ message: Range<usize>,
382
+ dep_count: Range<usize>,
383
+ deps: Range<usize>,
384
+ extra_count: Range<usize>,
385
+ extra: Range<usize>,
386
+ }
387
+
388
+ impl BundleChangeColumns {
389
+ fn write(
390
+ &self,
391
+ data: &mut Vec<u8>,
392
+ col_data: Vec<u8>,
393
+ ) -> (Range<usize>, RawColumns<compression::Uncompressed>) {
394
+ let cols = self.raw_columns();
395
+ cols.write(data);
396
+ let start = data.len();
397
+ data.extend(col_data);
398
+ let end = data.len();
399
+ (start..end, cols)
400
+ }
401
+
402
+ fn raw_columns(&self) -> RawColumns<compression::Uncompressed> {
403
+ [
404
+ (change::ACTOR, &self.actor),
405
+ (change::SEQ, &self.seq),
406
+ (change::START_OP, &self.start_op),
407
+ (change::MAX_OP, &self.max_op),
408
+ (change::TIMESTAMP, &self.timestamp),
409
+ (change::MESSAGE, &self.message),
410
+ (change::DEP_COUNT, &self.dep_count),
411
+ (change::DEPS, &self.deps),
412
+ (change::EXTRA_COUNT, &self.extra_count),
413
+ (change::EXTRA, &self.extra),
414
+ ]
415
+ .into_iter()
416
+ .filter(|(_, range)| !range.is_empty())
417
+ .map(|(spec, range)| RawColumn::new(spec, range.clone()))
418
+ .collect()
419
+ }
420
+ }
421
+
422
+ impl BundleOpsColumns {
423
+ fn write(
424
+ &self,
425
+ data: &mut Vec<u8>,
426
+ col_data: Vec<u8>,
427
+ ) -> (Range<usize>, RawColumns<compression::Uncompressed>) {
428
+ let cols = self.raw_columns();
429
+ cols.write(data);
430
+ let start = data.len();
431
+ data.extend(col_data);
432
+ let end = data.len();
433
+ (start..end, cols)
434
+ }
435
+ fn raw_columns(&self) -> RawColumns<compression::Uncompressed> {
436
+ [
437
+ (ops::OBJ_ACTOR, &self.obj_actor),
438
+ (ops::OBJ_CTR, &self.obj_ctr),
439
+ (ops::KEY_ACTOR, &self.key_actor),
440
+ (ops::KEY_CTR, &self.key_ctr),
441
+ (ops::KEY_STR, &self.key_str),
442
+ (ops::ID_ACTOR, &self.id_actor),
443
+ (ops::ID_CTR, &self.id_ctr),
444
+ (ops::INSERT, &self.insert),
445
+ (ops::ACTION, &self.action),
446
+ (ops::VALUE_META, &self.value_meta),
447
+ (ops::VALUE, &self.value),
448
+ (ops::PRED_COUNT, &self.pred_count),
449
+ (ops::PRED_ACTOR, &self.pred_actor),
450
+ (ops::PRED_CTR, &self.pred_ctr),
451
+ (ops::MARK_NAME, &self.mark_name),
452
+ (ops::EXPAND, &self.expand),
453
+ ]
454
+ .into_iter()
455
+ .filter(|(_, range)| !range.is_empty())
456
+ .map(|(spec, range)| RawColumn::new(spec, range.clone()))
457
+ .collect()
458
+ }
459
+ }
460
+
461
+ #[derive(Debug)]
462
+ struct ChangeBuilder {
463
+ actor: usize,
464
+ seq: u64,
465
+ change: usize,
466
+ start_op: u64,
467
+ max_op: u64,
468
+ }
469
+
470
+ #[derive(Debug)]
471
+ pub struct BundleChangeIter<'a>(BundleChangeIterUnverified<'a>);
472
+
473
+ impl<'a> BundleChangeIter<'a> {
474
+ // this will panic if passed unverified bytes
475
+ pub(crate) fn new_from_verified(
476
+ columns: &RawColumns<compression::Uncompressed>,
477
+ data: &'a [u8],
478
+ ) -> Self {
479
+ Self(BundleChangeIterUnverified::try_new(columns, data).unwrap())
480
+ }
481
+ }
482
+
483
+ impl<'a> Iterator for BundleChangeIter<'a> {
484
+ type Item = BundleChange<'a>;
485
+
486
+ fn next(&mut self) -> Option<Self::Item> {
487
+ self.0.next().transpose().unwrap()
488
+ }
489
+ }
490
+
491
+ #[derive(Debug)]
492
+ pub(crate) struct BundleChangeIterUnverified<'a> {
493
+ inner: Option<BundleChangeIterInner<'a>>,
494
+ }
495
+
496
+ #[derive(Debug)]
497
+ struct BundleChangeIterInner<'a> {
498
+ actor: CursorIter<'a, ActorCursor>,
499
+ seq: CursorIter<'a, DeltaCursor>,
500
+ max_op: CursorIter<'a, DeltaCursor>,
501
+ start_op: CursorIter<'a, DeltaCursor>,
502
+ timestamp: CursorIter<'a, DeltaCursor>,
503
+ message: CursorIter<'a, StrCursor>,
504
+ dep_count: CursorIter<'a, UIntCursor>,
505
+ deps: CursorIter<'a, DeltaCursor>,
506
+ extra_count: CursorIter<'a, UIntCursor>,
507
+ extra: &'a [u8],
508
+ }
509
+
510
+ impl<'a> Iterator for BundleChangeIterUnverified<'a> {
511
+ type Item = Result<BundleChange<'a>, ParseError>;
512
+
513
+ fn next(&mut self) -> Option<Self::Item> {
514
+ self.inner
515
+ .as_mut()?
516
+ .try_next()
517
+ .inspect_err(|_| self.inner = None)
518
+ .transpose()
519
+ }
520
+ }
521
+
522
+ impl<'a> BundleChangeIterUnverified<'a> {
523
+ pub(crate) fn new(columns: &RawColumns<compression::Uncompressed>, data: &'a [u8]) -> Self {
524
+ Self {
525
+ inner: BundleChangeIterInner::try_new(columns, data).ok(),
526
+ }
527
+ }
528
+
529
+ pub(crate) fn try_new(
530
+ columns: &RawColumns<compression::Uncompressed>,
531
+ data: &'a [u8],
532
+ ) -> Result<Self, ParseError> {
533
+ Ok(Self {
534
+ inner: Some(BundleChangeIterInner::try_new(columns, data)?),
535
+ })
536
+ }
537
+ }
538
+
539
+ impl<'a> BundleChangeIterInner<'a> {
540
+ fn try_new(
541
+ columns: &RawColumns<compression::Uncompressed>,
542
+ data: &'a [u8],
543
+ ) -> Result<Self, ParseError> {
544
+ let mut actor = ActorCursor::iter(&[]);
545
+ let mut seq = DeltaCursor::iter(&[]);
546
+ let mut max_op = DeltaCursor::iter(&[]);
547
+ let mut start_op = DeltaCursor::iter(&[]);
548
+ let mut timestamp = DeltaCursor::iter(&[]);
549
+ let mut message = StrCursor::iter(&[]);
550
+ let mut dep_count = UIntCursor::iter(&[]);
551
+ let mut deps = DeltaCursor::iter(&[]);
552
+ let mut extra_count = UIntCursor::iter(&[]);
553
+ let mut extra: &[u8] = &[];
554
+
555
+ for col in columns.iter() {
556
+ let d = &data[col.data()];
557
+ match col.spec() {
558
+ change::ACTOR => actor = ActorCursor::iter(d),
559
+ change::SEQ => seq = DeltaCursor::iter(d),
560
+ change::START_OP => start_op = DeltaCursor::iter(d),
561
+ change::MAX_OP => max_op = DeltaCursor::iter(d),
562
+ change::TIMESTAMP => timestamp = DeltaCursor::iter(d),
563
+ change::MESSAGE => message = StrCursor::iter(d),
564
+ change::DEP_COUNT => dep_count = UIntCursor::iter(d),
565
+ change::DEPS => deps = DeltaCursor::iter(d),
566
+ change::EXTRA_COUNT => extra_count = UIntCursor::iter(d),
567
+ change::EXTRA => extra = d,
568
+ spec => return Err(ParseError::InvalidChangeColumn(u32::from(spec))),
569
+ }
570
+ }
571
+ Ok(Self {
572
+ actor,
573
+ seq,
574
+ start_op,
575
+ max_op,
576
+ timestamp,
577
+ message,
578
+ dep_count,
579
+ deps,
580
+ extra_count,
581
+ extra,
582
+ })
583
+ }
584
+
585
+ fn try_next(&mut self) -> Result<Option<BundleChange<'a>>, ParseError> {
586
+ let actor = match self.actor.next().transpose()?.flatten().as_deref().copied() {
587
+ Some(actor) => actor.into(),
588
+ None => return Ok(None),
589
+ };
590
+
591
+ let seq = self
592
+ .seq
593
+ .next()
594
+ .transpose()?
595
+ .flatten()
596
+ .as_deref()
597
+ .copied()
598
+ .ok_or(ReadOpError::MissingValue("seq"))? as u64;
599
+ let start_op = self
600
+ .start_op
601
+ .next()
602
+ .transpose()?
603
+ .flatten()
604
+ .as_deref()
605
+ .copied()
606
+ .ok_or(ReadOpError::MissingValue("start_op"))? as u64;
607
+ let max_op = self
608
+ .max_op
609
+ .next()
610
+ .transpose()?
611
+ .flatten()
612
+ .as_deref()
613
+ .copied()
614
+ .ok_or(ReadOpError::MissingValue("max_op"))? as u64;
615
+ let timestamp = self
616
+ .timestamp
617
+ .next()
618
+ .transpose()?
619
+ .flatten()
620
+ .as_deref()
621
+ .copied()
622
+ .unwrap_or(0);
623
+ let message = self.message.next().transpose()?.flatten();
624
+ let dep_count = self
625
+ .dep_count
626
+ .next()
627
+ .transpose()?
628
+ .flatten()
629
+ .as_deref()
630
+ .copied()
631
+ .unwrap_or(0) as usize;
632
+ let mut deps = vec![];
633
+ for _ in 0..dep_count {
634
+ let dep = self
635
+ .deps
636
+ .next()
637
+ .transpose()?
638
+ .flatten()
639
+ .as_deref()
640
+ .copied()
641
+ .ok_or(ReadOpError::MissingValue("dep"))? as u64;
642
+ deps.push(dep);
643
+ }
644
+ let extra_count = self
645
+ .extra_count
646
+ .next()
647
+ .transpose()?
648
+ .flatten()
649
+ .as_deref()
650
+ .copied()
651
+ .unwrap_or(0) as usize;
652
+ let (extra, tail) = self.extra.split_at(extra_count);
653
+ let extra = Cow::Borrowed(extra);
654
+ self.extra = tail;
655
+
656
+ Ok(Some(BundleChange {
657
+ actor,
658
+ author: None,
659
+ seq,
660
+ max_op,
661
+ start_op,
662
+ timestamp,
663
+ message,
664
+ deps,
665
+ extra,
666
+ }))
667
+ }
668
+ }
669
+
670
+ pub(crate) struct OpIterUnverified<'a> {
671
+ inner: Option<OpIterInner<'a>>,
672
+ }
673
+
674
+ impl<'a> OpIterUnverified<'a> {
675
+ pub(crate) fn new(columns: &RawColumns<compression::Uncompressed>, data: &'a [u8]) -> Self {
676
+ Self {
677
+ inner: OpIterInner::try_new(columns, data).ok(),
678
+ }
679
+ }
680
+
681
+ pub(crate) fn try_new(
682
+ columns: &RawColumns<compression::Uncompressed>,
683
+ data: &'a [u8],
684
+ ) -> Result<Self, ParseError> {
685
+ Ok(Self {
686
+ inner: Some(OpIterInner::try_new(columns, data)?),
687
+ })
688
+ }
689
+ }
690
+
691
+ struct OpIterInner<'a> {
692
+ obj_actor: CursorIter<'a, ActorCursor>,
693
+ obj_ctr: CursorIter<'a, DeltaCursor>,
694
+ key_actor: CursorIter<'a, ActorCursor>,
695
+ key_ctr: CursorIter<'a, DeltaCursor>,
696
+ key_str: CursorIter<'a, StrCursor>,
697
+ id_actor: CursorIter<'a, ActorCursor>,
698
+ id_ctr: CursorIter<'a, DeltaCursor>,
699
+ insert: CursorIter<'a, BooleanCursor>,
700
+ action: CursorIter<'a, ActionCursor>,
701
+ meta: CursorIter<'a, MetaCursor>,
702
+ value: &'a [u8],
703
+ pred_count: CursorIter<'a, UIntCursor>,
704
+ pred_actor: CursorIter<'a, ActorCursor>,
705
+ pred_ctr: CursorIter<'a, DeltaCursor>,
706
+ expand: CursorIter<'a, BooleanCursor>,
707
+ mark_name: CursorIter<'a, StrCursor>,
708
+ }
709
+
710
+ pub(crate) struct OpIter<'a> {
711
+ iter: OpIterUnverified<'a>,
712
+ }
713
+
714
+ impl<'a> OpIter<'a> {
715
+ pub(crate) fn new(columns: &RawColumns<compression::Uncompressed>, data: &'a [u8]) -> Self {
716
+ Self {
717
+ iter: OpIterUnverified::new(columns, data),
718
+ }
719
+ }
720
+ }
721
+
722
+ impl<'a> Iterator for OpIter<'a> {
723
+ type Item = OpBuilder<'a>;
724
+
725
+ fn next(&mut self) -> Option<OpBuilder<'a>> {
726
+ self.iter.next().map(|v| v.unwrap())
727
+ }
728
+ }
729
+
730
+ impl<'a> Iterator for OpIterUnverified<'a> {
731
+ type Item = Result<OpBuilder<'a>, ParseError>;
732
+
733
+ fn next(&mut self) -> Option<Result<OpBuilder<'a>, ParseError>> {
734
+ self.inner
735
+ .as_mut()?
736
+ .try_next()
737
+ .inspect_err(|_| self.inner = None)
738
+ .transpose()
739
+ }
740
+ }
741
+
742
+ impl<'a> OpIterInner<'a> {
743
+ fn try_next(&mut self) -> Result<Option<OpBuilder<'a>>, ParseError> {
744
+ let id_actor = self.id_actor.next().transpose()?.flatten();
745
+ let id_ctr = self.id_ctr.next().transpose()?.flatten();
746
+ let id = match OpId::try_load(id_actor, id_ctr) {
747
+ Ok(id) => id,
748
+ Err(_) => return Ok(None),
749
+ };
750
+ let obj_actor = self.obj_actor.next().transpose()?.flatten();
751
+ let obj_ctr = self.obj_ctr.next().transpose()?.flatten();
752
+ let obj = ObjId::try_load_i(obj_actor, obj_ctr)?;
753
+
754
+ let key_str = self.key_str.next().transpose()?.flatten();
755
+ let key_actor = self.key_actor.next().transpose()?.flatten();
756
+ let key_ctr = self.key_ctr.next().transpose()?.flatten();
757
+ let key = KeyRef::try_load(key_str, key_actor, key_ctr)?;
758
+
759
+ let action = *self
760
+ .action
761
+ .next()
762
+ .transpose()?
763
+ .flatten()
764
+ .ok_or(ReadOpError::MissingValue("action"))?;
765
+
766
+ let insert = self
767
+ .insert
768
+ .next()
769
+ .transpose()?
770
+ .flatten()
771
+ .as_deref()
772
+ .copied()
773
+ .unwrap_or_default();
774
+
775
+ let expand = self
776
+ .expand
777
+ .next()
778
+ .transpose()?
779
+ .flatten()
780
+ .as_deref()
781
+ .copied()
782
+ .unwrap_or_default();
783
+
784
+ let mark_name = self.mark_name.next().transpose()?.flatten();
785
+
786
+ let value_meta = self.meta.next().transpose()?.flatten();
787
+ let value_meta = value_meta.ok_or(ReadOpError::MissingValue("value_meta"))?;
788
+ let (value_raw, tail) = self.value.split_at(value_meta.length());
789
+ self.value = tail;
790
+ let value = ScalarValue::from_raw(*value_meta, value_raw)
791
+ .map_err(|_| ReadOpError::MissingValue("value"))?;
792
+
793
+ let pred_count = self
794
+ .pred_count
795
+ .next()
796
+ .transpose()?
797
+ .flatten()
798
+ .as_deref()
799
+ .copied()
800
+ .unwrap_or(0) as usize;
801
+ let mut pred = Vec::with_capacity(pred_count);
802
+
803
+ for _ in 0..pred_count {
804
+ let pred_actor = self.pred_actor.next().transpose()?.flatten();
805
+ let pred_ctr = self.pred_ctr.next().transpose()?.flatten();
806
+ pred.push(OpId::try_load(pred_actor, pred_ctr)?);
807
+ }
808
+
809
+ Ok(Some(OpBuilder {
810
+ id,
811
+ obj,
812
+ action,
813
+ key,
814
+ value,
815
+ insert,
816
+ expand,
817
+ mark_name,
818
+ pred,
819
+ }))
820
+ }
821
+
822
+ fn try_new(
823
+ columns: &RawColumns<compression::Uncompressed>,
824
+ data: &'a [u8],
825
+ ) -> Result<Self, ParseError> {
826
+ let mut obj_actor = ActorCursor::iter(&[]);
827
+ let mut obj_ctr = DeltaCursor::iter(&[]);
828
+ let mut key_actor = ActorCursor::iter(&[]);
829
+ let mut key_ctr = DeltaCursor::iter(&[]);
830
+ let mut key_str = StrCursor::iter(&[]);
831
+ let mut id_actor = ActorCursor::iter(&[]);
832
+ let mut id_ctr = DeltaCursor::iter(&[]);
833
+ let mut insert = BooleanCursor::iter(&[]);
834
+ let mut action = ActionCursor::iter(&[]);
835
+ let mut meta = MetaCursor::iter(&[]);
836
+ let mut value: &[u8] = &[]; //RawCursor::iter(&[]);
837
+ let mut pred_count = UIntCursor::iter(&[]);
838
+ let mut pred_actor = ActorCursor::iter(&[]);
839
+ let mut pred_ctr = DeltaCursor::iter(&[]);
840
+ let mut expand = BooleanCursor::iter(&[]);
841
+ let mut mark_name = StrCursor::iter(&[]);
842
+
843
+ for col in columns.iter() {
844
+ let d = &data[col.data()];
845
+ type C = ColumnType;
846
+ match (col.spec().id(), col.spec().col_type()) {
847
+ (ops::OBJ_COL_ID, C::Actor) => obj_actor = ActorCursor::iter(d),
848
+ (ops::OBJ_COL_ID, C::DeltaInteger) => obj_ctr = DeltaCursor::iter(d),
849
+ (ops::KEY_COL_ID, C::Actor) => key_actor = ActorCursor::iter(d),
850
+ (ops::KEY_COL_ID, C::DeltaInteger) => key_ctr = DeltaCursor::iter(d),
851
+ (ops::KEY_COL_ID, C::String) => key_str = StrCursor::iter(d),
852
+ (ops::ID_COL_ID, C::Actor) => id_actor = ActorCursor::iter(d),
853
+ (ops::ID_COL_ID, C::DeltaInteger) => id_ctr = DeltaCursor::iter(d),
854
+ (ops::INSERT_COL_ID, C::Boolean) => insert = BooleanCursor::iter(d),
855
+ (ops::ACTION_COL_ID, C::Integer) => action = ActionCursor::iter(d),
856
+ (ops::VAL_COL_ID, C::ValueMetadata) => meta = MetaCursor::iter(d),
857
+ (ops::VAL_COL_ID, C::Value) => value = d,
858
+ (ops::PRED_COL_ID, C::Group) => pred_count = UIntCursor::iter(d),
859
+ (ops::PRED_COL_ID, C::Actor) => pred_actor = ActorCursor::iter(d),
860
+ (ops::PRED_COL_ID, C::DeltaInteger) => pred_ctr = DeltaCursor::iter(d),
861
+ (ops::EXPAND_COL_ID, C::Boolean) => expand = BooleanCursor::iter(d),
862
+ (ops::MARK_NAME_COL_ID, C::String) => mark_name = StrCursor::iter(d),
863
+ _ => return Err(ParseError::InvalidOpColumn(u32::from(col.spec()))),
864
+ }
865
+ }
866
+ Ok(Self {
867
+ obj_actor,
868
+ obj_ctr,
869
+ key_actor,
870
+ key_ctr,
871
+ key_str,
872
+ id_actor,
873
+ id_ctr,
874
+ insert,
875
+ action,
876
+ meta,
877
+ value,
878
+ pred_count,
879
+ pred_actor,
880
+ pred_ctr,
881
+ expand,
882
+ mark_name,
883
+ })
884
+ }
885
+ }
886
+
887
+ #[rustfmt::skip]
888
+ pub(crate) mod ops {
889
+ use crate::storage::{columns::ColumnId, ColumnSpec};
890
+
891
+ pub(super) const OBJ_COL_ID: ColumnId = ColumnId::new(0);
892
+ pub(super) const KEY_COL_ID: ColumnId = ColumnId::new(1);
893
+ pub(super) const ID_COL_ID: ColumnId = ColumnId::new(2);
894
+ pub(super) const INSERT_COL_ID: ColumnId = ColumnId::new(3);
895
+ pub(super) const ACTION_COL_ID: ColumnId = ColumnId::new(4);
896
+ pub(super) const VAL_COL_ID: ColumnId = ColumnId::new(5);
897
+ pub(super) const PRED_COL_ID: ColumnId = ColumnId::new(7);
898
+ pub(super) const EXPAND_COL_ID: ColumnId = ColumnId::new(9);
899
+ pub(super) const MARK_NAME_COL_ID: ColumnId = ColumnId::new(10);
900
+
901
+ pub(super) const ID_ACTOR: ColumnSpec = ColumnSpec::new_actor(ID_COL_ID);
902
+ pub(super) const ID_CTR: ColumnSpec = ColumnSpec::new_delta(ID_COL_ID);
903
+ pub(super) const OBJ_ACTOR: ColumnSpec = ColumnSpec::new_actor(OBJ_COL_ID);
904
+ pub(super) const OBJ_CTR: ColumnSpec = ColumnSpec::new_delta(OBJ_COL_ID);
905
+ pub(super) const KEY_ACTOR: ColumnSpec = ColumnSpec::new_actor(KEY_COL_ID);
906
+ pub(super) const KEY_CTR: ColumnSpec = ColumnSpec::new_delta(KEY_COL_ID);
907
+ pub(super) const KEY_STR: ColumnSpec = ColumnSpec::new_string(KEY_COL_ID);
908
+ pub(super) const PRED_COUNT: ColumnSpec = ColumnSpec::new_group(PRED_COL_ID);
909
+ pub(super) const PRED_ACTOR: ColumnSpec = ColumnSpec::new_actor(PRED_COL_ID);
910
+ pub(super) const PRED_CTR: ColumnSpec = ColumnSpec::new_delta(PRED_COL_ID);
911
+ pub(super) const INSERT: ColumnSpec = ColumnSpec::new_boolean(INSERT_COL_ID);
912
+ pub(super) const ACTION: ColumnSpec = ColumnSpec::new_integer(ACTION_COL_ID);
913
+ pub(super) const VALUE_META: ColumnSpec = ColumnSpec::new_value_metadata(VAL_COL_ID);
914
+ pub(super) const VALUE: ColumnSpec = ColumnSpec::new_value(VAL_COL_ID);
915
+ pub(super) const MARK_NAME: ColumnSpec = ColumnSpec::new_string(MARK_NAME_COL_ID);
916
+ pub(super) const EXPAND: ColumnSpec = ColumnSpec::new_boolean(EXPAND_COL_ID);
917
+ }
918
+
919
+ #[rustfmt::skip]
920
+ pub(crate) mod change {
921
+ use crate::storage::{columns::ColumnId, ColumnSpec};
922
+
923
+ pub(super) const ACTOR_COL_ID: ColumnId = ColumnId::new(0);
924
+ pub(super) const SEQ_COL_ID: ColumnId = ColumnId::new(0);
925
+ pub(super) const START_OP_COL_ID: ColumnId = ColumnId::new(1);
926
+ pub(super) const MAX_OP_COL_ID: ColumnId = ColumnId::new(2);
927
+ pub(super) const TIME_COL_ID: ColumnId = ColumnId::new(3);
928
+ pub(super) const MESSAGE_COL_ID: ColumnId = ColumnId::new(4);
929
+ pub(super) const DEPS_COL_ID: ColumnId = ColumnId::new(5);
930
+ pub(super) const EXTRA_COL_ID: ColumnId = ColumnId::new(6);
931
+
932
+ pub(super) const ACTOR: ColumnSpec = ColumnSpec::new_actor(ACTOR_COL_ID);
933
+ pub(super) const SEQ: ColumnSpec = ColumnSpec::new_delta(SEQ_COL_ID);
934
+ pub(super) const START_OP: ColumnSpec = ColumnSpec::new_delta(START_OP_COL_ID);
935
+ pub(super) const MAX_OP: ColumnSpec = ColumnSpec::new_delta(MAX_OP_COL_ID);
936
+ pub(super) const TIMESTAMP: ColumnSpec = ColumnSpec::new_delta(TIME_COL_ID);
937
+ pub(super) const MESSAGE: ColumnSpec = ColumnSpec::new_string(MESSAGE_COL_ID);
938
+ pub(super) const DEP_COUNT: ColumnSpec = ColumnSpec::new_group(DEPS_COL_ID);
939
+ pub(super) const DEPS: ColumnSpec = ColumnSpec::new_delta(DEPS_COL_ID);
940
+ pub(super) const EXTRA_COUNT: ColumnSpec = ColumnSpec::new_group(EXTRA_COL_ID);
941
+ pub(super) const EXTRA: ColumnSpec = ColumnSpec::new_value(EXTRA_COL_ID);
942
+ }