]> git.saurik.com Git - apt.git/blob - apt-pkg/pkgrecords.cc
rework cachesets API to allow future extension
[apt.git] / apt-pkg / pkgrecords.cc
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: pkgrecords.cc,v 1.8 2003/09/02 04:52:16 mdz Exp $
4 /* ######################################################################
5
6 Package Records - Allows access to complete package description records
7 directly from the file.
8
9 ##################################################################### */
10 /*}}}*/
11 // Include Files /*{{{*/
12 #include<config.h>
13
14 #include <apt-pkg/pkgrecords.h>
15 #include <apt-pkg/indexfile.h>
16 #include <apt-pkg/error.h>
17 #include <apt-pkg/pkgcache.h>
18 #include <apt-pkg/cacheiterators.h>
19
20 #include <stddef.h>
21 #include <vector>
22
23 #include <apti18n.h>
24 /*}}}*/
25
26 // Records::pkgRecords - Constructor /*{{{*/
27 // ---------------------------------------------------------------------
28 /* This will create the necessary structures to access the status files */
29 pkgRecords::pkgRecords(pkgCache &aCache) : d(NULL), Cache(aCache),
30 Files(Cache.HeaderP->PackageFileCount)
31 {
32 for (pkgCache::PkgFileIterator I = Cache.FileBegin();
33 I.end() == false; ++I)
34 {
35 const pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(I.IndexType());
36 if (Type == 0)
37 {
38 _error->Error(_("Index file type '%s' is not supported"),I.IndexType());
39 return;
40 }
41
42 Files[I->ID] = Type->CreatePkgParser(I);
43 if (Files[I->ID] == 0)
44 return;
45 }
46 }
47 /*}}}*/
48 // Records::~pkgRecords - Destructor /*{{{*/
49 // ---------------------------------------------------------------------
50 /* */
51 pkgRecords::~pkgRecords()
52 {
53 for ( std::vector<Parser*>::iterator it = Files.begin();
54 it != Files.end();
55 ++it)
56 {
57 delete *it;
58 }
59 }
60 /*}}}*/
61 // Records::Lookup - Get a parser for the package version file /*{{{*/
62 // ---------------------------------------------------------------------
63 /* */
64 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver)
65 {
66 Files[Ver.File()->ID]->Jump(Ver);
67 return *Files[Ver.File()->ID];
68 }
69 /*}}}*/
70 // Records::Lookup - Get a parser for the package description file /*{{{*/
71 // ---------------------------------------------------------------------
72 /* */
73 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc)
74 {
75 Files[Desc.File()->ID]->Jump(Desc);
76 return *Files[Desc.File()->ID];
77 }
78 /*}}}*/