22eb0b74de2702361c676fa1ecf934677c287fb7
[openblackhole/openblackhole-enigma2.git] / lib / dvb / db.h
1 #ifndef __db_h
2 #define __db_h
3
4 #include <lib/dvb/idvb.h>
5 #include <set>
6
7 class ServiceDescriptionTable;
8
9 class eDVBDB: public iDVBChannelList
10 {
11 DECLARE_REF(eDVBDB);
12         friend class eDVBDBQuery;
13 private:
14         struct channel
15         {
16                 ePtr<iDVBFrontendParameters> m_frontendParameters;
17         };
18         
19         std::map<eDVBChannelID, channel> m_channels;
20         
21         std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_services;
22 public:
23         eDVBDB();
24         virtual ~eDVBDB();
25         
26         RESULT addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters *feparm);
27         RESULT removeChannel(const eDVBChannelID &id);
28
29         RESULT getChannelFrontendData(const eDVBChannelID &id, ePtr<iDVBFrontendParameters> &parm);
30         
31         RESULT addService(const eServiceReferenceDVB &service, eDVBService *service);
32         RESULT getService(const eServiceReferenceDVB &reference, ePtr<eDVBService> &service);
33
34         RESULT startQuery(ePtr<iDVBChannelListQuery> &query, eDVBChannelQuery *query);
35 };
36
37         // we have to add a possibility to invalidate here.
38 class eDVBDBQuery: public iDVBChannelListQuery
39 {
40 DECLARE_REF(eDVBDBQuery);
41 private:
42         std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_cursor;
43         ePtr<eDVBDB> m_db;
44         ePtr<eDVBChannelQuery> m_query;
45 public:
46         eDVBDBQuery(eDVBDB *db, eDVBChannelQuery *query);
47         virtual RESULT getNextResult(eServiceReferenceDVB &ref);
48 };
49
50 #endif