- re-enable hashmap usage (Ralf)
[apt.git] / apt-pkg / rpm / rpmlistparser.h
1 // -*- mode: c++; mode: fold -*-
2 // Description                                                          /*{{{*/
3 // $Id: rpmlistparser.h,v 1.2 2002/07/26 17:39:28 niemeyer Exp $
4 /* ######################################################################
5    
6    RPM Package List Parser - This implements the abstract parser 
7    interface for RPM package files
8    
9    ##################################################################### 
10  */
11                                                                         /*}}}*/
12 // Header section: pkglib
13 #ifndef PKGLIB_RPMLISTPARSER_H
14 #define PKGLIB_RPMLISTPARSER_H
15
16 #include <apt-pkg/pkgcachegen.h>
17 #include <apt-pkg/rpmhandler.h>
18 #include <apt-pkg/rpmmisc.h>
19 #include <libxml/parser.h>
20 #include <libxml/tree.h>
21
22 #include <map>
23 #include <vector>
24 #include <regex.h>
25
26 using namespace std;
27
28 class RPMHandler;
29 class RPMPackageData;
30
31 class rpmListParser : public pkgCacheGenerator::ListParser
32 {
33    RPMHandler *Handler;
34    RPMPackageData *RpmData;
35
36    string CurrentName;
37    const pkgCache::VerIterator *VI;
38    
39 #ifdef WITH_GNU_HASH_MAP
40    typedef hash_map<const char*,bool,
41                     hash<const char*>,cstr_eq_pred> SeenPackagesType;
42 #else
43    typedef map<const char*,bool,cstr_lt_pred> SeenPackagesType;
44 #endif
45    SeenPackagesType *SeenPackages;
46
47    bool Duplicated;
48    
49    bool ParseStatus(pkgCache::PkgIterator Pkg,pkgCache::VerIterator Ver);
50    bool ParseDepends(pkgCache::VerIterator Ver,
51                      char **namel, char **verl, int_32 *flagl,
52                      int count, unsigned int Type);
53    bool ParseDepends(pkgCache::VerIterator Ver, unsigned int Type);
54    bool ParseProvides(pkgCache::VerIterator Ver);
55    
56  public:
57    
58    // These all operate against the current header
59    virtual string Package();
60    virtual string Version();
61    virtual string Architecture();
62    virtual bool NewVersion(pkgCache::VerIterator Ver);
63    virtual unsigned short VersionHash();
64    virtual bool UsePackage(pkgCache::PkgIterator Pkg,
65                            pkgCache::VerIterator Ver);
66    virtual unsigned long Offset()
67         {return Handler->Offset();};
68    virtual unsigned long Size();
69
70    virtual bool OrderedOffset()
71         {return Handler->OrderedOffset();};
72
73    virtual bool IsDatabase()
74         {return Handler->IsDatabase();};
75
76    virtual bool CollectFileProvides(pkgCache &Cache,
77                                     pkgCache::VerIterator Ver); 
78    virtual bool Step();
79    
80    bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,FileFd &File);
81
82    void VirtualizePackage(string Name);
83    void CompatArchPackage(string Name);
84    
85    rpmListParser(RPMHandler *Handler);
86    ~rpmListParser();
87 };
88
89 class rpmRepomdParser : public rpmListParser
90 {
91    protected:
92
93    string Primary;
94    string Filelist;
95    string Other;
96
97    xmlNode *FindNode(xmlNode *n, const string Name);
98
99    public:
100  
101    bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,const string File,
102                         const string Dist);
103
104    rpmRepomdParser(RPMHandler *Handler) : rpmListParser(Handler) {};
105 };
106
107 #endif