[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 modified = false ;
for (vector<CalibrationRequest*>::iterator r = requests.begin() ;
r != requests.end() ; ++r)
unsigned int nb_requests = requests.size() ;
vector<CalibrationRequest*>::iterator r = requests.begin() ;
while (r != requests.end())
{
assert(*r) ;
if ((*r)->get_mobile() == NULL)
{
requests.erase(r) ;
modified = true ;
continue ;
}
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() ;
++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() ;
}