]> git.saurik.com Git - apt.git/blob - apt-pkg/indexfile.h
e6e429c2c59e0d75c50afc09d20026b0982d1e00
[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 Target specific options defined by the implementation */
65 std::map<std::string, std::string> Options;
66
67 IndexTarget(std::string const &MetaKey, std::string const &ShortDesc,
68 std::string const &LongDesc, std::string const &URI, bool const IsOptional,
69 std::map<std::string, std::string> const &Options);
70
71 std::string Option(std::string const &Key) const;
72 };
73 /*}}}*/
74
75 class pkgIndexFile
76 {
77 protected:
78 bool Trusted;
79
80 public:
81
82 class Type
83 {
84 public:
85
86 // Global list of Items supported
87 static Type **GlobalList;
88 static unsigned long GlobalListLen;
89 static Type *GetType(const char *Type) APT_PURE;
90
91 const char *Label;
92
93 virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator /*File*/) const {return 0;};
94 virtual pkgSrcRecords::Parser *CreateSrcPkgParser(std::string /*File*/) const {return 0;};
95 Type();
96 virtual ~Type() {};
97 };
98
99 virtual const Type *GetType() const = 0;
100
101 // Return descriptive strings of various sorts
102 virtual std::string ArchiveInfo(pkgCache::VerIterator Ver) const;
103 virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record,
104 pkgSrcRecords::File const &File) const;
105 virtual std::string Describe(bool Short = false) const = 0;
106
107 // Interface for acquire
108 virtual std::string ArchiveURI(std::string /*File*/) const {return std::string();};
109
110 // Interface for the record parsers
111 virtual pkgSrcRecords::Parser *CreateSrcParser() const {return 0;};
112
113 // Interface for the Cache Generator
114 virtual bool Exists() const = 0;
115 virtual bool HasPackages() const = 0;
116 virtual unsigned long Size() const = 0;
117 virtual bool Merge(pkgCacheGenerator &/*Gen*/, OpProgress* /*Prog*/) const { return false; };
118 APT_DEPRECATED virtual bool Merge(pkgCacheGenerator &Gen, OpProgress &Prog) const
119 { return Merge(Gen, &Prog); };
120 virtual bool MergeFileProvides(pkgCacheGenerator &/*Gen*/,OpProgress* /*Prog*/) const {return true;};
121 APT_DEPRECATED virtual bool MergeFileProvides(pkgCacheGenerator &Gen, OpProgress &Prog) const
122 {return MergeFileProvides(Gen, &Prog);};
123 virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
124
125 static bool TranslationsAvailable();
126 static bool CheckLanguageCode(const char *Lang);
127 static std::string LanguageCode();
128
129 bool IsTrusted() const { return Trusted; };
130
131 pkgIndexFile(bool Trusted);
132 virtual ~pkgIndexFile() {};
133 };
134
135 class pkgIndexTargetFile : public pkgIndexFile
136 {
137 protected:
138 IndexTarget const Target;
139
140 std::string IndexFileName() const;
141
142 public:
143 virtual std::string ArchiveURI(std::string File) const;
144 virtual std::string Describe(bool Short = false) const;
145 virtual bool Exists() const;
146 virtual unsigned long Size() const;
147
148 pkgIndexTargetFile(IndexTarget const &Target, bool const Trusted);
149 };
150
151 #endif