Skip to main content

OneOf

Struct OneOf 

Source
pub struct OneOf {
    pub values: Vec<String>,
    /* private fields */
}
Expand description

Uniform selection from N constant string values.

Signature: one_of(input: u64, values...) -> String

Takes one wire input (u64) and N constant string values captured at construction time. Hashes the input, takes mod N, and returns the corresponding value. All values have equal probability.

Use for simple uniform selection when all outcomes are equally likely — data center names, partition keys, categorical labels.

color := one_of(cycle, "red", "green", "blue")

JIT level: P1 only — Const<Vec<C>> is JIT-ineligible by design (per derive_support), so no compiled_u64 path.

Fields§

§values: Vec<String>

The values arguments, as given at construction.

Implementations§

Source§

impl OneOf

Source

pub fn new(values: Vec<String>) -> Self

A one_of node with the given constant arguments.

Trait Implementations§

Source§

impl PolydatNode for OneOf

Source§

fn meta(&self) -> &NodeMeta

Return this node’s metadata (port names and types).
Source§

fn eval(&self, inputs: &[Value], outputs: &mut [Value])

Evaluate the node: read from inputs, write to outputs. Read more
Source§

fn compiled_slot(&self, wire_types: &[PortType]) -> Option<CompiledSlotKit>

Return a slot-compiled closure for nodes with typed-slice ports (§8.4 layer 3): slice inputs read (ptr, len) slot pairs; vector outputs write into kernel-owned scratch. Checked by the compiled-kernel builders AFTER Self::compiled_u64 — pure-scalar nodes never need it. Default None: the node stays on typed eval.
Source§

fn scratch_layout(&self) -> Vec<ScratchElem>

The scratch entries a state owns for this node’s evaluation (axiom S3), one per entry in the order the node expects them in Self::eval_in. Empty for a node that evaluates over Values alone, which is every node but a native cone.
Source§

fn eval_in( &self, scratch: &mut [ScratchBuf], inputs: &[Value], outputs: &mut [Value], )

Self::eval with the node’s scratch, which the evaluating state owns and hands in: storage belongs to the state, never to the node, which is shared by every state of the program.
Source§

fn commutativity(&self) -> Commutativity

Declare which inputs are interchangeable for this node. Read more
Source§

fn accepts_none_inputs(&self) -> bool

True iff this node should receive Value::None inputs directly rather than have the kernel propagate None through it. Default: false — most nodes follow SRD-74 Rule 1 (None in → None out, no eval invocation). Read more
Source§

fn compiled_u64(&self) -> Option<Box<dyn Fn(&[u64], &mut [u64]) + Sync + Send>>

Return a compiled u64-only evaluation closure, if this node operates entirely in u64 space. Read more
Source§

fn jit_constants(&self) -> Vec<u64>

Return assembly-time constants for JIT compilation. Read more
Source§

fn purity(&self) -> Purity

Declare this node’s purity status per the runtime_model.md’s D2 axiom. Default: Purity::Pure. Override to declare an observable side channel (Purity::SideChannel) or eval-call-spanning state (Purity::Nondeterministic). Read more
Source§

fn simd_variant(&self) -> Option<SimdVariant>

Explicit SIMD-native implementation of this scalar node, if one has been registered with a semantic contract. Read more
Source§

fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>

A synthetic fusion node’s view of the subgraph it stands in for (SRD-105 cone extraction). Program-identity hashing (PolydatProgram::canonical_hash) walks THROUGH fusion nodes into this subgraph, so identity is invariant to the engine mix: jit=off and jit=auto compiles of the same source hash identically, and resume-skip matching survives mode changes. Default None: ordinary nodes hash as themselves.

Auto Trait Implementations§

§

impl Freeze for OneOf

§

impl RefUnwindSafe for OneOf

§

impl Send for OneOf

§

impl Sync for OneOf

§

impl Unpin for OneOf

§

impl UnsafeUnpin for OneOf

§

impl UnwindSafe for OneOf

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, 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> 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.