Skip to main content

PolydatState

Struct PolydatState 

Source
pub struct PolydatState {
    pub core: EngineCore,
    /* private fields */
}
Expand description

Polydat evaluation engine using precomputed per-input dependent lists.

On set_input(), only nodes that depend on the changed input are dirtied. O(affected_nodes) per input change. This is the default engine for production use.

Fields§

§core: EngineCore

Shared evaluation core (buffers, clean flags, inputs).

Implementations§

Source§

impl PolydatState

Source

pub fn set_inputs(&mut self, coords: &[u64])

Set all coordinate inputs at once. Wraps each u64 as Value::U64 and sets them at indices 0..N with per-input change detection.

Source

pub fn set_input(&mut self, idx: usize, value: Value)

Set a single input by index, dirtying only dependent nodes.

Single-register semantics: a cell-bound slot’s only register IS the cell — set_input writes through the cell. A non-cell slot’s register is the local inputs[idx] array. There’s no second snapshot kept in lockstep with the cell; reads always go to whichever is the slot’s register.

Dependents-marking is the dependent-list invalidation strategy carried by PolydatState; it’s the write-side half of the engine’s dirty-tracking. Other engines (RawState, ProvScanState) implement different strategies — see their own set_inputs impls.

Source

pub fn get_input(&self, idx: usize) -> Value

Read the value of an input by index.

Single-register read: cell-bound slots return the cell’s current value; non-cell slots return the local register. One canonical value per slot, no stale snapshot.

Source

pub fn read_input_value(&self, idx: usize) -> Value

Alias for Self::get_input; kept for legacy callers that picked the more explicit name. Both read the cell when one is attached.

Source

pub fn attach_shared_cell(&mut self, idx: usize, cell: SharedCell)

Attach a SharedCell to an input slot.

After this call the cell becomes the slot’s sole register: reads via read_input go through the cell, set_input writes through the cell. The local inputs[idx] array entry for this slot is unused for cell-bound slots — there is no second register kept in lockstep.

Dependents are dirtied because the slot’s effective value just changed from the local default to whatever the cell currently holds.

Source

pub fn shared_cell(&self, idx: usize) -> Option<SharedCell>

Returns the SharedCell attached to an input slot, if any. Used by materialize_wiring_from_outer to share an existing cell with inner kernels.

Source

pub fn reset_inputs_from(&mut self, from_idx: usize)

Reset a range of inputs to their defaults. Used at stanza boundaries to prevent capture leakage across stanzas. from_idx is typically coord_count (skip coordinates, reset only capture inputs).

Cell-bound slots are skipped: the cell is cross-kernel shared state with its own lifecycle (managed by the owning ancestor scope), and a stanza-local reset must not clobber other kernels’ views.

Source

pub fn invalidate_all(&mut self)

Mark every node dirty and leave the inputs as they are: every node reruns at the next pull, as if the cycle had moved. What Kernel::invalidate_all means on every engine; a host that wants the inputs back at their defaults calls Self::reset_inputs_from as well.

Source

pub fn pull(&mut self, program: &PolydatProgram, output_name: &str) -> &Value

Pull a named output variate from the program.

Source

pub fn seed_node_buffer( &mut self, node_idx: usize, port_idx: usize, value: Value, )

Pre-populate a node’s output buffer slot and mark it clean, suppressing on-demand evaluation. Used by the scope-init pass (SRD 11 §“Init Binding Contract” Plan B) to seed per-fiber states with init binding values that the activation kernel already evaluated, so each fiber doesn’t re-fire the eval at first pull.

Source

pub fn node_buffer(&self, node_idx: usize, port_idx: usize) -> Option<&Value>

Read a node’s output buffer slot. Used by the scope-init pass to extract a pre-pulled init binding value from one state and seed it into another.

Source

pub fn pull_by_index( &mut self, program: &PolydatProgram, output_idx: usize, ) -> &Value

Pull an output by index (declaration order). Only evaluates the computation cone for this specific output.

Source

pub fn pull_all<'a>(&'a mut self, program: &PolydatProgram) -> Vec<&'a Value>

Pull all outputs in declaration order.

Source

pub fn accessor(program: &PolydatProgram, names: &[&str]) -> OutputAccessor

Create a memoized accessor for a named subset of outputs. Resolves names to indices once; subsequent access uses indices only.

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