]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire.h
Purge support
[apt.git] / apt-pkg / acquire.h
index d6339e74db0e1b25adb7c1b4973a2bd79b4832bf..bf43ac7039a2b4d9525d234c61a253a24fc1e6c8 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire.h,v 1.17 1998/12/11 06:01:27 jgg Exp $
+// $Id: acquire.h,v 1.23 1999/07/09 04:38:00 jgg Exp $
 /* ######################################################################
 
    Acquire - File Acquiration
 /* ######################################################################
 
    Acquire - File Acquiration
@@ -82,8 +82,8 @@ class pkgAcquire
    string QueueName(string URI,MethodConfig const *&Config);
 
    // FDSET managers for derived classes
    string QueueName(string URI,MethodConfig const *&Config);
 
    // FDSET managers for derived classes
-   void SetFds(int &Fd,fd_set *RSet,fd_set *WSet);
-   void RunFds(fd_set *RSet,fd_set *WSet);   
+   virtual void SetFds(int &Fd,fd_set *RSet,fd_set *WSet);
+   virtual void RunFds(fd_set *RSet,fd_set *WSet);   
 
    // A queue calls this when it dequeues an item
    void Bump();
 
    // A queue calls this when it dequeues an item
    void Bump();
@@ -91,23 +91,33 @@ class pkgAcquire
    public:
 
    MethodConfig *GetConfig(string Access);
    public:
 
    MethodConfig *GetConfig(string Access);
-   bool Run();
 
 
+   enum RunResult {Continue,Failed,Cancelled};
+
+   RunResult Run();
+   void Shutdown();
+   
    // Simple iteration mechanism
    inline Worker *WorkersBegin() {return Workers;};
    Worker *WorkerStep(Worker *I);
    inline Item **ItemsBegin() {return Items.begin();};
    inline Item **ItemsEnd() {return Items.end();};
    // Simple iteration mechanism
    inline Worker *WorkersBegin() {return Workers;};
    Worker *WorkerStep(Worker *I);
    inline Item **ItemsBegin() {return Items.begin();};
    inline Item **ItemsEnd() {return Items.end();};
-
+   
+   // Iterate over queued Item URIs
+   class UriIterator;
+   UriIterator UriBegin();
+   UriIterator UriEnd();
+   
    // Cleans out the download dir
    bool Clean(string Dir);
 
    // Returns the size of the total download set
    unsigned long TotalNeeded();
    unsigned long FetchNeeded();
    // Cleans out the download dir
    bool Clean(string Dir);
 
    // Returns the size of the total download set
    unsigned long TotalNeeded();
    unsigned long FetchNeeded();
+   unsigned long PartialPresent();
    
    pkgAcquire(pkgAcquireStatus *Log = 0);
    
    pkgAcquire(pkgAcquireStatus *Log = 0);
-   ~pkgAcquire();
+   virtual ~pkgAcquire();
 };
 
 // Description of an Item+URI
 };
 
 // Description of an Item+URI
@@ -123,6 +133,7 @@ struct pkgAcquire::ItemDesc
 class pkgAcquire::Queue
 {
    friend pkgAcquire;
 class pkgAcquire::Queue
 {
    friend pkgAcquire;
+   friend pkgAcquire::UriIterator;
    Queue *Next;
    
    protected:
    Queue *Next;
    
    protected:
@@ -149,7 +160,7 @@ class pkgAcquire::Queue
    QItem *Items;
    pkgAcquire::Worker *Workers;
    pkgAcquire *Owner;
    QItem *Items;
    pkgAcquire::Worker *Workers;
    pkgAcquire *Owner;
-   unsigned long PipeDepth;
+   signed long PipeDepth;
    unsigned long MaxPipeDepth;
    
    public:
    unsigned long MaxPipeDepth;
    
    public:
@@ -172,6 +183,40 @@ class pkgAcquire::Queue
    ~Queue();
 };
 
    ~Queue();
 };
 
+class pkgAcquire::UriIterator
+{
+   pkgAcquire::Queue *CurQ;
+   pkgAcquire::Queue::QItem *CurItem;
+   
+   public:
+   
+   // Advance to the next item
+   inline void operator ++() {operator ++();};
+   void operator ++(int)
+   {
+      CurItem = CurItem->Next;
+      while (CurItem == 0 && CurQ != 0)
+      {
+        CurItem = CurQ->Items;
+        CurQ = CurQ->Next;
+      }
+   };
+   
+   // Accessors
+   inline pkgAcquire::ItemDesc const *operator ->() const {return CurItem;};
+   inline bool operator !=(UriIterator const &rhs) const {return rhs.CurQ != CurQ || rhs.CurItem != CurItem;};
+   inline bool operator ==(UriIterator const &rhs) const {return rhs.CurQ == CurQ && rhs.CurItem == CurItem;};
+   
+   UriIterator(pkgAcquire::Queue *Q) : CurQ(Q), CurItem(0)
+   {
+      while (CurItem == 0 && CurQ != 0)
+      {
+        CurItem = CurQ->Items;
+        CurQ = CurQ->Next;
+      }
+   }   
+};
+
 // Configuration information from each method
 struct pkgAcquire::MethodConfig
 {
 // Configuration information from each method
 struct pkgAcquire::MethodConfig
 {
@@ -218,7 +263,7 @@ class pkgAcquireStatus
    virtual void Fetch(pkgAcquire::ItemDesc &Itm) {};
    virtual void Done(pkgAcquire::ItemDesc &Itm) {};
    virtual void Fail(pkgAcquire::ItemDesc &Itm) {};
    virtual void Fetch(pkgAcquire::ItemDesc &Itm) {};
    virtual void Done(pkgAcquire::ItemDesc &Itm) {};
    virtual void Fail(pkgAcquire::ItemDesc &Itm) {};
-   virtual void Pulse(pkgAcquire *Owner);
+   virtual bool Pulse(pkgAcquire *Owner); // returns false on user cancel
    virtual void Start();
    virtual void Stop();
    
    virtual void Start();
    virtual void Stop();