From 9c050b8b0b1e3348238fbe1a463e690acf1ffdb8 Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Tue, 18 Jun 2024 18:17:46 +0800 Subject: [PATCH] refactor: fix name err & add counter state fast snapshot --- .vscode/settings.json | 3 +- crates/loro-internal/src/state.rs | 2 +- .../loro-internal/src/state/counter_state.rs | 33 +++++++++++++++++++ crates/loro-internal/src/state/list_state.rs | 4 +-- crates/loro-internal/src/state/map_state.rs | 4 +-- .../src/state/movable_list_state.rs | 4 +-- .../loro-internal/src/state/richtext_state.rs | 4 +-- crates/loro-internal/src/state/tree_state.rs | 4 +-- 8 files changed, 46 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9488bf16..54f73501 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -44,7 +44,8 @@ "DEBUG": "*" }, "rust-analyzer.cargo.features": [ - "test_utils" + "test_utils", + "counter" ], "editor.defaultFormatter": "rust-lang.rust-analyzer", "rust-analyzer.server.extraEnv": { diff --git a/crates/loro-internal/src/state.rs b/crates/loro-internal/src/state.rs index d4e93868..bdc40dbd 100644 --- a/crates/loro-internal/src/state.rs +++ b/crates/loro-internal/src/state.rs @@ -90,7 +90,7 @@ pub(crate) struct ContainerCreationContext<'a> { peer: PeerID, } -pub(crate) trait FastStateSnashot { +pub(crate) trait FastStateSnapshot { fn encode_snapshot_fast(&mut self, w: W); fn decode_value(bytes: &[u8]) -> LoroResult<(LoroValue, &[u8])>; fn decode_snapshot_fast( diff --git a/crates/loro-internal/src/state/counter_state.rs b/crates/loro-internal/src/state/counter_state.rs index b900cee6..9eb9f9bb 100644 --- a/crates/loro-internal/src/state/counter_state.rs +++ b/crates/loro-internal/src/state/counter_state.rs @@ -125,3 +125,36 @@ impl ContainerState for CounterState { false } } + +mod snapshot { + use crate::state::FastStateSnapshot; + + use super::*; + + impl FastStateSnapshot for CounterState { + fn encode_snapshot_fast(&mut self, mut w: W) { + let bytes = self.value.to_le_bytes(); + w.write_all(&bytes).unwrap(); + } + + fn decode_value(bytes: &[u8]) -> LoroResult<(LoroValue, &[u8])> { + Ok(( + LoroValue::Double(f64::from_le_bytes(bytes.try_into().unwrap())), + &[], + )) + } + + fn decode_snapshot_fast( + idx: ContainerIdx, + v: (LoroValue, &[u8]), + ctx: crate::state::ContainerCreationContext, + ) -> LoroResult + where + Self: Sized, + { + let mut counter = CounterState::new(idx); + counter.value = *v.0.as_double().unwrap(); + Ok(counter) + } + } +} diff --git a/crates/loro-internal/src/state/list_state.rs b/crates/loro-internal/src/state/list_state.rs index 661cccfb..7bd7f6b8 100644 --- a/crates/loro-internal/src/state/list_state.rs +++ b/crates/loro-internal/src/state/list_state.rs @@ -4,7 +4,7 @@ use std::{ sync::{Arc, Mutex, Weak}, }; -use super::{ContainerState, FastStateSnashot}; +use super::{ContainerState, FastStateSnapshot}; use crate::{ arena::SharedArena, container::{idx::ContainerIdx, list::list_op::ListOp, ContainerID}, @@ -552,7 +552,7 @@ mod snapshot { use super::*; - impl FastStateSnashot for ListState { + impl FastStateSnapshot for ListState { fn encode_snapshot_fast(&mut self, mut w: W) { let value = self.get_value(); postcard::to_io(&value, &mut w).unwrap(); diff --git a/crates/loro-internal/src/state/map_state.rs b/crates/loro-internal/src/state/map_state.rs index c4d4bace..9b234f27 100644 --- a/crates/loro-internal/src/state/map_state.rs +++ b/crates/loro-internal/src/state/map_state.rs @@ -245,12 +245,12 @@ mod snapshot { use crate::{ delta::MapValue, - state::{ContainerCreationContext, ContainerState, FastStateSnashot}, + state::{ContainerCreationContext, ContainerState, FastStateSnapshot}, }; use super::MapState; - impl FastStateSnashot for MapState { + impl FastStateSnapshot for MapState { fn encode_snapshot_fast(&mut self, mut w: W) { let value = self.get_value(); postcard::to_io(&value, &mut w).unwrap(); diff --git a/crates/loro-internal/src/state/movable_list_state.rs b/crates/loro-internal/src/state/movable_list_state.rs index 4e92d119..2e67f5e7 100644 --- a/crates/loro-internal/src/state/movable_list_state.rs +++ b/crates/loro-internal/src/state/movable_list_state.rs @@ -1524,7 +1524,7 @@ mod snapshot { use crate::{ encoding::value_register::ValueRegister, - state::{ContainerCreationContext, ContainerState, FastStateSnashot}, + state::{ContainerCreationContext, ContainerState, FastStateSnapshot}, }; use super::{ @@ -1532,7 +1532,7 @@ mod snapshot { EncodedItemForFastSnapshot, MovableListState, }; - impl FastStateSnashot for MovableListState { + impl FastStateSnapshot for MovableListState { fn encode_snapshot_fast(&mut self, mut w: W) { let value = self.get_value(); postcard::to_io(&value, &mut w).unwrap(); diff --git a/crates/loro-internal/src/state/richtext_state.rs b/crates/loro-internal/src/state/richtext_state.rs index e6aa21e5..9d73c90d 100644 --- a/crates/loro-internal/src/state/richtext_state.rs +++ b/crates/loro-internal/src/state/richtext_state.rs @@ -877,7 +877,7 @@ mod snapshot { TextStyleInfoFlag, }, encoding::value_register::ValueRegister, - state::{ContainerCreationContext, ContainerState, FastStateSnashot}, + state::{ContainerCreationContext, ContainerState, FastStateSnapshot}, utils::lazy::LazyLoad, }; @@ -915,7 +915,7 @@ mod snapshot { marks: Vec, } - impl FastStateSnashot for RichtextState { + impl FastStateSnapshot for RichtextState { fn encode_snapshot_fast(&mut self, mut w: W) { let value = self.get_value(); postcard::to_io(&value, &mut w).unwrap(); diff --git a/crates/loro-internal/src/state/tree_state.rs b/crates/loro-internal/src/state/tree_state.rs index 3114f86a..435e29cc 100644 --- a/crates/loro-internal/src/state/tree_state.rs +++ b/crates/loro-internal/src/state/tree_state.rs @@ -1234,7 +1234,7 @@ mod snapshot { use loro_common::{IdFull, PeerID, TreeID}; use serde_columnar::columnar; - use crate::{encoding::value_register::ValueRegister, state::FastStateSnashot}; + use crate::{encoding::value_register::ValueRegister, state::FastStateSnapshot}; use super::{TreeNode, TreeParentId, TreeState}; @@ -1302,7 +1302,7 @@ mod snapshot { ) } - impl FastStateSnashot for TreeState { + impl FastStateSnapshot for TreeState { fn encode_snapshot_fast(&mut self, mut w: W) { let alive_tree_nodes = self.tree_nodes(); let deleted_tree_nodes = self.deleted_tree_nodes();