[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.
This commit is contained in:
Matteo Cypriani 2011-06-20 11:43:17 +02:00
parent b8bd2acf44
commit 0491fe0a62
7 changed files with 38 additions and 1 deletions

View File

@ -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) ;

View File

@ -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) ;
//@}

View File

@ -127,7 +127,10 @@ const Request& Input::get_next_request() const
dynamic_cast<CalibrationRequest*>(
const_cast<Request*>(&request)) ;
if (calibration_request != NULL)
Stock::store_calibration_request(*calibration_request) ;
{
calibration_request->reference_point_delete_requests() ;
Stock::store_calibration_request(*calibration_request) ;
}
}
}

View File

@ -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<CalibrationRequest*>::iterator i = requests.begin() ;
i != requests.end() ; ++i)
Stock::delete_calibration_request(**i) ;
requests.clear() ;
}
/* *** Operations *** */

View File

@ -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 */

View File

@ -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)
{

View File

@ -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) ;