use vyre_foundation::ir::Program;
use crate::graph::csr_forward_traverse::csr_forward_traverse;
use crate::graph::program_graph::ProgramGraphShape;
use crate::predicate::edge_kind;
pub const OP_ID: &str = "vyre-primitives::predicate::return_value_of";
#[must_use]
pub fn return_value_of(shape: ProgramGraphShape, frontier_in: &str, frontier_out: &str) -> Program {
csr_forward_traverse(shape, frontier_in, frontier_out, edge_kind::RETURN)
}
#[must_use]
pub fn cpu_ref(
node_count: u32,
edge_offsets: &[u32],
edge_targets: &[u32],
edge_kind_mask: &[u32],
frontier_in: &[u32],
) -> Vec<u32> {
crate::graph::csr_forward_traverse::cpu_ref(
node_count,
edge_offsets,
edge_targets,
edge_kind_mask,
frontier_in,
edge_kind::RETURN,
)
}
#[cfg(feature = "inventory-registry")]
inventory::submit! {
crate::harness::OpEntry::new(
OP_ID,
|| return_value_of(ProgramGraphShape::new(4, 1), "fin", "fout"),
Some(|| {
use super::inventory_u32_le_bytes as b;
vec![vec![
b(&[2, 1, 1, 1]), b(&[0, 1, 1, 1, 1]), b(&[1]), b(&[4]), b(&[0, 0, 0, 0]), b(&[0b0001]), b(&[0]), ]]
}),
Some(|| {
use super::inventory_u32_le_bytes as b;
vec![vec![b(&[0b0010])]] }),
)
}