* gnus-agent.el (gnus-agent-save-alist): Optimized.
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 25 Jan 2002 17:35:14 +0000 (17:35 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 25 Jan 2002 17:35:14 +0000 (17:35 +0000)
lisp/ChangeLog
lisp/gnus-agent.el

index a6079b4..da5b904 100644 (file)
@@ -1,3 +1,7 @@
+2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-agent.el (gnus-agent-save-alist): Optimized.
+
 2002-01-25  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * dgnushack.el: Commented out the experimental code.
 2002-01-25  Katsumi Yamaoka  <yamaoka@jpl.org>
 
        * dgnushack.el: Commented out the experimental code.
index bc5b9ff..280bc3a 100644 (file)
@@ -1123,14 +1123,23 @@ the actual number of articles toggled is returned."
 
 (defun gnus-agent-save-alist (group &optional articles state dir)
   "Save the article-state alist for GROUP."
 
 (defun gnus-agent-save-alist (group &optional articles state dir)
   "Save the article-state alist for GROUP."
-  (let ((file-name-coding-system nnmail-pathname-coding-system)
-       print-level print-length item)
-    (dolist (art articles)
-      (if (setq item (memq art gnus-agent-article-alist))
-         (setcdr item state)
-       (push (cons art state) gnus-agent-article-alist)))
-    (setq gnus-agent-article-alist 
-         (sort gnus-agent-article-alist 'car-less-than-car))
+  (let* ((file-name-coding-system nnmail-pathname-coding-system)
+        (prev (cons nil gnus-agent-article-alist))
+        (all prev)
+        print-level print-length item)
+    (while (setq article (pop articles))
+      (while (and (cdr prev)
+                (< (caadr prev) article))
+       (setq prev (cdr prev)))
+      (cond
+       ((not (cdr prev))
+       (setcdr prev (list (cons article state))))
+       ((> (caadr prev) article)
+       (setcdr prev (cons (cons article state) (cdr prev))))
+       ((= (caadr prev) article)
+       (setcdr (cadr prev) state))
+       (setq prev (cdr prev))))
+    (setq gnus-agent-article-alist (cdr all))
     (with-temp-file (if dir
                        (expand-file-name ".agentview" dir)
                      (gnus-agent-article-name ".agentview" group))
     (with-temp-file (if dir
                        (expand-file-name ".agentview" dir)
                      (gnus-agent-article-name ".agentview" group))