- initial multilib support (only packages in the same repository are considered)
[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 <map>
21 #include <vector>
22 #include <regex.h>
23
24 using namespace std;
25
26 class RPMHandler;
27 class RPMPackageData;
28
29 class rpmListParser : public pkgCacheGenerator::ListParser
30 {
31    RPMHandler *Handler;
32    RPMPackageData *RpmData;
33    Header header;
34
35    string CurrentName;
36    const pkgCache::VerIterator *VI;
37    
38 #ifdef WITH_HASH_MAP
39    typedef hash_map<const char*,bool,
40                     hash<const char*>,cstr_eq_pred> SeenPackagesType;
41    typedef hash_map<const char*,bool,
42                     hash<const char*>,cstr_eq_pred> SeenMultiPackagesType;
43 #else
44    typedef map<const char*,bool,cstr_lt_pred> SeenPackagesType;
45    typedef map<const char*,bool,cstr_lt_pred> SeenMultiPackagesType;
46 #endif
47    SeenPackagesType *SeenPackages;
48    SeenMultiPackagesType *SeenMultiPackages;
49    
50    bool Duplicated;
51    bool Multilib;
52    
53    unsigned long UniqFindTagWrite(int Tag);
54    bool ParseStatus(pkgCache::PkgIterator Pkg,pkgCache::VerIterator Ver);
55    bool ParseDepends(pkgCache::VerIterator Ver,
56                      char **namel, char **verl, int_32 *flagl,
57                      int count, unsigned int Type);
58    bool ParseDepends(pkgCache::VerIterator Ver, unsigned int Type);
59    bool ParseProvides(pkgCache::VerIterator Ver);
60    
61 #ifdef OLD_FILEDEPS
62    bool ProcessFileProvides(pkgCache::VerIterator Ver);
63 #endif
64    
65  public:
66    
67    // These all operate against the current header
68    virtual string Package();
69    virtual string Version();
70    virtual string Architecture();
71    virtual bool NewVersion(pkgCache::VerIterator Ver);
72    virtual unsigned short VersionHash();
73    virtual bool UsePackage(pkgCache::PkgIterator Pkg,
74                            pkgCache::VerIterator Ver);
75    virtual unsigned long Offset()
76         {return Handler->Offset();};
77    virtual unsigned long Size();
78
79    virtual bool OrderedOffset()
80         {return Handler->OrderedOffset();};
81
82    virtual bool IsDatabase()
83         {return Handler->IsDatabase();};
84
85    virtual bool CollectFileProvides(pkgCache &Cache,
86                                     pkgCache::VerIterator Ver); 
87    virtual bool Step();
88    
89    bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,FileFd &File);
90
91    void VirtualizePackage(string Name);
92    void MultiArchPackage(string Name);
93    
94    rpmListParser(RPMHandler *Handler);
95    ~rpmListParser();
96 };
97
98 #endif