[Positioning] InputDataReader: read waypoints

This commit is contained in:
Matteo Cypriani 2010-04-20 16:18:27 +02:00
parent f85c7113ab
commit 428639b814
4 changed files with 129 additions and 24 deletions

View File

@ -103,8 +103,7 @@ const Request& Input::get_next_request() const
{ {
if (! eof()) if (! eof())
{ {
const Request &request = medium->get_next_request() ; medium->get_next_request() ;
add_request_to_stock(request) ;
log_current_request() ; log_current_request() ;
} }
@ -120,23 +119,6 @@ bool Input::eof() const
} }
void Input::add_request_to_stock(const Request &request) const
{
// For the moment we add only the CalibrationRequests to the Stock
const CalibrationRequest *calibration_request =
dynamic_cast<const CalibrationRequest*>(&request) ;
if (calibration_request == NULL)
return ;
// Add request to the Stock
const CalibrationRequest &stock_calibration_request =
Stock::find_create_calibration_request(*calibration_request) ;
// Add the request to the request list of its reference point
stock_calibration_request.reference_point_backward_link() ;
}
void Input::log_current_request() const void Input::log_current_request() const
{ {
for (vector<InputLogMedium*>::const_iterator i = log_media.begin() ; for (vector<InputLogMedium*>::const_iterator i = log_media.begin() ;

View File

@ -1,7 +1,12 @@
#include "inputdatareader.hh" #include "inputdatareader.hh"
#include "topologyreadercsv.hh"
#include "inputcsv.hh"
#include "calibrationrequest.hh"
#include "configuration.hh" #include "configuration.hh"
#include "posexcept.hh" #include "posexcept.hh"
#include "topologyreadercsv.hh" #include "stock.hh"
#include <iostream>
using namespace std ; using namespace std ;
@ -12,19 +17,36 @@ using namespace std ;
InputDataReader::InputDataReader() InputDataReader::InputDataReader()
{ {
initialise_topology_media() ; read_topology() ;
read_reference_points() ;
}
InputDataReader::~InputDataReader()
{
for (vector<InputMedium*>::const_iterator i =
reference_points_media.begin() ;
i != reference_points_media.end() ; ++i)
delete *i ;
reference_points_media.clear() ;
} }
/* *** Operations *** */ /* *** Topology *** */
void InputDataReader::initialise_topology_media() void InputDataReader::read_topology()
{ {
if (! Configuration::is_configured("data-input.topology-medium")) if (! Configuration::is_configured("data-input.topology-medium"))
return ; return ;
initialise_topology_media() ;
}
void InputDataReader::initialise_topology_media()
{
const vector<string> &media_names = const vector<string> &media_names =
Configuration::string_vector_value("data-input.topology-medium") ; Configuration::string_vector_value("data-input.topology-medium") ;
@ -56,3 +78,82 @@ void InputDataReader::initialise_topology_csv()
Configuration::string_value("data-input.areas-csv-file"), Configuration::string_value("data-input.areas-csv-file"),
Configuration::string_value("data-input.waypoints-csv-file")) ; Configuration::string_value("data-input.waypoints-csv-file")) ;
} }
/* *** Reference points *** */
void InputDataReader::read_reference_points()
{
if (! Configuration::is_configured("data-input.reference-points-medium"))
return ;
initialise_reference_points_media() ;
read_from_reference_points_media() ;
}
void InputDataReader::initialise_reference_points_media()
{
const vector<string> &media_names =
Configuration::string_vector_value("data-input.reference-points-medium") ;
for (vector<string>::const_iterator i = media_names.begin() ;
i != media_names.end() ; ++i)
{
if (*i == "CSV")
initialise_reference_points_csv() ;
else
throw bad_configuration(
"Reference points input medium type unknown « "+ *i +" »") ;
}
}
void InputDataReader::initialise_reference_points_csv()
{
if (! Configuration::is_configured("data-input.reference-points-csv-file"))
throw missing_configuration(
"No reference points input CSV file is configured") ;
reference_points_media.push_back(
new InputCSV(
Configuration::string_value("data-input.reference-points-csv-file"))) ;
}
void InputDataReader::read_from_reference_points_media()
{
for (vector<InputMedium*>::const_iterator i =
reference_points_media.begin() ;
i != reference_points_media.end() ; ++i)
{
while (! (*i)->eof())
{
Request &request =
const_cast<Request&>((*i)->get_next_request()) ;
if (! request)
continue ;
CalibrationRequest *calibration_request =
dynamic_cast<CalibrationRequest*>(&request) ;
if (calibration_request == NULL)
cerr << "Warning! Invalid calibration request at line "
<< (*i)->get_current_line_nb() << endl ;
else
stock_calibration_request(*calibration_request) ;
}
}
}
void InputDataReader::
stock_calibration_request(const CalibrationRequest &request) const
{
const CalibrationRequest &calibration_request =
Stock::find_create_calibration_request(request) ;
calibration_request.reference_point_backward_link() ;
}

View File

@ -1,17 +1,32 @@
#ifndef _OWLPS_POSITIONING_INPUTDATAREADER_HH_ #ifndef _OWLPS_POSITIONING_INPUTDATAREADER_HH_
#define _OWLPS_POSITIONING_INPUTDATAREADER_HH_ #define _OWLPS_POSITIONING_INPUTDATAREADER_HH_
class InputMedium ;
class CalibrationRequest ;
#include <vector>
/// Read input data using parameters in Configuration /// Read input data using parameters in Configuration
class InputDataReader class InputDataReader
{ {
protected: protected:
std::vector<InputMedium*> reference_points_media ;
void read_topology(void) ;
void initialise_topology_media(void) ; void initialise_topology_media(void) ;
void initialise_topology_csv(void) ; void initialise_topology_csv(void) ;
void read_reference_points(void) ;
void initialise_reference_points_media(void) ;
void initialise_reference_points_csv(void) ;
void read_from_reference_points_media(void) ;
void stock_calibration_request(
const CalibrationRequest &request) const ;
public: public:
InputDataReader(void) ; InputDataReader(void) ;
~InputDataReader(void) {} ~InputDataReader(void) ;
} ; } ;
#endif // _OWLPS_POSITIONING_INPUTDATAREADER_HH_ #endif // _OWLPS_POSITIONING_INPUTDATAREADER_HH_

View File

@ -119,6 +119,13 @@ data-input.topology-medium = CSV).")
("data-input.waypoints-csv-file,W", po::value<string>(), ("data-input.waypoints-csv-file,W", po::value<string>(),
"CSV file to use for waypoints input (when \ "CSV file to use for waypoints input (when \
data-input.topology-medium = CSV).") data-input.topology-medium = CSV).")
("data-input.reference-points-medium,R", po::value< vector<string> >()
->composing(),
"Medium from which reference points are read. You can specify this \
option more than once. Allowed: CSV.")
("data-input.reference-points-csv-file", po::value<string>(),
"CSV file to use for reference points input (when \
data-input.reference-points-medium = CSV).")
; ;
file_options->add(options) ; file_options->add(options) ;