]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgsystem.h
support getting only-uncompressed files via by-hash
[apt.git] / apt-pkg / pkgsystem.h
index 7d0e42d1330a9367d6d48286e66bbde1c3affd2f..affaa5c9af9bb86261d3447b053a663c66c5d4f3 100644 (file)
@@ -1,13 +1,12 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: pkgsystem.h,v 1.2 2001/02/20 07:03:17 jgg Exp $
 /* ######################################################################
 
    System - Abstraction for running on different systems.
    
    Instances of this class can be thought of as factories or meta-classes
    for a variety of more specialized classes. Together this class and 
 /* ######################################################################
 
    System - Abstraction for running on different systems.
    
    Instances of this class can be thought of as factories or meta-classes
    for a variety of more specialized classes. Together this class and 
-   it's speciallized offspring completely define the environment and how
+   it's specialized offspring completely define the environment and how
    to access resources for a specific system. There are several sub
    areas that are all orthogonal - each system has a unique combination of
    these sub areas:
    to access resources for a specific system. There are several sub
    areas that are all orthogonal - each system has a unique combination of
    these sub areas:
@@ -23,7 +22,7 @@
        - Selection of local 'status' indexes that make up the pkgCache.
       
    It is important to note that the handling of index files is not a 
        - Selection of local 'status' indexes that make up the pkgCache.
       
    It is important to note that the handling of index files is not a 
-   function of the system. Index files are handled through a seperate 
+   function of the system. Index files are handled through a separate
    abstraction - the only requirement is that the index files have the
    same idea of versioning as the target system.
    
    abstraction - the only requirement is that the index files have the
    same idea of versioning as the target system.
    
 #ifndef PKGLIB_PKGSYSTEM_H
 #define PKGLIB_PKGSYSTEM_H
 
 #ifndef PKGLIB_PKGSYSTEM_H
 #define PKGLIB_PKGSYSTEM_H
 
-#ifdef __GNUG__
-#pragma interface "apt-pkg/pkgsystem.h"
-#endif
+#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/cacheiterators.h>
+
+#include <vector>
 
 
+#ifndef APT_8_CLEANER_HEADERS
 #include <apt-pkg/depcache.h>
 #include <apt-pkg/depcache.h>
-#include <vector.h>
-    
+#endif
+
+class pkgDepCache;
 class pkgPackageManager;
 class pkgVersioningSystem;
 class Configuration;
 class pkgIndexFile;
 
 class pkgPackageManager;
 class pkgVersioningSystem;
 class Configuration;
 class pkgIndexFile;
 
+class pkgSystemPrivate;
 class pkgSystem
 class pkgSystem
-{   
+{
    public:
 
    // Global list of supported systems
    public:
 
    // Global list of supported systems
@@ -58,8 +61,8 @@ class pkgSystem
    static unsigned long GlobalListLen;
    static pkgSystem *GetSystem(const char *Label);
    
    static unsigned long GlobalListLen;
    static pkgSystem *GetSystem(const char *Label);
    
-   const char *Label;
-   pkgVersioningSystem *VS;
+   const char * const Label;
+   pkgVersioningSystem * const VS;
    
    /* Prevent other programs from touching shared data not covered by
       other locks (cache or state locks) */
    
    /* Prevent other programs from touching shared data not covered by
       other locks (cache or state locks) */
@@ -72,21 +75,53 @@ class pkgSystem
 
    /* Load environment specific configuration and perform any other setup
       necessary */
 
    /* Load environment specific configuration and perform any other setup
       necessary */
-   virtual bool Initialize(Configuration &Cnf) {return true;};
+   virtual bool Initialize(Configuration &/*Cnf*/) {return true;};
    
    /* Type is some kind of Globally Unique way of differentiating
       archive file types.. */
    virtual bool ArchiveSupported(const char *Type) = 0;
 
    // Return a list of system index files..
    
    /* Type is some kind of Globally Unique way of differentiating
       archive file types.. */
    virtual bool ArchiveSupported(const char *Type) = 0;
 
    // Return a list of system index files..
-   virtual bool AddStatusFiles(vector<pkgIndexFile *> &List) = 0;   
-   
+   virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List) = 0;
+
+   virtual bool FindIndex(pkgCache::PkgFileIterator File,
+                         pkgIndexFile *&Found) const = 0;
+
    /* Evauluate how 'right' we are for this system based on the filesystem
       etc.. */
    /* Evauluate how 'right' we are for this system based on the filesystem
       etc.. */
-   virtual signed Score(Configuration const &Cnf) {return 0;};
-   
-   pkgSystem();
-   virtual ~pkgSystem() {};
+   virtual signed Score(Configuration const &/*Cnf*/) {
+      return 0;
+   };
+
+   //FIXME: these methods should be virtual
+   /** does this system has support for MultiArch?
+    *
+    * Systems supporting only single arch (not systems which are single arch)
+    * are considered legacy systems and support for it will likely degrade over
+    * time.
+    *
+    * The default implementation returns always \b true.
+    *
+    * @return \b true if the system supports MultiArch, \b false if not.
+    */
+   bool MultiArchSupported() const;
+   /** architectures supported by this system
+    *
+    * A MultiArch capable system might be configured to use
+    * this capability.
+    *
+    * @return a list of all architectures (native + foreign) configured
+    * for on this system (aka: which can be installed without force)
+    */
+   std::vector<std::string> ArchitecturesSupported() const;
+
+   APT_HIDDEN void SetVersionMapping(map_id_t const in, map_id_t const out);
+   APT_HIDDEN map_id_t GetVersionMapping(map_id_t const in) const;
+
+   pkgSystem(char const * const Label, pkgVersioningSystem * const VS);
+   virtual ~pkgSystem();
+   private:
+   pkgSystemPrivate * const d;
 };
 
 // The environment we are operating in.
 };
 
 // The environment we are operating in.