eitd: add operators, simplify event compare code

This commit is contained in:
[CST] Focus
2012-02-10 18:01:22 +04:00
parent abec14bd74
commit 358cba5227
2 changed files with 62 additions and 87 deletions

View File

@@ -49,10 +49,6 @@ public:
serviceId = 0; serviceId = 0;
} }
// Der Operator zum sortieren
bool operator < (const SIlinkage& l) const {
return name < l.name;
}
void dump(void) const { void dump(void) const {
printf("Linakge Type: 0x%02hhx\n", linkageType); printf("Linakge Type: 0x%02hhx\n", linkageType);
@@ -71,8 +67,26 @@ public:
// return 1; // return 1;
return 0; return 0;
} }
// Der Operator zum sortieren
bool operator < (const SIlinkage& l) const {
return name < l.name;
}
bool operator==(const SIlinkage& s) const {
return (linkageType == s.linkageType) &&
(transportStreamId == s.transportStreamId) &&
(originalNetworkId == s.originalNetworkId) &&
(serviceId == s.serviceId) &&
(name == s.name);
}
bool operator!=(const SIlinkage& s) const {
return (linkageType != s.linkageType) ||
(transportStreamId != s.transportStreamId) ||
(originalNetworkId != s.originalNetworkId) ||
(serviceId != s.serviceId) ||
(name != s.name);
}
}; };
typedef std::vector<class SIlinkage> SIlinkage_descs;
// Fuer for_each // Fuer for_each
struct printSIlinkage : public std::unary_function<class SIlinkage, void> struct printSIlinkage : public std::unary_function<class SIlinkage, void>
@@ -88,8 +102,6 @@ struct saveSIlinkageXML : public std::unary_function<class SIlinkage, void>
void operator() (const SIlinkage &l) { l.saveXML(f);} void operator() (const SIlinkage &l) { l.saveXML(f);}
}; };
typedef std::vector<class SIlinkage> SIlinkage_descs;
class SIcomponent class SIcomponent
{ {
public: public:
@@ -103,10 +115,6 @@ class SIcomponent
componentType=0; componentType=0;
componentTag=0; componentTag=0;
} }
// Der Operator zum sortieren
bool operator < (const SIcomponent& c) const {
return streamContent < c.streamContent;
}
void dump(void) const { void dump(void) const {
if(component.length()) if(component.length())
printf("Component: %s\n", component.c_str()); printf("Component: %s\n", component.c_str());
@@ -120,6 +128,22 @@ class SIcomponent
fprintf(file, "\"/>\n"); fprintf(file, "\"/>\n");
return 0; return 0;
} }
// Der Operator zum sortieren
bool operator < (const SIcomponent& c) const {
return streamContent < c.streamContent;
}
bool operator==(const SIcomponent& c) const {
return (componentType == c.componentType) &&
(componentTag == c.componentTag) &&
(streamContent == c.streamContent) &&
(component == c.component);
}
bool operator!=(const SIcomponent& c) const {
return (componentType != c.componentType) ||
(componentTag != c.componentTag) ||
(streamContent != c.streamContent) ||
(component != c.component);
}
}; };
typedef std::multiset <SIcomponent, std::less<SIcomponent> > SIcomponents; typedef std::multiset <SIcomponent, std::less<SIcomponent> > SIcomponents;
@@ -161,7 +185,16 @@ class SIparentalRating
return 1; return 1;
return 0; return 0;
} }
bool operator==(const SIparentalRating& p) const {
return (rating == p.rating) &&
(countryCode == p.countryCode);
}
bool operator!=(const SIparentalRating& p) const {
return (rating != p.rating) ||
(countryCode != p.countryCode);
}
}; };
typedef std::set <SIparentalRating, std::less<SIparentalRating> > SIparentalRatings;
// Fuer for_each // Fuer for_each
struct printSIparentalRating : public std::unary_function<SIparentalRating, void> struct printSIparentalRating : public std::unary_function<SIparentalRating, void>
@@ -177,8 +210,6 @@ struct saveSIparentalRatingXML : public std::unary_function<SIparentalRating, vo
void operator() (const SIparentalRating &r) { r.saveXML(f);} void operator() (const SIparentalRating &r) { r.saveXML(f);}
}; };
typedef std::set <SIparentalRating, std::less<SIparentalRating> > SIparentalRatings;
class SItime { class SItime {
public: public:
time_t startzeit; // lokale Zeit, 0 -> time shifted (cinedoms) time_t startzeit; // lokale Zeit, 0 -> time shifted (cinedoms)
@@ -201,6 +232,14 @@ class SItime {
fprintf(file, "\t\t\t<time start_time=\"%u\" duration=\"%u\"/>\n", (unsigned int) startzeit, dauer); fprintf(file, "\t\t\t<time start_time=\"%u\" duration=\"%u\"/>\n", (unsigned int) startzeit, dauer);
return 0; return 0;
} }
bool operator==(const SItime& t) const {
return (dauer == t.dauer) &&
(startzeit == t.startzeit);
}
bool operator!=(const SItime& t) const {
return (dauer != t.dauer) ||
(startzeit != t.startzeit);
}
}; };
typedef std::set <SItime, std::less<SItime> > SItimes; typedef std::set <SItime, std::less<SItime> > SItimes;

