]> git.saurik.com Git - apt.git/blob - apt-pkg/cachefile.h
just-in-time creation for (explicit) negative deps
[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 OpProgress;
36
37 class pkgCacheFile
38 {
39 /** \brief dpointer placeholder (for later in case we need it) */
40 void * const d;
41 bool ExternOwner;
42
43 protected:
44 MMap *Map;
45 pkgCache *Cache;
46 pkgDepCache *DCache;
47 pkgSourceList *SrcList;
48
49 public:
50 pkgPolicy *Policy;
51
52 // We look pretty much exactly like a pointer to a dep cache
53 inline operator pkgCache &() const {return *Cache;};
54 inline operator pkgCache *() const {return Cache;};
55 inline operator pkgDepCache &() const {return *DCache;};
56 inline operator pkgDepCache *() const {return DCache;};
57 inline operator pkgPolicy &() const {return *Policy;};
58 inline operator pkgPolicy *() const {return Policy;};
59 inline operator pkgSourceList &() const {return *SrcList;};
60 inline operator pkgSourceList *() const {return SrcList;};
61 inline pkgDepCache *operator ->() const {return DCache;};
62 inline pkgDepCache &operator *() const {return *DCache;};
63 inline pkgDepCache::StateCache &operator [](pkgCache::PkgIterator const &I) const {return (*DCache)[I];};
64 inline unsigned char &operator [](pkgCache::DepIterator const &I) const {return (*DCache)[I];};
65
66 bool BuildCaches(OpProgress *Progress = NULL,bool WithLock = true);
67 APT_DEPRECATED bool BuildCaches(OpProgress &Progress,bool const &WithLock = true) { return BuildCaches(&Progress, WithLock); };
68 bool BuildSourceList(OpProgress *Progress = NULL);
69 bool BuildPolicy(OpProgress *Progress = NULL);
70 bool BuildDepCache(OpProgress *Progress = NULL);
71 bool Open(OpProgress *Progress = NULL, bool WithLock = true);
72 inline bool ReadOnlyOpen(OpProgress *Progress = NULL) { return Open(Progress, false); };
73 APT_DEPRECATED bool Open(OpProgress &Progress,bool const &WithLock = true) { return Open(&Progress, WithLock); };
74 static void RemoveCaches();
75 void Close();
76
77 inline pkgCache* GetPkgCache() { BuildCaches(NULL, false); return Cache; };
78 inline pkgDepCache* GetDepCache() { BuildDepCache(); return DCache; };
79 inline pkgPolicy* GetPolicy() { BuildPolicy(); return Policy; };
80 inline pkgSourceList* GetSourceList() { BuildSourceList(); return SrcList; };
81
82 inline bool IsPkgCacheBuilt() const { return (Cache != NULL); };
83 inline bool IsDepCacheBuilt() const { return (DCache != NULL); };
84 inline bool IsPolicyBuilt() const { return (Policy != NULL); };
85 inline bool IsSrcListBuilt() const { return (SrcList != NULL); };
86
87 pkgCacheFile();
88 explicit pkgCacheFile(pkgDepCache * const Owner);
89 virtual ~pkgCacheFile();
90 };
91
92 #endif