- add_loco_to_refresh(loco);
- }
-}
-
-void ArduControl::add_loco_to_refresh(Locomotive &loco)
-{
- MutexLock lock(mutex);
- refresh_cycle.push_back(&loco);
- if(refresh_cycle.size()>15)
- {
- LocomotivePtrList::iterator oldest = refresh_cycle.begin();
- for(LocomotivePtrList::iterator i=refresh_cycle.begin(); ++i!=refresh_cycle.end(); )
- if((*i)->last_change_age>(*oldest)->last_change_age)
- oldest = i;
- if(oldest==next_refresh)
- advance_next_refresh();
- refresh_cycle.erase(oldest);
- }
- if(next_refresh==refresh_cycle.end())
- next_refresh = refresh_cycle.begin();
-}
-
-void ArduControl::remove_loco_from_refresh(Locomotive &loco)
-{
- MutexLock lock(mutex);
- for(LocomotivePtrList::iterator i=refresh_cycle.begin(); i!=refresh_cycle.end(); ++i)
- if(*i==&loco)
- {
- if(i==next_refresh)
- {
- if(refresh_cycle.size()>1)
- advance_next_refresh();
- else
- next_refresh = refresh_cycle.end();
- }
- refresh_cycle.erase(i);
- return;
- }
-}
-
-ArduControl::Locomotive *ArduControl::get_loco_to_refresh()
-{
- MutexLock lock(mutex);
- if(refresh_cycle.empty())
- return 0;
-
- Locomotive *loco = *next_refresh;
- advance_next_refresh();
- return loco;
-}
-
-void ArduControl::advance_next_refresh()
-{
- ++next_refresh;
- if(next_refresh==refresh_cycle.end())
- {
- next_refresh = refresh_cycle.begin();
- ++refresh_counter;