diff --git a/owlps-positioning/Makefile b/owlps-positioning/Makefile index d8fa05c..247ea3c 100644 --- a/owlps-positioning/Makefile +++ b/owlps-positioning/Makefile @@ -1,4 +1,4 @@ -.PHONY : all obj doc clean purge install uninstall style +.PHONY : all obj doc clean purge install uninstall style check DOXYGEN_DIR = doc DOXYFILE = Doxyfile @@ -14,6 +14,7 @@ CP = cp -v # Autres outils STYLE = astyle --style=gnu +CPPCHECK = cppcheck --enable=all DOXYGEN = doxygen GXX = g++-4.4 @@ -81,3 +82,6 @@ uninstall: style: @$(STYLE) $(OBJ:.o=.hh) $(OBJ:.o=.cc) inputmedium.hh + +check: + @$(CPPCHECK) $(OBJ:.o=.hh) $(OBJ:.o=.cc) inputmedium.hh diff --git a/owlps-positioning/TODO b/owlps-positioning/TODO index f9d1ab2..e47bf7e 100644 --- a/owlps-positioning/TODO +++ b/owlps-positioning/TODO @@ -1,7 +1,5 @@ - InputCSV - ° Lancer une exception si l'ouverture du fichier d'entrée échoue. - ° Expliquer ce que fait get_next_request(). ° Différencier une requête normale d'une requête de calibration, en utilisant les champs de direction. ° Lire la direction en tant qu'entier plutôt que float ? @@ -32,16 +30,9 @@ les Waypoint. Si oui, faut-il aussi les enlever des listes dans Stock ? (Pour l'instant ils ne sont pas dans Stock.) -- CalibrationMeasurement - Vérifier que l'operator<<() est utile (puisqu'il y a celui de - Measurement). - - Request Constructeur par recopie, operator==(), etc. -- Area - operator=() - - AccessPoint Attribut float friis_index ? diff --git a/owlps-positioning/area.cc b/owlps-positioning/area.cc index 72f1a5e..671cca0 100644 --- a/owlps-positioning/area.cc +++ b/owlps-positioning/area.cc @@ -12,7 +12,7 @@ Area::Area(const Building *_building, const string &_name, const float &_x1, const float &_y1, const float &_z1, const float &_x2, const float &_y2, const float &_z2) { - building = (Building *) _building ; + building = const_cast(_building) ; name = _name ; float x_min, x_max, y_min, y_max, z_min, z_max ; @@ -106,6 +106,20 @@ bool Area::contains_point(const Point3D &p) const /* *** Operators *** */ +const Area& Area::operator=(const Area &a) +{ + if (this == &a) + return *this ; + + building = a.building ; + name = a.name ; + p_min = a.p_min ; + p_max = a.p_max ; + + return *this ; +} + + bool Area::operator==(const Area &a) const { if (this == &a) diff --git a/owlps-positioning/area.hh b/owlps-positioning/area.hh index 0b3f281..c3e7bba 100644 --- a/owlps-positioning/area.hh +++ b/owlps-positioning/area.hh @@ -69,6 +69,7 @@ public: /** @name Operators */ //@{ + const Area& operator=(const Area &a) ; bool operator==(const Area &a) const ; bool operator!=(const Area &a) const ; //@} @@ -112,7 +113,7 @@ inline const Point3D& Area::get_p_max() const inline void Area::set_building(const Building *_building) { - building = (Building *) _building ; + building = const_cast(_building) ; } diff --git a/owlps-positioning/building.hh b/owlps-positioning/building.hh index b020989..ec782c7 100644 --- a/owlps-positioning/building.hh +++ b/owlps-positioning/building.hh @@ -95,7 +95,7 @@ inline void Building::set_name(const std::string &_name) inline void Building::add_area(const Area *a) { if (a != NULL) - areas.push_back((Area *) a) ; + areas.push_back(const_cast(a)) ; } @@ -106,7 +106,7 @@ inline void Building::add_area(const Area *a) inline void Building::add_waypoint(const Waypoint *wp) { if (wp != NULL) - waypoints.push_back((Waypoint *) wp) ; + waypoints.push_back(const_cast(wp)) ; } diff --git a/owlps-positioning/calibrationmeasurement.cc b/owlps-positioning/calibrationmeasurement.cc index af8359c..31a0871 100644 --- a/owlps-positioning/calibrationmeasurement.cc +++ b/owlps-positioning/calibrationmeasurement.cc @@ -27,19 +27,3 @@ bool CalibrationMeasurement::operator==(const CalibrationMeasurement &cm) this->Measurement::operator==(cm) && reference_point == cm.reference_point ; } - - - -/** - * Because a ReferencePoint displays its list of CalibrationMeasurement, - * the ReferencePoint associated with a CalibrationMeasurement is not - * displayed. Therefore, this is a simple mapping to - * operator<<(std::ostream&, const Measurement&) - */ -std::ostream &operator<<(std::ostream &os, const CalibrationMeasurement &cm) -{ - os - << (Measurement) cm ; - - return os ; -} diff --git a/owlps-positioning/calibrationmeasurement.hh b/owlps-positioning/calibrationmeasurement.hh index 7cbd004..3f7b342 100644 --- a/owlps-positioning/calibrationmeasurement.hh +++ b/owlps-positioning/calibrationmeasurement.hh @@ -46,10 +46,6 @@ public: bool operator==(const CalibrationMeasurement &cm) ; bool operator!=(const CalibrationMeasurement &cm) ; //@} - - /// Displays a CalibrationMeasurement - friend std::ostream &operator<<(std::ostream &os, - const CalibrationMeasurement &cm) ; } ; @@ -70,7 +66,7 @@ inline ReferencePoint* CalibrationMeasurement::get_reference_point(void) const inline void CalibrationMeasurement::set_reference_point( const ReferencePoint *_rp) { - reference_point = (ReferencePoint *) _rp ; + reference_point = const_cast(_rp) ; } diff --git a/owlps-positioning/inputcsv.cc b/owlps-positioning/inputcsv.cc index 19b4490..b01411e 100644 --- a/owlps-positioning/inputcsv.cc +++ b/owlps-positioning/inputcsv.cc @@ -23,7 +23,7 @@ using namespace boost ; /** * Prepares the InputCSV to read a CSV file. * @param filename The name of the file to open. - * @throw FIXME if the file cannot be opened. + * @throw runtime_error if the file cannot be opened. */ InputCSV::InputCSV(const string &filename) { @@ -31,9 +31,8 @@ InputCSV::InputCSV(const string &filename) input_file.open(input_file_name.c_str()) ; if (! input_file) - cerr - << "InputCSV::InputCSV(): Error opening input file « " - << input_file_name << " »!" << endl ; + throw runtime_error("Error opening input file « " + + input_file_name + " »!") ; } @@ -42,12 +41,25 @@ InputCSV::InputCSV(const string &filename) /** - * FIXME Detailed description comming soon… + * This function reads the next Request in the CSV input file. Blank + * lines and lines containing only spaces are skipped. + * + * #input_file should be opened before proceeding requests; otherwise, + * #current_request is \link Request::clear() cleared\endlink and a + * blank Request is returned. The file must be valid, + * semicolon-separated (\em not comma-separated). + * + * @return The read Request, or a blank Request in case of error (file + * not opened, end of file, invalid field or wrong number of fields in + * the line). */ const Request& InputCSV::get_next_request() { if (! input_file) - return current_request ; + { + current_request.clear() ; + return current_request ; + } string line ; @@ -82,8 +94,14 @@ const Request& InputCSV::get_next_request() } // If the mobile did not exist, we create it - if (Stock::get_mobile(*ti).get_mac_addr().size() == 0) - Stock::getw_mobile(*ti).set_mac_addr(*ti) ; + try + { + Stock::get_mobile(*ti) ; + } + catch (out_of_range e) + { + Stock::getw_mobile(*ti).set_mac_addr(*ti) ; + } current_request.set_mobile(&Stock::get_mobile(*ti)) ; // Read Timestamp field @@ -168,8 +186,14 @@ const Request& InputCSV::get_next_request() } // If the AP did not exist, we create it - if (Stock::get_ap(mac_ap).get_mac_addr().size() == 0) - Stock::getw_ap(mac_ap).set_mac_addr(mac_ap) ; + try + { + Stock::get_ap(mac_ap) ; + } + catch (out_of_range e) + { + Stock::getw_ap(mac_ap).set_mac_addr(mac_ap) ; + } measurements[mac_ap].set_ap(&Stock::get_ap(mac_ap)) ; // Adding value diff --git a/owlps-positioning/measurement.cc b/owlps-positioning/measurement.cc index 8131f9d..94b17bd 100644 --- a/owlps-positioning/measurement.cc +++ b/owlps-positioning/measurement.cc @@ -11,7 +11,7 @@ using namespace std ; Measurement::Measurement(const AccessPoint *_ap, const vector &_ss_list) { - ap = (AccessPoint *) _ap ; + ap = const_cast(_ap) ; ss_list = _ss_list ; ss_list.reserve(10) ; update_average_ss() ; diff --git a/owlps-positioning/measurement.hh b/owlps-positioning/measurement.hh index 11ce1e1..427dfa9 100644 --- a/owlps-positioning/measurement.hh +++ b/owlps-positioning/measurement.hh @@ -101,7 +101,7 @@ inline float Measurement::get_average_ss() const inline void Measurement::set_ap(const AccessPoint *_ap) { - ap = (AccessPoint *) _ap ; + ap = const_cast(_ap) ; } diff --git a/owlps-positioning/referencepoint.hh b/owlps-positioning/referencepoint.hh index 11547b9..4453089 100644 --- a/owlps-positioning/referencepoint.hh +++ b/owlps-positioning/referencepoint.hh @@ -80,7 +80,7 @@ std::vector& ReferencePoint::get_measurements() const inline void ReferencePoint::add_measurement(const CalibrationMeasurement *cm) { if (cm != NULL) - measurements.push_back((CalibrationMeasurement *) cm) ; + measurements.push_back(const_cast(cm)) ; } diff --git a/owlps-positioning/request.cc b/owlps-positioning/request.cc index 02e4a85..c70da92 100644 --- a/owlps-positioning/request.cc +++ b/owlps-positioning/request.cc @@ -30,7 +30,7 @@ Request::Request(const struct timespec &_timestamp, Request::Request(const Mobile *_mobile, const struct timespec &_timestamp, const unordered_map &_measurements) { - mobile = (Mobile*) _mobile ; + mobile = const_cast(_mobile) ; timestamp = _timestamp ; measurements = _measurements ; } diff --git a/owlps-positioning/request.hh b/owlps-positioning/request.hh index 96051c1..e5641d7 100644 --- a/owlps-positioning/request.hh +++ b/owlps-positioning/request.hh @@ -90,7 +90,7 @@ inline const struct timespec& Request::get_timestamp() const inline void Request::set_mobile(const Mobile *_mobile) { - mobile = (Mobile *) _mobile ; + mobile = const_cast(_mobile) ; } diff --git a/owlps-positioning/waypoint.cc b/owlps-positioning/waypoint.cc index f38b083..4d776f7 100644 --- a/owlps-positioning/waypoint.cc +++ b/owlps-positioning/waypoint.cc @@ -16,7 +16,7 @@ using namespace std ; Waypoint::Waypoint(const Building *_b, const Point3D &p): Point3D(p) { if (_b != NULL) - buildings.push_back((Building *) _b) ; + buildings.push_back(const_cast(_b)) ; } @@ -32,7 +32,7 @@ Waypoint::Waypoint(const Building *_b, ): Point3D(_x, _y, _z) { if (_b != NULL) - buildings.push_back((Building *) _b) ; + buildings.push_back(const_cast(_b)) ; } diff --git a/owlps-positioning/waypoint.hh b/owlps-positioning/waypoint.hh index 740282c..baf62ff 100644 --- a/owlps-positioning/waypoint.hh +++ b/owlps-positioning/waypoint.hh @@ -106,7 +106,7 @@ inline const std::vector& Waypoint::get_buildings() const inline void Waypoint::add_building(const Building *_b) { if (_b != NULL) - buildings.push_back((Building *) _b) ; + buildings.push_back(const_cast(_b)) ; }