40 parameters_ok =
false;
54 it_assert(Delay >= 0,
"Packet_Channel::set_parameters(): ");
55 it_assert(Pr >= 0.0 && Pr <= 1.0,
"Packet_Channel::set_parameters(): ");
56 it_assert(Block_rate > 0,
"Packet_Channel::set_parameters(): ");
57 it_assert(Max_slots >= 0,
"Packet_Channel::set_parameters(): ");
60 block_time = 1.0 / Block_rate;
61 max_slots = Max_slots;
62 input.forward(
this, &Packet_Channel::handle_input);
63 nof_inputs.forward(
this, &Packet_Channel::handle_nof_inputs);
64 start.forward(
this, &Packet_Channel::handle_start);
66 explicit_errors =
false;
74 it_assert(parameters_ok,
"Packet_Channel::handle_input(): ");
75 it_assert(M != NULL,
"Packet_Channel::handle_input(): ");
76 if (explicit_errors) {
94 void Packet_Channel::block_rate_loop()
96 it_assert(parameters_ok,
"Packet_Channel::block_rate_loop(): ");
99 Event_Queue::add(
new Event<Packet_Channel>(
this, &Packet_Channel::block_rate_loop, block_time));
102 void Packet_Channel::handle_start(
const bool run)
104 it_assert(parameters_ok,
"Packet_Channel::handle_start(): ");
105 if (run && !keep_running)
106 Event_Queue::add(
new Event<Packet_Channel>(
this, &Packet_Channel::block_rate_loop, block_time));
110 void Packet_Channel::handle_nof_inputs(
const int Nof_ready_messages)
112 it_assert(Nof_ready_messages >= 0,
"Packet_Channel::handle_nof_inputs(): ");
117 L =
std::min(Nof_ready_messages, 1);
126 it_assert(
min(Lost) >= 0,
"Packet_Channel::set_errors(): ");
129 explicit_errors =
true;
139 parameters_ok =
false;
152 it_assert(Delay >= 0,
"ACK_Channel::set_parameters(): ");
153 it_assert(Pr >= 0.0 && Pr <= 1.0,
"ACK_Channel::set_parameters(): ");
156 input.forward(
this, &ACK_Channel::handle_input);
157 explicit_errors =
false;
160 parameters_ok =
true;
163 void ACK_Channel::handle_input(
ACK* M)
165 it_assert(parameters_ok,
"ACK_Channel::handle_input(): ");
166 it_assert(M != NULL,
"ACK_Channel::handle_input(): ");
167 if (explicit_errors) {
188 it_assert(
min(Lost) >= 0,
"ACK_Channel::set_errors(): ");
191 explicit_errors =
true;
Slot< Packet_Channel, int > nof_inputs
ADD DOCUMENTATION HERE.
ITPP_EXPORT int round_i(double x)
Round to nearest integer.
double Ttype
64-bit floating point time
Definition of a Packet channel class.
double randu(void)
Generates a random uniform (0,1) number.
Slot< Packet_Channel, Link_Packet * > input
ADD DOCUMENTATION HERE.
~Packet_Channel()
ADD DOCUMENTATION HERE.
ACK_Channel()
ADD DOCUMENTATION HERE.
#define it_assert(t, s)
Abort if t is not true.
Signal< Link_Packet * > output
ADD DOCUMENTATION HERE.
Minimum and maximum functions on vectors and matrices.
Slot< ACK_Channel, ACK * > input
ADD DOCUMENTATION HERE.
void set_parameters(const double Pr, const Ttype Delay, const double Block_rate, const int Max_slots)
ADD DOCUMENTATION HERE.
T min(const Vec< T > &in)
Minimum value of vector.
Packet_Channel()
ADD DOCUMENTATION HERE.
void set_errors(const ivec &Lost)
ADD DOCUMENTATION HERE.
Signal< int > input_request
ADD DOCUMENTATION HERE.
void set_errors(const ivec &Lost)
ADD DOCUMENTATION HERE.
Signal< void * > get_nof_inputs
ADD DOCUMENTATION HERE.
Signal< ACK * > output
ADD DOCUMENTATION HERE.
~ACK_Channel()
ADD DOCUMENTATION HERE.
Definition of classes for random number generators.
Slot< Packet_Channel, bool > start
ADD DOCUMENTATION HERE.
static void add(Base_Event *e)
Add event to Queue.
void set_parameters(const double Pr, const Ttype Delay)
ADD DOCUMENTATION HERE.