-;;; riece-cache.el --- LRU based cache management
+;;; riece-cache.el --- LRU cache
;; Copyright (C) 1998-2005 Daiki Ueno
;; Author: Daiki Ueno <ueno@unixuser.org>
(defalias 'riece-make-cache 'riece-cache-make-map)
(defun riece-cache-contains (map key)
+ "Return t if MAP contains an entry whose key is KEY."
(intern-soft key (riece-cache-map-hash-obarray map)))
(defun riece-cache-get (map key)
+ "Return the value associated with KEY in MAP.
+If KEY is not associated in MAP, it returns nil."
(let ((node (riece-cache-get-node map key)))
(if node
(riece-cache-node-value node))))
(defun riece-cache-get-node (map key)
+ "Return a node object associcated with KEY in MAP.
+If KEY is not associated in MAP, it returns nil."
(let ((symbol (intern-soft key (riece-cache-map-hash-obarray map)))
previous next last node)
(when symbol
node)))
(defun riece-cache-delete (map key)
+ "Remove an entry from MAP whose key is KEY."
(let ((symbol (intern-soft key (riece-cache-map-hash-obarray map)))
previous next node)
(when symbol
(if (eq (riece-cache-map-first map) node)
(riece-cache-map-set-first map next))
(unintern symbol (riece-cache-map-hash-obarray map))
- (riece-cache-map-set-hash-length map (1- (riece-cache-map-hash-length map)))
+ (riece-cache-map-set-hash-length map
+ (1- (riece-cache-map-hash-length map)))
(riece-cache-node-value node))))
(defun riece-cache-set (map key value)
+ "Associate KEY with VALUE in MAP."
(let ((node (riece-cache-get-node map key)))
(if node
(riece-cache-node-set-value node value)
(1+ (riece-cache-map-hash-length map)))
(unless (riece-cache-map-first map)
(riece-cache-map-set-first map node))
- (if (riece-cache-map-last map)
- (progn
- (riece-cache-node-set-next (riece-cache-map-last map) node)
- (riece-cache-node-set-previous node (riece-cache-map-last map))))
+ (when (riece-cache-map-last map)
+ (riece-cache-node-set-next (riece-cache-map-last map) node)
+ (riece-cache-node-set-previous node (riece-cache-map-last map)))
(riece-cache-map-set-last map node))))
(provide 'riece-cache)