]> git.saurik.com Git - apt.git/blob - apt-pkg/pkgrecords.cc
* apt-pkg/indexfile.cc:
[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 #ifdef __GNUG__
13 #pragma implementation "apt-pkg/pkgrecords.h"
14 #endif
15 #include <apt-pkg/pkgrecords.h>
16 #include <apt-pkg/indexfile.h>
17 #include <apt-pkg/error.h>
18 #include <apt-pkg/configuration.h>
19
20 #include <apti18n.h>
21 /*}}}*/
22
23 // Records::pkgRecords - Constructor /*{{{*/
24 // ---------------------------------------------------------------------
25 /* This will create the necessary structures to access the status files */
26 pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache),
27 Files(Cache.HeaderP->PackageFileCount)
28 {
29 for (pkgCache::PkgFileIterator I = Cache.FileBegin();
30 I.end() == false; I++)
31 {
32 const pkgIndexFile::Type *Type = pkgIndexFile::Type::GetType(I.IndexType());
33 if (Type == 0)
34 {
35 _error->Error(_("Index file type '%s' is not supported"),I.IndexType());
36 return;
37 }
38
39 Files[I->ID] = Type->CreatePkgParser(I);
40 if (Files[I->ID] == 0)
41 return;
42 }
43 }
44 /*}}}*/
45 // Records::~pkgRecords - Destructor /*{{{*/
46 // ---------------------------------------------------------------------
47 /* */
48 pkgRecords::~pkgRecords()
49 {
50 for ( vector<Parser*>::iterator it = Files.begin();
51 it != Files.end();
52 ++it)
53 {
54 delete *it;
55 }
56
57 }
58 /*}}}*/
59 // Records::Lookup - Get a parser for the package version file /*{{{*/
60 // ---------------------------------------------------------------------
61 /* */
62 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver)
63 {
64 Files[Ver.File()->ID]->Jump(Ver);
65 return *Files[Ver.File()->ID];
66 }
67 /*}}}*/
68 // Records::Lookup - Get a parser for the package description file /*{{{*/
69 // ---------------------------------------------------------------------
70 /* */
71 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc)
72 {
73 Files[Desc.File()->ID]->Jump(Desc);
74 return *Files[Desc.File()->ID];
75 }
76 /*}}}*/