pub struct CircuitBuilder<'a, T: ?Sized> { /* private fields */ }
Expand description
Builder to build regions of dataflow graphs that look like Circuits, where some inputs of operations directly correspond to some outputs.
Allows appending operations by indexing a vector of input wires.
Implementations§
Source§impl<'a, T: Dataflow + ?Sized> CircuitBuilder<'a, T>
impl<'a, T: Dataflow + ?Sized> CircuitBuilder<'a, T>
Sourcepub fn new(wires: impl IntoIterator<Item = Wire>, builder: &'a mut T) -> Self
pub fn new(wires: impl IntoIterator<Item = Wire>, builder: &'a mut T) -> Self
Construct a new CircuitBuilder
from a vector of incoming wires and the
builder for the graph.
Sourcepub fn tracked_wire(&self, index: usize) -> Option<Wire>
pub fn tracked_wire(&self, index: usize) -> Option<Wire>
Returns the wire associated with the given index.
Sourcepub fn tracked_units(&self) -> impl Iterator<Item = usize> + '_
pub fn tracked_units(&self) -> impl Iterator<Item = usize> + '_
Returns an iterator over the tracked linear units.
Sourcepub fn tracked_units_arr<const N: usize>(&self) -> [usize; N]
pub fn tracked_units_arr<const N: usize>(&self) -> [usize; N]
Sourcepub fn append(
&mut self,
op: impl Into<OpType>,
indices: impl IntoIterator<Item = usize> + Clone,
) -> Result<&mut Self, BuildError>
pub fn append( &mut self, op: impl Into<OpType>, indices: impl IntoIterator<Item = usize> + Clone, ) -> Result<&mut Self, BuildError>
Append an op to the wires in the inner vector with given indices
.
The outputs of the operation become the new wires at those indices.
Only valid for operations that have the same input type row as output
type row.
Returns a handle to self to allow chaining.
Sourcepub fn append_and_consume<A: Into<CircuitUnit>>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<&mut Self, BuildError>
pub fn append_and_consume<A: Into<CircuitUnit>>( &mut self, op: impl Into<OpType>, inputs: impl IntoIterator<Item = A>, ) -> Result<&mut Self, BuildError>
The same as CircuitBuilder::append_with_outputs
except it assumes no outputs and
instead returns a reference to self to allow chaining.
Sourcepub fn append_with_outputs<A: Into<CircuitUnit>>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<Vec<Wire>, BuildError>
pub fn append_with_outputs<A: Into<CircuitUnit>>( &mut self, op: impl Into<OpType>, inputs: impl IntoIterator<Item = A>, ) -> Result<Vec<Wire>, BuildError>
Append an op
with some inputs being the stored wires.
Any inputs of the form CircuitUnit::Linear
are used to index the
stored wires.
The outputs at those indices are used to replace the stored wire.
The remaining outputs are returned.
§Errors
Returns an error on an invalid input unit.
Sourcepub fn append_with_outputs_arr<const N: usize, A: Into<CircuitUnit>>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<[Wire; N], BuildError>
pub fn append_with_outputs_arr<const N: usize, A: Into<CircuitUnit>>( &mut self, op: impl Into<OpType>, inputs: impl IntoIterator<Item = A>, ) -> Result<[Wire; N], BuildError>
Append an op
with some inputs being the stored wires.
Any inputs of the form CircuitUnit::Linear
are used to index the
stored wires.
The outputs at those indices are used to replace the stored wire.
The remaining outputs are returned as an array.
§Errors
Returns an error on an invalid input unit.
§Panics
If the number of outputs does not match N
.
Sourcepub fn add_constant(&mut self, value: impl Into<Value>) -> Wire
pub fn add_constant(&mut self, value: impl Into<Value>) -> Wire
Adds a constant value to the circuit and loads it into a wire.
Sourcepub fn track_wire(&mut self, wire: Wire) -> usize
pub fn track_wire(&mut self, wire: Wire) -> usize
Add a wire to the list of tracked wires.
Returns the new unit index.
Sourcepub fn untrack_wire(&mut self, index: usize) -> Result<Wire, CircuitBuildError>
pub fn untrack_wire(&mut self, index: usize) -> Result<Wire, CircuitBuildError>
Stops tracking a linear unit, and returns the last wire corresponding to it.
Returns the new unit index.
§Errors
Returns a CircuitBuildError::InvalidWireIndex
if the index is invalid.
Trait Implementations§
impl<'a, T: ?Sized> StructuralPartialEq for CircuitBuilder<'a, T>
Auto Trait Implementations§
impl<'a, T> Freeze for CircuitBuilder<'a, T>where
T: ?Sized,
impl<'a, T> RefUnwindSafe for CircuitBuilder<'a, T>where
T: RefUnwindSafe + ?Sized,
impl<'a, T> Send for CircuitBuilder<'a, T>
impl<'a, T> Sync for CircuitBuilder<'a, T>
impl<'a, T> Unpin for CircuitBuilder<'a, T>where
T: ?Sized,
impl<'a, T> !UnwindSafe for CircuitBuilder<'a, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.