+#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || __GNUC__ == 4 ) // check if gcc version >= 3.1
+#include <ext/slist>
+#define CAID_LIST __gnu_cxx::slist<uint16_t>
+#else
+#include <slist>
+#define CAID_LIST std::slist<uint16_t>
+#endif
+
+#ifndef DMX_FILTER_SIZE
+#define DMX_FILTER_SIZE 16
+#endif
+
+struct eDVBSectionFilterMask
+{
+ int pid;
+ /* mode is 0 for positive, 1 for negative filtering */
+ __u8 data[DMX_FILTER_SIZE], mask[DMX_FILTER_SIZE], mode[DMX_FILTER_SIZE];
+ enum {
+ rfCRC=1,
+ rfNoAbort=2
+ };
+ int flags;
+};
+
+struct eDVBTableSpec
+{
+ int pid, tid, tidext, tid_mask, tidext_mask;
+ int version;
+ int timeout; /* timeout in ms */
+ enum
+ {
+ tfInOrder=1,
+ /*
+ tfAnyVersion filter ANY version
+ 0 filter all EXCEPT given version (negative filtering)
+ tfThisVersion filter only THIS version
+ */
+ tfAnyVersion=2,
+ tfThisVersion=4,
+ tfHaveTID=8,
+ tfHaveTIDExt=16,
+ tfCheckCRC=32,
+ tfHaveTimeout=64,
+ tfHaveTIDMask=128,
+ tfHaveTIDExtMask=256
+ };
+ int flags;
+};
+
+struct eBouquet
+{
+ std::string m_bouquet_name;
+ std::string m_filename; // without path.. just name
+ typedef std::list<eServiceReference> list;
+ list m_services;
+// the following five methods are implemented in db.cpp
+ RESULT flushChanges();
+ RESULT addService(const eServiceReference &, eServiceReference before=eServiceReference());
+ RESULT removeService(const eServiceReference &);
+ RESULT moveService(const eServiceReference &, unsigned int);
+ RESULT setListName(const std::string &name);
+};
+
+ /* these structures have by intention no operator int() defined.
+ the reason of these structures is to avoid mixing for example
+ a onid and a tsid (as there's no general order for them).
+
+ defining an operator int() would implicitely convert values
+ between them over the constructor with the int argument.
+
+ 'explicit' doesn't here - eTransportStreamID(eOriginalNetworkID(n))
+ would still work. */
+