X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/b790b130ad0a43be5738c467c16bbc2dd657ca66..34e8a998eb9e4f75f989acc6f8b9db8010e56b7c:/apt-pkg/pkgcache.h diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index c7a3172cc..012caac76 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -19,9 +19,6 @@ #ifndef PKGLIB_PKGCACHE_H #define PKGLIB_PKGCACHE_H -#ifdef __GNUG__ -#pragma interface "apt-pkg/pkgcache.h" -#endif #include #include @@ -30,11 +27,12 @@ using std::string; class pkgVersioningSystem; -class pkgCache +class pkgCache /*{{{*/ { public: // Cache element predeclarations struct Header; + struct Group; struct Package; struct PackageFile; struct Version; @@ -46,6 +44,8 @@ class pkgCache struct DescFile; // Iterators + template class Iterator; + class GrpIterator; class PkgIterator; class VerIterator; class DescIterator; @@ -54,22 +54,18 @@ class pkgCache class PkgFileIterator; class VerFileIterator; class DescFileIterator; - friend class PkgIterator; - friend class VerIterator; - friend class DescInterator; - friend class DepIterator; - friend class PrvIterator; - friend class PkgFileIterator; - friend class VerFileIterator; - friend class DescFileIterator; class Namespace; // These are all the constants used in the cache structures + + // WARNING - if you change these lists you must also edit + // the stringification in pkgcache.cc and also consider whether + // the cache file will become incompatible. struct Dep { enum DepType {Depends=1,PreDepends=2,Suggests=3,Recommends=4, - Conflicts=5,Replaces=6,Obsoletes=7}; + Conflicts=5,Replaces=6,Obsoletes=7,DpkgBreaks=8,Enhances=9}; enum DepCompareOp {Or=0x10,NoOp=0,LessEq=0x1,GreaterEq=0x2,Less=0x3, Greater=0x4,Equals=0x5,NotEquals=0x6}; }; @@ -80,7 +76,8 @@ class pkgCache enum PkgSelectedState {Unknown=0,Install=1,Hold=2,DeInstall=3,Purge=4}; enum PkgInstState {Ok=0,ReInstReq=1,HoldInst=2,HoldReInstReq=3}; enum PkgCurrentState {NotInstalled=0,UnPacked=1,HalfConfigured=2, - HalfInstalled=4,ConfigFiles=5,Installed=6}; + HalfInstalled=4,ConfigFiles=5,Installed=6, + TriggersAwaited=7,TriggersPending=8}; }; struct Flag @@ -102,6 +99,7 @@ class pkgCache // Pointers to the arrays of items Header *HeaderP; + Group *GrpP; Package *PkgP; VerFile *VerFileP; DescFile *DescFileP; @@ -126,8 +124,13 @@ class pkgCache const char *Priority(unsigned char Priority); // Accessors + GrpIterator FindGrp(const string &Name); PkgIterator FindPkg(const string &Name); + PkgIterator FindPkg(const string &Name, string Arch); + Header &Head() {return *HeaderP;}; + inline GrpIterator GrpBegin(); + inline GrpIterator GrpEnd(); inline PkgIterator PkgBegin(); inline PkgIterator PkgEnd(); inline PkgFileIterator FileBegin(); @@ -144,8 +147,8 @@ class pkgCache pkgCache(MMap *Map,bool DoMap = true); virtual ~pkgCache() {}; }; - -// Header structure + /*}}}*/ +// Header structure /*{{{*/ struct pkgCache::Header { // Signature information @@ -166,6 +169,7 @@ struct pkgCache::Header unsigned short DescFileSz; // Structure counts + unsigned long GroupCount; unsigned long PackageCount; unsigned long VersionCount; unsigned long DescriptionCount; @@ -185,22 +189,36 @@ struct pkgCache::Header /* Allocation pools, there should be one of these for each structure excluding the header */ - DynamicMMap::Pool Pools[8]; + DynamicMMap::Pool Pools[9]; - // Rapid package name lookup - map_ptrloc HashTable[2*1048]; + // Rapid package and group name lookup + // Notice: Increase only both table sizes as the + // hashmethod assume the size of the Pkg one + map_ptrloc PkgHashTable[2*1048]; + map_ptrloc GrpHashTable[2*1048]; bool CheckSizes(Header &Against) const; Header(); }; + /*}}}*/ +struct pkgCache::Group { /*{{{*/ + map_ptrloc Name; // Stringtable -struct pkgCache::Package + // Linked List + map_ptrloc FirstPackage;// Package + map_ptrloc LastPackage; // Package + map_ptrloc Next; // Group +}; + /*}}}*/ +struct pkgCache::Package /*{{{*/ { // Pointers map_ptrloc Name; // Stringtable + map_ptrloc Arch; // StringTable (StringItem) map_ptrloc VersionList; // Version map_ptrloc CurrentVer; // Version map_ptrloc Section; // StringTable (StringItem) + map_ptrloc Group; // Group the Package belongs to // Linked list map_ptrloc NextPackage; // Package @@ -212,15 +230,16 @@ struct pkgCache::Package unsigned char InstState; // Flags unsigned char CurrentState; // State - unsigned short ID; + unsigned int ID; unsigned long Flags; }; - -struct pkgCache::PackageFile + /*}}}*/ +struct pkgCache::PackageFile /*{{{*/ { // Names map_ptrloc FileName; // Stringtable map_ptrloc Archive; // Stringtable + map_ptrloc Codename; // Stringtable map_ptrloc Component; // Stringtable map_ptrloc Version; // Stringtable map_ptrloc Origin; // Stringtable @@ -233,32 +252,32 @@ struct pkgCache::PackageFile // Linked list map_ptrloc NextFile; // PackageFile - unsigned short ID; + unsigned int ID; time_t mtime; // Modification time for the file }; - -struct pkgCache::VerFile + /*}}}*/ +struct pkgCache::VerFile /*{{{*/ { map_ptrloc File; // PackageFile map_ptrloc NextFile; // PkgVerFile map_ptrloc Offset; // File offset - unsigned short Size; + unsigned long Size; }; - -struct pkgCache::DescFile + /*}}}*/ +struct pkgCache::DescFile /*{{{*/ { map_ptrloc File; // PackageFile map_ptrloc NextFile; // PkgVerFile map_ptrloc Offset; // File offset - unsigned short Size; + unsigned long Size; }; - -struct pkgCache::Version + /*}}}*/ +struct pkgCache::Version /*{{{*/ { map_ptrloc VerStr; // Stringtable map_ptrloc Section; // StringTable (StringItem) - map_ptrloc Arch; // StringTable - + enum {None, All, Foreign, Same, Allowed} MultiArch; + // Lists map_ptrloc FileList; // VerFile map_ptrloc NextVer; // Version @@ -270,11 +289,11 @@ struct pkgCache::Version map_ptrloc Size; // These are the .deb size map_ptrloc InstalledSize; unsigned short Hash; - unsigned short ID; + unsigned int ID; unsigned char Priority; }; - -struct pkgCache::Description + /*}}}*/ +struct pkgCache::Description /*{{{*/ { // Language Code store the description translation language code. If // the value has a 0 lenght then this is readed using the Package @@ -287,10 +306,10 @@ struct pkgCache::Description map_ptrloc NextDesc; // Description map_ptrloc ParentPkg; // Package - unsigned short ID; + unsigned int ID; }; - -struct pkgCache::Dependency + /*}}}*/ +struct pkgCache::Dependency /*{{{*/ { map_ptrloc Version; // Stringtable map_ptrloc Package; // Package @@ -303,8 +322,8 @@ struct pkgCache::Dependency unsigned char Type; unsigned char CompareOp; }; - -struct pkgCache::Provides + /*}}}*/ +struct pkgCache::Provides /*{{{*/ { map_ptrloc ParentPkg; // Pacakge map_ptrloc Version; // Version @@ -312,15 +331,19 @@ struct pkgCache::Provides map_ptrloc NextProvides; // Provides map_ptrloc NextPkgProv; // Provides }; - -struct pkgCache::StringItem + /*}}}*/ +struct pkgCache::StringItem /*{{{*/ { map_ptrloc String; // Stringtable map_ptrloc NextItem; // StringItem }; - + /*}}}*/ #include +inline pkgCache::GrpIterator pkgCache::GrpBegin() + {return GrpIterator(*this);}; +inline pkgCache::GrpIterator pkgCache::GrpEnd() + {return GrpIterator(*this,GrpP);}; inline pkgCache::PkgIterator pkgCache::PkgBegin() {return PkgIterator(*this);}; inline pkgCache::PkgIterator pkgCache::PkgEnd() @@ -331,10 +354,10 @@ inline pkgCache::PkgFileIterator pkgCache::FileEnd() {return PkgFileIterator(*this,PkgFileP);}; // Oh I wish for Real Name Space Support -class pkgCache::Namespace +class pkgCache::Namespace /*{{{*/ { public: - + typedef pkgCache::GrpIterator GrpIterator; typedef pkgCache::PkgIterator PkgIterator; typedef pkgCache::VerIterator VerIterator; typedef pkgCache::DescIterator DescIterator; @@ -349,5 +372,5 @@ class pkgCache::Namespace typedef pkgCache::Dep Dep; typedef pkgCache::Flag Flag; }; - + /*}}}*/ #endif