Sophie

Sophie

distrib > Mageia > 6 > x86_64 > by-pkgid > 16e298361edb3000a9b1c7b2dae804b9 > files > 772

apt-mga-1.4.6-1.mga6.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>apt: apt-pkg/pkgcache.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">apt
   &#160;<span id="projectnumber">1.4.6</span>
   </div>
   <div id="projectbrief">commandline package manager</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_18f22d4be2ca84c350e120b6506056ca.xhtml">apt-pkg</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#typedef-members">Typedefs</a>  </div>
  <div class="headertitle">
<div class="title">pkgcache.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p><a class="el" href="classpkgCache.xhtml">pkgCache</a> - Structure definitions for the cache file  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;apt-pkg/mmap.h&gt;</code><br />
<code>#include &lt;apt-pkg/macros.h&gt;</code><br />
<code>#include &lt;string&gt;</code><br />
<code>#include &lt;time.h&gt;</code><br />
<code>#include &lt;stdint.h&gt;</code><br />
<code>#include &lt;apt-pkg/cacheiterators.h&gt;</code><br />
</div>
<p><a href="pkgcache_8h_source.xhtml">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpkgCache.xhtml">pkgCache</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpkgCache_1_1Iterator.xhtml">pkgCache::Iterator&lt; Str, Itr &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Dep.xhtml">pkgCache::Dep</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1State.xhtml">pkgCache::State</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Flag.xhtml">pkgCache::Flag</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Header.xhtml">pkgCache::Header</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Group.xhtml">pkgCache::Group</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">groups architecture depending packages together  <a href="structpkgCache_1_1Group.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Package.xhtml">pkgCache::Package</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">contains information for a single unique package  <a href="structpkgCache_1_1Package.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1ReleaseFile.xhtml">pkgCache::ReleaseFile</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">stores information about the release files used to generate the cache  <a href="structpkgCache_1_1ReleaseFile.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1PackageFile.xhtml">pkgCache::PackageFile</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">stores information about the files used to generate the cache  <a href="structpkgCache_1_1PackageFile.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1VerFile.xhtml">pkgCache::VerFile</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">associates a version with a <a class="el" href="structpkgCache_1_1PackageFile.xhtml" title="stores information about the files used to generate the cache ">PackageFile</a>  <a href="structpkgCache_1_1VerFile.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1DescFile.xhtml">pkgCache::DescFile</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">associates a description with a Translation file  <a href="structpkgCache_1_1DescFile.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Version.xhtml">pkgCache::Version</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">information for a single version of a package  <a href="structpkgCache_1_1Version.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Description.xhtml">pkgCache::Description</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">datamember of a linked list of available description for a version  <a href="structpkgCache_1_1Description.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1DependencyData.xhtml">pkgCache::DependencyData</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">information for a single dependency record  <a href="structpkgCache_1_1DependencyData.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Dependency.xhtml">pkgCache::Dependency</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structpkgCache_1_1Provides.xhtml">pkgCache::Provides</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">handles virtual packages  <a href="structpkgCache_1_1Provides.xhtml#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpkgCache_1_1Namespace.xhtml">pkgCache::Namespace</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a39286941afbb61fc4100cbbfbd74544f"><td class="memItemLeft" align="right" valign="top"><a id="a39286941afbb61fc4100cbbfbd74544f"></a>
typedef uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_filesize_t</b></td></tr>
<tr class="separator:a39286941afbb61fc4100cbbfbd74544f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3111cffe73f4b2f1ce875e86a329462"><td class="memItemLeft" align="right" valign="top"><a id="aa3111cffe73f4b2f1ce875e86a329462"></a>
typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_filesize_small_t</b></td></tr>
<tr class="separator:aa3111cffe73f4b2f1ce875e86a329462"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29207010609352d1e4e7bb159cdaeba8"><td class="memItemLeft" align="right" valign="top"><a id="a29207010609352d1e4e7bb159cdaeba8"></a>
typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_id_t</b></td></tr>
<tr class="separator:a29207010609352d1e4e7bb159cdaeba8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca62f81dc0ff0e78582e3c42ffdee0b7"><td class="memItemLeft" align="right" valign="top"><a id="aca62f81dc0ff0e78582e3c42ffdee0b7"></a>
typedef uint16_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_fileid_t</b></td></tr>
<tr class="separator:aca62f81dc0ff0e78582e3c42ffdee0b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14682d9a5bba6b5bc86bde3974aea144"><td class="memItemLeft" align="right" valign="top"><a id="a14682d9a5bba6b5bc86bde3974aea144"></a>
typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_pointer_t</b></td></tr>
<tr class="separator:a14682d9a5bba6b5bc86bde3974aea144"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac72bb9cfe89b7d3f002057b0cabaf512"><td class="memItemLeft" align="right" valign="top"><a id="ac72bb9cfe89b7d3f002057b0cabaf512"></a>
typedef map_pointer_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_stringitem_t</b></td></tr>
<tr class="separator:ac72bb9cfe89b7d3f002057b0cabaf512"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbf3bb54a722fbc19bf2d50e26e9f89c"><td class="memItemLeft" align="right" valign="top"><a id="abbf3bb54a722fbc19bf2d50e26e9f89c"></a>
typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_flags_t</b></td></tr>
<tr class="separator:abbf3bb54a722fbc19bf2d50e26e9f89c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24e027d6c3a20c734bd41bbe54df7074"><td class="memItemLeft" align="right" valign="top"><a id="a24e027d6c3a20c734bd41bbe54df7074"></a>
typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>map_number_t</b></td></tr>
<tr class="separator:a24e027d6c3a20c734bd41bbe54df7074"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p><a class="el" href="classpkgCache.xhtml">pkgCache</a> - Structure definitions for the cache file </p>
<p>The goal of the cache file is two fold: Firstly to speed loading and processing of the package file array and secondly to reduce memory consumption of the package file array.</p>
<p>The implementation is aimed at an environment with many primary package files, for instance someone that has a Package file for their CD-ROM, a Package file for the latest version of the distribution on the CD-ROM and a package file for the development version. Always present is the information contained in the status file which might be considered a separate package file.</p>
<p>Please understand, this is designed as a <b>Cache file</b> it is not meant to be used on any system other than the one it was created for. It is not meant to be authoritative either, i.e. if a system crash or software failure occurs it must be perfectly acceptable for the cache file to be in an inconsistent state. Furthermore at any time the cache file may be erased without losing any information.</p>
<p>Also the structures and storage layout is optimized for use by the APT and may not be suitable for all purposes. However it should be possible to extend it with associate cache files that contain other information.</p>
<p>To keep memory use down the cache file only contains often used fields and fields that are inexpensive to store, the Package file has a full list of fields. Also the client may assume that all items are perfectly valid and need not perform checks against their correctness. Removal of information from the cache is possible, but blanks will be left in the file, and unused strings will also be present. The recommended implementation is to simply rebuild the cache each time any of the data files change. It is possible to add a new package file to the cache without any negative side effects.</p>
<p><b>Note on Pointer access</b> Clients should always use the CacheIterators classes for access to the cache and the data in it. They also provide a simple STL-like method for traversing the links of the datastructure.</p>
<p>Every item in every structure is stored as the index to that structure. What this means is that once the files is mmaped every data access has to go through a fix up stage to get a real memory pointer. This is done by taking the index, multiplying it by the type size and then adding it to the start address of the memory block. This sounds complex, but in C it is a single array dereference. Because all items are aligned to their size and indexes are stored as multiples of the size of the structure the format is immediately portable to all possible architectures - BUT the generated files are -NOT-.</p>
<p>This scheme allows code like this to be written: </p>
<p>void *Map = mmap(...); Package *PkgList = (Package *)Map; Header *Head = (Header *)Map; char *Strings = (char *)Map; cout &lt;&lt; (Strings + PkgList[Head-&gt;HashTable[0]]-&gt;Name) &lt;&lt; endl; </p>
<p>Notice the lack of casting or multiplication. The net result is to return the name of the first package in the first hash bucket, without error checks.</p>
<p>The generator uses allocation pools to group similarly sized structures in large blocks to eliminate any alignment overhead. The generator also assures that no structures overlap and all indexes are unique. Although at first glance it may seem like there is the potential for two structures to exist at the same point the generator never allows this to happen. (See the discussion of free space pools)</p>
<p>See <a class="el" href="pkgcachegen_8h_source.xhtml">pkgcachegen.h</a> for more information about generating cache structures. </p>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>