View File

@@ -77,8 +77,8 @@ static bool sectionsd_ready = false;
/*static*/ bool reader_ready = true; /*static*/ bool reader_ready = true;
static unsigned int max_events; static unsigned int max_events;
#define HOUSEKEEPING_SLEEP (5 * 60) // sleep 5 minutes //#define HOUSEKEEPING_SLEEP (5 * 60) // sleep 5 minutes
//#define HOUSEKEEPING_SLEEP (30) // FIXME 1 min for testing #define HOUSEKEEPING_SLEEP (30) // FIXME 1 min for testing
#define META_HOUSEKEEPING (24 * 60 * 60) / HOUSEKEEPING_SLEEP // meta housekeeping after XX housekeepings - every 24h - #define META_HOUSEKEEPING (24 * 60 * 60) / HOUSEKEEPING_SLEEP // meta housekeeping after XX housekeepings - every 24h -
// Timeout bei tcp/ip connections in ms // Timeout bei tcp/ip connections in ms
@@ -533,81 +533,17 @@ static bool deleteEvent(const event_id_t uniqueKey)
on one German Sky channel and incomplete on another one. So we on one German Sky channel and incomplete on another one. So we
make sure to keep the complete event, if applicable. */ make sure to keep the complete event, if applicable. */
if ((already_exists) && (evt.components.size() > 0)) { if (already_exists && (!evt.components.empty()) && (evt.components != si->second->components))
if (si->second->components.size() != evt.components.size())
already_exists = false; already_exists = false;
else {
SIcomponents::iterator c1 = si->second->components.begin();
SIcomponents::iterator c2 = evt.components.begin();
while ((c1 != si->second->components.end()) && (c2 != evt.components.end())) {
if ((c1->componentType != c2->componentType) ||
(c1->componentTag != c2->componentTag) ||
(c1->streamContent != c2->streamContent) ||
(strcmp(c1->component.c_str(),c2->component.c_str()) != 0)) {
already_exists = false;
break;
}
++c1;
++c2;
}
}
}
if ((already_exists) && (evt.linkage_descs.size() > 0)) { if (already_exists && (!evt.linkage_descs.empty()) && (evt.linkage_descs != si->second->linkage_descs))
if (si->second->linkage_descs.size() != evt.linkage_descs.size())
already_exists = false; already_exists = false;
else {
for (unsigned int i = 0; i < si->second->linkage_descs.size(); i++) {
if ((si->second->linkage_descs[i].linkageType !=
evt.linkage_descs[i].linkageType) ||
(si->second->linkage_descs[i].originalNetworkId !=
evt.linkage_descs[i].originalNetworkId) ||
(si->second->linkage_descs[i].transportStreamId !=
evt.linkage_descs[i].transportStreamId) ||
(strcmp(si->second->linkage_descs[i].name.c_str(),
evt.linkage_descs[i].name.c_str()) != 0)) {
already_exists = false;
break;
}
}
}
}
if ((already_exists) && (evt.ratings.size() > 0)) { if (already_exists && (!evt.ratings.empty()) && (evt.ratings != si->second->ratings))
if (si->second->ratings.size() != evt.ratings.size())
already_exists = false; already_exists = false;
else {
SIparentalRatings::iterator p1 = si->second->ratings.begin();
SIparentalRatings::iterator p2 = evt.ratings.begin();
while ((p1 != si->second->ratings.end()) && (p2 != evt.ratings.end())) {
if ((p1->rating != p2->rating) ||
(strcmp(p1->countryCode.c_str(),p2->countryCode.c_str()) != 0)) {
already_exists = false;
break;
}
++p1;
++p2;
}
}
}
if (already_exists) { if (already_exists && (evt.times != si->second->times))
if (si->second->times.size() != evt.times.size())
already_exists = false; already_exists = false;
else {
SItimes::iterator t1 = si->second->times.begin();
SItimes::iterator t2 = evt.times.begin();
while ((t1 != si->second->times.end()) && (t2 != evt.times.end())) {
if ((t1->startzeit != t2->startzeit) ||
(t1->dauer != t2->dauer)) {
already_exists = false;
break;
}
++t1;
++t2;
}
}
}
if ((already_exists) && (SIlanguage::getMode() == CSectionsdClient::LANGUAGE_MODE_OFF)) { if ((already_exists) && (SIlanguage::getMode() == CSectionsdClient::LANGUAGE_MODE_OFF)) {
si->second->contentClassification = evt.contentClassification; si->second->contentClassification = evt.contentClassification;