lrucache.nim/docs/index.html

1032 lines
38 KiB
HTML

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This file is generated by Nim. -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicon -->
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA=="/>
<!-- Google fonts -->
<link href='https://fonts.googleapis.com/css?family=Lato:400,600,900' rel='stylesheet' type='text/css'/>
<link href='https://fonts.googleapis.com/css?family=Source+Code+Pro:400,500,600' rel='stylesheet' type='text/css'/>
<!-- CSS -->
<title>lrucache</title>
<style type="text/css" >
/*
Stylesheet for use with Docutils/rst2html.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
Modified from Chad Skeeters' rst2html-style
https://bitbucket.org/cskeeters/rst2html-style/
Modified by Boyd Greenfield and narimiran
*/
html {
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%; }
body {
font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif;
font-weight: 400;
font-size: 1.125em;
line-height: 1.5;
color: #222;
background-color: #FCFCFC; }
/* Skeleton grid */
.container {
position: relative;
width: 100%;
max-width: 1050px;
margin: 0 auto;
padding: 0;
box-sizing: border-box; }
.column,
.columns {
width: 100%;
float: left;
box-sizing: border-box;
margin-left: 1%;
}
.column:first-child,
.columns:first-child {
margin-left: 0; }
.three.columns {
width: 19%; }
.nine.columns {
width: 80.0%; }
.twelve.columns {
width: 100%;
margin-left: 0; }
@media screen and (max-width: 860px) {
.three.columns {
display: none;
}
.nine.columns {
width: 98.0%;
}
body {
font-size: 1em;
line-height: 1.35;
}
}
cite {
font-style: italic !important; }
/* Nim search input */
div#searchInputDiv {
margin-bottom: 1em;
}
input#searchInput {
width: 80%;
}
/*
* Some custom formatting for input forms.
* This also fixes input form colors on Firefox with a dark system theme on Linux.
*/
input {
-moz-appearance: none;
color: #333;
background-color: #f8f8f8;
border: 1px solid #aaa;
font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif;
font-size: 0.9em;
padding: 6px;
}
input:focus {
border: 1px solid #1fa0eb;
box-shadow: 0 0 2px #1fa0eb;
}
/* Docgen styles */
/* Links */
a {
color: #07b;
text-decoration: none;
}
a span.Identifier {
text-decoration: underline;
text-decoration-color: #aab;
}
a.reference-toplevel {
font-weight: bold;
}
a.toc-backref {
text-decoration: none;
color: #222; }
a.link-seesrc {
color: #607c9f;
font-size: 0.9em;
font-style: italic; }
a:hover,
a:focus {
color: #607c9f;
text-decoration: underline; }
a:hover span.Identifier {
color: #607c9f;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline; }
sup {
top: -0.5em; }
sub {
bottom: -0.25em; }
img {
width: auto;
height: auto;
max-width: 100%;
vertical-align: middle;
border: 0;
-ms-interpolation-mode: bicubic; }
@media print {
* {
color: black !important;
text-shadow: none !important;
background: transparent !important;
box-shadow: none !important; }
a,
a:visited {
text-decoration: underline; }
a[href]:after {
content: " (" attr(href) ")"; }
abbr[title]:after {
content: " (" attr(title) ")"; }
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: ""; }
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid; }
thead {
display: table-header-group; }
tr,
img {
page-break-inside: avoid; }
img {
max-width: 100% !important; }
@page {
margin: 0.5cm; }
h1 {
page-break-before: always; }
h1.title {
page-break-before: avoid; }
p,
h2,
h3 {
orphans: 3;
widows: 3; }
h2,
h3 {
page-break-after: avoid; }
}
p {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
small {
font-size: 85%; }
strong {
font-weight: 600;
font-size: 0.95em;
color: #3c3c3c;
}
em {
font-style: italic; }
h1 {
font-size: 1.8em;
font-weight: 400;
padding-bottom: .25em;
border-bottom: 1px solid #aaa;
margin-top: 2.5em;
margin-bottom: 1em;
line-height: 1.2em; }
h1.title {
padding-bottom: 1em;
border-bottom: 0px;
font-size: 2.5em;
text-align: center;
font-weight: 900;
margin-top: 0.75em;
margin-bottom: 0em;
}
h2 {
font-size: 1.3em;
margin-top: 2em; }
h2.subtitle {
text-align: center; }
h3 {
font-size: 1.125em;
font-style: italic;
margin-top: 1.5em; }
h4 {
font-size: 1.125em;
margin-top: 1em; }
h5 {
font-size: 1.125em;
margin-top: 0.75em; }
h6 {
font-size: 1.1em; }
ul,
ol {
padding: 0;
margin-top: 0.5em;
margin-left: 0.75em; }
ul ul,
ul ol,
ol ol,
ol ul {
margin-bottom: 0;
margin-left: 1.25em; }
li {
list-style-type: circle;
}
ul.simple-boot li {
list-style-type: none;
margin-left: 0em;
margin-bottom: 0.5em;
}
ol.simple > li, ul.simple > li {
margin-bottom: 0.25em;
margin-left: 0.4em }
ul.simple.simple-toc > li {
margin-top: 1em;
}
ul.simple-toc {
list-style: none;
font-size: 0.9em;
margin-left: -0.3em;
margin-top: 1em; }
ul.simple-toc > li {
list-style-type: none;
}
ul.simple-toc-section {
list-style-type: circle;
margin-left: 1em;
color: #6c9aae; }
ol.arabic {
list-style: decimal; }
ol.loweralpha {
list-style: lower-alpha; }
ol.upperalpha {
list-style: upper-alpha; }
ol.lowerroman {
list-style: lower-roman; }
ol.upperroman {
list-style: upper-roman; }
ul.auto-toc {
list-style-type: none; }
dl {
margin-bottom: 1.5em; }
dt {
margin-bottom: -0.5em;
margin-left: 0.0em; }
dd {
margin-left: 2.0em;
margin-bottom: 3.0em;
margin-top: 0.5em; }
hr {
margin: 2em 0;
border: 0;
border-top: 1px solid #aaa; }
blockquote {
font-size: 0.9em;
font-style: italic;
padding-left: 0.5em;
margin-left: 0;
border-left: 5px solid #bbc;
}
.pre {
font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace;
font-weight: 500;
font-size: 0.85em;
background-color: #f0f3ff;
padding-left: 3px;
padding-right: 3px;
border-radius: 4px;
}
pre {
font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace;
color: #222;
font-weight: 500;
display: inline-block;
box-sizing: border-box;
min-width: 100%;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
font-size: 0.85em;
white-space: pre !important;
overflow-y: hidden;
overflow-x: visible;
background-color: ghostwhite;
border: 1px solid #dde;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px; }
.pre-scrollable {
max-height: 340px;
overflow-y: scroll; }
/* Nim line-numbered tables */
.line-nums-table {
width: 100%;
table-layout: fixed; }
table.line-nums-table {
border-radius: 4px;
border: 1px solid #cccccc;
background-color: ghostwhite;
border-collapse: separate;
margin-top: 15px;
margin-bottom: 25px; }
.line-nums-table tbody {
border: none; }
.line-nums-table td pre {
border: none;
background-color: transparent; }
.line-nums-table td.blob-line-nums {
width: 28px; }
.line-nums-table td.blob-line-nums pre {
color: #b0b0b0;
-webkit-filter: opacity(75%);
text-align: right;
border-color: transparent;
background-color: transparent;
padding-left: 0px;
margin-left: 0px;
padding-right: 0px;
margin-right: 0px; }
table {
max-width: 100%;
background-color: transparent;
margin-top: 0.5em;
margin-bottom: 1.5em;
border-collapse: collapse;
border-color: #ccc;
border-spacing: 0;
font-size: 0.9em;
}
table th, table td {
padding: 0px 0.5em 0px;
}
table th {
background-color: #e8e8e8;
font-weight: bold; }
table th.docinfo-name {
background-color: transparent;
}
table tr:hover {
background-color: ghostwhite; }
/* rst2html default used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0; }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 !important; }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 !important; }
.last, .with-subtitle {
margin-bottom: 0 !important; }
.hidden {
display: none; }
blockquote.epigraph {
margin: 2em 5em; }
dl.docutils dd {
margin-bottom: 0.5em; }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden; }
div.figure {
margin-left: 2em;
margin-right: 2em; }
div.footer, div.header {
clear: both;
text-align: center;
color: #666;
font-size: smaller; }
div.footer {
padding-top: 5em;
}
div.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em; }
div.line-block div.line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em; }
div.topic {
margin: 2em; }
div.search_results {
background-color: antiquewhite;
margin: 3em;
padding: 1em;
border: 1px solid #4d4d4d;
}
div#global-links ul {
margin-left: 0;
list-style-type: none;
}
div#global-links > simple-boot {
margin-left: 3em;
}
hr.docutils {
width: 75%; }
img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em; }
img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em; }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto; }
.align-left {
text-align: left; }
.align-center {
clear: both;
text-align: center; }
.align-right {
text-align: right; }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit; }
p.attribution {
text-align: right;
margin-left: 50%; }
p.caption {
font-style: italic; }
p.credits {
font-style: italic;
font-size: smaller; }
p.label {
white-space: nowrap; }
p.rubric {
font-weight: bold;
font-size: larger;
color: maroon;
text-align: center; }
p.topic-title {
font-weight: bold; }
pre.address {
margin-bottom: 0;
margin-top: 0;
font: inherit; }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em;
margin-right: 2em; }
pre.code .ln {
color: grey; }
/* line numbers */
pre.code, code {
background-color: #eeeeee; }
pre.code .comment, code .comment {
color: #5c6576; }
pre.code .keyword, code .keyword {
color: #3B0D06;
font-weight: bold; }
pre.code .literal.string, code .literal.string {
color: #0c5404; }
pre.code .name.builtin, code .name.builtin {
color: #352b84; }
pre.code .deleted, code .deleted {
background-color: #DEB0A1; }
pre.code .inserted, code .inserted {
background-color: #A3D289; }
span.classifier {
font-style: oblique; }
span.classifier-delimiter {
font-weight: bold; }
span.option {
white-space: nowrap; }
span.problematic {
color: #b30000; }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80%; }
span.DecNumber {
color: #252dbe; }
span.BinNumber {
color: #252dbe; }
span.HexNumber {
color: #252dbe; }
span.OctNumber {
color: #252dbe; }
span.FloatNumber {
color: #252dbe; }
span.Identifier {
color: #222; }
span.Keyword {
font-weight: 600;
color: #5e8f60; }
span.StringLit {
color: #a4255b; }
span.LongStringLit {
color: #a4255b; }
span.CharLit {
color: #a4255b; }
span.EscapeSequence {
color: black; }
span.Operator {
color: black; }
span.Punctuation {
color: black; }
span.Comment, span.LongComment {
font-style: italic;
font-weight: 400;
color: #484a86; }
span.RegularExpression {
color: darkviolet; }
span.TagStart {
color: darkviolet; }
span.TagEnd {
color: darkviolet; }
span.Key {
color: #252dbe; }
span.Value {
color: #252dbe; }
span.RawData {
color: #a4255b; }
span.Assembler {
color: #252dbe; }
span.Preprocessor {
color: #252dbe; }
span.Directive {
color: #252dbe; }
span.Command, span.Rule, span.Hyperlink, span.Label, span.Reference,
span.Other {
color: black; }
/* Pop type, const, proc, and iterator defs in nim def blocks */
dt pre > span.Identifier, dt pre > span.Operator {
color: #155da4;
font-weight: 700; }
dt pre > span.Keyword ~ span.Identifier, dt pre > span.Identifier ~ span.Identifier,
dt pre > span.Operator ~ span.Identifier, dt pre > span.Other ~ span.Identifier {
color: inherit;
font-weight: inherit; }
/* Nim sprite for the footer (taken from main page favicon) */
.nim-sprite {
display: inline-block;
height: 16px;
width: 16px;
background-position: 0 0;
background-size: 16px 16px;
-webkit-filter: opacity(50%);
background-repeat: no-repeat;
background-image: url("data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAUAAAAF////AP///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAIAAABbAAAAlQAAAKIAAACbAAAAmwAAAKIAAACVAAAAWwAAAAL///8A////AP///wD///8A////AAAAABQAAADAAAAAYwAAAA3///8A////AP///wD///8AAAAADQAAAGMAAADAAAAAFP///wD///8A////AP///wAAAACdAAAAOv///wD///8A////AP///wD///8A////AP///wD///8AAAAAOgAAAJ3///8A////AP///wAAAAAnAAAAcP///wAAAAAoAAAASv///wD///8A////AP///wAAAABKAAAAKP///wAAAABwAAAAJ////wD///8AAAAAgQAAABwAAACIAAAAkAAAAJMAAACtAAAAFQAAABUAAACtAAAAkwAAAJAAAACIAAAAHAAAAIH///8A////AAAAAKQAAACrAAAAaP///wD///8AAAAARQAAANIAAADSAAAARf///wD///8AAAAAaAAAAKsAAACk////AAAAADMAAACcAAAAnQAAABj///8A////AP///wAAAAAYAAAAGP///wD///8A////AAAAABgAAACdAAAAnAAAADMAAAB1AAAAwwAAAP8AAADpAAAAsQAAAE4AAAAb////AP///wAAAAAbAAAATgAAALEAAADpAAAA/wAAAMMAAAB1AAAAtwAAAOkAAAD/AAAA/wAAAP8AAADvAAAA3gAAAN4AAADeAAAA3gAAAO8AAAD/AAAA/wAAAP8AAADpAAAAtwAAAGUAAAA/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAPwAAAGX///8A////AAAAAEgAAADtAAAAvwAAAL0AAADGAAAA7wAAAO8AAADGAAAAvQAAAL8AAADtAAAASP///wD///8A////AP///wD///8AAAAAO////wD///8A////AAAAAIcAAACH////AP///wD///8AAAAAO////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A//8AAP//AAD4HwAA7/cAAN/7AAD//wAAoYUAAJ55AACf+QAAh+EAAAAAAADAAwAA4AcAAP5/AAD//wAA//8AAA==");
margin-bottom: -5px; }
span.pragmadots {
/* Position: relative frees us up to make the dots
look really nice without fucking up the layout and
causing bulging in the parent container */
position: relative;
/* 1px down looks slightly nicer */
top: 1px;
padding: 2px;
background-color: #e8e8e8;
border-radius: 4px;
margin: 0 2px;
cursor: pointer;
font-size: 0.8em;
}
span.pragmadots:hover {
background-color: #DBDBDB;
}
span.pragmawrap {
display: none;
}
span.attachedType {
display: none;
visibility: hidden;
}
</style>
<script type="text/javascript" src="dochack.js"></script>
<script type="text/javascript">
function main() {
var pragmaDots = document.getElementsByClassName("pragmadots");
for (var i = 0; i < pragmaDots.length; i++) {
pragmaDots[i].onclick = function(event) {
// Hide tease
event.target.parentNode.style.display = "none";
// Show actual
event.target.parentNode.nextElementSibling.style.display = "inline";
}
}
}
</script>
</head>
<body onload="main()">
<div class="document" id="documentId">
<div class="container">
<h1 class="title">lrucache</h1>
<div class="row">
<div class="three columns">
<div id="global-links">
<ul class="simple">
</ul>
</div>
<div id="searchInputDiv">
Search: <input type="text" id="searchInput"
onkeyup="search()" />
</div>
<div>
Group by:
<select onchange="groupBy(this.value)">
<option value="section">Section</option>
<option value="type">Type</option>
</select>
</div>
<ul class="simple simple-toc" id="toc-list">
<li>
<a class="reference reference-toplevel" href="#7" id="57">Types</a>
<ul class="simple simple-toc-section">
<li><a class="reference" href="#LRUCache"
title="LRUCache[K; T] = ref object
capacity: int
list: DoublyLinkedList[Node[K, T]]
table: Table[K, DoublyLinkedNode[Node[K, T]]]"><wbr />LRUCache<span class="attachedType"></span></a></li>
</ul>
</li>
<li>
<a class="reference reference-toplevel" href="#12" id="62">Procs</a>
<ul class="simple simple-toc-section">
<li><a class="reference" href="#newLRUCache%2Cint"
title="newLRUCache[K, T](capacity: int): LRUCache[K, T]"><wbr />new<wbr />LRUCache<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#capacity%2CLRUCache%5BK%2CT%5D"
title="capacity[K, T](cache: LRUCache[K, T]): int"><wbr />capacity<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#capacity%3D%2CLRUCache%5BK%2CT%5D%2Cint"
title="capacity=[K, T](cache: LRUCache[K, T]; capacity: int)"><wbr />capacity=<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#len%2CLRUCache%5BK%2CT%5D"
title="len[K, T](cache: LRUCache[K, T]): int"><wbr />len<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#contains%2CLRUCache%5BK%2CT%5D%2CK"
title="contains[K, T](cache: LRUCache[K, T]; key: K): bool"><wbr />contains<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#peek%2CLRUCache%5BK%2CT%5D%2CK"
title="peek[K, T](cache: LRUCache[K, T]; key: K): T"><wbr />peek<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#del%2CLRUCache%5BK%2CT%5D%2CK"
title="del[K, T](cache: LRUCache[K, T]; key: K)"><wbr />del<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#clear%2CLRUCache%5BK%2CT%5D"
title="clear[K, T](cache: LRUCache[K, T])"><wbr />clear<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#%5B%5D%2CLRUCache%5BK%2CT%5D%2CK"
title="`[]`[K, T](cache: LRUCache[K, T]; key: K): T"><wbr />`[]`<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#%5B%5D%3D%2CLRUCache%5BK%2CT%5D%2CK%2CT"
title="`[]=`[K, T](cache: LRUCache[K, T]; key: K; val: T)"><wbr />`[]=`<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#get%2CLRUCache%5BK%2CT%5D%2CK"
title="get[K, T](cache: LRUCache[K, T]; key: K): T"><wbr />get<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#put%2CLRUCache%5BK%2CT%5D%2CK%2CT"
title="put[K, T](cache: LRUCache[K, T]; key: K; val: T): T"><wbr />put<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#getOrDefault%2CLRUCache%5BK%2CT%5D%2CK%2CT"
title="getOrDefault[K, T](cache: LRUCache[K, T]; key: K; val: T): T"><wbr />get<wbr />Or<wbr />Default<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#getOrPut%2CLRUCache%5BK%2CT%5D%2CK%2CT"
title="getOrPut[K, T](cache: LRUCache[K, T]; key: K; val: T): T"><wbr />get<wbr />Or<wbr />Put<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#isEmpty%2CLRUCache%5BK%2CT%5D"
title="isEmpty[K, T](cache: LRUCache[K, T]): bool"><wbr />is<wbr />Empty<span class="attachedType">LRUCache</span></a></li>
<li><a class="reference" href="#isFull%2CLRUCache%5BK%2CT%5D"
title="isFull[K, T](cache: LRUCache[K, T]): bool"><wbr />is<wbr />Full<span class="attachedType">LRUCache</span></a></li>
</ul>
</li>
</ul>
</div>
<div class="nine columns" id="content">
<div id="tocRoot"></div>
<p class="module-desc"></p>
<div class="section" id="7">
<h1><a class="toc-backref" href="#7">Types</a></h1>
<dl class="item">
<a id="LRUCache"></a>
<dt><pre><a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">;</span> <span class="Identifier">T</span><span class="Other">]</span> <span class="Other">=</span> <span class="Keyword">ref</span> <span class="Keyword">object</span>
<span class="Identifier">capacity</span><span class="Other">:</span> <span class="Identifier">int</span>
<span class="Identifier">list</span><span class="Other">:</span> <span class="Identifier">DoublyLinkedList</span><span class="Other">[</span><span class="Identifier">Node</span><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">]</span>
<span class="Identifier">table</span><span class="Other">:</span> <span class="Identifier">Table</span><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">DoublyLinkedNode</span><span class="Other">[</span><span class="Identifier">Node</span><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">]</span><span class="Other">]</span>
</pre></dt>
<dd>
</dd>
</dl></div>
<div class="section" id="12">
<h1><a class="toc-backref" href="#12">Procs</a></h1>
<dl class="item">
<a id="newLRUCache,int"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#newLRUCache%2Cint"><span class="Identifier">newLRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">capacity</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span></pre></dt>
<dd>
Create a new Least-Recently-Used (LRU) cache that store the last <tt class="docutils literal"><span class="pre">capacity</span></tt>-accessed items.
</dd>
<a id="capacity,LRUCache[K,T]"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#capacity%2CLRUCache%5BK%2CT%5D"><span class="Identifier">capacity</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">int</span></pre></dt>
<dd>
</dd>
<a id="capacity=,LRUCache[K,T],int"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#capacity%3D%2CLRUCache%5BK%2CT%5D%2Cint"><span class="Identifier">capacity=</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">capacity</span><span class="Other">:</span> <span class="Identifier">int</span><span class="Other">)</span></pre></dt>
<dd>
</dd>
<a id="len,LRUCache[K,T]"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#len%2CLRUCache%5BK%2CT%5D"><span class="Identifier">len</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">int</span></pre></dt>
<dd>
Return number of key in cache
</dd>
<a id="contains,LRUCache[K,T],K"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#contains%2CLRUCache%5BK%2CT%5D%2CK"><span class="Identifier">contains</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
<dd>
Check whether key in cache. Does <em>NOT</em> update recentness.
</dd>
<a id="peek,LRUCache[K,T],K"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#peek%2CLRUCache%5BK%2CT%5D%2CK"><span class="Identifier">peek</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd>
Read value by key, but <em>NOT</em> update recentness. Raise <tt class="docutils literal"><span class="pre">KeyError</span></tt> if <tt class="docutils literal"><span class="pre">key</span></tt> is not in <tt class="docutils literal"><span class="pre">cache</span></tt>.
</dd>
<a id="del,LRUCache[K,T],K"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#del%2CLRUCache%5BK%2CT%5D%2CK"><span class="Identifier">del</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">)</span></pre></dt>
<dd>
Delete key in cache. Does nothing if key is not in cache.
</dd>
<a id="clear,LRUCache[K,T]"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#clear%2CLRUCache%5BK%2CT%5D"><span class="Identifier">clear</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span></pre></dt>
<dd>
</dd>
<a id="[],LRUCache[K,T],K"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#%5B%5D%2CLRUCache%5BK%2CT%5D%2CK"><span class="Identifier">`[]`</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd>
Read value from <tt class="docutils literal"><span class="pre">cache</span></tt> by <tt class="docutils literal"><span class="pre">key</span></tt> and update recentness Raise <tt class="docutils literal"><span class="pre">KeyError</span></tt> if <tt class="docutils literal"><span class="pre">key</span></tt> is not in <tt class="docutils literal"><span class="pre">cache</span></tt>.
</dd>
<a id="[]=,LRUCache[K,T],K,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#%5B%5D%3D%2CLRUCache%5BK%2CT%5D%2CK%2CT"><span class="Identifier">`[]=`</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span></pre></dt>
<dd>
Put value <tt class="docutils literal"><span class="pre">v</span></tt> in cache with key <tt class="docutils literal"><span class="pre">k</span></tt>. Remove least recently used value from cache if length exceeds capacity.
</dd>
<a id="get,LRUCache[K,T],K"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#get%2CLRUCache%5BK%2CT%5D%2CK"><span class="Identifier">get</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd>
Alias of <tt class="docutils literal"><span class="pre">cache[key]</span></tt>
</dd>
<a id="put,LRUCache[K,T],K,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#put%2CLRUCache%5BK%2CT%5D%2CK%2CT"><span class="Identifier">put</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd>
Alias of <tt class="docutils literal"><span class="pre">cache[key] = val</span></tt>
</dd>
<a id="getOrDefault,LRUCache[K,T],K,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#getOrDefault%2CLRUCache%5BK%2CT%5D%2CK%2CT"><span class="Identifier">getOrDefault</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd>
Similar to get, but return <tt class="docutils literal"><span class="pre">val</span></tt> if <tt class="docutils literal"><span class="pre">key</span></tt> is not in <tt class="docutils literal"><span class="pre">cache</span></tt>
</dd>
<a id="getOrPut,LRUCache[K,T],K,T"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#getOrPut%2CLRUCache%5BK%2CT%5D%2CK%2CT"><span class="Identifier">getOrPut</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">;</span> <span class="Identifier">key</span><span class="Other">:</span> <span class="Identifier">K</span><span class="Other">;</span> <span class="Identifier">val</span><span class="Other">:</span> <span class="Identifier">T</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">T</span></pre></dt>
<dd>
Similar to <tt class="docutils literal"><span class="pre">get</span></tt>, but put and return <tt class="docutils literal"><span class="pre">val</span></tt> if <tt class="docutils literal"><span class="pre">key</span></tt> is not in <tt class="docutils literal"><span class="pre">cache</span></tt>
</dd>
<a id="isEmpty,LRUCache[K,T]"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#isEmpty%2CLRUCache%5BK%2CT%5D"><span class="Identifier">isEmpty</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
<dd>
Equivalent to <tt class="docutils literal"><span class="pre">cache.len == 0</span></tt>
</dd>
<a id="isFull,LRUCache[K,T]"></a>
<dt><pre><span class="Keyword">proc</span> <a href="#isFull%2CLRUCache%5BK%2CT%5D"><span class="Identifier">isFull</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">(</span><span class="Identifier">cache</span><span class="Other">:</span> <a href="lrucache.html#LRUCache"><span class="Identifier">LRUCache</span></a><span class="Other">[</span><span class="Identifier">K</span><span class="Other">,</span> <span class="Identifier">T</span><span class="Other">]</span><span class="Other">)</span><span class="Other">:</span> <span class="Identifier">bool</span></pre></dt>
<dd>
Equivalent to <tt class="docutils literal"><span class="pre">cache.len == cache.capacity</span></tt>
</dd>
</dl></div>
</div>
</div>
<div class="row">
<div class="twelve-columns footer">
<span class="nim-sprite"></span>
<br/>
<small>Made with Nim. Generated: 2020-04-12 12:41:18 UTC</small>
</div>
</div>
</div>
</div>
</body>
</html>