[Positioning] Include algorithm name in results

This commit is contained in:
Matteo Cypriani 2011-03-31 19:42:35 +02:00
parent 670dfdc867
commit 4752198ce7
14 changed files with 44 additions and 22 deletions

View File

@ -26,8 +26,6 @@
normaux.
- Positioning
° Afficher le nom de chaque algorithme lors de la sortie d'un
résultat.
° Pour une requête, la sortie des résultats de tous les algos
devrait se faire simultanément sur le medium de sortie, ce qui
permettrait par exemple de créer un tableau pour l'affichage CSV

View File

@ -5,5 +5,5 @@
Result CartographyAlgorithm::compute(const Request &request)
{
Point3D position(select_point(request)) ;
return Result(&request, position) ;
return Result(&request, position, name) ;
}

View File

@ -10,7 +10,7 @@ protected:
float friis_index(const AccessPoint *const ap) const ;
public:
FBCM(void) {}
FBCM(void): PositioningAlgorithm("FBCM") {}
~FBCM(void) {}
float estimate_distance(const Measurement &measurement) ;

View File

@ -12,7 +12,7 @@ Result FRBHMBasic::compute(const Request &_request)
compute_ap_distance_circles() ;
Point3D position(multilaterate_2d(closest_in_ss->get_z())) ;
return Result(request, position) ;
return Result(request, position, name) ;
}

View File

@ -13,7 +13,8 @@ protected:
float friis_index(const AccessPoint *const ap) const ;
public:
FRBHMBasic(void): closest_in_ss(NULL) {}
FRBHMBasic(void):
PositioningAlgorithm("FRBHMBasic"), closest_in_ss(NULL) {}
~FRBHMBasic(void) {}
/** @name Operations */

View File

@ -7,7 +7,7 @@
class InterlinkNetworks: public MultilaterationAlgorithm
{
public:
InterlinkNetworks(void) {}
InterlinkNetworks(void): PositioningAlgorithm("InterlinkNetworks") {}
~InterlinkNetworks(void) {}
float estimate_distance(const Measurement &measurement) ;

View File

@ -58,7 +58,7 @@ Result MultilaterationAlgorithm::compute(const Request &_request)
compute_ap_distance_circles() ;
Point3D position(multilaterate()) ;
return Result(request, position) ;
return Result(request, position, name) ;
}

View File

@ -27,6 +27,8 @@ const string OutputCSV::result_to_csv(const Result &result)
else
csv_line << ";;;" ;
csv_line << ';' << result.get_algorithm() ;
Point3D position = result.get_position() ;
csv_line
<< ';' << position.get_x()

View File

@ -7,8 +7,13 @@
/// Super-class of all positioning algorithms
class PositioningAlgorithm
{
protected:
/// Name of the algorithm
const std::string name ;
public:
PositioningAlgorithm(void) {}
PositioningAlgorithm(const std::string _name = "UnknownAlgorithm"):
name(_name) {}
virtual ~PositioningAlgorithm(void) {}
virtual Result compute(const Request &request) = 0 ;

View File

@ -13,7 +13,7 @@
class RADAR: public CartographyAlgorithm
{
public:
RADAR(void) {}
RADAR(void): PositioningAlgorithm("RADAR") {}
~RADAR(void) {}
const ReferencePoint& select_point(const Request &request) ;

View File

@ -14,8 +14,8 @@ Result RealPosition::compute(const Request &request)
Point3D *coordinates =
static_cast<Point3D*>(
calibration_request->get_reference_point()) ;
return Result(&request, *coordinates) ;
return Result(&request, *coordinates, name) ;
}
return Result(&request) ;
return Result(&request, name) ;
}

View File

@ -11,6 +11,8 @@
class RealPosition: public PositioningAlgorithm
{
public:
RealPosition(void): PositioningAlgorithm("RealPosition") {}
Result compute(const Request &request) ;
} ;

View File

@ -11,6 +11,7 @@ const Result& Result::operator=(const Result &source)
if (this == &source)
return *this ;
algorithm = source.algorithm ;
position = source.position ;
request = source.request ;
@ -21,6 +22,7 @@ const Result& Result::operator=(const Result &source)
bool Result::operator==(const Result &source) const
{
return
algorithm == source.algorithm &&
position == source.position &&
request == source.request ;
}
@ -30,12 +32,11 @@ bool Result::operator==(const Result &source) const
std::ostream& operator<<(std::ostream &os, const Result &r)
{
if (r.request == NULL)
os << "For an unknown request, the result is: " ;
os << "For an unknown request, the " ;
else
os
<< "For the following request: "
<< *(r.request)
<< "\nThe result is: " ;
os << r.position ;
os << "For the following request: " << *(r.request) << "\nThe " ;
os
<< "result of the algorithm " << r.algorithm
<< " is: " << r.position ;
return os ;
}

View File

@ -5,22 +5,29 @@ class Request ;
#include "point3d.hh"
#include <string>
/// Represents a result computed by a positioning algorithm
class Result
{
protected:
Point3D position ;
Request *request ;
std::string algorithm ;
public:
Result(const Request *_request = NULL):
request(const_cast<Request*>(_request)) {}
Result(const Request *_request, const Point3D &_position):
position(_position), request(const_cast<Request*>(_request)) {}
Result(const Request *_request = NULL,
const std::string &_algorithm = "UnknownAlgorithm"):
request(const_cast<Request*>(_request)), algorithm(_algorithm) {}
Result(const Request *_request, const Point3D &_position,
const std::string &_algorithm):
position(_position), request(const_cast<Request*>(_request)),
algorithm(_algorithm) {}
~Result(void) {}
/** @name Read accessors */
//@{
const std::string& get_algorithm(void) const ;
const Point3D& get_position(void) const ;
const Request* get_request(void) const ;
//@}
@ -41,6 +48,12 @@ public:
/* *** Read accessors *** */
inline const std::string& Result::get_algorithm() const
{
return algorithm ;
}
inline const Point3D& Result::get_position() const
{
return position ;