From cc2b3c986c7c455be31fc2dd95e30726817269b9 Mon Sep 17 00:00:00 2001 From: Egor Suvorov Date: Thu, 24 Nov 2022 02:11:06 +0200 Subject: [PATCH] Simplify code: fewer lifetimes, auto-impl VecFrozenVersion --- libs/persistent_range_query/src/lib.rs | 9 +++++++++ libs/persistent_range_query/src/naive.rs | 9 ++------- libs/persistent_range_query/src/ops/rsq.rs | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/libs/persistent_range_query/src/lib.rs b/libs/persistent_range_query/src/lib.rs index 48d4f28f15..102755bd21 100644 --- a/libs/persistent_range_query/src/lib.rs +++ b/libs/persistent_range_query/src/lib.rs @@ -48,11 +48,20 @@ pub trait VecReadableVersion, Key> { fn get(&self, keys: Range) -> Modification::Result; } +// TODO: use trait alias when stabilized pub trait VecFrozenVersion, Key>: Clone + VecReadableVersion { } +impl< + T: Clone + VecReadableVersion, + Modification: RangeModification, + Key, + > VecFrozenVersion for T +{ +} + pub trait PersistentVecStorage< Modification: RangeModification, Initializer: LazyRangeInitializer, diff --git a/libs/persistent_range_query/src/naive.rs b/libs/persistent_range_query/src/naive.rs index 2e8d7d23ea..d3d1f601ec 100644 --- a/libs/persistent_range_query/src/naive.rs +++ b/libs/persistent_range_query/src/naive.rs @@ -1,6 +1,6 @@ use crate::{ LazyRangeInitializer, PersistentVecStorage, RangeModification, RangeQueryResult, - VecFrozenVersion, VecReadableVersion, + VecReadableVersion, }; use std::marker::PhantomData; use std::ops::Range; @@ -42,7 +42,7 @@ impl, Key: IndexableKey> VecReadableVersion } // Manual implementation of `Clone` becase `derive` requires `Modification: Clone` -impl<'a, Modification: RangeModification, Key: Clone> Clone +impl, Key: Clone> Clone for NaiveFrozenVersion { fn clone(&self) -> Self { @@ -53,11 +53,6 @@ impl<'a, Modification: RangeModification, Key: Clone> Clone } } -impl<'a, Modification: RangeModification, Key: IndexableKey> - VecFrozenVersion for NaiveFrozenVersion -{ -} - // TODO: is it at all possible to store previous versions in this struct, // without any Rc<>? pub struct NaiveVecStorage< diff --git a/libs/persistent_range_query/src/ops/rsq.rs b/libs/persistent_range_query/src/ops/rsq.rs index a3d6eace93..20cb31289f 100644 --- a/libs/persistent_range_query/src/ops/rsq.rs +++ b/libs/persistent_range_query/src/ops/rsq.rs @@ -90,7 +90,7 @@ where } } - fn apply<'a>(&self, result: &'a mut SumResult, range: &Range) { + fn apply(&self, result: &mut SumResult, range: &Range) { use AddAssignModification::*; match self { None => {}