From 5e7d26da37cee78f6cb943ba10bae6455ee1e73b Mon Sep 17 00:00:00 2001 From: Dimitar Petrovski Date: Sun, 3 Jun 2012 23:56:44 +0200 Subject: removed list clear --- util.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 21 deletions(-) diff --git a/util.c b/util.c index 3d92dda..e398eca 100644 --- a/util.c +++ b/util.c @@ -9,6 +9,8 @@ #include #include +#include + namespace util { @@ -127,23 +129,33 @@ void CleanString (unsigned char *String) // http://projects.vdr-developer.org/projects/plg-epgfixer // by Matti Lehtimaki -class cAddEventListItem : public cListObject +//class cAddEventListItem : public cListObject +//{ +//protected: +// cEvent *event; +// tChannelID channelID; +//public: +// cAddEventListItem(cEvent *Event, tChannelID ChannelID) { event = Event; channelID = ChannelID; } +// tChannelID GetChannelID() { return channelID; } +// cEvent *GetEvent() { return event; } +// ~cAddEventListItem() { } +//}; + +struct tChannelIDCompare { -protected: - cEvent *event; - tChannelID channelID; -public: - cAddEventListItem(cEvent *Event, tChannelID ChannelID) { event = Event; channelID = ChannelID; } - tChannelID GetChannelID() { return channelID; } - cEvent *GetEvent() { return event; } - ~cAddEventListItem() { } + bool operator() (const tChannelID& lhs, const tChannelID& rhs) const + { + return *lhs.ToString() < *rhs.ToString(); + } }; + class cAddEventThread : public cThread { private: cTimeMs LastHandleEvent; - cList *list; +// cList *list; + std::map*,tChannelIDCompare> *map_list; enum { INSERT_TIMEOUT_IN_MS = 10000 }; protected: virtual void Action(void); @@ -156,13 +168,17 @@ public: cAddEventThread::cAddEventThread(void) :cThread("cAddEventThread"), LastHandleEvent() { - list = new cList; +// list = new cList; + map_list = new std::map*,tChannelIDCompare>; } cAddEventThread::~cAddEventThread(void) { LOCK_THREAD; - list->cList::Clear(); +// list->cList::Clear(); + std::map*,tChannelIDCompare>::iterator it; + for ( it=map_list->begin() ; it != map_list->end(); it++ ) + (*it).second->cList::Clear(); Cancel(3); } @@ -170,17 +186,35 @@ void cAddEventThread::Action(void) { SetPriority(19); while (Running() && !LastHandleEvent.TimedOut()) { - cAddEventListItem *e = NULL; +// cAddEventListItem *e = NULL; cSchedulesLock SchedulesLock(true, 10); cSchedules *schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock); Lock(); - while (schedules && (e = list->First()) != NULL) { - cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID(e->GetChannelID()), true); - schedule->AddEvent(e->GetEvent()); - EpgHandlers.SortSchedule(schedule); - EpgHandlers.DropOutdated(schedule, e->GetEvent()->StartTime(), e->GetEvent()->EndTime(), e->GetEvent()->TableID(), e->GetEvent()->Version()); - list->Del(e); - } +// while (schedules && (e = list->First()) != NULL) { +// cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID(e->GetChannelID()), true); +// schedule->AddEvent(e->GetEvent()); +// EpgHandlers.SortSchedule(schedule); +// EpgHandlers.DropOutdated(schedule, e->GetEvent()->StartTime(), e->GetEvent()->EndTime(), e->GetEvent()->TableID(), e->GetEvent()->Version()); +// list->Del(e); +// } + std::map*,tChannelIDCompare>::iterator it; + if (schedules) { + for ( it=map_list->begin() ; it != map_list->end(); it++ ) { + cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID((*it).first), true); + while (schedules && ((*it).second->First()) != NULL) { + cEvent* event = *(*it).second->First(); + + cEvent *pEqvEvent = (cEvent *) schedule->GetEvent (event->EventID(), event->StartTime()); + if (pEqvEvent) + schedule->DelEvent(pEqvEvent); + + schedule->AddEvent(event); + (*it).second->Del(event); + } + EpgHandlers.SortSchedule(schedule); + + } + } Unlock(); cCondWait::SleepMs(10); } @@ -189,7 +223,14 @@ void cAddEventThread::Action(void) void cAddEventThread::AddEvent(cEvent *Event, tChannelID ChannelID) { LOCK_THREAD; - list->Add(new cAddEventListItem(Event, ChannelID)); + if (map_list->empty() || map_list->count(ChannelID) == 0) { + cList* list = new cList; + list->Add(Event); + map_list->insert(std::make_pair(ChannelID, list)); + } else { + (*map_list->find(ChannelID)).second->Add(Event); + } +// list->Add(new cAddEventListItem(Event, ChannelID)); LastHandleEvent.Set(INSERT_TIMEOUT_IN_MS); } -- cgit v1.2.3 From 7335a91779b6bef557cef1a4697f27b85a0627c0 Mon Sep 17 00:00:00 2001 From: Dimitar Petrovski Date: Mon, 4 Jun 2012 00:15:36 +0200 Subject: remove empty list from map --- equivhandler.c | 4 ++-- util.c | 31 ++++++++++++++++--------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/equivhandler.c b/equivhandler.c index 2c1b424..a742150 100644 --- a/equivhandler.c +++ b/equivhandler.c @@ -166,11 +166,11 @@ void cEquivHandler::updateEquivalent(tChannelID channelID, cEvent *pEvent){ multimap::iterator it; pair::iterator,multimap::iterator> ret; - LogD(2, prep("Start updateEquivalent %s"), *channelID.ToString()); + LogD(3, prep("Start updateEquivalent %s"), *channelID.ToString()); ret = equiChanMap.equal_range(*channelID.ToString()); for (it=ret.first; it!=ret.second; ++it) { - LogD(2, prep("equivalent channel exists")); + LogD(3, prep("equivalent channel exists")); tChannelID equChannelID (tChannelID::FromString((*it).second.c_str())); cEvent* newEvent = new cEvent (pEvent->EventID()); cloneEvent(pEvent, newEvent); diff --git a/util.c b/util.c index e398eca..076401f 100644 --- a/util.c +++ b/util.c @@ -198,22 +198,23 @@ void cAddEventThread::Action(void) // list->Del(e); // } std::map*,tChannelIDCompare>::iterator it; - if (schedules) { - for ( it=map_list->begin() ; it != map_list->end(); it++ ) { - cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID((*it).first), true); - while (schedules && ((*it).second->First()) != NULL) { - cEvent* event = *(*it).second->First(); - - cEvent *pEqvEvent = (cEvent *) schedule->GetEvent (event->EventID(), event->StartTime()); - if (pEqvEvent) - schedule->DelEvent(pEqvEvent); - - schedule->AddEvent(event); - (*it).second->Del(event); - } - EpgHandlers.SortSchedule(schedule); - + it=map_list->begin(); + while (schedules && it != map_list->end()) { + cSchedule *schedule = (cSchedule *)schedules->GetSchedule(Channels.GetByChannelID((*it).first), true); + while (((*it).second->First()) != NULL) { + cEvent* event = *(*it).second->First(); + + cEvent *pEqvEvent = (cEvent *) schedule->GetEvent (event->EventID(), event->StartTime()); + if (pEqvEvent) + schedule->DelEvent(pEqvEvent); + + schedule->AddEvent(event); + (*it).second->Del(event); } + EpgHandlers.SortSchedule(schedule); + delete (*it).second; + map_list->erase(it++); + } Unlock(); cCondWait::SleepMs(10); -- cgit v1.2.3 From 0e805561c58f3a63448b99b71b23a02caa9641e3 Mon Sep 17 00:00:00 2001 From: Dimitar Petrovski Date: Fri, 19 Oct 2012 11:13:06 +0200 Subject: modified iterator increment --- util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util.c b/util.c index 076401f..6df6137 100644 --- a/util.c +++ b/util.c @@ -213,7 +213,8 @@ void cAddEventThread::Action(void) } EpgHandlers.SortSchedule(schedule); delete (*it).second; - map_list->erase(it++); + map_list->erase(it); + it=map_list->begin(); } Unlock(); -- cgit v1.2.3