]>
git.saurik.com Git - apt.git/blob - apt-pkg/pkgcachegen.h
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: pkgcachegen.h,v 1.19 2002/07/08 03:13:30 jgg Exp $
4 /* ######################################################################
6 Package Cache Generator - Generator for the cache structure.
8 This builds the cache structure from the abstract package list parser.
9 Each archive source has it's own list parser that is instantiated by
10 the caller to provide data for the generator.
12 Parts of the cache are created by this generator class while other
13 parts are created by the list parser. The list parser is responsible
14 for creating version, depends and provides structures, and some of
17 ##################################################################### */
19 #ifndef PKGLIB_PKGCACHEGEN_H
20 #define PKGLIB_PKGCACHEGEN_H
23 #include <apt-pkg/pkgcache.h>
24 #include <apt-pkg/md5.h>
25 #include <apt-pkg/macros.h>
34 class pkgCacheGenerator
/*{{{*/
38 pkgCache::StringItem
*UniqHash
[26];
39 map_ptrloc
WriteStringInMap(std::string
const &String
) { return WriteStringInMap(String
.c_str()); };
40 map_ptrloc
WriteStringInMap(const char *String
);
41 map_ptrloc
WriteStringInMap(const char *String
, const unsigned long &Len
);
42 map_ptrloc
AllocateInMap(const unsigned long &size
);
47 friend class ListParser
;
49 template<typename Iter
> class Dynamic
{
51 static std::vector
<Iter
*> toReMap
;
53 toReMap
.push_back(&I
);
67 std::string PkgFileName
;
68 pkgCache::PackageFile
*CurrentFile
;
70 // Flag file dependencies
73 bool NewGroup(pkgCache::GrpIterator
&Grp
,const std::string
&Name
);
74 bool NewPackage(pkgCache::PkgIterator
&Pkg
,const std::string
&Name
, const std::string
&Arch
);
75 bool NewFileVer(pkgCache::VerIterator
&Ver
,ListParser
&List
);
76 bool NewFileDesc(pkgCache::DescIterator
&Desc
,ListParser
&List
);
77 bool NewDepends(pkgCache::PkgIterator
&Pkg
, pkgCache::VerIterator
&Ver
,
78 std::string
const &Version
, unsigned int const &Op
,
79 unsigned int const &Type
, map_ptrloc
* &OldDepLast
);
80 bool NewDepends(pkgCache::PkgIterator
&Pkg
, pkgCache::VerIterator
&Ver
,
81 map_ptrloc
const Version
, unsigned int const &Op
,
82 unsigned int const &Type
, map_ptrloc
* &OldDepLast
);
83 unsigned long NewVersion(pkgCache::VerIterator
&Ver
,const std::string
&VerStr
,unsigned long Next
);
84 map_ptrloc
NewDescription(pkgCache::DescIterator
&Desc
,const std::string
&Lang
,const MD5SumValue
&md5sum
,map_ptrloc Next
);
88 unsigned long WriteUniqString(const char *S
,unsigned int Size
);
89 inline unsigned long WriteUniqString(const std::string
&S
) {return WriteUniqString(S
.c_str(),S
.length());};
91 void DropProgress() {Progress
= 0;};
92 bool SelectFile(const std::string
&File
,const std::string
&Site
,pkgIndexFile
const &Index
,
93 unsigned long Flags
= 0);
94 bool MergeList(ListParser
&List
,pkgCache::VerIterator
*Ver
= 0);
95 inline pkgCache
&GetCache() {return Cache
;};
96 inline pkgCache::PkgFileIterator
GetCurFile()
97 {return pkgCache::PkgFileIterator(Cache
,CurrentFile
);};
99 bool HasFileDeps() {return FoundFileDeps
;};
100 bool MergeFileProvides(ListParser
&List
);
101 __deprecated
bool FinishCache(OpProgress
*Progress
);
103 static bool MakeStatusCache(pkgSourceList
&List
,OpProgress
*Progress
,
104 MMap
**OutMap
= 0,bool AllowMem
= false);
105 static bool MakeOnlyStatusCache(OpProgress
*Progress
,DynamicMMap
**OutMap
);
106 static DynamicMMap
* CreateDynamicMMap(FileFd
*CacheF
, unsigned long Flags
= 0);
108 void ReMap(void const * const oldMap
, void const * const newMap
);
110 pkgCacheGenerator(DynamicMMap
*Map
,OpProgress
*Progress
);
111 ~pkgCacheGenerator();
114 bool MergeListGroup(ListParser
&List
, std::string
const &GrpName
);
115 bool MergeListPackage(ListParser
&List
, pkgCache::PkgIterator
&Pkg
);
116 bool MergeListVersion(ListParser
&List
, pkgCache::PkgIterator
&Pkg
,
117 std::string
const &Version
, pkgCache::VerIterator
* &OutVer
);
119 bool AddImplicitDepends(pkgCache::GrpIterator
&G
, pkgCache::PkgIterator
&P
,
120 pkgCache::VerIterator
&V
);
121 bool AddImplicitDepends(pkgCache::VerIterator
&V
, pkgCache::PkgIterator
&D
);
124 // This is the abstract package list parser class. /*{{{*/
125 class pkgCacheGenerator::ListParser
127 pkgCacheGenerator
*Owner
;
128 friend class pkgCacheGenerator
;
131 pkgCache::VerIterator OldDepVer
;
132 map_ptrloc
*OldDepLast
;
134 // Flag file dependencies
139 inline unsigned long WriteUniqString(std::string S
) {return Owner
->WriteUniqString(S
);};
140 inline unsigned long WriteUniqString(const char *S
,unsigned int Size
) {return Owner
->WriteUniqString(S
,Size
);};
141 inline unsigned long WriteString(const std::string
&S
) {return Owner
->WriteStringInMap(S
);};
142 inline unsigned long WriteString(const char *S
,unsigned int Size
) {return Owner
->WriteStringInMap(S
,Size
);};
143 bool NewDepends(pkgCache::VerIterator
&Ver
,const std::string
&Package
, const std::string
&Arch
,
144 const std::string
&Version
,unsigned int Op
,
146 bool NewProvides(pkgCache::VerIterator
&Ver
,const std::string
&PkgName
,
147 const std::string
&PkgArch
, const std::string
&Version
);
151 // These all operate against the current section
152 virtual std::string
Package() = 0;
153 virtual std::string
Architecture() = 0;
154 virtual bool ArchitectureAll() = 0;
155 virtual std::string
Version() = 0;
156 virtual bool NewVersion(pkgCache::VerIterator
&Ver
) = 0;
157 virtual std::string
Description() = 0;
158 virtual std::string
DescriptionLanguage() = 0;
159 virtual MD5SumValue
Description_md5() = 0;
160 virtual unsigned short VersionHash() = 0;
161 virtual bool UsePackage(pkgCache::PkgIterator
&Pkg
,
162 pkgCache::VerIterator
&Ver
) = 0;
163 virtual unsigned long Offset() = 0;
164 virtual unsigned long Size() = 0;
166 virtual bool Step() = 0;
168 inline bool HasFileDeps() {return FoundFileDeps
;};
169 virtual bool CollectFileProvides(pkgCache
&Cache
,
170 pkgCache::VerIterator
&Ver
) {return true;};
172 ListParser() : FoundFileDeps(false) {};
173 virtual ~ListParser() {};
177 bool pkgMakeStatusCache(pkgSourceList
&List
,OpProgress
&Progress
,
178 MMap
**OutMap
= 0,bool AllowMem
= false);
179 bool pkgMakeOnlyStatusCache(OpProgress
&Progress
,DynamicMMap
**OutMap
);