diff --git a/crates/loro-internal/src/container/registry.rs b/crates/loro-internal/src/container/registry.rs index 2ca1c2cf..4038cb3d 100644 --- a/crates/loro-internal/src/container/registry.rs +++ b/crates/loro-internal/src/container/registry.rs @@ -254,6 +254,11 @@ impl ContainerRegistry { .map(|x| Arc::downgrade(&self.containers[x.0 as usize].container)) } + #[inline(always)] + pub fn contains(&self, id: &ContainerID) -> bool { + self.container_to_idx.contains_key(id) + } + #[inline(always)] pub(crate) fn get_by_idx(&self, idx: ContainerIdx) -> Option<&Arc>> { self.containers.get(idx.0 as usize).map(|x| &x.container) diff --git a/crates/loro-internal/src/log_store.rs b/crates/loro-internal/src/log_store.rs index 19ad029d..930b6b0a 100644 --- a/crates/loro-internal/src/log_store.rs +++ b/crates/loro-internal/src/log_store.rs @@ -265,7 +265,12 @@ impl LogStore { } #[inline] - pub fn contains(&self, id: ID) -> bool { + pub fn contains_container(&self, id: &ContainerID) -> bool { + self.reg.contains(id) + } + + #[inline] + pub fn contains_id(&self, id: ID) -> bool { self.changes .get(&id.client_id) .map_or(0, |changes| changes.atom_len()) diff --git a/crates/loro-internal/src/loro.rs b/crates/loro-internal/src/loro.rs index 83b2695a..8ecb4dfb 100644 --- a/crates/loro-internal/src/loro.rs +++ b/crates/loro-internal/src/loro.rs @@ -1,6 +1,8 @@ use std::sync::{Arc, Mutex, RwLock}; use crate::{ + container::ContainerID, + dag::DagUtils, event::RawEvent, hierarchy::Hierarchy, log_store::{EncodeConfig, LoroEncoder}, @@ -73,6 +75,11 @@ impl LoroCore { Text::from_instance(instance, cid) } + pub fn contains(&self, id: &ContainerID) -> bool { + let store = self.log_store.try_read().unwrap(); + store.contains_container(id) + } + // TODO: make it private pub fn export(&self, remote_vv: VersionVector) -> FxHashMap>> { let store = self.log_store.read().unwrap();