]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcache.h
merge Goswin Brederlow "support download of index files for different archs"
[apt.git] / apt-pkg / pkgcache.h
index 38733713f32468e3de5817f2c4df8d84d892b0ae..b3d2752d2a65dd6e73a659d9446abfeb93490607 100644 (file)
@@ -32,6 +32,7 @@ class pkgCache                                                                /*{{{*/
    public:
    // Cache element predeclarations
    struct Header;
+   struct Group;
    struct Package;
    struct PackageFile;
    struct Version;
@@ -43,6 +44,8 @@ class pkgCache                                                                /*{{{*/
    struct DescFile;
    
    // Iterators
+   template<typename Str, typename Itr> class Iterator;
+   class GrpIterator;
    class PkgIterator;
    class VerIterator;
    class DescIterator;
@@ -51,14 +54,6 @@ 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;
    
@@ -104,6 +99,7 @@ class pkgCache                                                               /*{{{*/
    
    // Pointers to the arrays of items
    Header *HeaderP;
+   Group *GrpP;
    Package *PkgP;
    VerFile *VerFileP;
    DescFile *DescFileP;
@@ -128,7 +124,9 @@ class pkgCache                                                              /*{{{*/
    const char *Priority(unsigned char Priority);
    
    // Accessors
-   PkgIterator FindPkg(const string &Name);
+   GrpIterator FindGrp(const string &Name);
+   PkgIterator FindPkg(const string &Name, string Arch = "native");
+
    Header &Head() {return *HeaderP;};
    inline PkgIterator PkgBegin();
    inline PkgIterator PkgEnd();
@@ -168,6 +166,7 @@ struct pkgCache::Header
    unsigned short DescFileSz;
    
    // Structure counts
+   unsigned long GroupCount;
    unsigned long PackageCount;
    unsigned long VersionCount;
    unsigned long DescriptionCount;
@@ -187,22 +186,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
+
+       // 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
@@ -245,7 +258,7 @@ 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                                              /*{{{*/
@@ -253,7 +266,7 @@ 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                                               /*{{{*/
@@ -261,7 +274,7 @@ struct pkgCache::Version                                            /*{{{*/
    map_ptrloc VerStr;            // Stringtable
    map_ptrloc Section;           // StringTable (StringItem)
    map_ptrloc Arch;              // StringTable
-      
+   
    // Lists
    map_ptrloc FileList;          // VerFile
    map_ptrloc NextVer;           // Version