[Positioning] Fix ReferencePoint::delete_generated_requests()

Use a while loop instead of for to check the requests.
This commit is contained in:
Matteo Cypriani 2011-07-22 10:48:19 +02:00
parent 232551c150
commit 2b12e49374
1 changed files with 16 additions and 16 deletions

View File

@ -136,35 +136,35 @@ void ReferencePoint::delete_requests()
*/ */
bool ReferencePoint::delete_generated_requests(void) bool ReferencePoint::delete_generated_requests(void)
{ {
bool modified = false ; unsigned int nb_requests = requests.size() ;
vector<CalibrationRequest*>::iterator r = requests.begin() ;
for (vector<CalibrationRequest*>::iterator r = requests.begin() ; while (r != requests.end())
r != requests.end() ; ++r)
{ {
assert(*r) ; assert(*r) ;
if ((*r)->get_mobile() == NULL)
{
requests.erase(r) ;
modified = true ;
continue ;
}
unordered_map<std::string, AccessPoint>::const_iterator ap ; unordered_map<std::string, AccessPoint>::const_iterator ap ;
if ((*r)->get_mobile() == NULL)
goto delete_request ;
for (ap = Stock::get_aps().begin() ; ap != Stock::get_aps().end() ; for (ap = Stock::get_aps().begin() ; ap != Stock::get_aps().end() ;
++ap) ++ap)
if ((*r)->get_mobile()->get_mac_addr() == if ((*r)->get_mobile()->get_mac_addr() ==
ap->second.get_mac_addr()) ap->second.get_mac_addr())
break ; 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) ; ++r ;
requests.erase(r) ; continue ; // Do not delete r
modified = true ;
} }
// 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() ;
} }