]> git.saurik.com Git - apt.git/blob - apt-pkg/indexfile.h
c38cf0bf09149c055bfbccb9c8b81874c9eeeaa0
[apt.git] / apt-pkg / indexfile.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: indexfile.h,v 1.6.2.1 2003/12/24 23:09:17 mdz Exp $
4 /* ######################################################################
5
6 Index File - Abstraction for an index of archive/source file.
7
8 There are 4 primary sorts of index files, all represented by this
9 class:
10
11 Binary index files
12 Binary translation files
13 Binary index files describing the local system
14 Source index files
15
16 They are all bundled together here, and the interfaces for
17 sources.list, acquire, cache gen and record parsing all use this class
18 to access the underlying representation.
19
20 ##################################################################### */
21 /*}}}*/
22 #ifndef PKGLIB_INDEXFILE_H
23 #define PKGLIB_INDEXFILE_H
24
25 #include <apt-pkg/srcrecords.h>
26 #include <apt-pkg/pkgrecords.h>
27 #include <apt-pkg/pkgcache.h>
28 #include <apt-pkg/cacheiterators.h>
29 #include <apt-pkg/macros.h>
30
31 #include <map>
32 #include <string>
33
34 #ifndef APT_8_CLEANER_HEADERS
35 using std::string;
36 #endif
37 #ifndef APT_10_CLEANER_HEADERS
38 class pkgAcquire;
39 #endif
40
41 class pkgCacheGenerator;
42 class OpProgress;
43
44 class IndexTarget /*{{{*/
45 /** \brief Information about an index file. */
46 {
47 public:
48 /** \brief A URI from which the index file can be downloaded. */
49 std::string URI;
50
51 /** \brief A description of the index file. */
52 std::string Description;
53
54 /** \brief A shorter description of the index file. */
55 std::string ShortDesc;
56
57 /** \brief The key by which this index file should be
58 looked up within the meta index file. */
59 std::string MetaKey;
60
61 /** \brief Is it okay if the file isn't found in the meta index */
62 bool IsOptional;
63
64 /** \brief options with which this target was created
65 Prefer the usage of #Option if at all possible.
66 Beware: Not all of these options are intended for public use */
67 std::map<std::string, std::string> Options;
68
69 IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
70 std::string const &LongDesc, std::string const &URI, bool const IsOptional,
71 std::map<std::string, std::string> const &Options);
72
73 enum OptionKeys {
74 SITE,
75 RELEASE,
76 COMPONENT,
77 LANGUAGE,
78 ARCHITECTURE,
79 BASE_URI,
80 REPO_URI,
81 CREATED_BY,
82 };
83 std::string Option(OptionKeys const Key) const;
84 };
85 /*}}}*/
86
87 class pkgIndexFile
88 {
89 protected:
90 bool Trusted;
91
92 public:
93
94 class Type
95 {
96 public:
97
98 // Global list of Items supported
99 static Type **GlobalList;
100 static unsigned long GlobalListLen;
101 static Type *GetType(const char *Type) APT_PURE;
102
103 const char *Label;
104
105 virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator /*File*/) const {return 0;};
106 virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string /*File*/) const {return 0;};
107 Type();
108 virtual ~Type() {};
109 };
110
111 virtual const Type *GetType() const = 0;
112
113 // Return descriptive strings of various sorts
114 virtual std::string ArchiveInfo(pkgCache::VerIterator Ver) const;
115 virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
116 pkgSrcRecords::File const &File) const;
117 virtual std::string Describe(bool Short = false) const = 0;
118
119 // Interface for acquire
120 virtual std::string ArchiveURI(std::string /*File*/) const {return std::string();};
121
122 // Interface for the record parsers
123 virtual pkgSrcRecords::Parser *CreateSrcParser() const {return 0;};
124
125 // Interface for the Cache Generator
126 virtual bool Exists() const = 0;
127 virtual bool HasPackages() const = 0;
128 virtual unsigned long Size() const = 0;
129 virtual bool Merge(pkgCacheGenerator &/*Gen*/, OpProgress* /*Prog*/) const { return false; };
130 APT_DEPRECATED virtual bool Merge(pkgCacheGenerator &Gen, OpProgress &Prog) const
131 { return Merge(Gen, &Prog); };
132 virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,OpProgress* /*Prog*/) const {return true;};
133 APT_DEPRECATED virtual bool MergeFileProvides(pkgCacheGenerator &Gen, OpProgress &Prog) const
134 {return MergeFileProvides(Gen, &Prog);};
135 virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
136
137 static bool TranslationsAvailable();
138 static bool CheckLanguageCode(const char *Lang);
139 static std::string LanguageCode();
140
141 bool IsTrusted() const { return Trusted; };
142
143 pkgIndexFile(bool Trusted);
144 virtual ~pkgIndexFile() {};
145 };
146
147 class pkgIndexTargetFile : public pkgIndexFile
148 {
149 protected:
150 IndexTarget const Target;
151
152 std::string IndexFileName() const;
153
154 public:
155 virtual std::string ArchiveURI(std::string File) const;
156 virtual std::string Describe(bool Short = false) const;
157 virtual bool Exists() const;
158 virtual unsigned long Size() const;
159
160 pkgIndexTargetFile(IndexTarget const &Target, bool const Trusted);
161 };
162
163 #endif