RegularAtomic
This commit is contained in:
parent
1c5a9a28b7
commit
8015a9301b
@ -32,7 +32,9 @@ pub use self::diagnostic::Diagnostic;
|
||||
pub use self::hashing::{Hash, HASH_SIZE, HASH_ZEROS};
|
||||
pub use self::inctx::InCtx;
|
||||
pub use self::inlining::{Inlining, InliningExt, InliningResultExt};
|
||||
pub use self::modes::{FactoryProxy, ModeFactory, RegularFactory, RegularFactoryMode, WithMode};
|
||||
pub use self::modes::{
|
||||
FactoryProxy, FactoryWithMode, ModeFactory, RegularFactory, RegularFactoryMode, WithMode,
|
||||
};
|
||||
pub use self::origin::{OFctr, Origin};
|
||||
pub use self::point::Point;
|
||||
pub use self::points::PointsVisitor;
|
||||
|
@ -15,7 +15,7 @@ pub trait RegularFactory<'a, Ctx: Context<'a>>:
|
||||
fn rextend(&self, mentionable: Self::Mtbl, tail: &[u8]) -> ParseResult<'a, Ctx, Self>;
|
||||
}
|
||||
|
||||
trait FactoryWithMode: ModeFactory {
|
||||
pub trait FactoryWithMode: ModeFactory {
|
||||
type WithMode: ?Sized;
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ pub mod array;
|
||||
pub mod atomic_object;
|
||||
pub mod au64;
|
||||
pub mod boolean;
|
||||
mod modes;
|
||||
pub mod plain;
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
38
src/rstd/atomic/modes.rs
Normal file
38
src/rstd/atomic/modes.rs
Normal file
@ -0,0 +1,38 @@
|
||||
use super::*;
|
||||
|
||||
pub trait RegularAtomic: AtomicBase + ModeFactory<Mode = RegularFactoryMode> {
|
||||
fn ra_deserialize(inlining: impl Inlining) -> AParseResult<Self>;
|
||||
fn ra_extend(self, tail: &[u8]) -> AParseResult<Self>;
|
||||
}
|
||||
|
||||
pub trait AtomicProxy {
|
||||
type A: AtomicBase + ModeFactory;
|
||||
|
||||
fn pa_deserialize(inlining: impl Inlining) -> AParseResult<Self::A>;
|
||||
fn pa_extend(a: Self::A, tail: &[u8]) -> AParseResult<Self::A>;
|
||||
}
|
||||
|
||||
impl<A: RegularAtomic> AtomicProxy for WithMode<A, RegularFactoryMode> {
|
||||
type A = A;
|
||||
|
||||
fn pa_deserialize(inlining: impl Inlining) -> AParseResult<Self::A> {
|
||||
A::ra_deserialize(inlining)
|
||||
}
|
||||
|
||||
fn pa_extend(a: Self::A, tail: &[u8]) -> AParseResult<Self::A> {
|
||||
a.ra_extend(tail)
|
||||
}
|
||||
}
|
||||
|
||||
impl<A: AtomicBase + FactoryWithMode> Atomic for A
|
||||
where
|
||||
A::WithMode: AtomicProxy<A = Self>,
|
||||
{
|
||||
fn a_deserialize(inlining: impl Inlining) -> AParseResult<Self> {
|
||||
<A::WithMode as AtomicProxy>::pa_deserialize(inlining)
|
||||
}
|
||||
|
||||
fn a_extend(self, tail: &[u8]) -> AParseResult<Self> {
|
||||
<A::WithMode as AtomicProxy>::pa_extend(self, tail)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user