diff --git a/Cargo.lock b/Cargo.lock index 005166384..e5ff3ad28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,6 +155,12 @@ dependencies = [ "arbitrary", ] +[[package]] +name = "archery" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca55ee147b1926dbea904f50fe4902494e97bc742205abbbf10c709e43815f" + [[package]] name = "arrayvec" version = "0.7.6" @@ -298,6 +304,12 @@ version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + [[package]] name = "byteorder" version = "1.5.0" @@ -1294,7 +1306,7 @@ checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" dependencies = [ "bitmaps 2.1.0", "rand_core 0.6.4", - "rand_xoshiro", + "rand_xoshiro 0.6.0", "serde", "sized-chunks", "typenum", @@ -1308,10 +1320,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc3be8d8cd36f33a46b1849f31f837c44d9fa87223baee3b4bd96b8f11df81eb" dependencies = [ "bitmaps 3.2.1", - "imbl-sized-chunks", + "imbl-sized-chunks 0.1.3", "rand_core 0.6.4", - "rand_xoshiro", + "rand_xoshiro 0.6.0", + "version_check", +] + +[[package]] +name = "imbl" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bad832b9b463ed9398b8506488cc2e3b897a9d44f13af115f382aac71f4fec" +dependencies = [ + "archery", + "equivalent", + "imbl-sized-chunks 0.2.0", + "rand_core 0.9.3", + "rand_xoshiro 0.7.0", + "serde_core", "version_check", + "wide", ] [[package]] @@ -1323,6 +1351,12 @@ dependencies = [ "bitmaps 3.2.1", ] +[[package]] +name = "imbl-sized-chunks" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0813be332553f857953298749fa19549e8b61b80589757c29b4e2a804fa9c6" + [[package]] name = "indexmap" version = "1.9.3" @@ -1732,7 +1766,7 @@ dependencies = [ "enum_dispatch", "generic-btree", "getrandom 0.2.16", - "im", + "imbl 7.0.2", "itertools 0.12.1", "js-sys", "leb128", @@ -1863,7 +1897,7 @@ checksum = "3f3d053a135388e6b1df14e8af1212af5064746e9b87a06a345a7a779ee9695a" [[package]] name = "loro-wasm" -version = "1.16.2" +version = "1.16.3" dependencies = [ "js-sys", "loro-common 1.16.0", @@ -1894,7 +1928,7 @@ name = "loro_fractional_index" version = "0.16.12" source = "git+https://github.com/loro-dev/loro.git?tag=loro-crdt%401.0.0-alpha.4#9bfe97bce4912c6dc8439817497d18423a0e8cb7" dependencies = [ - "imbl", + "imbl 3.0.0", "once_cell", "rand 0.8.5", "serde", @@ -2499,6 +2533,15 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_xoshiro" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" +dependencies = [ + "rand_core 0.9.3", +] + [[package]] name = "rayon" version = "1.11.0" @@ -2626,6 +2669,15 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + [[package]] name = "same-file" version = "1.0.6" @@ -3407,6 +3459,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/crates/loro-internal/Cargo.toml b/crates/loro-internal/Cargo.toml index ca6bfd102..20dc460b7 100644 --- a/crates/loro-internal/Cargo.toml +++ b/crates/loro-internal/Cargo.toml @@ -37,7 +37,7 @@ once_cell = { workspace = true } arbitrary = { version = "1", optional = true } postcard = { version = "1", default-features = false, features = ["use-std"] } append-only-bytes = { version = "0.1.12", features = ["u32_range"] } -im = { version = "15.1.0", features = ["serde"] } +imbl = { version = "7.0.2", features = ["serde"] } tabled = { version = "0.10.0", optional = true } wasm-bindgen = { version = "=0.2.100", optional = true } js-sys = { version = "0.3.60", optional = true } diff --git a/crates/loro-internal/src/dag/test.rs b/crates/loro-internal/src/dag/test.rs index 9519281ff..31336a2d7 100644 --- a/crates/loro-internal/src/dag/test.rs +++ b/crates/loro-internal/src/dag/test.rs @@ -1,6 +1,6 @@ #![allow(unused)] use arbitrary::Arbitrary; -use im::HashSet; +use imbl::HashSet; use loro_common::HasCounter; use std::{cmp::Ordering, sync::Arc}; diff --git a/crates/loro-internal/src/version.rs b/crates/loro-internal/src/version.rs index 3efbe1498..b1d2bf301 100644 --- a/crates/loro-internal/src/version.rs +++ b/crates/loro-internal/src/version.rs @@ -160,7 +160,14 @@ impl VersionRange { /// can be created from cloning and modifying other similar version vectors. #[repr(transparent)] #[derive(Debug, Clone, Default, Serialize, Deserialize)] -pub struct ImVersionVector(im::HashMap); +pub struct ImVersionVector( + imbl::GenericHashMap< + PeerID, + Counter, + rustc_hash::FxBuildHasher, + imbl::shared_ptr::DefaultSharedPtr, + >, +); #[inline] fn normalize_vv_counter(counter: Counter) -> Counter { @@ -197,7 +204,9 @@ impl ImVersionVector { self.0.is_empty() } - pub fn iter(&self) -> im::hashmap::Iter<'_, PeerID, Counter> { + pub fn iter( + &self, + ) -> imbl::hashmap::Iter<'_, PeerID, Counter, imbl::shared_ptr::DefaultSharedPtr> { self.0.iter() }