mirror of
https://github.com/aaru-dps/libaaruformat.git
synced 2026-11-04 19:35:12 +00:00
277 lines
15 KiB
HTML
277 lines
15 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.18.0"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>libaaruformat: include/aaruformat/lru.h File Reference</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<script type="text/javascript" src="codefolding.js"></script>
|
|
<script type="text/javascript" src="clipboard.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript" src="cookie.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.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 id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">libaaruformat<span id="projectnumber"> 1.0</span>
|
|
</div>
|
|
<div id="projectbrief">Aaru Data Preservation Suite - Format Library</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.18.0 -->
|
|
<script type="text/javascript">
|
|
let searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
</script>
|
|
<script type="text/javascript">
|
|
document.addEventListener('DOMContentLoaded', codefold.init);
|
|
</script>
|
|
<script type="application/json" id="doxygen-config">
|
|
{
|
|
"relPath": "",
|
|
"generateTreeView": true,
|
|
"searchEngine": true,
|
|
"serverBasedSearch": false,
|
|
"disableIndex": false,
|
|
"dynamicMenus": true,
|
|
"fullSidebar": false
|
|
}
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<div id="main-nav-mobile">
|
|
<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
|
|
<label class="main-menu-btn" for="main-menu-state">
|
|
<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
|
|
<span id="searchBoxPos1"></span>
|
|
</div>
|
|
</div><!-- main-nav-mobile -->
|
|
<div id="main-nav">
|
|
<ul class="sm sm-dox" id="main-menu">
|
|
<li id="searchBoxPos2">
|
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
|
|
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
|
|
</span>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div><!-- main-nav -->
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
document.addEventListener('DOMContentLoaded',() => { initNavTree('lru_8h.html','',''); });
|
|
</script>
|
|
<div id="container">
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="headertitle"><div class="title">lru.h File Reference</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><code>#include <stddef.h></code><br />
|
|
<code>#include <stdint.h></code><br />
|
|
<code>#include <uthash.h></code><br />
|
|
</div>
|
|
<p><a href="lru_8h_source.html">Go to the source code of this file.</a></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
|
|
Data Structures</h2></td></tr>
|
|
<tr class="memitem:CacheEntry" id="r_CacheEntry"><td class="memItemLeft">struct  </td><td class="memItemRight"><a class="el" href="structCacheEntry.html">CacheEntry</a></td></tr>
|
|
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Single hash entry in the in-memory cache. <a href="structCacheEntry.html#details">More...</a><br /></td></tr>
|
|
<tr class="memitem:CacheHeader" id="r_CacheHeader"><td class="memItemLeft">struct  </td><td class="memItemRight"><a class="el" href="structCacheHeader.html">CacheHeader</a></td></tr>
|
|
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Cache top-level descriptor encapsulating the hash table root and capacity limit. <a href="structCacheHeader.html#details">More...</a><br /></td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr class="memitem:a8cb7ac8e057627210732ee61d2966e35" id="r_a8cb7ac8e057627210732ee61d2966e35"><td class="memItemLeft">void * </td><td class="memItemRight"><a class="el" href="#a8cb7ac8e057627210732ee61d2966e35">find_in_cache_uint64</a> (struct <a class="el" href="structCacheHeader.html">CacheHeader</a> *cache, uint64_t key)</td></tr>
|
|
<tr class="memdesc:a8cb7ac8e057627210732ee61d2966e35"><td class="mdescLeft"> </td><td class="mdescRight">Finds a value in the cache by uint64_t key. <br /></td></tr>
|
|
<tr class="memitem:a4c0693df23b76b54750218753a748223" id="r_a4c0693df23b76b54750218753a748223"><td class="memItemLeft">void </td><td class="memItemRight"><a class="el" href="#a4c0693df23b76b54750218753a748223">add_to_cache_uint64</a> (struct <a class="el" href="structCacheHeader.html">CacheHeader</a> *cache, uint64_t key, void *value, size_t size)</td></tr>
|
|
<tr class="memdesc:a4c0693df23b76b54750218753a748223"><td class="mdescLeft"> </td><td class="mdescRight">Adds a value to the cache with a uint64_t key, evicting LRU entries if over budget. <br /></td></tr>
|
|
<tr class="memitem:a92e298695411672c3497ae5c8d9c0427" id="r_a92e298695411672c3497ae5c8d9c0427"><td class="memItemLeft">void </td><td class="memItemRight"><a class="el" href="#a92e298695411672c3497ae5c8d9c0427">free_cache</a> (struct <a class="el" href="structCacheHeader.html">CacheHeader</a> *cache)</td></tr>
|
|
<tr class="memdesc:a92e298695411672c3497ae5c8d9c0427"><td class="mdescLeft"> </td><td class="mdescRight">Frees all entries in the cache and clears it. <br /></td></tr>
|
|
</table>
|
|
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
|
<a id="a4c0693df23b76b54750218753a748223" name="a4c0693df23b76b54750218753a748223"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a4c0693df23b76b54750218753a748223">◆ </a></span>add_to_cache_uint64()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void add_to_cache_uint64 </td>
|
|
<td>(</td>
|
|
<td class="paramtype">struct <a class="el" href="structCacheHeader.html">CacheHeader</a> *</td> <td class="paramname"><span class="paramname"><em>cache</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const uint64_t</td> <td class="paramname"><span class="paramname"><em>key</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>value</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const size_t</td> <td class="paramname"><span class="paramname"><em>size</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Adds a value to the cache with a uint64_t key, evicting LRU entries if over budget. </p>
|
|
<p>Adds a new entry to the cache. If an entry with the same key is already present, its value is freed and replaced. If the cache exceeds its memory budget, the least recently used entries are evicted until it fits again. The entry just inserted is never evicted, so the caller may keep using the pointer it handed over for the remainder of the call.</p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">cache</td><td>Pointer to the cache header. </td></tr>
|
|
<tr><td class="paramname">key</td><td>64-bit integer key to add. </td></tr>
|
|
<tr><td class="paramname">value</td><td>Pointer to the value to store. </td></tr>
|
|
<tr><td class="paramname">size</td><td>Size in bytes of the memory pointed to by value. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="lru_8c_source.html#l00068">68</a> of file <a class="el" href="lru_8c_source.html">lru.c</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="lru_8c_source.html#l00068">add_to_cache_uint64()</a>, <a class="el" href="lru_8h_source.html#l00054">CacheHeader::cache</a>, <a class="el" href="lru_8h_source.html#l00053">CacheHeader::cur_bytes</a>, <a class="el" href="lru_8c_source.html#l00020">drop_entry()</a>, <a class="el" href="lru_8h_source.html#l00055">CacheHeader::free_func</a>, <a class="el" href="lru_8h_source.html#l00029">CacheEntry::hh</a>, <a class="el" href="lru_8h_source.html#l00026">CacheEntry::key</a>, <a class="el" href="lru_8h_source.html#l00052">CacheHeader::max_bytes</a>, <a class="el" href="lru_8h_source.html#l00028">CacheEntry::size</a>, and <a class="el" href="lru_8h_source.html#l00027">CacheEntry::value</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="read_8c_source.html#l00352">aaruf_read_sector()</a>, <a class="el" href="lru_8c_source.html#l00068">add_to_cache_uint64()</a>, and <a class="el" href="erasure_8c_source.html#l01303">ec_recover_data_block()</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a8cb7ac8e057627210732ee61d2966e35" name="a8cb7ac8e057627210732ee61d2966e35"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a8cb7ac8e057627210732ee61d2966e35">◆ </a></span>find_in_cache_uint64()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void * find_in_cache_uint64 </td>
|
|
<td>(</td>
|
|
<td class="paramtype">struct <a class="el" href="structCacheHeader.html">CacheHeader</a> *</td> <td class="paramname"><span class="paramname"><em>cache</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const uint64_t</td> <td class="paramname"><span class="paramname"><em>key</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Finds a value in the cache by uint64_t key. </p>
|
|
<p>Searches for a value using a native 64-bit integer key and promotes it to the front of the insertion-order list (LRU refresh) if found.</p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">cache</td><td>Pointer to the cache header. </td></tr>
|
|
<tr><td class="paramname">key</td><td>64-bit integer key to search for. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Pointer to the value if found, or NULL if not found. </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="lru_8c_source.html#l00041">41</a> of file <a class="el" href="lru_8c_source.html">lru.c</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="lru_8h_source.html#l00054">CacheHeader::cache</a>, <a class="el" href="lru_8c_source.html#l00041">find_in_cache_uint64()</a>, <a class="el" href="lru_8h_source.html#l00029">CacheEntry::hh</a>, <a class="el" href="lru_8h_source.html#l00026">CacheEntry::key</a>, and <a class="el" href="lru_8h_source.html#l00027">CacheEntry::value</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="read_8c_source.html#l00352">aaruf_read_sector()</a>, and <a class="el" href="lru_8c_source.html#l00041">find_in_cache_uint64()</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="a92e298695411672c3497ae5c8d9c0427" name="a92e298695411672c3497ae5c8d9c0427"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a92e298695411672c3497ae5c8d9c0427">◆ </a></span>free_cache()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void free_cache </td>
|
|
<td>(</td>
|
|
<td class="paramtype">struct <a class="el" href="structCacheHeader.html">CacheHeader</a> *</td> <td class="paramname"><span class="paramname"><em>cache</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Frees all entries in the cache and clears it. </p>
|
|
<p>Iterates through all cache entries, frees them, then clears the hash table. Uses the cache's free_func if set to free cached values.</p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">cache</td><td>Pointer to the cache header. </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="lru_8c_source.html#l00118">118</a> of file <a class="el" href="lru_8c_source.html">lru.c</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="lru_8h_source.html#l00054">CacheHeader::cache</a>, <a class="el" href="lru_8h_source.html#l00053">CacheHeader::cur_bytes</a>, <a class="el" href="lru_8c_source.html#l00020">drop_entry()</a>, <a class="el" href="lru_8c_source.html#l00118">free_cache()</a>, and <a class="el" href="lru_8h_source.html#l00029">CacheEntry::hh</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="close_8c_source.html#l00080">aaruf_close()</a>, and <a class="el" href="lru_8c_source.html#l00118">free_cache()</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<div id="page-nav" class="page-nav-panel">
|
|
<div id="page-nav-resize-handle"></div>
|
|
<div id="page-nav-tree">
|
|
<div id="page-nav-contents">
|
|
</div><!-- page-nav-contents -->
|
|
</div><!-- page-nav-tree -->
|
|
</div><!-- page-nav -->
|
|
</div><!-- container -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a href="dir_aeff2545c9dfcfc842fe9d84b123cb31.html">aaruformat</a></li><li class="navelem"><a href="lru_8h.html">lru.h</a></li>
|
|
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.18.0 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|