#include "measurement.hh" /*** Constructeurs ***/ Measurement::Measurement(const Mobile *_mobile, const AccessPoint *_ap, const vector &_ss_list) { mobile = (Mobile *) _mobile ; ap = (AccessPoint *) _ap ; ss_list = _ss_list ; update_average_ss() ; } Measurement::Measurement(const Measurement &m) { mobile = m.mobile ; ap = m.ap ; ss_list = m.ss_list ; average_ss = m.average_ss ; } Measurement::~Measurement() { ss_list.clear() ; } /*** Accesseurs lecture ***/ Mobile* Measurement::get_mobile() const { return mobile ; } AccessPoint* Measurement::get_ap() const { return ap ; } vector Measurement::get_ss_list() const { return ss_list ; } float Measurement::get_average_ss() const { return average_ss ; } /* float Measurement::get_ss_square_distance(const float &ss) const { return ((ss - average_ss) * (ss - average_ss)) ; } */ /*** Accesseurs écriture ***/ void Measurement::update_average_ss() { average_ss = 0 ; for (int i=0 ; i < ss_list.size() ; i++) { float ss_mwatts = pow(10, (float) ss_list[i] / 10.0) + (ss_list.size() * pow(10, average_ss / 10.0)) ; average_ss = 10 * log10(ss_mwatts / ss_list.size()) ; } } void Measurement::set_mobile(const Mobile *_mobile) { mobile = (Mobile *) _mobile ; } void Measurement::set_ap(const AccessPoint *_ap) { ap = (AccessPoint *) _ap ; } void Measurement::add_ss(const int &ss) { float ss_mwatts = pow(10, (float) ss / 10.0) + (ss_list.size() * pow(10, average_ss / 10.0)) ; ss_list.push_back(ss) ; average_ss = 10 * log10(ss_mwatts / ss_list.size()) ; } /*** Opérateurs ***/ Measurement Measurement::operator=(const Measurement &m) { if (this == &m) return *this ; mobile = m.mobile ; ap = m.ap ; ss_list = m.ss_list ; average_ss = m.average_ss ; return *this ; } bool Measurement::operator==(const Measurement &m) { if (this == &m) return true ; return mobile == m.mobile && ap == m.ap && ss_list == m.ss_list && average_ss == m.average_ss ; } bool Measurement::operator!=(const Measurement &m) { return !(*this == m) ; } ostream &operator<<(ostream &os, const Measurement &m) { unsigned int i; os << m.mobile->get_mac_addr() << "->" << m.ap->get_mac_addr() << ": " ; if (m.ss_list.size() == 0) os << "No values"; else for (i = 0 ; i < m.ss_list.size() ; i++) { os << m.ss_list[i]; if (i < m.ss_list.size() - 1) os << ";"; } os << " [AVG=" << m.average_ss << "]"; return os; }