• Home
  • Raw
  • Download

Lines Matching full:cache

11 //! A cache that holds a limited number of key-value pairs. When the
12 //! capacity of the cache is exceeded, the least-recently-used
13 //! (where "used" means a look-up or putting the pair into the cache)
21 //! let mut cache = LruCache::new(2);
23 //! cache.insert(1, 10);
24 //! cache.insert(2, 20);
25 //! cache.insert(3, 30);
26 //! assert!(cache.get_mut(&1).is_none());
27 //! assert_eq!(*cache.get_mut(&2).unwrap(), 20);
28 //! assert_eq!(*cache.get_mut(&3).unwrap(), 30);
30 //! cache.insert(2, 22);
31 //! assert_eq!(*cache.get_mut(&2).unwrap(), 22);
33 //! cache.insert(6, 60);
34 //! assert!(cache.get_mut(&3).is_none());
36 //! cache.set_capacity(1);
37 //! assert!(cache.get_mut(&2).is_none());
54 /// An LRU cache.
62 /// Creates an empty cache that can hold at most `capacity` items.
68 /// let mut cache: LruCache<i32, &str> = LruCache::new(10);
79 /// Creates an empty cache that can hold at most `capacity` items with the given hash builder.
91 /// let mut cache = LruCache::new(1);
93 /// cache.insert(1, "a");
94 /// assert_eq!(cache.contains_key(&1), true);
103 /// Inserts a key-value pair into the cache. If the key already existed, the old value is
111 /// let mut cache = LruCache::new(2);
113 /// cache.insert(1, "a");
114 /// cache.insert(2, "b");
115 /// assert_eq!(cache.get_mut(&1), Some(&mut "a"));
116 /// assert_eq!(cache.get_mut(&2), Some(&mut "b"));
126 /// Returns a mutable reference to the value corresponding to the given key in the cache, if
134 /// let mut cache = LruCache::new(2);
136 /// cache.insert(1, "a");
137 /// cache.insert(2, "b");
138 /// cache.insert(2, "c");
139 /// cache.insert(3, "d");
141 /// assert_eq!(cache.get_mut(&1), None);
142 /// assert_eq!(cache.get_mut(&2), Some(&mut "c"));
151 /// Removes the given key from the cache and returns its corresponding value.
158 /// let mut cache = LruCache::new(2);
160 /// cache.insert(2, "a");
162 /// assert_eq!(cache.remove(&1), None);
163 /// assert_eq!(cache.remove(&2), Some("a"));
164 /// assert_eq!(cache.remove(&2), None);
165 /// assert_eq!(cache.len(), 0);
174 /// Returns the maximum number of key-value pairs the cache can hold.
180 /// let mut cache: LruCache<i32, &str> = LruCache::new(2);
181 /// assert_eq!(cache.capacity(), 2);
187 /// Sets the number of key-value pairs the cache can hold. Removes
195 /// let mut cache = LruCache::new(2);
197 /// cache.insert(1, "a");
198 /// cache.insert(2, "b");
199 /// cache.insert(3, "c");
201 /// assert_eq!(cache.get_mut(&1), None);
202 /// assert_eq!(cache.get_mut(&2), Some(&mut "b"));
203 /// assert_eq!(cache.get_mut(&3), Some(&mut "c"));
205 /// cache.set_capacity(3);
206 /// cache.insert(1, "a");
207 /// cache.insert(2, "b");
209 /// assert_eq!(cache.get_mut(&1), Some(&mut "a"));
210 /// assert_eq!(cache.get_mut(&2), Some(&mut "b"));
211 /// assert_eq!(cache.get_mut(&3), Some(&mut "c"));
213 /// cache.set_capacity(1);
215 /// assert_eq!(cache.get_mut(&1), None);
216 /// assert_eq!(cache.get_mut(&2), None);
217 /// assert_eq!(cache.get_mut(&3), Some(&mut "c"));
233 /// let mut cache = LruCache::new(2);
235 /// cache.insert(1, "a");
236 /// cache.insert(2, "b");
238 /// assert_eq!(cache.remove_lru(), Some((1, "a")));
239 /// assert_eq!(cache.len(), 1);
246 /// Returns the number of key-value pairs in the cache.
249 /// Returns `true` if the cache contains no key-value pairs.
252 /// Removes all key-value pairs from the cache.
255 /// Returns an iterator over the cache's key-value pairs in least- to most-recently-used order.
257 /// Accessing the cache through the iterator does _not_ affect the cache's LRU state.
264 /// let mut cache = LruCache::new(2);
266 /// cache.insert(1, 10);
267 /// cache.insert(2, 20);
268 /// cache.insert(3, 30);
270 /// let kvs: Vec<_> = cache.iter().collect();
275 /// Returns an iterator over the cache's key-value pairs in least- to most-recently-used order,
278 /// Accessing the cache through the iterator does _not_ affect the cache's LRU state.
285 /// let mut cache = LruCache::new(2);
287 /// cache.insert(1, 10);
288 /// cache.insert(2, 20);
289 /// cache.insert(3, 30);
293 /// for (k, v) in cache.iter_mut() {
301 /// assert_eq!(cache.get_mut(&2), Some(&mut 200));
302 /// assert_eq!(cache.get_mut(&3), Some(&mut 300));
342 /// An iterator over a cache's key-value pairs in least- to most-recently-used order.
349 /// let mut cache = LruCache::new(2);
351 /// cache.insert(1, 10);
352 /// cache.insert(2, 20);
353 /// cache.insert(3, 30);
357 /// for (k, v) in cache {
392 /// An iterator over a cache's key-value pairs in least- to most-recently-used order.
394 /// Accessing a cache through the iterator does _not_ affect the cache's LRU state.
415 /// An iterator over a cache's key-value pairs in least- to most-recently-used order with mutable
418 /// Accessing a cache through the iterator does _not_ affect the cache's LRU state.
441 let mut cache = LruCache::new(2); in test_put_and_get() localVariable
442 cache.insert(1, 10); in test_put_and_get()
443 cache.insert(2, 20); in test_put_and_get()
444 assert_eq!(cache.get_mut(&1), Some(&mut 10)); in test_put_and_get()
445 assert_eq!(cache.get_mut(&2), Some(&mut 20)); in test_put_and_get()
446 assert_eq!(cache.len(), 2); in test_put_and_get()
451 let mut cache = LruCache::new(1); in test_put_update() localVariable
452 cache.insert("1", 10); in test_put_update()
453 cache.insert("1", 19); in test_put_update()
454 assert_eq!(cache.get_mut("1"), Some(&mut 19)); in test_put_update()
455 assert_eq!(cache.len(), 1); in test_put_update()
460 let mut cache = LruCache::new(1); in test_contains_key() localVariable
461 cache.insert("1", 10); in test_contains_key()
462 assert_eq!(cache.contains_key("1"), true); in test_contains_key()
467 let mut cache = LruCache::new(2); in test_expire_lru() localVariable
468 cache.insert("foo1", "bar1"); in test_expire_lru()
469 cache.insert("foo2", "bar2"); in test_expire_lru()
470 cache.insert("foo3", "bar3"); in test_expire_lru()
471 assert!(cache.get_mut("foo1").is_none()); in test_expire_lru()
472 cache.insert("foo2", "bar2update"); in test_expire_lru()
473 cache.insert("foo4", "bar4"); in test_expire_lru()
474 assert!(cache.get_mut("foo3").is_none()); in test_expire_lru()
479 let mut cache = LruCache::new(2); in test_pop() localVariable
480 cache.insert(1, 10); in test_pop()
481 cache.insert(2, 20); in test_pop()
482 assert_eq!(cache.len(), 2); in test_pop()
483 let opt1 = cache.remove(&1); in test_pop()
486 assert!(cache.get_mut(&1).is_none()); in test_pop()
487 assert_eq!(cache.len(), 1); in test_pop()
492 let mut cache = LruCache::new(2); in test_change_capacity() localVariable
493 assert_eq!(cache.capacity(), 2); in test_change_capacity()
494 cache.insert(1, 10); in test_change_capacity()
495 cache.insert(2, 20); in test_change_capacity()
496 cache.set_capacity(1); in test_change_capacity()
497 assert!(cache.get_mut(&1).is_none()); in test_change_capacity()
498 assert_eq!(cache.capacity(), 1); in test_change_capacity()
503 let mut cache = LruCache::new(3); in test_debug() localVariable
504 cache.insert(1, 10); in test_debug()
505 cache.insert(2, 20); in test_debug()
506 cache.insert(3, 30); in test_debug()
507 assert_eq!(format!("{:?}", cache), "{3: 30, 2: 20, 1: 10}"); in test_debug()
508 cache.insert(2, 22); in test_debug()
509 assert_eq!(format!("{:?}", cache), "{2: 22, 3: 30, 1: 10}"); in test_debug()
510 cache.insert(6, 60); in test_debug()
511 assert_eq!(format!("{:?}", cache), "{6: 60, 2: 22, 3: 30}"); in test_debug()
512 cache.get_mut(&3); in test_debug()
513 assert_eq!(format!("{:?}", cache), "{3: 30, 6: 60, 2: 22}"); in test_debug()
514 cache.set_capacity(2); in test_debug()
515 assert_eq!(format!("{:?}", cache), "{3: 30, 6: 60}"); in test_debug()
520 let mut cache = LruCache::new(3); in test_remove() localVariable
521 cache.insert(1, 10); in test_remove()
522 cache.insert(2, 20); in test_remove()
523 cache.insert(3, 30); in test_remove()
524 cache.insert(4, 40); in test_remove()
525 cache.insert(5, 50); in test_remove()
526 cache.remove(&3); in test_remove()
527 cache.remove(&4); in test_remove()
528 assert!(cache.get_mut(&3).is_none()); in test_remove()
529 assert!(cache.get_mut(&4).is_none()); in test_remove()
530 cache.insert(6, 60); in test_remove()
531 cache.insert(7, 70); in test_remove()
532 cache.insert(8, 80); in test_remove()
533 assert!(cache.get_mut(&5).is_none()); in test_remove()
534 assert_eq!(cache.get_mut(&6), Some(&mut 60)); in test_remove()
535 assert_eq!(cache.get_mut(&7), Some(&mut 70)); in test_remove()
536 assert_eq!(cache.get_mut(&8), Some(&mut 80)); in test_remove()
541 let mut cache = LruCache::new(2); in test_clear() localVariable
542 cache.insert(1, 10); in test_clear()
543 cache.insert(2, 20); in test_clear()
544 cache.clear(); in test_clear()
545 assert!(cache.get_mut(&1).is_none()); in test_clear()
546 assert!(cache.get_mut(&2).is_none()); in test_clear()
547 assert_eq!(format!("{:?}", cache), "{}"); in test_clear()
552 let mut cache = LruCache::new(3); in test_iter() localVariable
553 cache.insert(1, 10); in test_iter()
554 cache.insert(2, 20); in test_iter()
555 cache.insert(3, 30); in test_iter()
556 cache.insert(4, 40); in test_iter()
557 cache.insert(5, 50); in test_iter()
558 assert_eq!(cache.iter().collect::<Vec<_>>(), in test_iter()
560 assert_eq!(cache.iter_mut().collect::<Vec<_>>(), in test_iter()
562 assert_eq!(cache.iter().rev().collect::<Vec<_>>(), in test_iter()
564 assert_eq!(cache.iter_mut().rev().collect::<Vec<_>>(), in test_iter()