owlps/owlps-positioning/measurement.cc

139 lines
2.3 KiB
C++

#include "measurement.hh"
using namespace std ;
/*** Constructeurs ***/
Measurement::Measurement(const AccessPoint *_ap,
const vector<int> &_ss_list)
{
ap = (AccessPoint *) _ap ;
ss_list = _ss_list ;
ss_list.reserve(10) ;
update_average_ss() ;
}
Measurement::Measurement(const Measurement &m)
{
ap = m.ap ;
ss_list = m.ss_list ;
average_ss = m.average_ss ;
}
/*
* Destructor
* ap and mobile are not deleted.
*/
Measurement::~Measurement()
{
ss_list.clear() ;
}
/*** Accesseurs écriture ***/
void Measurement::update_average_ss()
{
average_ss = 0 ;
for (vector<int>::iterator i = ss_list.begin() ;
i != ss_list.end() ; i++)
{
float ss_mwatts =
pow(10, (float) *i / 10.0) +
(ss_list.size() * pow(10, average_ss / 10.0)) ;
average_ss = 10 * log10(ss_mwatts / ss_list.size()) ;
}
}
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()) ;
}
void Measurement::set_ss_list(const std::vector<int> &_ss_list)
{
ss_list = _ss_list ;
update_average_ss() ;
}
/*
* Reinitialises the Measurement
* ap and mobile are not deleted, only initialised at NULL.
*/
void Measurement::clear()
{
ss_list.clear() ;
average_ss = 0 ;
ap = NULL ;
}
/*** Opérateurs ***/
Measurement Measurement::operator=(const Measurement &m)
{
if (this == &m)
return *this ;
ap = m.ap ;
ss_list = m.ss_list ;
average_ss = m.average_ss ;
return *this ;
}
bool Measurement::operator==(const Measurement &m) const
{
if (this == &m)
return true ;
return
ap == m.ap &&
ss_list == m.ss_list &&
average_ss == m.average_ss ;
}
ostream &operator<<(ostream &os, const Measurement &m)
{
// MAC address
os
<< "AP: " << (m.ap != NULL ? m.ap->get_mac_addr() : "Unknown_AP")
<< ": " ;
// List of SS
if (m.ss_list.size() == 0)
os << "No values" ;
else
for (vector<int>::const_iterator i = m.ss_list.begin() ;
i != m.ss_list.end() ; i++)
{
os << *i ;
if (i != m.ss_list.end() - 1)
os << ";" ;
}
os << " [AVG=" << m.average_ss << "]" ;
return os ;
}