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::call_to";
#[must_use]
pub fn call_to(shape: ProgramGraphShape, frontier_in: &str, frontier_out: &str) -> Program {
csr_forward_traverse(shape, frontier_in, frontier_out, edge_kind::CALL_ARG)
}
#[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::CALL_ARG,
)
}
#[cfg(feature = "inventory-registry")]
inventory::submit! {
crate::harness::OpEntry::new(
OP_ID,
|| call_to(ProgramGraphShape::new(4, 2), "fin", "fout"),
Some(|| {
use super::inventory_u32_le_bytes as b;
vec![vec![
b(&[2, 1, 1, 1]), b(&[0, 1, 2, 2, 2]), b(&[1, 2]), b(&[2, 2]), b(&[0, 0, 0, 0]), b(&[0b0001]), b(&[0]), ]]
}),
Some(|| {
use super::inventory_u32_le_bytes as b;
vec![vec![b(&[0b0010])]] }),
)
}