]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcache.h
Progress and combined cache generator
[apt.git] / apt-pkg / pkgcache.h
index 0dc939a51424cdb8944562019fbfb0b085e73cb7..2e695ab7bd926a802207ff13fc41644a3f5858dc 100644 (file)
@@ -1,11 +1,11 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: pkgcache.h,v 1.1 1998/07/02 02:58:12 jgg Exp $
+// $Id: pkgcache.h,v 1.7 1998/07/19 04:22:01 jgg Exp $
 /* ######################################################################
    
    Cache - Structure definitions for the cache file
    
-   Please see doc/pkglib/cache.sgml for a more detailed description of 
+   Please see doc/apt-pkg/cache.sgml for a more detailed description of 
    this format. Also be sure to keep that file up-to-date!!
    
    Clients should always use the CacheIterators classes for access to the
 #ifndef PKGLIB_PKGCACHE_H
 #define PKGLIB_PKGCACHE_H
 
+#ifdef __GNUG__
+#pragma interface "apt-pkg/pkgcache.h"
+#endif 
+
 #include <string>
 #include <time.h>
-#include <pkglib/mmap.h>
-
-// Definitions for Depends::Type
-#define pkgDEP_Depends 1
-#define pkgDEP_PreDepends 2
-#define pkgDEP_Suggests 3
-#define pkgDEP_Recommends 4
-#define pkgDEP_Conflicts 5
-#define pkgDEP_Replaces 6
-
-// Definitions for Version::Priority
-#define pkgPRIO_Important 1
-#define pkgPRIO_Required 2
-#define pkgPRIO_Standard 3
-#define pkgPRIO_Optional 4
-#define pkgPRIO_Extra 5
-
-// Definitions for Package::SelectedState
-#define pkgSTATE_Unkown 0
-#define pkgSTATE_Install 1
-#define pkgSTATE_Hold 2
-#define pkgSTATE_DeInstall 3
-#define pkgSTATE_Purge 4
-
-// Definitions for Package::Flags
-#define pkgFLAG_Auto (1 << 0)
-#define pkgFLAG_New (1 << 1)
-#define pkgFLAG_Obsolete (1 << 2)
-#define pkgFLAG_Essential (1 << 3)
-#define pkgFLAG_ImmediateConf (1 << 4)
-
-// Definitions for Package::InstState
-#define pkgSTATE_Ok 0
-#define pkgSTATE_ReInstReq 1
-#define pkgSTATE_Hold 2
-#define pkgSTATE_HoldReInstReq 3
-
-// Definitions for Package::CurrentState
-#define pkgSTATE_NotInstalled 0
-#define pkgSTATE_UnPacked 1
-#define pkgSTATE_HalfConfigured 2
-#define pkgSTATE_UnInstalled 3
-#define pkgSTATE_HalfInstalled 4
-#define pkgSTATE_ConfigFiles 5
-#define pkgSTATE_Installed 6
-
-// Definitions for PackageFile::Flags
-#define pkgFLAG_NotSource (1 << 0)
-
-// Definitions for Dependency::CompareOp
-#define pkgOP_OR 0x10
-#define pkgOP_LESSEQ 0x1
-#define pkgOP_GREATEREQ 0x2
-#define pkgOP_LESS 0x3
-#define pkgOP_GREATER 0x4
-#define pkgOP_EQUALS 0x5
-#define pkgOP_NOTEQUALS 0x6
+#include <apt-pkg/mmap.h>
 
 class pkgCache
 {
@@ -91,6 +39,7 @@ class pkgCache
    struct Provides;
    struct Dependency;
    struct StringItem;
+   struct VerFile;
    
    // Iterators
    class PkgIterator;
@@ -98,11 +47,38 @@ class pkgCache
    class DepIterator;
    class PrvIterator;
    class PkgFileIterator;
+   class VerFileIterator;
    friend PkgIterator;
    friend VerIterator;
    friend DepIterator;
    friend PrvIterator;
    friend PkgFileIterator;
+   friend VerFileIterator;
+   
+   // These are all the constants used in the cache structures
+   struct Dep
+   {
+      enum DepType {Depends=1,PreDepends=2,Suggests=3,Recommends=4,
+        Conflicts=5,Replaces=6};
+      enum DepCompareOp {Or=0x10,NoOp=0,LessEq=0x1,GreaterEq=0x2,Less=0x3,
+        Greater=0x4,Equals=0x5,NotEquals=0x6};
+   };
+   
+   struct State
+   {
+      enum VerPriority {Important=1,Required=2,Standard=3,Optional=5,Extra=5};
+      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,
+        UnInstalled=3,HalfInstalled=4,ConfigFiles=5,Installed=6};
+   };
+   
+   struct Flag
+   {
+      enum PkgFlags {Auto=(1<<0),New=(1<<1),Obsolete=(1<<2),Essential=(1<<3),
+        ImmediateConf=(1<<4)};
+      enum PkgFFlags {NotSource=(1<<0)};
+   };
    
    protected:
    
@@ -121,13 +97,14 @@ class pkgCache
    // Pointers to the arrays of items
    Header *HeaderP;
    Package *PkgP;
+   VerFile *VerFileP;
    PackageFile *PkgFileP;
    Version *VerP;
    Provides *ProvideP;
    Dependency *DepP;
    StringItem *StringItemP;
    char *StrP;
-   
+
    virtual bool ReMap();
    inline bool Sync() {return Map.Sync();};
    
@@ -135,12 +112,17 @@ class pkgCache
    inline unsigned long Hash(string S) const {return sHash(S);};
    inline unsigned long Hash(const char *S) const {return sHash(S);};
 
+   // Usefull transformation things
+   const char *Priority(unsigned char Priority);
+   
    // Accessors
    PkgIterator FindPkg(string Name);
    Header &Head() {return *HeaderP;};
    inline PkgIterator PkgBegin();
    inline PkgIterator PkgEnd();
-
+   inline PkgFileIterator FileBegin();
+   inline PkgFileIterator FileEnd();
+   
    pkgCache(MMap &Map);
    virtual ~pkgCache() {};
 };
@@ -161,7 +143,8 @@ struct pkgCache::Header
    unsigned short VersionSz;
    unsigned short DependencySz;
    unsigned short ProvidesSz;
-
+   unsigned short VerFileSz;
+   
    // Structure counts
    unsigned long PackageCount;
    unsigned long VersionCount;
@@ -171,10 +154,11 @@ struct pkgCache::Header
    // Offsets
    unsigned long FileList;              // struct PackageFile
    unsigned long StringList;            // struct StringItem
+   unsigned long MaxVerFileSize;
 
    /* Allocation pools, there should be one of these for each structure
       excluding the header */
