* merged from apt--mvo
[ntk/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 <apt-pkg/pkgrecords.h>
13 #include <apt-pkg/indexfile.h>
14 #include <apt-pkg/error.h>
15 #include <apt-pkg/configuration.h>
16
17 #include <apti18n.h>
18 /*}}}*/
19
20 // Records::pkgRecords - Constructor /*{{{*/
21 // ---------------------------------------------------------------------
22 /* This will create the necessary structures to access the status files */
23 pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0)
24 {
25 Files = new Parser *[Cache.HeaderP->PackageFileCount];
26 memset(Files,0,sizeof(*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 /* */
47 pkgRecords::~pkgRecords()
48 {
49 for (unsigned I = 0; I != Cache.HeaderP->PackageFileCount; I++)
50 delete Files[I];
51 delete [] Files;
52 }
53 /*}}}*/
54 // Records::Lookup - Get a parser for the package version file /*{{{*/
55 // ---------------------------------------------------------------------
56 /* */
57 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::VerFileIterator const &Ver)
58 {
59 Files[Ver.File()->ID]->Jump(Ver);
60 return *Files[Ver.File()->ID];
61 }
62 /*}}}*/
63 // Records::Lookup - Get a parser for the package description file /*{{{*/
64 // ---------------------------------------------------------------------
65 /* */
66 pkgRecords::Parser &pkgRecords::Lookup(pkgCache::DescFileIterator const &Desc)
67 {
68 Files[Desc.File()->ID]->Jump(Desc);
69 return *Files[Desc.File()->ID];
70 }
71 /*}}}*/