From 2b12e493748bb4bb68b3a8440bb26d4dbd611f4e Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Fri, 22 Jul 2011 10:48:19 +0200 Subject: [PATCH] [Positioning] Fix ReferencePoint::delete_generated_requests() Use a while loop instead of for to check the requests. --- owlps-positioning/src/referencepoint.cc | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/owlps-positioning/src/referencepoint.cc b/owlps-positioning/src/referencepoint.cc index f769e42..2966825 100644 --- a/owlps-positioning/src/referencepoint.cc +++ b/owlps-positioning/src/referencepoint.cc @@ -136,35 +136,35 @@ void ReferencePoint::delete_requests() */ bool ReferencePoint::delete_generated_requests(void) { - bool modified = false ; - - for (vector::iterator r = requests.begin() ; - r != requests.end() ; ++r) + unsigned int nb_requests = requests.size() ; + vector::iterator r = requests.begin() ; + while (r != requests.end()) { assert(*r) ; - if ((*r)->get_mobile() == NULL) - { - requests.erase(r) ; - modified = true ; - continue ; - } - unordered_map::const_iterator ap ; + + if ((*r)->get_mobile() == NULL) + goto delete_request ; + for (ap = Stock::get_aps().begin() ; ap != Stock::get_aps().end() ; ++ap) if ((*r)->get_mobile()->get_mac_addr() == ap->second.get_mac_addr()) break ; - if (ap == Stock::get_aps().end()) // r is not associated with an AP + if (ap != Stock::get_aps().end()) // r still associated with an AP { - Stock::delete_calibration_request(**r) ; - requests.erase(r) ; - modified = true ; + ++r ; + continue ; // Do not delete r } + + // r is not assotiated with an AP, delete it +delete_request: + Stock::delete_calibration_request(**r) ; + r = requests.erase(r) ; } - return modified ; + return nb_requests != requests.size() ; }