-   DynamicMMap::Pool Pools[6];
+   DynamicMMap::Pool Pools[7];
    
    // Rapid package name lookup
    unsigned long HashTable[512];
@@ -204,7 +188,7 @@ struct pkgCache::Package
    unsigned char CurrentState;      // State
    
    unsigned short ID;
-   unsigned short Flags;
+   unsigned long Flags;
 };
 
 struct pkgCache::PackageFile
@@ -218,23 +202,30 @@ struct pkgCache::PackageFile
    // Linked list
    unsigned long NextFile;        // PackageFile
    unsigned short ID;
-   unsigned short Flags;
+   unsigned long Flags;
    time_t mtime;                  // Modification time for the file
 };
 
+struct pkgCache::VerFile
+{
+   unsigned long File;           // PackageFile
+   unsigned long NextFile;       // PkgVerFile
+   unsigned long Offset;
+   unsigned short Size;
+};
+
 struct pkgCache::Version
 {
    unsigned long VerStr;            // Stringtable
-   unsigned long File;              // PackageFile
    unsigned long Section;           // StringTable (StringItem)
    
    // Lists
+   unsigned long FileList;          // VerFile
    unsigned long NextVer;           // Version
    unsigned long DependsList;       // Dependency
    unsigned long ParentPkg;         // Package
    unsigned long ProvidesList;      // Provides
    
-   unsigned long Offset;
    unsigned long Size;
    unsigned long InstalledSize;
    unsigned short ID;
@@ -270,11 +261,15 @@ struct pkgCache::StringItem
    unsigned long NextItem;      // StringItem
 };
 
-#include <pkglib/cacheiterators.h>
+#include <apt-pkg/cacheiterators.h>
 
 inline pkgCache::PkgIterator pkgCache::PkgBegin() 
        {return PkgIterator(*this);};
 inline pkgCache::PkgIterator pkgCache::PkgEnd() 
        {return PkgIterator(*this,PkgP);};
+inline pkgCache::PkgFileIterator pkgCache::FileBegin()
+       {return PkgFileIterator(*this);};
+inline pkgCache::PkgFileIterator pkgCache::FileEnd()
+       {return PkgFileIterator(*this,PkgFileP);};
 
 #endif