- merge repomd branch
[apt.git] / apt-pkg / rpm / rpmlistparser.h
1 // -*- mode: cpp; 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 <rpm/rpmlib.h>
20 #include <libxml/parser.h>
21 #include <libxml/tree.h>
22
23 #include <map>
24 #include <vector>
25 #include <regex.h>
26
27 using namespace std;
28
29 class RPMHandler;
30 class RPMPackageData;
31
32 class rpmListParser : public pkgCacheGenerator::ListParser
33 {
34    RPMHandler *Handler;
35    RPMPackageData *RpmData;
36
37    string CurrentName;
38    const pkgCache::VerIterator *VI;
39    
40 #ifdef WITH_HASH_MAP
41    typedef hash_map<const char*,bool,
42                     hash<const char*>,cstr_eq_pred> SeenPackagesType;
43 #else
44    typedef map<const char*,bool,cstr_lt_pred> SeenPackagesType;
45 #endif
46    SeenPackagesType *SeenPackages;
47
48    bool Duplicated;
49    
50    bool ParseStatus(pkgCache::PkgIterator Pkg,pkgCache::VerIterator Ver);
51    bool ParseDepends(pkgCache::VerIterator Ver,
52                      char **namel, char **verl, int_32 *flagl,
53                      int count, unsigned int Type);
54    bool ParseDepends(pkgCache::VerIterator Ver, unsigned int Type);
55    bool ParseProvides(pkgCache::VerIterator Ver);
56    
57 #ifdef OLD_FILEDEPS
58    bool ProcessFileProvides(pkgCache::VerIterator Ver);
59 #endif
60    
61  public:
62    
63    // These all operate against the current header
64    virtual string Package();
65    virtual string Version();
66    virtual string Architecture();
67    virtual bool NewVersion(pkgCache::VerIterator Ver);
68    virtual unsigned short VersionHash();
69    virtual bool UsePackage(pkgCache::PkgIterator Pkg,
70                            pkgCache::VerIterator Ver);
71    virtual unsigned long Offset()
72         {return Handler->Offset();};
73    virtual unsigned long Size();
74
75    virtual bool OrderedOffset()
76         {return Handler->OrderedOffset();};
77
78    virtual bool IsDatabase()
79         {return Handler->IsDatabase();};
80
81    virtual bool CollectFileProvides(pkgCache &Cache,
82                                     pkgCache::VerIterator Ver); 
83    virtual bool Step();
84    
85    bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,FileFd &File);
86
87    void VirtualizePackage(string Name);
88    void CompatArchPackage(string Name);
89    
90    rpmListParser(RPMHandler *Handler);
91    ~rpmListParser();
92 };
93
94 class rpmRepomdParser : public rpmListParser
95 {
96    protected:
97
98    string Primary;
99    string Filelist;
100    string Other;
101
102    xmlNode *FindNode(xmlNode *n, const string Name);
103
104    public:
105  
106    bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,string File);
107
108    rpmRepomdParser(RPMHandler *Handler) : rpmListParser(Handler) {};
109 };
110
111 #endif