X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/e7432370a1c503b0c6d30b501fa84406e3d1bef2..70777d4b589007eeb840d9a67934f1e648f302d7:/apt-pkg/acquire.h diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 2f5da7b31..e05ab3adc 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire.h,v 1.18 1998/12/11 07:20:33 jgg Exp $ +// $Id: acquire.h,v 1.25 1999/10/18 00:37:35 jgg Exp $ /* ###################################################################### Acquire - File Acquiration @@ -82,8 +82,8 @@ class pkgAcquire 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(); @@ -91,23 +91,33 @@ class pkgAcquire 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();}; - + + // 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(); + unsigned long PartialPresent(); pkgAcquire(pkgAcquireStatus *Log = 0); - ~pkgAcquire(); + virtual ~pkgAcquire(); }; // Description of an Item+URI @@ -123,6 +133,7 @@ struct pkgAcquire::ItemDesc class pkgAcquire::Queue { friend pkgAcquire; + friend pkgAcquire::UriIterator; Queue *Next; protected: @@ -164,7 +175,7 @@ class pkgAcquire::Queue bool ItemDone(QItem *Itm); bool Startup(); - bool Shutdown(); + bool Shutdown(bool Final); bool Cycle(); void Bump(); @@ -172,6 +183,40 @@ class pkgAcquire::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 { @@ -184,7 +229,8 @@ struct pkgAcquire::MethodConfig bool Pipeline; bool SendConfig; bool LocalOnly; - + bool NeedsCleanup; + MethodConfig(); }; @@ -214,11 +260,11 @@ class pkgAcquireStatus virtual bool MediaChange(string Media,string Drive) = 0; // Each of these is called by the workers when an event occures - virtual void IMSHit(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 void IMSHit(pkgAcquire::ItemDesc &/*Itm*/) {}; + virtual void Fetch(pkgAcquire::ItemDesc &/*Itm*/) {}; + virtual void Done(pkgAcquire::ItemDesc &/*Itm*/) {}; + virtual void Fail(pkgAcquire::ItemDesc &/*Itm*/) {}; + virtual bool Pulse(pkgAcquire *Owner); // returns false on user cancel virtual void Start(); virtual void Stop();