diff --git a/src/runtime2/component/component_ip.rs b/src/runtime2/component/component_ip.rs index 9f63e10b2f4b5b173c8b5b0b1da36f46e4acf710..c4f438ed4c93990fd82b1e16345ed6f1c78d5a73 100644 --- a/src/runtime2/component/component_ip.rs +++ b/src/runtime2/component/component_ip.rs @@ -1,13 +1,17 @@ use crate::protocol::eval::*; use crate::runtime2::*; use super::*; +use super::component::*; /// TODO: Temporary component to figure out what to do with custom components. /// This component sends random numbers between two u32 limits -struct ComponentRandSend { +pub struct ComponentRandomU32 { + output_port_id: PortId, + random_minimum: u32, + random_maximum: u32, } -impl Component for ComponentRandSend { +impl Component for ComponentRandomU32 { fn adopt_message(&mut self, _comp_ctx: &mut CompCtx, _message: DataMessage) { unreachable!("should not adopt messages"); } @@ -19,4 +23,20 @@ impl Component for ComponentRandSend { fn run(&mut self, sched_ctx: &mut SchedulerCtx, comp_ctx: &mut CompCtx) -> Result { todo!() } +} + +impl ComponentRandomU32 { + pub(crate) fn new(arguments: ValueGroup) -> Self { + debug_assert_eq!(arguments.values.len(), 3); + debug_assert!(arguments.regions.is_empty()); + let port_id = port_id_from_eval(arguments.values[0].as_port_id()); + let minimum = arguments.values[1].as_uint32(); + let maximum = arguments.values[2].as_uint32(); + + return ComponentRandomU32{ + output_port_id: port_id, + random_minimum: minimum, + random_maximum: maximum, + } + } } \ No newline at end of file