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: EngineCoreShared evaluation core (buffers, clean flags, inputs).
Implementations§
Source§impl PolydatState
impl PolydatState
Sourcepub fn set_inputs(&mut self, coords: &[u64])
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.
Sourcepub fn set_input(&mut self, idx: usize, value: Value)
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.
Sourcepub fn get_input(&self, idx: usize) -> Value
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.
Sourcepub fn read_input_value(&self, idx: usize) -> Value
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.
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.
Returns the SharedCell attached to an input slot, if any.
Used by materialize_wiring_from_outer to share an existing cell with
inner kernels.
Sourcepub fn reset_inputs_from(&mut self, from_idx: usize)
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.
Sourcepub fn invalidate_all(&mut self)
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.
Sourcepub fn pull(&mut self, program: &PolydatProgram, output_name: &str) -> &Value
pub fn pull(&mut self, program: &PolydatProgram, output_name: &str) -> &Value
Pull a named output variate from the program.
Sourcepub fn seed_node_buffer(
&mut self,
node_idx: usize,
port_idx: usize,
value: Value,
)
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.
Sourcepub fn node_buffer(&self, node_idx: usize, port_idx: usize) -> Option<&Value>
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.
Sourcepub fn pull_by_index(
&mut self,
program: &PolydatProgram,
output_idx: usize,
) -> &Value
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.
Sourcepub fn pull_all<'a>(&'a mut self, program: &PolydatProgram) -> Vec<&'a Value>
pub fn pull_all<'a>(&'a mut self, program: &PolydatProgram) -> Vec<&'a Value>
Pull all outputs in declaration order.
Sourcepub fn accessor(program: &PolydatProgram, names: &[&str]) -> OutputAccessor
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§
impl !RefUnwindSafe for PolydatState
impl !UnwindSafe for PolydatState
impl Freeze for PolydatState
impl Send for PolydatState
impl Sync for PolydatState
impl Unpin for PolydatState
impl UnsafeUnpin for PolydatState
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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 more