Update httpstream
[vuplus_dvbapp] / lib / dvb / epgcache.h
index dfd1948..90aff6c 100644 (file)
@@ -6,10 +6,23 @@
 
 #ifndef SWIG
 
+/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
+#if defined (__GNUC__) && defined (__GNUC_MINOR__)
+#define __GNUC_PREREQ(maj, min) \
+         ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+#define __GNUC_PREREQ(maj, min)  0
+#endif
+
 #include <vector>
 #include <list>
+#if 0 && __GNUC_PREREQ(4,3)
+#include <unordered_map>
+#include <unordered_set>
+#else
 #include <ext/hash_map>
 #include <ext/hash_set>
+#endif
 
 #include <errno.h>
 
@@ -92,7 +105,14 @@ struct hash_uniqueEPGKey
 };
 
 #define tidMap std::set<__u32>
-#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || __GNUC__ == 4 )  // check if gcc version >= 3.1
+#if 0 && __GNUC_PREREQ(4,3)
+       #define eventCache std::unordered_map<uniqueEPGKey, std::pair<eventMap, timeMap>, hash_uniqueEPGKey, uniqueEPGKey::equal>
+       #ifdef ENABLE_PRIVATE_EPG
+               #define contentTimeMap std::unordered_map<time_t, std::pair<time_t, __u16> >
+               #define contentMap std::unordered_map<int, contentTimeMap >
+               #define contentMaps std::unordered_map<uniqueEPGKey, contentMap, hash_uniqueEPGKey, uniqueEPGKey::equal >
+       #endif
+#elif __GNUC_PREREQ(3,1)
        #define eventCache __gnu_cxx::hash_map<uniqueEPGKey, std::pair<eventMap, timeMap>, hash_uniqueEPGKey, uniqueEPGKey::equal>
        #ifdef ENABLE_PRIVATE_EPG
                #define contentTimeMap __gnu_cxx::hash_map<time_t, std::pair<time_t, __u16> >
@@ -157,7 +177,8 @@ class eEPGCache: public eMainloop, private eThread, public Object
                eEPGCache *cache;
                ePtr<eTimer> abortTimer, zapTimer;
                int prevChannelState;
-               __u8 state, isRunning, haveData;
+               int state;
+               __u8 isRunning, haveData;
                ePtr<eDVBChannel> channel;
                ePtr<eConnection> m_stateChangedConn, m_NowNextConn, m_ScheduleConn, m_ScheduleOtherConn, m_ViasatConn;
                ePtr<iDVBSectionReader> m_NowNextReader, m_ScheduleReader, m_ScheduleOtherReader, m_ViasatReader;
@@ -182,6 +203,7 @@ class eEPGCache: public eMainloop, private eThread, public Object
                ePtr<iDVBSectionReader> m_MHWReader, m_MHWReader2;
                eDVBSectionFilterMask m_MHWFilterMask, m_MHWFilterMask2;
                ePtr<eTimer> m_MHWTimeoutTimer;
+               __u16 m_mhw2_channel_pid, m_mhw2_title_pid, m_mhw2_summary_pid;
                bool m_MHWTimeoutet;
                void MHWTimeout() { m_MHWTimeoutet=true; }
                void readMHWData(const __u8 *data);
@@ -222,6 +244,9 @@ public:
                        leaveChannel,
                        quit,
                        got_private_pid,
+                       got_mhw2_channel_pid,
+                       got_mhw2_title_pid,
+                       got_mhw2_summary_pid,
                        timeChanged
                };
                int type;
@@ -266,6 +291,8 @@ private:
        void thread();  // thread function
 
 // called from epgcache thread
+       int m_running;
+       char m_filename[1024];
        void save();
        void load();
 #ifdef ENABLE_PRIVATE_EPG
@@ -301,6 +328,9 @@ public:
 #endif
 
 #endif
+       // must be called once!
+       void setCacheFile(const char *filename);
+
        // called from main thread
        inline void Lock();
        inline void Unlock();