* gnus-sum.el (gnus-update-marks): Do not remove empty 'unexist'
[gnus] / lisp / registry.el
index ffba2e1..2ebd029 100644 (file)
@@ -1,6 +1,6 @@
 ;;; registry.el --- Track and remember data items by various fields
 
-;; Copyright (C) 2011  Free Software Foundation, Inc.
+;; Copyright (C) 2011-2013 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
 
 (eval-when-compile (require 'cl))
 
-(eval-when-compile
-  (when (null (ignore-errors (require 'ert)))
-    (defmacro* ert-deftest (name () &body docstring-keys-and-body))))
-
-(ignore-errors
-  (require 'ert))
 (eval-and-compile
   (or (ignore-errors (progn
                        (require 'eieio)
              :type integer
              :custom integer
              :documentation "Prune as much as possible to get to this size.")
+   (prune-factor
+    :initarg :prune-factor
+    :initform 0.1
+    :type float
+    :custom float
+    :documentation "At the max-hard limit, prune size * this entries.")
    (tracked :initarg :tracked
             :initform nil
             :type t
          :type hash-table
          :documentation "The data hashtable.")))
 
-(eval-and-compile
-  (defmethod initialize-instance :AFTER ((this registry-db) slots)
-    "Set value of data slot of THIS after initialization."
-    (with-slots (data tracker) this
-      (unless (member :data slots)
-       (setq data
-             (make-hash-table :size 10000 :rehash-size 2.0 :test 'equal)))
-      (unless (member :tracker slots)
-       (setq tracker (make-hash-table :size 100 :rehash-size 2.0)))))
-
-  (defmethod registry-lookup ((db registry-db) keys)
-    "Search for KEYS in the registry-db THIS.
-Returns a alist of the key followed by the entry in a list, not a cons cell."
-    (let ((data (oref db :data)))
-      (delq nil
-           (mapcar
-            (lambda (k)
-              (when (gethash k data)
-                (list k (gethash k data))))
-            keys))))
-
-  (defmethod registry-lookup-breaks-before-lexbind ((db registry-db) keys)
-    "Search for KEYS in the registry-db THIS.
-Returns a alist of the key followed by the entry in a list, not a cons cell."
-    (let ((data (oref db :data)))
-      (delq nil
-           (loop for key in keys
-                 when (gethash key data)
-                 collect (list key (gethash key data))))))
-
-  (defmethod registry-lookup-secondary ((db registry-db) tracksym
-                                       &optional create)
-    "Search for TRACKSYM in the registry-db THIS.
+(defmethod initialize-instance :AFTER ((this registry-db) slots)
+  "Set value of data slot of THIS after initialization."
+  (with-slots (data tracker) this
+    (unless (member :data slots)
+      (setq data
+           (make-hash-table :size 10000 :rehash-size 2.0 :test 'equal)))
+    (unless (member :tracker slots)
+      (setq tracker (make-hash-table :size 100 :rehash-size 2.0)))))
+
+(defmethod registry-lookup ((db registry-db) keys)
+  "Search for KEYS in the registry-db THIS.
+Returns an alist of the key followed by the entry in a list, not a cons cell."
+  (let ((data (oref db :data)))
+    (delq nil
+         (mapcar
+          (lambda (k)
+            (when (gethash k data)
+              (list k (gethash k data))))
+          keys))))
+
+(defmethod registry-lookup-breaks-before-lexbind ((db registry-db) keys)
+  "Search for KEYS in the registry-db THIS.
+Returns an alist of the key followed by the entry in a list, not a cons cell."
+  (let ((data (oref db :data)))
+    (delq nil
+         (loop for key in keys
+               when (gethash key data)
+               collect (list key (gethash key data))))))
+
+(defmethod registry-lookup-secondary ((db registry-db) tracksym
+                                     &optional create)
+  "Search for TRACKSYM in the registry-db THIS.
 When CREATE is not nil, create the secondary index hashtable if needed."
-    (let ((h (gethash tracksym (oref db :tracker))))
-      (if h
-         h
-      &