omnipaxos/unicache/
mod.rs1#[cfg(feature = "unicache")]
2pub(crate) mod lfu;
4#[cfg(feature = "unicache")]
5pub mod lfu_cache;
7#[cfg(feature = "unicache")]
8pub mod lru_cache;
10
11use crate::storage::Entry;
12use num_traits::One;
13#[cfg(feature = "serde")]
14use serde::{Deserialize, Serialize};
15use std::{
16 fmt::{Debug, Formatter},
17 hash::Hash,
18 marker::PhantomData,
19 num::NonZeroUsize,
20 ops::Add,
21};
22
23#[cfg(not(feature = "serde"))]
24pub trait Encoded: Clone + Debug {}
26#[cfg(not(feature = "serde"))]
27impl<T: Clone + Debug> Encoded for T {}
28#[cfg(feature = "serde")]
29pub trait Encoded: Clone + Debug + Serialize + for<'a> Deserialize<'a> {}
31#[cfg(feature = "serde")]
32impl<T: Clone + Debug + Serialize + for<'a> Deserialize<'a>> Encoded for T {}
33
34#[cfg(not(feature = "serde"))]
35pub trait Encodable: Clone + Debug {}
37#[cfg(not(feature = "serde"))]
38impl<T: Clone + Debug> Encodable for T {}
39#[cfg(feature = "serde")]
40pub trait Encodable: Clone + Debug + Serialize + for<'a> Deserialize<'a> {}
42#[cfg(feature = "serde")]
43impl<T: Clone + Debug + Serialize + for<'a> Deserialize<'a>> Encodable for T {}
44
45#[cfg(not(feature = "serde"))]
46pub trait NotEncodable: Clone + Debug {}
48#[cfg(not(feature = "serde"))]
49impl<T: Clone + Debug> NotEncodable for T {}
50#[cfg(feature = "serde")]
51pub trait NotEncodable: Clone + Debug + Serialize + for<'a> Deserialize<'a> {}
53#[cfg(feature = "serde")]
54impl<T: Clone + Debug + Serialize + for<'a> Deserialize<'a>> NotEncodable for T {}
55
56pub trait UniCache: Clone + Debug {
58 type T: Entry;
60
61 fn new() -> Self;
63
64 fn try_encode(&mut self, entry: &Self::T) -> <Self::T as Entry>::EncodeResult;
66
67 fn decode(&mut self, processed: <Self::T as Entry>::EncodeResult) -> Self::T;
69}
70
71#[derive(Clone, Debug)]
73#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
74pub enum MaybeEncoded<Encodable, Encoded> {
75 Encoded(Encoded),
77 NotEncoded(Encodable),
79}
80
81pub trait IncrementByOne: Default + Clone + One + Add<Output = Self> {}
83impl<T: Default + Clone + One + Add<Output = Self>> IncrementByOne for T {}
84
85#[cfg(not(feature = "serde"))]
86pub trait DefaultEncodable: Clone + Hash + Eq + PartialEq {}
88#[cfg(not(feature = "serde"))]
89impl<T: Clone + Hash + Eq + PartialEq> DefaultEncodable for T {}
90#[cfg(feature = "serde")]
91pub trait DefaultEncodable:
93 Clone + Hash + Eq + PartialEq + Serialize + for<'a> Deserialize<'a>
94{
95}
96#[cfg(feature = "serde")]
97impl<T: Clone + Hash + Eq + PartialEq + Serialize + for<'a> Deserialize<'a>> DefaultEncodable
98 for T
99{
100}
101
102pub trait DefaultEncoded: Clone + IncrementByOne + DefaultEncodable {}
104impl<T: Clone + IncrementByOne + DefaultEncodable> DefaultEncoded for T {}
105
106pub trait FieldCache<Encodable, Encoded> {
108 fn new(size: usize) -> Self;
110
111 fn try_encode(&mut self, field: &Encodable) -> MaybeEncoded<Encodable, Encoded>;
113
114 fn decode(&mut self, result: MaybeEncoded<Encodable, Encoded>) -> Encodable;
116}