40 parameters_ok =
false;
55 it_assert(
Pr >= 0.0 &&
Pr <= 1.0,
"Packet_Channel::set_parameters(): ");
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(): ");
76 if (explicit_errors) {
94void 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));
102void 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));
110void Packet_Channel::handle_nof_inputs(
const int Nof_ready_messages)
112 it_assert(Nof_ready_messages >= 0,
"Packet_Channel::handle_nof_inputs(): ");
115 L = std::min(Nof_ready_messages,
round_i(
randu() * max_slots));
117 L = std::min(Nof_ready_messages, 1);
129 explicit_errors =
true;
139 parameters_ok =
false;
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;
163void ACK_Channel::handle_input(
ACK* M)
165 it_assert(parameters_ok,
"ACK_Channel::handle_input(): ");
167 if (explicit_errors) {
191 explicit_errors =
true;
void set_parameters(const double Pr, const Ttype Delay)
ADD DOCUMENTATION HERE.
ACK_Channel()
ADD DOCUMENTATION HERE.
Slot< ACK_Channel, ACK * > input
ADD DOCUMENTATION HERE.
~ACK_Channel()
ADD DOCUMENTATION HERE.
void set_errors(const ivec &Lost)
ADD DOCUMENTATION HERE.
Signal< ACK * > output
ADD DOCUMENTATION HERE.
int length() const
Returns the number of data elements in the array object.
static void add(Base_Event *e)
Add event to Queue.
Packet_Channel()
ADD DOCUMENTATION HERE.
Signal< int > input_request
ADD DOCUMENTATION HERE.
~Packet_Channel()
ADD DOCUMENTATION HERE.
Slot< Packet_Channel, Link_Packet * > input
ADD DOCUMENTATION HERE.
void set_errors(const ivec &Lost)
ADD DOCUMENTATION HERE.
void set_parameters(const double Pr, const Ttype Delay, const double Block_rate, const int Max_slots)
ADD DOCUMENTATION HERE.
Slot< Packet_Channel, int > nof_inputs
ADD DOCUMENTATION HERE.
Slot< Packet_Channel, bool > start
ADD DOCUMENTATION HERE.
Signal< Link_Packet * > output
ADD DOCUMENTATION HERE.
Signal< void * > get_nof_inputs
ADD DOCUMENTATION HERE.
#define it_assert(t, s)
Abort if t is not true.
T min(const Vec< T > &in)
Minimum value of vector.
double randu(void)
Generates a random uniform (0,1) number.
Minimum and maximum functions on vectors and matrices.
ITPP_EXPORT int round_i(double x)
Round to nearest integer.
double Ttype
64-bit floating point time
Definition of a Packet channel class.
Definition of classes for random number generators.