virtual void receive(packet payload) { m_last_packet = payload; m_new_packet = true; if (m_decoder->is_complete()) { std::string counter_id = node_id()+"_waste_from_"+payload.get_sender(); ++m_counter[counter_id]; } else { std::copy(payload.data_begin(), payload.data_end(), &m_decode_buffer[0]); uint32_t rank = m_decoder->rank(); m_decoder->read_payload(&m_decode_buffer[0]); if (rank < m_decoder->rank()) { std::string counter_id = node_id()+"_innovative_from_"+payload.get_sender(); ++m_counter[counter_id]; } else { std::string counter_id = node_id()+"_linear_dept_from_"+payload.get_sender(); ++m_counter[counter_id]; } } }
/// Receives a payload virtual void receive(packet payload) { for(uint32_t j = 0; j < receiver_count(); ++j) { std::string recv_id = get_receiver(j)->node_id(); std::string src_id = payload.get_sender(); // If true we drop if(m_channel_condition->generate()) { ++m_counter[node_id()+"_"+src_id+"_to_"+recv_id+"_dropped"]; } else { ++m_counter[node_id()+"_"+src_id+"_to_"+recv_id+"_ok"]; // Deliver packet to receiver j forward(j, payload); } } }