diff --git a/differential-dataflow/src/collection.rs b/differential-dataflow/src/collection.rs index 7164176e7..38fc3625c 100644 --- a/differential-dataflow/src/collection.rs +++ b/differential-dataflow/src/collection.rs @@ -1032,4 +1032,39 @@ pub mod containers { } } } + + /// Implementations of container traits for the `Rc` container. + mod rc { + use std::rc::Rc; + + use timely::progress::{Timestamp, timestamp::Refines}; + + use super::{Negate, Enter, Leave, ResultsIn}; + + impl Negate for Rc { + fn negate(mut self) -> Self { + std::mem::take(Rc::make_mut(&mut self)).negate().into() + } + } + + impl+Clone+Default, T1: Timestamp, T2: Refines> Enter for Rc { + type InnerContainer = Rc; + fn enter(mut self) -> Self::InnerContainer { + std::mem::take(Rc::make_mut(&mut self)).enter().into() + } + } + + impl+Clone+Default, T1: Refines, T2: Timestamp> Leave for Rc { + type OuterContainer = Rc; + fn leave(mut self) -> Self::OuterContainer { + std::mem::take(Rc::make_mut(&mut self)).leave().into() + } + } + + impl+Clone+Default, TS> ResultsIn for Rc { + fn results_in(mut self, step: &TS) -> Self { + std::mem::take(Rc::make_mut(&mut self)).results_in(step).into() + } + } + } }