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