From 0491fe0a62d23fc688b8e754dc01e195d8aa43a3 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Mon, 20 Jun 2011 11:43:17 +0200 Subject: [PATCH] [Positioning] Input: del RP's requests on new CR When a new calibration request is received, all the calibration requests of the corresponding reference point are now cleared prior to add the new request. We should probably use a timeout to delete only the old calibration requests and keep the recent ones. --- owlps-positioning/src/calibrationrequest.cc | 6 ++++++ owlps-positioning/src/calibrationrequest.hh | 2 ++ owlps-positioning/src/input.cc | 5 ++++- owlps-positioning/src/referencepoint.cc | 14 ++++++++++++++ owlps-positioning/src/referencepoint.hh | 2 ++ owlps-positioning/src/stock.cc | 7 +++++++ owlps-positioning/src/stock.hh | 3 +++ 7 files changed, 38 insertions(+), 1 deletion(-) diff --git a/owlps-positioning/src/calibrationrequest.cc b/owlps-positioning/src/calibrationrequest.cc index cb33471..0a37080 100644 --- a/owlps-positioning/src/calibrationrequest.cc +++ b/owlps-positioning/src/calibrationrequest.cc @@ -30,6 +30,12 @@ CalibrationRequest(const Request &source, /* *** Write accessors *** */ +void CalibrationRequest::reference_point_delete_requests() const +{ + reference_point->delete_requests() ; +} + + void CalibrationRequest::reference_point_backward_link() const { reference_point->add_request(this) ; diff --git a/owlps-positioning/src/calibrationrequest.hh b/owlps-positioning/src/calibrationrequest.hh index 68a378a..0f0147f 100644 --- a/owlps-positioning/src/calibrationrequest.hh +++ b/owlps-positioning/src/calibrationrequest.hh @@ -41,6 +41,8 @@ public: void set_reference_point(const ReferencePoint *_rp) ; /// Adds the CalibrationRequest to the #reference_point list of requests void reference_point_backward_link(void) const ; + /// Deletes all the requests of #reference_point + void reference_point_delete_requests(void) const ; void clear(void) ; //@} diff --git a/owlps-positioning/src/input.cc b/owlps-positioning/src/input.cc index 3c46dea..e736ab3 100644 --- a/owlps-positioning/src/input.cc +++ b/owlps-positioning/src/input.cc @@ -127,7 +127,10 @@ const Request& Input::get_next_request() const dynamic_cast( const_cast(&request)) ; if (calibration_request != NULL) - Stock::store_calibration_request(*calibration_request) ; + { + calibration_request->reference_point_delete_requests() ; + Stock::store_calibration_request(*calibration_request) ; + } } } diff --git a/owlps-positioning/src/referencepoint.cc b/owlps-positioning/src/referencepoint.cc index 9a03900..c55babe 100644 --- a/owlps-positioning/src/referencepoint.cc +++ b/owlps-positioning/src/referencepoint.cc @@ -107,6 +107,20 @@ get_requests(const string &mac_transmitter) const } +/** + * Note that the requests pointed by the elements of #requests are + * actually deleted from the Stock. + */ +void ReferencePoint::delete_requests() +{ + for (vector::iterator i = requests.begin() ; + i != requests.end() ; ++i) + Stock::delete_calibration_request(**i) ; + + requests.clear() ; +} + + /* *** Operations *** */ diff --git a/owlps-positioning/src/referencepoint.hh b/owlps-positioning/src/referencepoint.hh index 0f8e232..efd26a8 100644 --- a/owlps-positioning/src/referencepoint.hh +++ b/owlps-positioning/src/referencepoint.hh @@ -55,6 +55,8 @@ public: //@{ /// Adds a Request to the \link #requests request list\endlink void add_request(const CalibrationRequest *cm) ; + /// Deletes all the requests contained in #requests + void delete_requests(void) ; //@} /** @name Operations */ diff --git a/owlps-positioning/src/stock.cc b/owlps-positioning/src/stock.cc index 24be46c..ca3239f 100644 --- a/owlps-positioning/src/stock.cc +++ b/owlps-positioning/src/stock.cc @@ -323,6 +323,13 @@ store_calibration_request(const CalibrationRequest &request) } +void Stock:: +delete_calibration_request(const CalibrationRequest &request) +{ + calibration_requests.erase(request) ; +} + + const CalibrationRequest& Stock:: find_create_calibration_request(const CalibrationRequest &request) { diff --git a/owlps-positioning/src/stock.hh b/owlps-positioning/src/stock.hh index 5f3629d..b7de8c1 100644 --- a/owlps-positioning/src/stock.hh +++ b/owlps-positioning/src/stock.hh @@ -121,6 +121,9 @@ public: /// not exist, and links it to its reference point static void store_calibration_request( const CalibrationRequest &request) ; + /// Deletes a CalibrationRequest + static void delete_calibration_request( + const CalibrationRequest &request) ; /// Searches for a CalibrationRequest and adds it if it does not exist static const CalibrationRequest& find_create_calibration_request(const CalibrationRequest &request) ;