bugfix: EventList::remove(event) must deal correctly with active events
before: active events were not properly deleted
(in both cases, ev == 0 and ev != 0)
after: deficiencies repaired; simpler code
side-effect: doesn't return whether the event was found anymore
(can be re-added at a later time)
git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1024 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
@ -16,27 +16,28 @@ EventId EventList::add(BaseEvent* ev, ExperimentFlow* pExp)
|
||||
return (ev->getId());
|
||||
}
|
||||
|
||||
bool EventList::remove(BaseEvent* ev)
|
||||
void EventList::remove(BaseEvent* ev)
|
||||
{
|
||||
if(ev != NULL)
|
||||
{
|
||||
iterator it = std::find(m_BufferList.begin(), m_BufferList.end(), ev);
|
||||
if(it != end())
|
||||
{
|
||||
m_BufferList.erase(it);
|
||||
// possible cases:
|
||||
// - ev == 0 -> remove all events
|
||||
// * clear m_BufferList
|
||||
// * copy m_FireList to m_DeleteList
|
||||
if (ev == 0) {
|
||||
m_BufferList.clear();
|
||||
// all remaining active events must not fire anymore
|
||||
m_DeleteList.insert(m_DeleteList.end(), m_FireList.begin(), m_FireList.end());
|
||||
|
||||
// - ev != 0 -> remove single event
|
||||
// * find/remove ev in m_BufferList
|
||||
// * if ev in m_FireList, copy to m_DeleteList
|
||||
} else {
|
||||
m_BufferList.remove(ev);
|
||||
firelist_t::const_iterator it =
|
||||
std::find(m_FireList.begin(), m_FireList.end(), ev);
|
||||
if (it != m_FireList.end()) {
|
||||
m_DeleteList.push_back(ev);
|
||||
return (true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(iterator it = m_BufferList.begin(); it != m_BufferList.end();
|
||||
it++)
|
||||
m_DeleteList.push_back(*it);
|
||||
m_BufferList.clear();
|
||||
return (true);
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
|
||||
EventList::iterator EventList::remove(iterator it)
|
||||
|
||||
@ -82,10 +82,8 @@ class EventList
|
||||
* @param ev the pointer of the event to be removed; if ev is set to
|
||||
* \c NULL, all events (for \a all experiments) will be
|
||||
* removed
|
||||
* @return \c true if the object has been removed or \c false if the
|
||||
* pointer could not be found
|
||||
*/
|
||||
bool remove(BaseEvent* ev);
|
||||
void remove(BaseEvent* ev);
|
||||
/**
|
||||
* Behaves like remove(BaseEvent) and additionally updates the provided
|
||||
* iteration.
|
||||
|
||||
Reference in New Issue
Block a user