]>
git.saurik.com Git - apt.git/blob - apt-pkg/pkgrecords.cc
1 // -*- mode: cpp; mode: fold -*-
3 // $Id: pkgrecords.cc,v 1.8 2003/09/02 04:52:16 mdz Exp $
4 /* ######################################################################
6 Package Records - Allows access to complete package description records
7 directly from the file.
9 ##################################################################### */
11 // Include Files /*{{{*/
13 #pragma implementation "apt-pkg/pkgrecords.h"
15 #include <apt-pkg/pkgrecords.h>
16 #include <apt-pkg/indexfile.h>
17 #include <apt-pkg/error.h>
18 #include <apt-pkg/configuration.h>
23 // Records::pkgRecords - Constructor /*{{{*/
24 // ---------------------------------------------------------------------
25 /* This will create the necessary structures to access the status files */
26 pkgRecords::pkgRecords(pkgCache
&Cache
) : Cache(Cache
), Files(0)
28 Files
= new Parser
*[Cache
.HeaderP
->PackageFileCount
];
29 memset(Files
,0,sizeof(*Files
)*Cache
.HeaderP
->PackageFileCount
);
31 for (pkgCache::PkgFileIterator I
= Cache
.FileBegin();
32 I
.end() == false; I
++)
34 const pkgIndexFile::Type
*Type
= pkgIndexFile::Type::GetType(I
.IndexType());
37 _error
->Error(_("Index file type '%s' is not supported"),I
.IndexType());
41 Files
[I
->ID
] = Type
->CreatePkgParser(I
);
42 if (Files
[I
->ID
] == 0)
45 // We store that to make sure that the destructor won't segfault,
46 // even if the Cache object was destructed before this instance.
47 PackageFileCount
= Cache
.HeaderP
->PackageFileCount
;
50 // Records::~pkgRecords - Destructor /*{{{*/
51 // ---------------------------------------------------------------------
53 pkgRecords::~pkgRecords()
55 for (unsigned I
= 0; I
!= PackageFileCount
; I
++)
60 // Records::Lookup - Get a parser for the package version file /*{{{*/
61 // ---------------------------------------------------------------------
63 pkgRecords::Parser
&pkgRecords::Lookup(pkgCache::VerFileIterator
const &Ver
)
65 Files
[Ver
.File()->ID
]->Jump(Ver
);
66 return *Files
[Ver
.File()->ID
];
69 // Records::Lookup - Get a parser for the package description file /*{{{*/
70 // ---------------------------------------------------------------------
72 pkgRecords::Parser
&pkgRecords::Lookup(pkgCache::DescFileIterator
const &Desc
)
74 Files
[Desc
.File()->ID
]->Jump(Desc
);
75 return *Files
[Desc
.File()->ID
];