pub struct CircuitBuilder<'a, T>where
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> CircuitBuilder<'a, T>
impl<'a, T> CircuitBuilder<'a, T>
Sourcepub fn new(
wires: impl IntoIterator<Item = Wire>,
builder: &'a mut T,
) -> CircuitBuilder<'a, T>
pub fn new( wires: impl IntoIterator<Item = Wire>, builder: &'a mut T, ) -> CircuitBuilder<'a, T>
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 CircuitBuilder<'a, T>, BuildError>
pub fn append( &mut self, op: impl Into<OpType>, indices: impl IntoIterator<Item = usize> + Clone, ) -> Result<&mut CircuitBuilder<'a, T>, 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>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<&mut CircuitBuilder<'a, T>, BuildError>where
A: Into<CircuitUnit>,
pub fn append_and_consume<A>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<&mut CircuitBuilder<'a, T>, BuildError>where
A: Into<CircuitUnit>,
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>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<Vec<Wire>, BuildError>where
A: Into<CircuitUnit>,
pub fn append_with_outputs<A>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<Vec<Wire>, BuildError>where
A: Into<CircuitUnit>,
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>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<[Wire; N], BuildError>where
A: Into<CircuitUnit>,
pub fn append_with_outputs_arr<const N: usize, A>(
&mut self,
op: impl Into<OpType>,
inputs: impl IntoIterator<Item = A>,
) -> Result<[Wire; N], BuildError>where
A: Into<CircuitUnit>,
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§
Source§impl<'a, T> Debug for CircuitBuilder<'a, T>
impl<'a, T> Debug for CircuitBuilder<'a, T>
Source§impl<'a, T> PartialEq for CircuitBuilder<'a, T>
impl<'a, T> PartialEq for CircuitBuilder<'a, T>
impl<'a, T> StructuralPartialEq for CircuitBuilder<'a, T>where
T: ?Sized,
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> Pointable for T
impl<T> Pointable for T
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.