diff --git a/include/reactor-uc/connection.h b/include/reactor-uc/connection.h index 315030ec..01172afc 100644 --- a/include/reactor-uc/connection.h +++ b/include/reactor-uc/connection.h @@ -14,6 +14,7 @@ typedef struct PhysicalConnection PhysicalConnection; typedef struct DelayedConnection DelayedConnection; typedef struct Port Port; typedef struct Output Output; +typedef struct ConnectionList ConnectionList; struct Connection { Trigger super; @@ -30,6 +31,11 @@ void Connection_ctor(Connection *self, TriggerType type, Reactor *parent, Port * EventPayloadPool *payload_pool, void (*prepare)(Trigger *, Event *), void (*cleanup)(Trigger *), void (*trigger_downstreams)(Connection *, const void *, size_t)); +struct ConnectionList { + Connection **connections; + size_t connections_size; +}; + struct LogicalConnection { Connection super; }; diff --git a/include/reactor-uc/macros.h b/include/reactor-uc/macros.h index c7ea3648..623d4a5b 100644 --- a/include/reactor-uc/macros.h +++ b/include/reactor-uc/macros.h @@ -104,9 +104,9 @@ Connection *conns_out[NumConnsOut]; \ } PortName; -#define DEFINE_OUTPUT_PORT_CTOR(PortName, SourceSize, NumConnsOut) \ - void PortName##_ctor(PortName *self, Reactor *parent) { \ - Output_ctor(&self->super, parent, self->sources, SourceSize, (Connection **)&self->conns_out, NumConnsOut); \ +#define DEFINE_OUTPUT_PORT_CTOR(PortName, SourceSize) \ + void PortName##_ctor(PortName *self, Reactor *parent, Connection **conn_out, size_t conn_num) { \ + Output_ctor(&self->super, parent, self->sources, SourceSize, conn_out, conn_num); \ } #define DEFINE_INPUT_PORT_STRUCT(PortName, EffectSize, BufferType, NumConnsOut) \ diff --git a/test/unit/delayed_conn_test.c b/test/unit/delayed_conn_test.c index d66b7d92..7e47f3db 100644 --- a/test/unit/delayed_conn_test.c +++ b/test/unit/delayed_conn_test.c @@ -6,7 +6,7 @@ DEFINE_TIMER_STRUCT(Timer1, 1) DEFINE_TIMER_CTOR_FIXED(Timer1, 1, 0, MSEC(10)) DEFINE_REACTION_STRUCT(Sender, 0, 0); DEFINE_OUTPUT_PORT_STRUCT(Out, 1, 1) -DEFINE_OUTPUT_PORT_CTOR(Out, 1, 1) +DEFINE_OUTPUT_PORT_CTOR(Out, 1) typedef struct { Reactor super; @@ -27,13 +27,13 @@ DEFINE_REACTION_BODY(Sender, 0) { } DEFINE_REACTION_CTOR(Sender, 0); -void Sender_ctor(Sender *self, Reactor *parent, Environment *env) { +void Sender_ctor(Sender *self, Reactor *parent, Environment *env, Connection** conn_out, size_t conn_out_num) { self->_reactions[0] = (Reaction *)&self->reaction; self->_triggers[0] = (Trigger *)&self->timer; Reactor_ctor(&self->super, "Sender", env, parent, NULL, 0, self->_reactions, 1, self->_triggers, 1); Sender_Reaction0_ctor(&self->reaction, &self->super); Timer1_ctor(&self->timer, &self->super); - Out_ctor(&self->out, &self->super); + Out_ctor(&self->out, &self->super, conn_out, conn_out_num); TIMER_REGISTER_EFFECT(self->timer, self->reaction); @@ -87,11 +87,12 @@ typedef struct { Conn1 conn; Reactor *_children[2]; + Connection *_conn_sender_out[1]; } Main; void Main_ctor(Main *self, Environment *env) { self->_children[0] = &self->sender.super; - Sender_ctor(&self->sender, &self->super, env); + Sender_ctor(&self->sender, &self->super, env, self->_conn_sender_out, 1); self->_children[1] = &self->receiver.super; Receiver_ctor(&self->receiver, &self->super, env); diff --git a/test/unit/port_test.c b/test/unit/port_test.c index 979be3a4..5c41702d 100644 --- a/test/unit/port_test.c +++ b/test/unit/port_test.c @@ -6,7 +6,7 @@ DEFINE_TIMER_STRUCT(Timer1, 1) DEFINE_TIMER_CTOR_FIXED(Timer1, 1, 0, SEC(1)) DEFINE_REACTION_STRUCT(Sender, 0, 0) DEFINE_OUTPUT_PORT_STRUCT(Out, 1, 1) -DEFINE_OUTPUT_PORT_CTOR(Out, 1, 1) +DEFINE_OUTPUT_PORT_CTOR(Out, 1) typedef struct { Reactor super; @@ -27,13 +27,13 @@ DEFINE_REACTION_BODY(Sender, 0) { } DEFINE_REACTION_CTOR(Sender, 0) -void Sender_ctor(Sender *self, Reactor *parent, Environment *env) { +void Sender_ctor(Sender *self, Reactor *parent, Environment *env, Connection** conn_out, size_t conn_num) { self->_reactions[0] = (Reaction *)&self->reaction; self->_triggers[0] = (Trigger *)&self->timer; Reactor_ctor(&self->super, "Sender", env, parent, NULL, 0, self->_reactions, 1, self->_triggers, 1); Sender_Reaction0_ctor(&self->reaction, &self->super); Timer1_ctor(&self->timer, &self->super); - Out_ctor(&self->out, &self->super); + Out_ctor(&self->out, &self->super, conn_out, conn_num); TIMER_REGISTER_EFFECT(self->timer, self->reaction); OUTPUT_REGISTER_SOURCE(self->out, self->reaction); } @@ -85,11 +85,12 @@ typedef struct { Conn1 conn; Reactor *_children[2]; + Connection *_conn_sender_out[1]; } Main; void Main_ctor(Main *self, Environment *env) { self->_children[0] = &self->sender.super; - Sender_ctor(&self->sender, &self->super, env); + Sender_ctor(&self->sender, &self->super, env, self->_conn_sender_out, 1); self->_children[1] = &self->receiver.super; Receiver_ctor(&self->receiver, &self->super, env);