* registry.el (registry-db): Don't oset-default an instance slot.
[gnus] / lisp / registry.el
index d949e7a..f26101f 100644 (file)
@@ -1,6 +1,6 @@
 ;;; registry.el --- Track and remember data items by various fields
 
-;; Copyright (C) 2011-2014 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
@@ -27,7 +27,7 @@
 
 ;; version: a float
 
-;; max-size: an integer, default 50000
+;; max-size: an integer, default most-positive-fixnum
 
 ;; prune-factor: a float between 0 and 1, default 0.1
 
       (error
        "eieio not found in `load-path' or gnus-fallback-lib/ directory.")))
 
+(eval-when-compile
+  (unless (fboundp 'cl-remf)
+    (defalias 'cl-remf 'remf)
+    (defalias 'cl-loop 'loop)
+    (defalias 'cl-subseq 'subseq)))
+
 ;; The version number needs to be kept outside of the class definition
 ;; itself.  The persistent-save process does *not* write to file any
 ;; slot values that are equal to the default :initform value.  If a
             :type (or null float)
             :documentation "The registry version.")
    (max-size :initarg :max-size
-             :initform most-positive-fixnum
+            ;; EIEIO's :initform is not 100% compatible with CLOS in
+            ;; that if the form is an atom, it assumes it's constant
+            ;; value rather than an expression, so in order to get the value
+            ;; of `most-positive-fixnum', we need to use an
+            ;; expression that's not just a symbol.
+             :initform (symbol-value 'most-positive-fixnum)
              :type integer
              :custom integer
              :documentation "The maximum number of registry entries.")
 (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)))
+  (let ((data (oref db data)))
     (delq nil
          (mapcar
           (lambda (k)
@@ -176,7 +187,7 @@ Returns an alist of the key followed by the entry in a list, not a cons cell."
 (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)))
+  (let ((data (oref db data)))
     (delq nil
          (loop for key in keys
                when (gethash key data)
@@ -237,7 +248,7 @@ The test order is to check :all first, then :member, then :regex."
     (let ((all (plist-get spec :all))
          (member (plist-get spec :member))
          (regex (plist-get spec :regex)))
-      (loop for k being the hash-keys of (oref db :data)
+      (loop for k being the hash-keys of (oref db data)
            using (hash-values v)
            when (or
                  ;; :all non-nil returns all
@@ -253,10 +264,10 @@ The test order is to check :all first, then :member, then :regex."
 If KEYS is nil, use SPEC to do a search.
 Updates the secondary ('tracked') indices as well.
 With assert non-nil, errors out if the key does not exist already."
-  (let* ((data (oref db :data))
+  (let* ((data (oref db data))
         (keys (or keys
                   (apply 'registry-search db spec)))
-        (tracked (oref db :tracked)))
+        (tracked (oref db tracked)))
 
     (dolist (key keys)
       (let ((entry (gethash key data)))
@@ -283,8 +294,8 @@ With assert non-nil, errors out if the key does not exist already."
 
 (defmethod registry-size ((db registry-db))
   "Returns the size of the registry-db object THIS.
-This is the key count of the :data slot."
-  (hash-table-count (oref db :data)))
+This is the key count of the `data' slot."
+  (hash-table-count (oref db data)))
 
 (defmethod registry-full ((db registry-db))
   "Checks if registry-db THIS is full."
@@ -296,7 +307,7 @@ This is the key count of the :data slot."
 Updates the secondary ('tracked') indices as well.
 Errors out if the key exists already."
 
-  (assert (not (gethash key (oref db :data))) nil
+  (assert (not (gethash key (oref db data))) nil
          "Key already exists in database")
 
   (assert (not (registry-full db))
@@ -304,10 +315,10 @@ Errors out if the key exists already."
          "registry max-size limit reached")
 
   ;; store the entry
-  (puthash key entry (oref db :data))
+  (puthash key entry (oref db data))
 
   ;; store the secondary indices
-  (dolist (tr (oref db :tracked))
+  (dolist (tr (oref db tracked))
     ;; for every value in the entry under that key...
     (dolist (val (cdr-safe (assq tr entry)))
       (let* ((value-keys (registry-lookup-secondary-value db tr val)))
@@ -318,8 +329,8 @@ Errors out if the key exists already."
 (defmethod registry-reindex ((db registry-db))
   "Rebuild the secondary indices of registry-db THIS."
   (let ((count 0)
-       (expected (* (length (oref db :tracked)) (registry-size db))))
-    (dolist (tr (oref db :tracked))
+       (expected (* (length (oref db tracked)) (registry-size db))))
+    (dolist (tr (oref db tracked))
       (let (values)
        (maphash
         (lambda (key v)
@@ -332,7 +343,7 @@ Errors out if the key exists already."
             (let* ((value-keys (registry-lookup-secondary-value db tr val)))
               (push key value-keys)
               (registry-lookup-secondary-value db tr val value-keys))))
-        (oref db :data))))))
+        (oref db data))))))
 
 (defmethod registry-prune ((db registry-db) &optional sortfunc)
   "Prunes the registry-db object DB.
@@ -369,7 +380,7 @@ entries first and return candidates from beginning of list."
   (let* ((precious (oref db :precious))
         (precious-p (lambda (entry-key)
                       (cdr (memq (car entry-key) precious))))
-        (data (oref db :data))
+        (data (oref db data))
         (candidates (cl-loop for k being the hash-keys of data
                              using (hash-values v)
                              when (notany precious-p v)