]> git.saurik.com Git - apt.git/blob - apt-pkg/cachefile.h
Get accurate progress reporting in apt update again
[apt.git] / apt-pkg / cachefile.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 /* ######################################################################
4
5 CacheFile - Simple wrapper class for opening, generating and whatnot
6
7 This class implements a simple 2 line mechanism to open various sorts
8 of caches. It can operate as root, as not root, show progress and so on,
9 it transparently handles everything necessary.
10
11 This means it can rebuild caches from the source list and instantiates
12 and prepares the standard policy mechanism.
13
14 ##################################################################### */
15 /*}}}*/
16 #ifndef PKGLIB_CACHEFILE_H
17 #define PKGLIB_CACHEFILE_H
18
19 #include <stddef.h>
20
21 #include <apt-pkg/depcache.h>
22 #include <apt-pkg/macros.h>
23 #include <apt-pkg/pkgcache.h>
24 #include <apt-pkg/cacheiterators.h>
25
26 #ifndef APT_8_CLEANER_HEADERS
27 #include <apt-pkg/acquire.h>
28 #include <apt-pkg/policy.h>
29 #include <apt-pkg/sourcelist.h>
30 #endif
31
32 class MMap;
33 class pkgPolicy;
34 class pkgSourceList;
35 class pkgIndexFile;
36 class OpProgress;
37
38 class pkgCacheFile
39 {
40 /** \brief dpointer placeholder (for later in case we need it) */
41 void * const d;
42 bool ExternOwner;
43
44 protected:
45 MMap *Map;
46 pkgCache *Cache;
47 pkgDepCache *DCache;
48 pkgSourceList *SrcList;
49
50 public:
51 pkgPolicy *Policy;
52
53 // We look pretty much exactly like a pointer to a dep cache
54 inline operator pkgCache &() const {return *Cache;};
55 inline operator pkgCache *() const {return Cache;};
56 inline operator pkgDepCache &() const {return *DCache;};
57 inline operator pkgDepCache *() const {return DCache;};
58 inline operator pkgPolicy &() const {return *Policy;};
59 inline operator pkgPolicy *() const {return Policy;};
60 inline operator pkgSourceList &() const {return *SrcList;};
61 inline operator pkgSourceList *() const {return SrcList;};
62 inline pkgDepCache *operator ->() const {return DCache;};
63 inline pkgDepCache &operator *() const {return *DCache;};
64 inline pkgDepCache::StateCache &operator [](pkgCache::PkgIterator const &I) const {return (*DCache)[I];};
65 inline unsigned char &operator [](pkgCache::DepIterator const &I) const {return (*DCache)[I];};
66
67 bool BuildCaches(OpProgress *Progress = NULL,bool WithLock = true);
68 APT_DEPRECATED_MSG("Pass Progress in as a pointer") bool BuildCaches(OpProgress &Progress,bool const &WithLock = true) { return BuildCaches(&Progress, WithLock); };
69 bool BuildSourceList(OpProgress *Progress = NULL);
70 bool BuildPolicy(OpProgress *Progress = NULL);
71 bool BuildDepCache(OpProgress *Progress = NULL);
72 bool Open(OpProgress *Progress = NULL, bool WithLock = true);
73 inline bool ReadOnlyOpen(OpProgress *Progress = NULL) { return Open(Progress, false); };
74 APT_DEPRECATED_MSG("Pass Progress in as a pointer") bool Open(OpProgress &Progress,bool const &WithLock = true) { return Open(&Progress, WithLock); };
75 static void RemoveCaches();
76 void Close();
77
78 bool AddIndexFile(pkgIndexFile * const File);
79
80 inline pkgCache* GetPkgCache() { BuildCaches(NULL, false); return Cache; };
81 inline pkgDepCache* GetDepCache() { BuildDepCache(); return DCache; };
82 inline pkgPolicy* GetPolicy() { BuildPolicy(); return Policy; };
83 inline pkgSourceList* GetSourceList() { BuildSourceList(); return SrcList; };
84
85 inline bool IsPkgCacheBuilt() const { return (Cache != NULL); };
86 inline bool IsDepCacheBuilt() const { return (DCache != NULL); };
87 inline bool IsPolicyBuilt() const { return (Policy != NULL); };
88 inline bool IsSrcListBuilt() const { return (SrcList != NULL); };
89
90 pkgCacheFile();
91 explicit pkgCacheFile(pkgDepCache * const Owner);
92 virtual ~pkgCacheFile();
93 };
94
95 #endif