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.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +175 -0
- data/ext/automerge_ext/automerge_ext.c +1805 -0
- data/ext/automerge_ext/extconf.rb +132 -0
- data/lib/automerge/version.rb +6 -0
- data/lib/automerge.rb +110 -0
- data/rust-toolchain.toml +4 -0
- data/vendor/automerge-rust/Cargo.lock +1909 -0
- data/vendor/automerge-rust/Cargo.toml +15 -0
- data/vendor/automerge-rust/automerge/Cargo.toml +78 -0
- data/vendor/automerge-rust/automerge/README.md +5 -0
- data/vendor/automerge-rust/automerge/benches/load_save.rs +102 -0
- data/vendor/automerge-rust/automerge/benches/map.rs +260 -0
- data/vendor/automerge-rust/automerge/benches/range.rs +37 -0
- data/vendor/automerge-rust/automerge/benches/sync.rs +95 -0
- data/vendor/automerge-rust/automerge/examples/README.md +7 -0
- data/vendor/automerge-rust/automerge/examples/quickstart.rs +57 -0
- data/vendor/automerge-rust/automerge/examples/watch.rs +94 -0
- data/vendor/automerge-rust/automerge/fuzz/Cargo.toml +29 -0
- data/vendor/automerge-rust/automerge/fuzz/fuzz_targets/load.rs +37 -0
- data/vendor/automerge-rust/automerge/src/autocommit.rs +1286 -0
- data/vendor/automerge-rust/automerge/src/automerge/current_state.rs +546 -0
- data/vendor/automerge-rust/automerge/src/automerge/tests.rs +2023 -0
- data/vendor/automerge-rust/automerge/src/automerge.rs +2071 -0
- data/vendor/automerge-rust/automerge/src/autoserde.rs +128 -0
- data/vendor/automerge-rust/automerge/src/change.rs +357 -0
- data/vendor/automerge-rust/automerge/src/change_graph.rs +1215 -0
- data/vendor/automerge-rust/automerge/src/change_queue.rs +46 -0
- data/vendor/automerge-rust/automerge/src/clock.rs +206 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/boolean.rs +83 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/delta.rs +148 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/group.rs +138 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/simple.rs +76 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic.rs +93 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/key.rs +272 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/obj_id.rs +202 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/opid_list.rs +329 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/raw.rs +38 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/rle.rs +216 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/value.rs +547 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range.rs +17 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/boolean.rs +197 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/col_error.rs +88 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/column_decoder.rs +133 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/decodable_impls.rs +175 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/delta.rs +96 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/encodable_impls.rs +200 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/leb128.rs +82 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/properties.rs +178 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/raw.rs +101 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/rle.rs +239 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding.rs +67 -0
- data/vendor/automerge-rust/automerge/src/columnar/splice_error.rs +47 -0
- data/vendor/automerge-rust/automerge/src/columnar.rs +14 -0
- data/vendor/automerge-rust/automerge/src/convert.rs +112 -0
- data/vendor/automerge-rust/automerge/src/cursor.rs +296 -0
- data/vendor/automerge-rust/automerge/src/decoding.rs +475 -0
- data/vendor/automerge-rust/automerge/src/error.rs +159 -0
- data/vendor/automerge-rust/automerge/src/exid.rs +238 -0
- data/vendor/automerge-rust/automerge/src/hydrate/list.rs +140 -0
- data/vendor/automerge-rust/automerge/src/hydrate/map.rs +132 -0
- data/vendor/automerge-rust/automerge/src/hydrate/tests.rs +40 -0
- data/vendor/automerge-rust/automerge/src/hydrate/text.rs +89 -0
- data/vendor/automerge-rust/automerge/src/hydrate.rs +368 -0
- data/vendor/automerge-rust/automerge/src/indexed_cache.rs +113 -0
- data/vendor/automerge-rust/automerge/src/iter/doc.rs +603 -0
- data/vendor/automerge-rust/automerge/src/iter/keys.rs +93 -0
- data/vendor/automerge-rust/automerge/src/iter/list_range.rs +433 -0
- data/vendor/automerge-rust/automerge/src/iter/map_range.rs +316 -0
- data/vendor/automerge-rust/automerge/src/iter/spans.rs +601 -0
- data/vendor/automerge-rust/automerge/src/iter/tools.rs +427 -0
- data/vendor/automerge-rust/automerge/src/iter/values.rs +36 -0
- data/vendor/automerge-rust/automerge/src/iter.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/mod.rs +364 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/actor_id.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/change_hash.rs +29 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/element_id.rs +27 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/mod.rs +31 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/object_id.rs +36 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op.rs +668 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op_type.rs +26 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/opid.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/scalar_value.rs +63 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/element_id.rs +66 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/key.rs +49 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/mod.rs +4 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/object_id.rs +74 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/opid.rs +68 -0
- data/vendor/automerge-rust/automerge/src/lib.rs +315 -0
- data/vendor/automerge-rust/automerge/src/marks.rs +478 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change/batch.rs +2002 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change/collector.rs +974 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change.rs +332 -0
- data/vendor/automerge-rust/automerge/src/op_set2/columns.rs +714 -0
- data/vendor/automerge-rust/automerge/src/op_set2/meta.rs +174 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op.rs +1363 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/elems.rs +43 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/found_op.rs +60 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/index.rs +197 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/insert.rs +179 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/mark_index.rs +292 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/marks.rs +86 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_iter.rs +1295 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_query.rs +82 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/top_op.rs +50 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/visible.rs +290 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set.rs +1793 -0
- data/vendor/automerge-rust/automerge/src/op_set2/parents.rs +133 -0
- data/vendor/automerge-rust/automerge/src/op_set2/skip_list.rs +714 -0
- data/vendor/automerge-rust/automerge/src/op_set2/types.rs +769 -0
- data/vendor/automerge-rust/automerge/src/op_set2.rs +18 -0
- data/vendor/automerge-rust/automerge/src/patches/patch.rs +95 -0
- data/vendor/automerge-rust/automerge/src/patches/patch_builder.rs +382 -0
- data/vendor/automerge-rust/automerge/src/patches/patch_log.rs +584 -0
- data/vendor/automerge-rust/automerge/src/patches.rs +7 -0
- data/vendor/automerge-rust/automerge/src/query/list_state.rs +230 -0
- data/vendor/automerge-rust/automerge/src/query/seek_mark.rs +142 -0
- data/vendor/automerge-rust/automerge/src/read.rs +326 -0
- data/vendor/automerge-rust/automerge/src/sequence_tree.rs +662 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/builder.rs +942 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/error.rs +42 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/meta.rs +23 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/storage.rs +146 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle.rs +210 -0
- data/vendor/automerge-rust/automerge/src/storage/change/change_actors.rs +311 -0
- data/vendor/automerge-rust/automerge/src/storage/change/change_op_columns.rs +621 -0
- data/vendor/automerge-rust/automerge/src/storage/change/compressed.rs +51 -0
- data/vendor/automerge-rust/automerge/src/storage/change/op_with_change_actors.rs +1 -0
- data/vendor/automerge-rust/automerge/src/storage/change.rs +523 -0
- data/vendor/automerge-rust/automerge/src/storage/chunk.rs +312 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column.rs +42 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column_builder.rs +199 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column_specification.rs +340 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/raw_column.rs +286 -0
- data/vendor/automerge-rust/automerge/src/storage/columns.rs +355 -0
- data/vendor/automerge-rust/automerge/src/storage/document/compression.rs +362 -0
- data/vendor/automerge-rust/automerge/src/storage/document.rs +411 -0
- data/vendor/automerge-rust/automerge/src/storage/load/change_collector.rs +15 -0
- data/vendor/automerge-rust/automerge/src/storage/load.rs +136 -0
- data/vendor/automerge-rust/automerge/src/storage/parse/leb128.rs +302 -0
- data/vendor/automerge-rust/automerge/src/storage/parse.rs +619 -0
- data/vendor/automerge-rust/automerge/src/storage/save/document.rs +27 -0
- data/vendor/automerge-rust/automerge/src/storage.rs +26 -0
- data/vendor/automerge-rust/automerge/src/sync/bloom.rs +161 -0
- data/vendor/automerge-rust/automerge/src/sync/message_builder.rs +118 -0
- data/vendor/automerge-rust/automerge/src/sync/state.rs +214 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/bloom.rs +162 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/mod.rs +625 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/state.rs +120 -0
- data/vendor/automerge-rust/automerge/src/sync.rs +2482 -0
- data/vendor/automerge-rust/automerge/src/text_diff/LICENSE +201 -0
- data/vendor/automerge-rust/automerge/src/text_diff/myers.rs +332 -0
- data/vendor/automerge-rust/automerge/src/text_diff/replace.rs +139 -0
- data/vendor/automerge-rust/automerge/src/text_diff/utils.rs +119 -0
- data/vendor/automerge-rust/automerge/src/text_diff.rs +515 -0
- data/vendor/automerge-rust/automerge/src/text_value.rs +276 -0
- data/vendor/automerge-rust/automerge/src/transaction/commit.rs +34 -0
- data/vendor/automerge-rust/automerge/src/transaction/inner.rs +1403 -0
- data/vendor/automerge-rust/automerge/src/transaction/manual_transaction.rs +147 -0
- data/vendor/automerge-rust/automerge/src/transaction/owned_transaction.rs +266 -0
- data/vendor/automerge-rust/automerge/src/transaction/result.rs +21 -0
- data/vendor/automerge-rust/automerge/src/transaction/transactable.rs +203 -0
- data/vendor/automerge-rust/automerge/src/transaction.rs +513 -0
- data/vendor/automerge-rust/automerge/src/types.rs +749 -0
- data/vendor/automerge-rust/automerge/src/validation.rs +29 -0
- data/vendor/automerge-rust/automerge/src/value.rs +763 -0
- data/vendor/automerge-rust/automerge/tests/batch_insert.rs +1034 -0
- data/vendor/automerge-rust/automerge/tests/block_tests.rs +887 -0
- data/vendor/automerge-rust/automerge/tests/convert_string_to_text.rs +72 -0
- data/vendor/automerge-rust/automerge/tests/diff_marks.rs +1508 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_change.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_doc.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_has_incorrect_meta.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_ok.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_overlong.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_compressed.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_out_of_order.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/action-is-48.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/incorrect_max_op.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/invalid_deflate_stream.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/missing_actor.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/overflow_in_length.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_deps.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_ops.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/test.rs +2668 -0
- data/vendor/automerge-rust/automerge/tests/test_mark_patches.rs +41 -0
- data/vendor/automerge-rust/automerge/tests/test_save_load_orphans.rs +84 -0
- data/vendor/automerge-rust/automerge/tests/text.rs +1098 -0
- data/vendor/automerge-rust/automerge/tests/text_encoding.rs +640 -0
- data/vendor/automerge-rust/automerge-c/CMakeLists.txt +439 -0
- data/vendor/automerge-rust/automerge-c/Cargo.toml +22 -0
- data/vendor/automerge-rust/automerge-c/README.md +233 -0
- data/vendor/automerge-rust/automerge-c/build.rs +21 -0
- data/vendor/automerge-rust/automerge-c/cbindgen.toml +48 -0
- data/vendor/automerge-rust/automerge-c/cmake/Cargo.toml.in +22 -0
- data/vendor/automerge-rust/automerge-c/cmake/automerge-c-config.cmake.in +99 -0
- data/vendor/automerge-rust/automerge-c/cmake/cbindgen.toml.in +48 -0
- data/vendor/automerge-rust/automerge-c/cmake/config.h.in +58 -0
- data/vendor/automerge-rust/automerge-c/cmake/enum-string-functions-gen.cmake +183 -0
- data/vendor/automerge-rust/automerge-c/cmake/file-regex-replace.cmake +33 -0
- data/vendor/automerge-rust/automerge-c/cmake/file-touch.cmake +35 -0
- data/vendor/automerge-rust/automerge-c/docs/CMakeLists.txt +39 -0
- data/vendor/automerge-rust/automerge-c/docs/img/brandmark.png +0 -0
- data/vendor/automerge-rust/automerge-c/examples/CMakeLists.txt +42 -0
- data/vendor/automerge-rust/automerge-c/examples/README.md +9 -0
- data/vendor/automerge-rust/automerge-c/examples/quickstart.c +131 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/result.h +30 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack.h +130 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack_callback_data.h +53 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/string.h +29 -0
- data/vendor/automerge-rust/automerge-c/src/actor_id.rs +193 -0
- data/vendor/automerge-rust/automerge-c/src/byte_span.rs +227 -0
- data/vendor/automerge-rust/automerge-c/src/change.rs +356 -0
- data/vendor/automerge-rust/automerge-c/src/cursor.rs +168 -0
- data/vendor/automerge-rust/automerge-c/src/doc/list.rs +636 -0
- data/vendor/automerge-rust/automerge-c/src/doc/map.rs +556 -0
- data/vendor/automerge-rust/automerge-c/src/doc/mark.rs +296 -0
- data/vendor/automerge-rust/automerge-c/src/doc/utils.rs +46 -0
- data/vendor/automerge-rust/automerge-c/src/doc.rs +1009 -0
- data/vendor/automerge-rust/automerge-c/src/index.rs +84 -0
- data/vendor/automerge-rust/automerge-c/src/item.rs +2177 -0
- data/vendor/automerge-rust/automerge-c/src/items.rs +401 -0
- data/vendor/automerge-rust/automerge-c/src/lib.rs +11 -0
- data/vendor/automerge-rust/automerge-c/src/obj.rs +216 -0
- data/vendor/automerge-rust/automerge-c/src/result.rs +653 -0
- data/vendor/automerge-rust/automerge-c/src/sync/have.rs +42 -0
- data/vendor/automerge-rust/automerge-c/src/sync/message.rs +146 -0
- data/vendor/automerge-rust/automerge-c/src/sync/state.rs +262 -0
- data/vendor/automerge-rust/automerge-c/src/sync.rs +7 -0
- data/vendor/automerge-rust/automerge-c/src/utils/result.c +33 -0
- data/vendor/automerge-rust/automerge-c/src/utils/stack.c +106 -0
- data/vendor/automerge-rust/automerge-c/src/utils/stack_callback_data.c +9 -0
- data/vendor/automerge-rust/automerge-c/src/utils/string.c +46 -0
- data/vendor/automerge-rust/automerge-c/test/CMakeLists.txt +67 -0
- data/vendor/automerge-rust/automerge-c/test/actor_id_tests.c +140 -0
- data/vendor/automerge-rust/automerge-c/test/base_state.c +17 -0
- data/vendor/automerge-rust/automerge-c/test/base_state.h +39 -0
- data/vendor/automerge-rust/automerge-c/test/byte_span_tests.c +119 -0
- data/vendor/automerge-rust/automerge-c/test/cmocka_utils.c +91 -0
- data/vendor/automerge-rust/automerge-c/test/cmocka_utils.h +42 -0
- data/vendor/automerge-rust/automerge-c/test/cursor_tests.c +263 -0
- data/vendor/automerge-rust/automerge-c/test/doc_state.c +27 -0
- data/vendor/automerge-rust/automerge-c/test/doc_state.h +17 -0
- data/vendor/automerge-rust/automerge-c/test/doc_tests.c +335 -0
- data/vendor/automerge-rust/automerge-c/test/enum_string_tests.c +148 -0
- data/vendor/automerge-rust/automerge-c/test/files/brave-ape-49.automerge +0 -0
- data/vendor/automerge-rust/automerge-c/test/item_tests.c +313 -0
- data/vendor/automerge-rust/automerge-c/test/list_tests.c +544 -0
- data/vendor/automerge-rust/automerge-c/test/macro_utils.c +38 -0
- data/vendor/automerge-rust/automerge-c/test/macro_utils.h +23 -0
- data/vendor/automerge-rust/automerge-c/test/main.c +33 -0
- data/vendor/automerge-rust/automerge-c/test/map_tests.c +1610 -0
- data/vendor/automerge-rust/automerge-c/test/mark_tests.c +124 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/basic_tests.c +1642 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/cursor_tests.c +108 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/suite.c +17 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/sync_tests.c +1280 -0
- data/vendor/automerge-rust/automerge-c/test/str_utils.c +15 -0
- data/vendor/automerge-rust/automerge-c/test/str_utils.h +17 -0
- data/vendor/automerge-rust/automerge-test/Cargo.toml +17 -0
- data/vendor/automerge-rust/automerge-test/README.md +3 -0
- data/vendor/automerge-rust/automerge-test/src/lib.rs +487 -0
- data/vendor/automerge-rust/hexane/CHANGELOG.md +34 -0
- data/vendor/automerge-rust/hexane/Cargo.toml +47 -0
- data/vendor/automerge-rust/hexane/README.md +292 -0
- data/vendor/automerge-rust/hexane/RESULTS.txt +20 -0
- data/vendor/automerge-rust/hexane/TODO +18 -0
- data/vendor/automerge-rust/hexane/benches/insert.rs +82 -0
- data/vendor/automerge-rust/hexane/benches/seek.rs +77 -0
- data/vendor/automerge-rust/hexane/benches/splice.rs +82 -0
- data/vendor/automerge-rust/hexane/src/aggregate.rs +288 -0
- data/vendor/automerge-rust/hexane/src/boolean.rs +478 -0
- data/vendor/automerge-rust/hexane/src/columndata.rs +2540 -0
- data/vendor/automerge-rust/hexane/src/cursor.rs +756 -0
- data/vendor/automerge-rust/hexane/src/delta.rs +793 -0
- data/vendor/automerge-rust/hexane/src/encoder.rs +639 -0
- data/vendor/automerge-rust/hexane/src/leb128.rs +82 -0
- data/vendor/automerge-rust/hexane/src/lib.rs +95 -0
- data/vendor/automerge-rust/hexane/src/pack.rs +325 -0
- data/vendor/automerge-rust/hexane/src/raw.rs +314 -0
- data/vendor/automerge-rust/hexane/src/rle.rs +928 -0
- data/vendor/automerge-rust/hexane/src/slab/tree.rs +1373 -0
- data/vendor/automerge-rust/hexane/src/slab/writer.rs +535 -0
- data/vendor/automerge-rust/hexane/src/slab.rs +224 -0
- data/vendor/automerge-rust/hexane/src/test.rs +108 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake +29 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake-compiler +29 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake-compiler-dock +29 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/History.rdoc +1732 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Manifest.txt +32 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/README.rdoc +845 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Rakefile +97 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/design_rationale.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/hoe/minitest.rb +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/assertions.rb +850 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/autorun.rb +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/benchmark.rb +452 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/compress.rb +94 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/error_on_warning.rb +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/expectations.rb +321 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/manual_plugins.rb +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/mock.rb +327 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/parallel.rb +72 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride_plugin.rb +135 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/spec.rb +353 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test.rb +238 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test_task.rb +324 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/unit.rb +42 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest.rb +1250 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/metametameta.rb +150 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_assertions.rb +1677 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_benchmark.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_mock.rb +1213 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_reporter.rb +437 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_spec.rb +1159 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test.rb +1374 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test_task.rb +57 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/History.rdoc +2454 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/README.rdoc +155 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/exe/rake +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake.rb +69 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/rake.gemspec +102 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Gemfile +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/History.md +695 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/LICENSE.txt +20 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/README.md +476 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Rakefile +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/appveyor.yml +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/bin/rake-compiler +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/cucumber.yml +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/compile.feature +79 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-compile.feature +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package-multi.feature +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package.feature +14 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-compile.feature +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-no-native-compile.feature +33 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-package.feature +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/package.feature +40 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/compilation.rb +70 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/cross_compilation.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/execution.rb +52 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/folders.rb +32 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/gem.rb +46 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/java_compilation.rb +7 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/env.rb +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/file_template_helpers.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/generator_helpers.rb +123 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/platform_extension_helpers.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/baseextensiontask.rb +90 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/compiler_config.rb +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensioncompiler.rb +51 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensiontask.rb +589 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/javaextensiontask.rb +321 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bin/cross-ruby.rake +189 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bootstrap.rake +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/common.rake +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/cucumber.rake +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/gem.rake +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/rspec.rake +9 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
- 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
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
- data/vendor/bundle/ruby/3.3.0/specifications/minitest-5.27.0.gemspec +32 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-13.4.2.gemspec +26 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-1.3.1.gemspec +33 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
- metadata +584 -0
|
@@ -0,0 +1,1009 @@
|
|
|
1
|
+
use automerge as am;
|
|
2
|
+
use automerge::sync::SyncDoc;
|
|
3
|
+
use automerge::transaction::{CommitOptions, Transactable};
|
|
4
|
+
use automerge::ReadDoc;
|
|
5
|
+
use std::ops::{Deref, DerefMut};
|
|
6
|
+
|
|
7
|
+
use crate::actor_id::{to_actor_id, AMactorId};
|
|
8
|
+
use crate::byte_span::{to_str, AMbyteSpan};
|
|
9
|
+
use crate::cursor::{to_cursor, AMcursor};
|
|
10
|
+
use crate::items::AMitems;
|
|
11
|
+
use crate::obj::{to_obj_id, AMobjId, AMobjType};
|
|
12
|
+
use crate::result::{to_result, AMresult};
|
|
13
|
+
use crate::sync::{to_sync_message, AMsyncMessage, AMsyncState};
|
|
14
|
+
|
|
15
|
+
pub mod list;
|
|
16
|
+
pub mod map;
|
|
17
|
+
pub mod mark;
|
|
18
|
+
pub mod utils;
|
|
19
|
+
|
|
20
|
+
use crate::doc::utils::{clamp, to_doc, to_doc_mut, to_items};
|
|
21
|
+
|
|
22
|
+
macro_rules! to_sync_state_mut {
|
|
23
|
+
($handle:expr) => {{
|
|
24
|
+
let handle = $handle.as_mut();
|
|
25
|
+
match handle {
|
|
26
|
+
Some(b) => b,
|
|
27
|
+
None => return AMresult::error("Invalid `AMsyncState*`").into(),
|
|
28
|
+
}
|
|
29
|
+
}};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// \struct AMdoc
|
|
33
|
+
/// \installed_headerfile
|
|
34
|
+
/// \brief A JSON-like CRDT.
|
|
35
|
+
#[derive(Clone)]
|
|
36
|
+
pub struct AMdoc(am::AutoCommit);
|
|
37
|
+
|
|
38
|
+
impl AMdoc {
|
|
39
|
+
pub fn new(auto_commit: am::AutoCommit) -> Self {
|
|
40
|
+
Self(auto_commit)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fn is_equal_to(&mut self, other: &mut Self) -> bool {
|
|
44
|
+
self.document().get_heads() == other.document().get_heads()
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
impl AsRef<am::AutoCommit> for AMdoc {
|
|
49
|
+
fn as_ref(&self) -> &am::AutoCommit {
|
|
50
|
+
&self.0
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
impl Deref for AMdoc {
|
|
55
|
+
type Target = am::AutoCommit;
|
|
56
|
+
|
|
57
|
+
fn deref(&self) -> &Self::Target {
|
|
58
|
+
&self.0
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
impl DerefMut for AMdoc {
|
|
63
|
+
fn deref_mut(&mut self) -> &mut Self::Target {
|
|
64
|
+
&mut self.0
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// \memberof AMdoc
|
|
69
|
+
/// \brief Applies a sequence of changes to a document.
|
|
70
|
+
///
|
|
71
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
72
|
+
/// \param[in] items A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE`
|
|
73
|
+
/// items.
|
|
74
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_VOID` item.
|
|
75
|
+
/// \pre \p doc `!= NULL`
|
|
76
|
+
/// \pre \p items `!= NULL`
|
|
77
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
78
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
79
|
+
/// \internal
|
|
80
|
+
///
|
|
81
|
+
/// # Safety
|
|
82
|
+
/// doc must be a valid pointer to an AMdoc
|
|
83
|
+
/// items must be a valid pointer to an AMitems.
|
|
84
|
+
#[no_mangle]
|
|
85
|
+
pub unsafe extern "C" fn AMapplyChanges(doc: *mut AMdoc, items: *const AMitems) -> *mut AMresult {
|
|
86
|
+
let doc = to_doc_mut!(doc);
|
|
87
|
+
let items = to_items!(items);
|
|
88
|
+
match Vec::<am::Change>::try_from(items) {
|
|
89
|
+
Ok(changes) => to_result(doc.apply_changes(changes)),
|
|
90
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/// \memberof AMdoc
|
|
95
|
+
/// \brief Allocates storage for a document and initializes it by duplicating
|
|
96
|
+
/// the given document.
|
|
97
|
+
///
|
|
98
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
99
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_DOC` item.
|
|
100
|
+
/// \pre \p doc `!= NULL`
|
|
101
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
102
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
103
|
+
/// \internal
|
|
104
|
+
///
|
|
105
|
+
/// # Safety
|
|
106
|
+
/// doc must be a valid pointer to an AMdoc
|
|
107
|
+
#[no_mangle]
|
|
108
|
+
pub unsafe extern "C" fn AMclone(doc: *const AMdoc) -> *mut AMresult {
|
|
109
|
+
let doc = to_doc!(doc);
|
|
110
|
+
to_result(doc.as_ref().clone())
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/// \memberof AMdoc
|
|
114
|
+
/// \brief Allocates a new document and initializes it with defaults.
|
|
115
|
+
///
|
|
116
|
+
/// \param[in] actor_id A pointer to an `AMactorId` struct or `NULL` for a
|
|
117
|
+
/// random one.
|
|
118
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_DOC` item.
|
|
119
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
120
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
121
|
+
/// \internal
|
|
122
|
+
///
|
|
123
|
+
/// # Safety
|
|
124
|
+
/// actor_id must be a valid pointer to an AMactorId or std::ptr::null()
|
|
125
|
+
#[no_mangle]
|
|
126
|
+
pub unsafe extern "C" fn AMcreate(actor_id: *const AMactorId) -> *mut AMresult {
|
|
127
|
+
to_result(match actor_id.as_ref() {
|
|
128
|
+
Some(actor_id) => am::AutoCommit::new().with_actor(actor_id.as_ref().clone()),
|
|
129
|
+
None => am::AutoCommit::new(),
|
|
130
|
+
})
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/// \memberof AMdoc
|
|
134
|
+
/// \brief Commits the current operations on a document with an optional
|
|
135
|
+
/// message and/or *nix timestamp (milliseconds).
|
|
136
|
+
///
|
|
137
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
138
|
+
/// \param[in] message A UTF-8 string view as an `AMbyteSpan` struct.
|
|
139
|
+
/// \param[in] timestamp A pointer to a 64-bit integer or `NULL`.
|
|
140
|
+
/// \return A pointer to an `AMresult` struct with one `AM_VAL_TYPE_CHANGE_HASH`
|
|
141
|
+
/// item if there were operations to commit or an `AM_VAL_TYPE_VOID` item
|
|
142
|
+
/// if there were no operations to commit.
|
|
143
|
+
/// \pre \p doc `!= NULL`
|
|
144
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
145
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
146
|
+
/// \internal
|
|
147
|
+
///
|
|
148
|
+
/// # Safety
|
|
149
|
+
/// doc must be a valid pointer to an AMdoc
|
|
150
|
+
#[no_mangle]
|
|
151
|
+
pub unsafe extern "C" fn AMcommit(
|
|
152
|
+
doc: *mut AMdoc,
|
|
153
|
+
message: AMbyteSpan,
|
|
154
|
+
timestamp: *const i64,
|
|
155
|
+
) -> *mut AMresult {
|
|
156
|
+
let doc = to_doc_mut!(doc);
|
|
157
|
+
let mut options = CommitOptions::default();
|
|
158
|
+
if !message.is_null() {
|
|
159
|
+
options.set_message(to_str!(message));
|
|
160
|
+
}
|
|
161
|
+
if let Some(timestamp) = timestamp.as_ref() {
|
|
162
|
+
options.set_time(*timestamp);
|
|
163
|
+
}
|
|
164
|
+
to_result(doc.commit_with(options))
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/// \memberof AMdoc
|
|
168
|
+
/// \brief Creates an empty change with an optional message and/or *nix
|
|
169
|
+
/// timestamp (milliseconds).
|
|
170
|
+
///
|
|
171
|
+
/// \details This is useful if you wish to create a "merge commit" which has as
|
|
172
|
+
/// its dependents the current heads of the document but you don't have
|
|
173
|
+
/// any operations to add to the document.
|
|
174
|
+
///
|
|
175
|
+
/// \note If there are outstanding uncommitted changes to the document
|
|
176
|
+
/// then two changes will be created: one for creating the outstanding
|
|
177
|
+
/// changes and one for the empty change. The empty change will always be
|
|
178
|
+
/// the latest change in the document after this call and the returned
|
|
179
|
+
/// hash will be the hash of that empty change.
|
|
180
|
+
///
|
|
181
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
182
|
+
/// \param[in] message A UTF-8 string view as an `AMbyteSpan` struct.
|
|
183
|
+
/// \param[in] timestamp A pointer to a 64-bit integer or `NULL`.
|
|
184
|
+
/// \return A pointer to an `AMresult` struct with one `AM_VAL_TYPE_CHANGE_HASH`
|
|
185
|
+
/// item.
|
|
186
|
+
/// \pre \p doc `!= NULL`
|
|
187
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
188
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
189
|
+
/// \internal
|
|
190
|
+
///
|
|
191
|
+
/// # Safety
|
|
192
|
+
/// doc must be a valid pointer to an AMdoc
|
|
193
|
+
#[no_mangle]
|
|
194
|
+
pub unsafe extern "C" fn AMemptyChange(
|
|
195
|
+
doc: *mut AMdoc,
|
|
196
|
+
message: AMbyteSpan,
|
|
197
|
+
timestamp: *const i64,
|
|
198
|
+
) -> *mut AMresult {
|
|
199
|
+
let doc = to_doc_mut!(doc);
|
|
200
|
+
let mut options = CommitOptions::default();
|
|
201
|
+
if !message.is_null() {
|
|
202
|
+
options.set_message(to_str!(message));
|
|
203
|
+
}
|
|
204
|
+
if let Some(timestamp) = timestamp.as_ref() {
|
|
205
|
+
options.set_time(*timestamp);
|
|
206
|
+
}
|
|
207
|
+
to_result(doc.empty_change(options))
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/// \memberof AMdoc
|
|
211
|
+
/// \brief Tests the equality of two documents after closing their respective
|
|
212
|
+
/// transactions.
|
|
213
|
+
///
|
|
214
|
+
/// \param[in] doc1 A pointer to an `AMdoc` struct.
|
|
215
|
+
/// \param[in] doc2 A pointer to an `AMdoc` struct.
|
|
216
|
+
/// \return `true` if \p doc1 `==` \p doc2 and `false` otherwise.
|
|
217
|
+
/// \pre \p doc1 `!= NULL`
|
|
218
|
+
/// \pre \p doc2 `!= NULL`
|
|
219
|
+
/// \internal
|
|
220
|
+
///
|
|
221
|
+
/// #Safety
|
|
222
|
+
/// doc1 must be a valid pointer to an AMdoc
|
|
223
|
+
/// doc2 must be a valid pointer to an AMdoc
|
|
224
|
+
#[no_mangle]
|
|
225
|
+
pub unsafe extern "C" fn AMequal(doc1: *mut AMdoc, doc2: *mut AMdoc) -> bool {
|
|
226
|
+
match (doc1.as_mut(), doc2.as_mut()) {
|
|
227
|
+
(Some(doc1), Some(doc2)) => doc1.is_equal_to(doc2),
|
|
228
|
+
(None, None) | (None, Some(_)) | (Some(_), None) => false,
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/// \memberof AMdoc
|
|
233
|
+
/// \brief Forks this document at its current or a historical point for use by
|
|
234
|
+
/// a different actor.
|
|
235
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
236
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
237
|
+
/// items to select a historical point or `NULL` to select its
|
|
238
|
+
/// current point.
|
|
239
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_VOID` item.
|
|
240
|
+
/// \pre \p doc `!= NULL`
|
|
241
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
242
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
243
|
+
/// \internal
|
|
244
|
+
///
|
|
245
|
+
/// # Safety
|
|
246
|
+
/// doc must be a valid pointer to an AMdoc
|
|
247
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
248
|
+
#[no_mangle]
|
|
249
|
+
pub unsafe extern "C" fn AMfork(doc: *mut AMdoc, heads: *const AMitems) -> *mut AMresult {
|
|
250
|
+
let doc = to_doc_mut!(doc);
|
|
251
|
+
match heads.as_ref() {
|
|
252
|
+
None => to_result(doc.fork()),
|
|
253
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
254
|
+
Ok(heads) => to_result(doc.fork_at(&heads)),
|
|
255
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
256
|
+
},
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/// \memberof AMdoc
|
|
261
|
+
/// \brief Generates a synchronization message for a peer based upon the given
|
|
262
|
+
/// synchronization state.
|
|
263
|
+
///
|
|
264
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
265
|
+
/// \param[in] sync_state A pointer to an `AMsyncState` struct.
|
|
266
|
+
/// \return A pointer to an `AMresult` struct with either an
|
|
267
|
+
/// `AM_VAL_TYPE_SYNC_MESSAGE` or `AM_VAL_TYPE_VOID` item.
|
|
268
|
+
/// \pre \p doc `!= NULL`
|
|
269
|
+
/// \pre \p sync_state `!= NULL`
|
|
270
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
271
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
272
|
+
/// \internal
|
|
273
|
+
///
|
|
274
|
+
/// # Safety
|
|
275
|
+
/// doc must be a valid pointer to an AMdoc
|
|
276
|
+
/// sync_state must be a valid pointer to an AMsyncState
|
|
277
|
+
#[no_mangle]
|
|
278
|
+
pub unsafe extern "C" fn AMgenerateSyncMessage(
|
|
279
|
+
doc: *mut AMdoc,
|
|
280
|
+
sync_state: *mut AMsyncState,
|
|
281
|
+
) -> *mut AMresult {
|
|
282
|
+
let doc = to_doc_mut!(doc);
|
|
283
|
+
let sync_state = to_sync_state_mut!(sync_state);
|
|
284
|
+
to_result(doc.sync().generate_sync_message(sync_state.as_mut()))
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/// \memberof AMdoc
|
|
288
|
+
/// \brief Gets a document's actor identifier.
|
|
289
|
+
///
|
|
290
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
291
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_ACTOR_ID` item.
|
|
292
|
+
/// \pre \p doc `!= NULL`
|
|
293
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
294
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
295
|
+
/// \internal
|
|
296
|
+
///
|
|
297
|
+
/// # Safety
|
|
298
|
+
/// doc must be a valid pointer to an AMdoc
|
|
299
|
+
#[no_mangle]
|
|
300
|
+
pub unsafe extern "C" fn AMgetActorId(doc: *const AMdoc) -> *mut AMresult {
|
|
301
|
+
let doc = to_doc!(doc);
|
|
302
|
+
to_result(Ok::<am::ActorId, am::AutomergeError>(
|
|
303
|
+
doc.get_actor().clone(),
|
|
304
|
+
))
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/// \memberof AMdoc
|
|
308
|
+
/// \brief Gets the change added to a document by its respective hash.
|
|
309
|
+
///
|
|
310
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
311
|
+
/// \param[in] src A pointer to an array of bytes.
|
|
312
|
+
/// \param[in] count The count of bytes to copy from the array pointed to by
|
|
313
|
+
/// \p src.
|
|
314
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_CHANGE` item.
|
|
315
|
+
/// \pre \p doc `!= NULL`
|
|
316
|
+
/// \pre \p src `!= NULL`
|
|
317
|
+
/// \pre `sizeof(`\p src') >= AM_CHANGE_HASH_SIZE`
|
|
318
|
+
/// \pre \p count `<= sizeof(`\p src `)`
|
|
319
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
320
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
321
|
+
/// \internal
|
|
322
|
+
///
|
|
323
|
+
/// # Safety
|
|
324
|
+
/// doc must be a valid pointer to an AMdoc
|
|
325
|
+
/// src must be a byte array of length `>= automerge::types::HASH_SIZE`
|
|
326
|
+
#[no_mangle]
|
|
327
|
+
pub unsafe extern "C" fn AMgetChangeByHash(
|
|
328
|
+
doc: *mut AMdoc,
|
|
329
|
+
src: *const u8,
|
|
330
|
+
count: usize,
|
|
331
|
+
) -> *mut AMresult {
|
|
332
|
+
let doc = to_doc_mut!(doc);
|
|
333
|
+
let slice = std::slice::from_raw_parts(src, count);
|
|
334
|
+
match slice.try_into() {
|
|
335
|
+
Ok(change_hash) => to_result(doc.get_change_by_hash(&change_hash)),
|
|
336
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/// \memberof AMdoc
|
|
341
|
+
/// \brief Gets the changes added to a document by their respective hashes.
|
|
342
|
+
///
|
|
343
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
344
|
+
/// \param[in] have_deps A pointer to an `AMitems` struct with
|
|
345
|
+
/// `AM_VAL_TYPE_CHANGE_HASH` items or `NULL`.
|
|
346
|
+
/// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE` items.
|
|
347
|
+
/// \pre \p doc `!= NULL`
|
|
348
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
349
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
350
|
+
/// \internal
|
|
351
|
+
///
|
|
352
|
+
/// # Safety
|
|
353
|
+
/// doc must be a valid pointer to an AMdoc
|
|
354
|
+
#[no_mangle]
|
|
355
|
+
pub unsafe extern "C" fn AMgetChanges(doc: *mut AMdoc, have_deps: *const AMitems) -> *mut AMresult {
|
|
356
|
+
let doc = to_doc_mut!(doc);
|
|
357
|
+
let have_deps = match have_deps.as_ref() {
|
|
358
|
+
Some(have_deps) => match Vec::<am::ChangeHash>::try_from(have_deps) {
|
|
359
|
+
Ok(change_hashes) => change_hashes,
|
|
360
|
+
Err(e) => return AMresult::error(&e.to_string()).into(),
|
|
361
|
+
},
|
|
362
|
+
None => Vec::<am::ChangeHash>::new(),
|
|
363
|
+
};
|
|
364
|
+
to_result(doc.get_changes(&have_deps))
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/// \memberof AMdoc
|
|
368
|
+
/// \brief Gets the changes added to a second document that weren't added to
|
|
369
|
+
/// a first document.
|
|
370
|
+
///
|
|
371
|
+
/// \param[in] doc1 A pointer to an `AMdoc` struct.
|
|
372
|
+
/// \param[in] doc2 A pointer to an `AMdoc` struct.
|
|
373
|
+
/// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE` items.
|
|
374
|
+
/// \pre \p doc1 `!= NULL`
|
|
375
|
+
/// \pre \p doc2 `!= NULL`
|
|
376
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
377
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
378
|
+
/// \internal
|
|
379
|
+
///
|
|
380
|
+
/// # Safety
|
|
381
|
+
/// doc1 must be a valid pointer to an AMdoc
|
|
382
|
+
/// doc2 must be a valid pointer to an AMdoc
|
|
383
|
+
#[no_mangle]
|
|
384
|
+
pub unsafe extern "C" fn AMgetChangesAdded(doc1: *mut AMdoc, doc2: *mut AMdoc) -> *mut AMresult {
|
|
385
|
+
let doc1 = to_doc_mut!(doc1);
|
|
386
|
+
let doc2 = to_doc_mut!(doc2);
|
|
387
|
+
to_result(doc1.get_changes_added(doc2))
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/// \memberof AMdoc
|
|
391
|
+
/// \brief Gets an `AMcursor` i.e. a stable address for a position within a list
|
|
392
|
+
/// object or text object.
|
|
393
|
+
///
|
|
394
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
395
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
396
|
+
/// \param[in] position The absolute position of the cursor.
|
|
397
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
398
|
+
/// items to select a historical object or `NULL` to select the
|
|
399
|
+
/// current object.
|
|
400
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_CURSOR` item.
|
|
401
|
+
/// \pre \p doc `!= NULL`
|
|
402
|
+
/// \pre \p position `< AMobjSize(`\p doc, \p obj_id, \p heads `)`
|
|
403
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
404
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
405
|
+
/// \internal
|
|
406
|
+
///
|
|
407
|
+
/// # Safety
|
|
408
|
+
/// doc must be a valid pointer to an AMdoc
|
|
409
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
410
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
411
|
+
#[no_mangle]
|
|
412
|
+
pub unsafe extern "C" fn AMgetCursor(
|
|
413
|
+
doc: *const AMdoc,
|
|
414
|
+
obj_id: *const AMobjId,
|
|
415
|
+
position: usize,
|
|
416
|
+
heads: *const AMitems,
|
|
417
|
+
) -> *mut AMresult {
|
|
418
|
+
let doc = to_doc!(doc);
|
|
419
|
+
let obj_id = to_obj_id!(obj_id);
|
|
420
|
+
match heads.as_ref() {
|
|
421
|
+
None => to_result(doc.get_cursor(obj_id, position, None)),
|
|
422
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
423
|
+
Ok(heads) => to_result(doc.get_cursor(obj_id, position, Some(heads.as_slice()))),
|
|
424
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
425
|
+
},
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/// \memberof AMdoc
|
|
430
|
+
/// \brief Gets the absolute position of an `AMcursor` within a list object or
|
|
431
|
+
/// text object.
|
|
432
|
+
///
|
|
433
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
434
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
435
|
+
/// \param[in] cursor A pointer to an `AMcursor` struct.
|
|
436
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
437
|
+
/// items to select a historical object or `NULL` to select the
|
|
438
|
+
/// current object.
|
|
439
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_UINT` item.
|
|
440
|
+
/// For an `AM_OBJ_TYPE_TEXT` object, if `AUTOMERGE_C_UTF8` is defined
|
|
441
|
+
/// then the item's value is in bytes but if `AUTOMERGE_C_UTF32` is
|
|
442
|
+
/// defined then the item's value is in Unicode code points.
|
|
443
|
+
/// \pre \p doc `!= NULL`
|
|
444
|
+
/// \pre \p cursor `!= NULL`
|
|
445
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
446
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
447
|
+
/// \internal
|
|
448
|
+
///
|
|
449
|
+
/// # Safety
|
|
450
|
+
/// doc must be a valid pointer to an AMdoc
|
|
451
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
452
|
+
/// cursor must be a valid pointer to an AMcursor
|
|
453
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
454
|
+
#[no_mangle]
|
|
455
|
+
pub unsafe extern "C" fn AMgetCursorPosition(
|
|
456
|
+
doc: *const AMdoc,
|
|
457
|
+
obj_id: *const AMobjId,
|
|
458
|
+
cursor: *const AMcursor,
|
|
459
|
+
heads: *const AMitems,
|
|
460
|
+
) -> *mut AMresult {
|
|
461
|
+
let doc = to_doc!(doc);
|
|
462
|
+
let obj_id = to_obj_id!(obj_id);
|
|
463
|
+
let cursor = to_cursor!(cursor);
|
|
464
|
+
match heads.as_ref() {
|
|
465
|
+
None => to_result(doc.get_cursor_position(obj_id, cursor.as_ref(), None)),
|
|
466
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
467
|
+
Ok(heads) => {
|
|
468
|
+
to_result(doc.get_cursor_position(obj_id, cursor.as_ref(), Some(heads.as_slice())))
|
|
469
|
+
}
|
|
470
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
471
|
+
},
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/// \memberof AMdoc
|
|
476
|
+
/// \brief Gets the current heads of a document.
|
|
477
|
+
///
|
|
478
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
479
|
+
/// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
|
|
480
|
+
/// \pre \p doc `!= NULL`
|
|
481
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
482
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
483
|
+
/// \internal
|
|
484
|
+
///
|
|
485
|
+
/// # Safety
|
|
486
|
+
/// doc must be a valid pointer to an AMdoc
|
|
487
|
+
#[no_mangle]
|
|
488
|
+
pub unsafe extern "C" fn AMgetHeads(doc: *mut AMdoc) -> *mut AMresult {
|
|
489
|
+
let doc = to_doc_mut!(doc);
|
|
490
|
+
to_result(Ok::<Vec<am::ChangeHash>, am::AutomergeError>(
|
|
491
|
+
doc.get_heads(),
|
|
492
|
+
))
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/// \memberof AMdoc
|
|
496
|
+
/// \brief Gets the hashes of the changes in a document that aren't transitive
|
|
497
|
+
/// dependencies of the given hashes of changes.
|
|
498
|
+
///
|
|
499
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
500
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
501
|
+
/// items or `NULL`.
|
|
502
|
+
/// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
|
|
503
|
+
/// \pre \p doc `!= NULL`
|
|
504
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
505
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
506
|
+
/// \internal
|
|
507
|
+
///
|
|
508
|
+
/// # Safety
|
|
509
|
+
/// doc must be a valid pointer to an AMdoc
|
|
510
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
511
|
+
#[no_mangle]
|
|
512
|
+
pub unsafe extern "C" fn AMgetMissingDeps(doc: *mut AMdoc, heads: *const AMitems) -> *mut AMresult {
|
|
513
|
+
let doc = to_doc_mut!(doc);
|
|
514
|
+
let heads = match heads.as_ref() {
|
|
515
|
+
None => Vec::<am::ChangeHash>::new(),
|
|
516
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
517
|
+
Ok(heads) => heads,
|
|
518
|
+
Err(e) => {
|
|
519
|
+
return AMresult::error(&e.to_string()).into();
|
|
520
|
+
}
|
|
521
|
+
},
|
|
522
|
+
};
|
|
523
|
+
to_result(doc.get_missing_deps(heads.as_slice()))
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/// \memberof AMdoc
|
|
527
|
+
/// \brief Gets the last change made to a document.
|
|
528
|
+
///
|
|
529
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
530
|
+
/// \return A pointer to an `AMresult` struct containing either an
|
|
531
|
+
/// `AM_VAL_TYPE_CHANGE` or `AM_VAL_TYPE_VOID` item.
|
|
532
|
+
/// \pre \p doc `!= NULL`
|
|
533
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
534
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
535
|
+
/// \internal
|
|
536
|
+
///
|
|
537
|
+
/// # Safety
|
|
538
|
+
/// doc must be a valid pointer to an AMdoc
|
|
539
|
+
#[no_mangle]
|
|
540
|
+
pub unsafe extern "C" fn AMgetLastLocalChange(doc: *mut AMdoc) -> *mut AMresult {
|
|
541
|
+
let doc = to_doc_mut!(doc);
|
|
542
|
+
to_result(doc.get_last_local_change())
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/// \memberof AMdoc
|
|
546
|
+
/// \brief Gets the current or historical keys of a map object.
|
|
547
|
+
///
|
|
548
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
549
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
550
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
551
|
+
/// items to select historical keys or `NULL` to select current
|
|
552
|
+
/// keys.
|
|
553
|
+
/// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_STR` items.
|
|
554
|
+
/// \pre \p doc `!= NULL`
|
|
555
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
556
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
557
|
+
/// \internal
|
|
558
|
+
///
|
|
559
|
+
/// # Safety
|
|
560
|
+
/// doc must be a valid pointer to an AMdoc
|
|
561
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
562
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
563
|
+
#[no_mangle]
|
|
564
|
+
pub unsafe extern "C" fn AMkeys(
|
|
565
|
+
doc: *const AMdoc,
|
|
566
|
+
obj_id: *const AMobjId,
|
|
567
|
+
heads: *const AMitems,
|
|
568
|
+
) -> *mut AMresult {
|
|
569
|
+
let doc = to_doc!(doc);
|
|
570
|
+
let obj_id = to_obj_id!(obj_id);
|
|
571
|
+
match heads.as_ref() {
|
|
572
|
+
None => to_result(doc.keys(obj_id)),
|
|
573
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
574
|
+
Ok(heads) => to_result(doc.keys_at(obj_id, &heads)),
|
|
575
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
576
|
+
},
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/// \memberof AMdoc
|
|
581
|
+
/// \brief Allocates storage for a document and initializes it with the compact
|
|
582
|
+
/// form of an incremental save.
|
|
583
|
+
///
|
|
584
|
+
/// \param[in] src A pointer to an array of bytes.
|
|
585
|
+
/// \param[in] count The count of bytes to load from the array pointed to by
|
|
586
|
+
/// \p src.
|
|
587
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_DOC` item.
|
|
588
|
+
/// \pre \p src `!= NULL`
|
|
589
|
+
/// \pre `sizeof(`\p src `) > 0`
|
|
590
|
+
/// \pre \p count `<= sizeof(`\p src `)`
|
|
591
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
592
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
593
|
+
/// \internal
|
|
594
|
+
///
|
|
595
|
+
/// # Safety
|
|
596
|
+
/// src must be a byte array of length `>= count`
|
|
597
|
+
#[no_mangle]
|
|
598
|
+
pub unsafe extern "C" fn AMload(src: *const u8, count: usize) -> *mut AMresult {
|
|
599
|
+
let data = std::slice::from_raw_parts(src, count);
|
|
600
|
+
to_result(am::AutoCommit::load(data))
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/// \memberof AMdoc
|
|
604
|
+
/// \brief Loads the compact form of an incremental save into a document.
|
|
605
|
+
///
|
|
606
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
607
|
+
/// \param[in] src A pointer to an array of bytes.
|
|
608
|
+
/// \param[in] count The count of bytes to load from the array pointed to by
|
|
609
|
+
/// \p src.
|
|
610
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_UINT` item.
|
|
611
|
+
/// \pre \p doc `!= NULL`
|
|
612
|
+
/// \pre \p src `!= NULL`
|
|
613
|
+
/// \pre `sizeof(`\p src `) > 0`
|
|
614
|
+
/// \pre \p count `<= sizeof(`\p src `)`
|
|
615
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
616
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
617
|
+
/// \internal
|
|
618
|
+
///
|
|
619
|
+
/// # Safety
|
|
620
|
+
/// doc must be a valid pointer to an AMdoc
|
|
621
|
+
/// src must be a byte array of length `>= count`
|
|
622
|
+
#[no_mangle]
|
|
623
|
+
pub unsafe extern "C" fn AMloadIncremental(
|
|
624
|
+
doc: *mut AMdoc,
|
|
625
|
+
src: *const u8,
|
|
626
|
+
count: usize,
|
|
627
|
+
) -> *mut AMresult {
|
|
628
|
+
let doc = to_doc_mut!(doc);
|
|
629
|
+
let data = std::slice::from_raw_parts(src, count);
|
|
630
|
+
to_result(doc.load_incremental(data))
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/// \memberof AMdoc
|
|
634
|
+
/// \brief Applies all of the changes in \p src which are not in \p dest to
|
|
635
|
+
/// \p dest.
|
|
636
|
+
///
|
|
637
|
+
/// \param[in] dest A pointer to an `AMdoc` struct.
|
|
638
|
+
/// \param[in] src A pointer to an `AMdoc` struct.
|
|
639
|
+
/// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
|
|
640
|
+
/// \pre \p dest `!= NULL`
|
|
641
|
+
/// \pre \p src `!= NULL`
|
|
642
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
643
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
644
|
+
/// \internal
|
|
645
|
+
///
|
|
646
|
+
/// # Safety
|
|
647
|
+
/// dest must be a valid pointer to an AMdoc
|
|
648
|
+
/// src must be a valid pointer to an AMdoc
|
|
649
|
+
#[no_mangle]
|
|
650
|
+
pub unsafe extern "C" fn AMmerge(dest: *mut AMdoc, src: *mut AMdoc) -> *mut AMresult {
|
|
651
|
+
let dest = to_doc_mut!(dest);
|
|
652
|
+
to_result(dest.merge(to_doc_mut!(src)))
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/// \memberof AMdoc
|
|
656
|
+
/// \brief Gets the current or historical size of an object.
|
|
657
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
658
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
659
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
660
|
+
/// items to select a historical size or `NULL` to select its
|
|
661
|
+
/// current size.
|
|
662
|
+
/// \return The count of items in the object identified by \p obj_id.
|
|
663
|
+
/// For an `AM_OBJ_TYPE_TEXT` object, if `AUTOMERGE_C_UTF8` is defined
|
|
664
|
+
/// then the items are bytes but if `AUTOMERGE_C_UTF32` is defined then
|
|
665
|
+
/// the items are Unicode code points.
|
|
666
|
+
/// \pre \p doc `!= NULL`
|
|
667
|
+
/// \internal
|
|
668
|
+
///
|
|
669
|
+
/// # Safety
|
|
670
|
+
/// doc must be a valid pointer to an AMdoc
|
|
671
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
672
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
673
|
+
#[no_mangle]
|
|
674
|
+
pub unsafe extern "C" fn AMobjSize(
|
|
675
|
+
doc: *const AMdoc,
|
|
676
|
+
obj_id: *const AMobjId,
|
|
677
|
+
heads: *const AMitems,
|
|
678
|
+
) -> usize {
|
|
679
|
+
if let Some(doc) = doc.as_ref() {
|
|
680
|
+
let obj_id = to_obj_id!(obj_id);
|
|
681
|
+
match heads.as_ref() {
|
|
682
|
+
None => {
|
|
683
|
+
return doc.length(obj_id);
|
|
684
|
+
}
|
|
685
|
+
Some(heads) => {
|
|
686
|
+
if let Ok(heads) = <Vec<am::ChangeHash>>::try_from(heads) {
|
|
687
|
+
return doc.length_at(obj_id, &heads);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
0
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/// \memberof AMdoc
|
|
696
|
+
/// \brief Gets the type of an object.
|
|
697
|
+
///
|
|
698
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
699
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
700
|
+
/// \return An `AMobjType` tag or `0`.
|
|
701
|
+
/// \pre \p doc `!= NULL`
|
|
702
|
+
/// \pre \p obj_id `!= NULL`
|
|
703
|
+
/// \internal
|
|
704
|
+
///
|
|
705
|
+
/// # Safety
|
|
706
|
+
/// doc must be a valid pointer to an AMdoc
|
|
707
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
708
|
+
#[no_mangle]
|
|
709
|
+
pub unsafe extern "C" fn AMobjObjType(doc: *const AMdoc, obj_id: *const AMobjId) -> AMobjType {
|
|
710
|
+
if let Some(doc) = doc.as_ref() {
|
|
711
|
+
let obj_id = to_obj_id!(obj_id);
|
|
712
|
+
if let Ok(obj_type) = doc.object_type(obj_id) {
|
|
713
|
+
return (&obj_type).into();
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
Default::default()
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
/// \memberof AMdoc
|
|
720
|
+
/// \brief Gets the current or historical items of an entire object.
|
|
721
|
+
///
|
|
722
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
723
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
724
|
+
/// \param[in] heads A pointer to an `AMitems` struct with `AM_VAL_TYPE_CHANGE_HASH`
|
|
725
|
+
/// items to select its historical items or `NULL` to select
|
|
726
|
+
/// its current items.
|
|
727
|
+
/// \return A pointer to an `AMresult` struct with an `AMitems` struct.
|
|
728
|
+
/// \pre \p doc `!= NULL`
|
|
729
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
730
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
731
|
+
/// \internal
|
|
732
|
+
///
|
|
733
|
+
/// # Safety
|
|
734
|
+
/// doc must be a valid pointer to an AMdoc
|
|
735
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
736
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
737
|
+
#[no_mangle]
|
|
738
|
+
pub unsafe extern "C" fn AMobjItems(
|
|
739
|
+
doc: *const AMdoc,
|
|
740
|
+
obj_id: *const AMobjId,
|
|
741
|
+
heads: *const AMitems,
|
|
742
|
+
) -> *mut AMresult {
|
|
743
|
+
let doc = to_doc!(doc);
|
|
744
|
+
let obj_id = to_obj_id!(obj_id);
|
|
745
|
+
match heads.as_ref() {
|
|
746
|
+
None => to_result(doc.values(obj_id)),
|
|
747
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
748
|
+
Ok(heads) => to_result(doc.values_at(obj_id, &heads)),
|
|
749
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
750
|
+
},
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/// \memberof AMdoc
|
|
755
|
+
/// \brief Gets the number of pending operations added during a document's
|
|
756
|
+
/// current transaction.
|
|
757
|
+
///
|
|
758
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
759
|
+
/// \return The count of pending operations for \p doc.
|
|
760
|
+
/// \pre \p doc `!= NULL`
|
|
761
|
+
/// \internal
|
|
762
|
+
///
|
|
763
|
+
/// # Safety
|
|
764
|
+
/// doc must be a valid pointer to an AMdoc
|
|
765
|
+
#[no_mangle]
|
|
766
|
+
pub unsafe extern "C" fn AMpendingOps(doc: *const AMdoc) -> usize {
|
|
767
|
+
if let Some(doc) = doc.as_ref() {
|
|
768
|
+
return doc.pending_ops();
|
|
769
|
+
}
|
|
770
|
+
0
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/// \memberof AMdoc
|
|
774
|
+
/// \brief Receives a synchronization message from a peer based upon a given
|
|
775
|
+
/// synchronization state.
|
|
776
|
+
///
|
|
777
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
778
|
+
/// \param[in] sync_state A pointer to an `AMsyncState` struct.
|
|
779
|
+
/// \param[in] sync_message A pointer to an `AMsyncMessage` struct.
|
|
780
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_VOID` item.
|
|
781
|
+
/// \pre \p doc `!= NULL`
|
|
782
|
+
/// \pre \p sync_state `!= NULL`
|
|
783
|
+
/// \pre \p sync_message `!= NULL`
|
|
784
|
+
/// \internal
|
|
785
|
+
///
|
|
786
|
+
/// # Safety
|
|
787
|
+
/// doc must be a valid pointer to an AMdoc
|
|
788
|
+
/// sync_state must be a valid pointer to an AMsyncState
|
|
789
|
+
/// sync_message must be a valid pointer to an AMsyncMessage
|
|
790
|
+
#[no_mangle]
|
|
791
|
+
pub unsafe extern "C" fn AMreceiveSyncMessage(
|
|
792
|
+
doc: *mut AMdoc,
|
|
793
|
+
sync_state: *mut AMsyncState,
|
|
794
|
+
sync_message: *const AMsyncMessage,
|
|
795
|
+
) -> *mut AMresult {
|
|
796
|
+
let doc = to_doc_mut!(doc);
|
|
797
|
+
let sync_state = to_sync_state_mut!(sync_state);
|
|
798
|
+
let sync_message = to_sync_message!(sync_message);
|
|
799
|
+
to_result(
|
|
800
|
+
doc.sync()
|
|
801
|
+
.receive_sync_message(sync_state.as_mut(), sync_message.as_ref().clone()),
|
|
802
|
+
)
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/// \memberof AMdoc
|
|
806
|
+
/// \brief Cancels the pending operations added during a document's current
|
|
807
|
+
/// transaction and gets the number of cancellations.
|
|
808
|
+
///
|
|
809
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
810
|
+
/// \return The count of pending operations for \p doc that were cancelled.
|
|
811
|
+
/// \pre \p doc `!= NULL`
|
|
812
|
+
/// \internal
|
|
813
|
+
///
|
|
814
|
+
/// # Safety
|
|
815
|
+
/// doc must be a valid pointer to an AMdoc
|
|
816
|
+
#[no_mangle]
|
|
817
|
+
pub unsafe extern "C" fn AMrollback(doc: *mut AMdoc) -> usize {
|
|
818
|
+
if let Some(doc) = doc.as_mut() {
|
|
819
|
+
return doc.rollback();
|
|
820
|
+
}
|
|
821
|
+
0
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
/// \memberof AMdoc
|
|
825
|
+
/// \brief Saves the entirety of a document into a compact form.
|
|
826
|
+
///
|
|
827
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
828
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_BYTES` item.
|
|
829
|
+
/// \pre \p doc `!= NULL`
|
|
830
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
831
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
832
|
+
/// \internal
|
|
833
|
+
///
|
|
834
|
+
/// # Safety
|
|
835
|
+
/// doc must be a valid pointer to an AMdoc
|
|
836
|
+
#[no_mangle]
|
|
837
|
+
pub unsafe extern "C" fn AMsave(doc: *mut AMdoc) -> *mut AMresult {
|
|
838
|
+
let doc = to_doc_mut!(doc);
|
|
839
|
+
to_result(Ok(doc.save()))
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
/// \memberof AMdoc
|
|
843
|
+
/// \brief Saves the changes to a document since its last save into a compact
|
|
844
|
+
/// form.
|
|
845
|
+
///
|
|
846
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
847
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_BYTES` item.
|
|
848
|
+
/// \pre \p doc `!= NULL`
|
|
849
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
850
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
851
|
+
/// \internal
|
|
852
|
+
///
|
|
853
|
+
/// # Safety
|
|
854
|
+
/// doc must be a valid pointer to an AMdoc
|
|
855
|
+
#[no_mangle]
|
|
856
|
+
pub unsafe extern "C" fn AMsaveIncremental(doc: *mut AMdoc) -> *mut AMresult {
|
|
857
|
+
let doc = to_doc_mut!(doc);
|
|
858
|
+
to_result(Ok(doc.save_incremental()))
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
/// \memberof AMdoc
|
|
862
|
+
/// \brief Puts the actor identifier of a document.
|
|
863
|
+
///
|
|
864
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
865
|
+
/// \param[in] actor_id A pointer to an `AMactorId` struct.
|
|
866
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_VOID` item.
|
|
867
|
+
/// \pre \p doc `!= NULL`
|
|
868
|
+
/// \pre \p actor_id `!= NULL`
|
|
869
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
870
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
871
|
+
/// \internal
|
|
872
|
+
///
|
|
873
|
+
/// # Safety
|
|
874
|
+
/// doc must be a valid pointer to an AMdoc
|
|
875
|
+
/// actor_id must be a valid pointer to an AMactorId
|
|
876
|
+
#[no_mangle]
|
|
877
|
+
pub unsafe extern "C" fn AMsetActorId(
|
|
878
|
+
doc: *mut AMdoc,
|
|
879
|
+
actor_id: *const AMactorId,
|
|
880
|
+
) -> *mut AMresult {
|
|
881
|
+
let doc = to_doc_mut!(doc);
|
|
882
|
+
let actor_id = to_actor_id!(actor_id);
|
|
883
|
+
doc.set_actor(actor_id.as_ref().clone());
|
|
884
|
+
to_result(Ok(()))
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
/// \memberof AMdoc
|
|
888
|
+
/// \brief Splices values into and/or removes values from the identified object
|
|
889
|
+
/// at a given position within it.
|
|
890
|
+
///
|
|
891
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
892
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
893
|
+
/// \param[in] pos A position in the object identified by \p obj_id or
|
|
894
|
+
/// `SIZE_MAX` to indicate one past its end.
|
|
895
|
+
/// \param[in] del The number of values to delete. If \p del `> 0` then
|
|
896
|
+
/// deletion begins at \p pos but if \p del `< 0` then deletion
|
|
897
|
+
/// ends at \p pos.
|
|
898
|
+
/// \param[in] values A copy of an `AMitems` struct from which values will be
|
|
899
|
+
/// spliced <b>starting at its current position</b>; call
|
|
900
|
+
/// `AMitemsRewound()` on a used `AMitems` first to ensure
|
|
901
|
+
/// that all of its values are spliced in. Pass `(AMitems){0}`
|
|
902
|
+
/// when zero values should be spliced in.
|
|
903
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_VOID` item.
|
|
904
|
+
/// \pre \p doc `!= NULL`
|
|
905
|
+
/// \pre `0 <=` \p pos `<= AMobjSize(`\p obj_id `)` or \p pos `== SIZE_MAX`
|
|
906
|
+
/// \pre `-AMobjSize(`\p obj_id `) <=` \p del `<= AMobjSize(`\p obj_id `)`
|
|
907
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
908
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
909
|
+
/// \internal
|
|
910
|
+
///
|
|
911
|
+
/// # Safety
|
|
912
|
+
/// doc must be a valid pointer to an AMdoc
|
|
913
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
914
|
+
/// values must be a valid pointer to an AMitems or std::ptr::null()
|
|
915
|
+
#[no_mangle]
|
|
916
|
+
pub unsafe extern "C" fn AMsplice(
|
|
917
|
+
doc: *mut AMdoc,
|
|
918
|
+
obj_id: *const AMobjId,
|
|
919
|
+
pos: usize,
|
|
920
|
+
del: isize,
|
|
921
|
+
values: AMitems,
|
|
922
|
+
) -> *mut AMresult {
|
|
923
|
+
let doc = to_doc_mut!(doc);
|
|
924
|
+
let obj_id = to_obj_id!(obj_id);
|
|
925
|
+
let len = doc.length(obj_id);
|
|
926
|
+
let pos = clamp!(pos, len, "pos");
|
|
927
|
+
match Vec::<am::ScalarValue>::try_from(&values) {
|
|
928
|
+
Ok(vals) => to_result(doc.splice(obj_id, pos, del, vals)),
|
|
929
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
/// \memberof AMdoc
|
|
934
|
+
/// \brief Splices characters into and/or removes characters from the
|
|
935
|
+
/// identified object at a given position within it.
|
|
936
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
937
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
938
|
+
/// \param[in] pos A position in the text object identified by \p obj_id or
|
|
939
|
+
/// `SIZE_MAX` to indicate one past its end.
|
|
940
|
+
/// If `AUTOMERGE_C_UTF8` is defined then \p pos is in units of
|
|
941
|
+
/// bytes but if `AUTOMERGE_C_UTF32` is defined then \p pos is in
|
|
942
|
+
/// units of Unicode code points.
|
|
943
|
+
/// \param[in] del The number of characters to delete. If \p del `> 0` then
|
|
944
|
+
/// deletion begins at \p pos but if \p del `< 0` then deletion
|
|
945
|
+
/// ends at \p pos.
|
|
946
|
+
/// If `AUTOMERGE_C_UTF8` is defined then \p del is in units of
|
|
947
|
+
/// bytes but if `AUTOMERGE_C_UTF32` is defined then \p del is in
|
|
948
|
+
/// units of Unicode code points.
|
|
949
|
+
/// \param[in] text A UTF-8 string view as an `AMbyteSpan` struct.
|
|
950
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_VOID` item.
|
|
951
|
+
/// \pre \p doc `!= NULL`
|
|
952
|
+
/// \pre `0 <=` \p pos `<= AMobjSize(`\p obj_id `)` or \p pos `== SIZE_MAX`
|
|
953
|
+
/// \pre `-AMobjSize(`\p obj_id `) <=` \p del `<= AMobjSize(`\p obj_id `)`
|
|
954
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
955
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
956
|
+
/// \internal
|
|
957
|
+
///
|
|
958
|
+
/// # Safety
|
|
959
|
+
/// doc must be a valid pointer to an AMdoc
|
|
960
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
961
|
+
#[no_mangle]
|
|
962
|
+
pub unsafe extern "C" fn AMspliceText(
|
|
963
|
+
doc: *mut AMdoc,
|
|
964
|
+
obj_id: *const AMobjId,
|
|
965
|
+
pos: usize,
|
|
966
|
+
del: isize,
|
|
967
|
+
text: AMbyteSpan,
|
|
968
|
+
) -> *mut AMresult {
|
|
969
|
+
let doc = to_doc_mut!(doc);
|
|
970
|
+
let obj_id = to_obj_id!(obj_id);
|
|
971
|
+
let len = doc.length(obj_id);
|
|
972
|
+
let pos = clamp!(pos, len, "pos");
|
|
973
|
+
to_result(doc.splice_text(obj_id, pos, del, to_str!(text)))
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
/// \memberof AMdoc
|
|
977
|
+
/// \brief Gets the current or historical string represented by a text object.
|
|
978
|
+
///
|
|
979
|
+
/// \param[in] doc A pointer to an `AMdoc` struct.
|
|
980
|
+
/// \param[in] obj_id A pointer to an `AMobjId` struct or `AM_ROOT`.
|
|
981
|
+
/// \param[in] heads A pointer to an `AMitems` struct containing
|
|
982
|
+
/// `AM_VAL_TYPE_CHANGE_HASH` items to select a historical string
|
|
983
|
+
/// or `NULL` to select the current string.
|
|
984
|
+
/// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_STR` item.
|
|
985
|
+
/// \pre \p doc `!= NULL`
|
|
986
|
+
/// \warning The returned `AMresult` struct pointer must be passed to
|
|
987
|
+
/// `AMresultFree()` in order to avoid a memory leak.
|
|
988
|
+
/// \internal
|
|
989
|
+
///
|
|
990
|
+
/// # Safety
|
|
991
|
+
/// doc must be a valid pointer to an AMdoc
|
|
992
|
+
/// obj_id must be a valid pointer to an AMobjId or std::ptr::null()
|
|
993
|
+
/// heads must be a valid pointer to an AMitems or std::ptr::null()
|
|
994
|
+
#[no_mangle]
|
|
995
|
+
pub unsafe extern "C" fn AMtext(
|
|
996
|
+
doc: *const AMdoc,
|
|
997
|
+
obj_id: *const AMobjId,
|
|
998
|
+
heads: *const AMitems,
|
|
999
|
+
) -> *mut AMresult {
|
|
1000
|
+
let doc = to_doc!(doc);
|
|
1001
|
+
let obj_id = to_obj_id!(obj_id);
|
|
1002
|
+
match heads.as_ref() {
|
|
1003
|
+
None => to_result(doc.text(obj_id)),
|
|
1004
|
+
Some(heads) => match <Vec<am::ChangeHash>>::try_from(heads) {
|
|
1005
|
+
Ok(heads) => to_result(doc.text_at(obj_id, &heads)),
|
|
1006
|
+
Err(e) => AMresult::error(&e.to_string()).into(),
|
|
1007
|
+
},
|
|
1008
|
+
}
|
|
1009
|
+
}
|