Skip to main content

OpBuilder

Struct OpBuilder 

Source
pub struct OpBuilder { /* private fields */ }
Expand description

Shared op builder that distributes per-fiber builders.

Holds the activity’s source kernel (immutable, shared). Each executor fiber calls create_fiber_builder() to get its own FiberBuilder with private kernels — no locks, no contention on the hot path.

Implementations§

Source§

impl OpBuilder

Source

pub fn new(kernel: impl IntoSharedScope) -> Self

Create an OpBuilder from a kernel.

If the kernel has scope values (set via materialize_wiring_from_outer or directly via kernel.state().set_input), they are captured and propagated into every fiber’s kernels.

Source

pub fn with_op_template_programs( self, programs: HashMap<String, Arc<PolydatProgram>>, ) -> Self

Install per-op-template kernel programs (SRD-13d Phase 9). The runner builds these from the scope tree’s cached_kernel slots for materialised op-template scopes and threads them here so wrappers can look up the right program when constructing their fixtures.

Source

pub fn with_op_template_modules( self, modules: impl IntoIterator<Item = (String, Arc<OpTemplateModule>)>, ) -> Self

Instantiate per-op kernels from modules, the op-template scope modules of this phase. A module whose fiber-engine image disagrees with its program is left out, and its per-op kernels stay on the interpreter.

Source

pub fn program_for_op(&self, name: &str) -> Arc<PolydatProgram> ⓘ

Look up the kernel program for op name. Returns the per-op-template program if Phase 9 produced one for this op (i.e. materialised and bindings non-empty); otherwise returns the activity-wide program (the flatten path).

Source

pub fn program(&self) -> Arc<PolydatProgram> ⓘ

The activity-wide kernel program. Used by callers that need the source program shape (output names, manifest) without rebuilding a fresh kernel.

Source

pub fn source_kernel(&self) -> &Arc<ScopeKernel> ⓘ

The activity-wide source kernel — the Polydat context every op-template subscope is built upon. Adapters’ map_op implementations receive a kernel of this scope (see Self::canonical_kernel_for_op) as the parent argument, to bind their own canonical op-template kernel under (SRD-68 invariant I-3) or to retain when their op has no matter to add.

Source

pub fn canonical_kernel_for_op(&self, op_name: &str) -> Arc<dyn Kernel> ⓘ

Build the canonical op-template kernel for op_name — the Polydat context the dispenser owns and that per-fiber instances are materialised from (SRD-68 invariants I-3, I-4). Built once at dispenser construction time.

When op_name has a registered op-template program (phase bindings:, op-level bindings:, result: block — the matter assembled by the synthesis pipeline before the activity runs), the canonical is that program bound under source_kernel: instantiated from its module on the fiber engine when it has one, on the interpreter otherwise. Otherwise the canonical is a fork of the source kernel (its program, state and cells), which covers the flattened-op-template path (no per-op matter). Either way the adapter holds a kernel of any engine, whose program_id this builder recognizes.

Source

pub fn create_fiber_builder(&self) -> FiberBuilder

Create a per-fiber builder. No locks, no sharing — the fiber owns its kernels exclusively. Scope values (per-iteration inputs from for_each / for_combinations / outer scope constants) are written into the main kernel’s inputs and remembered on the builder so reset_captures (called at stanza boundaries) can re-apply them — otherwise the blanket “reset all non-coord inputs” pass would clobber the iteration’s bound values.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more