From 0f274564d0b5605651c0c97dc556e2ac264774f7 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Fri, 25 Jan 2002 17:35:14 +0000 Subject: [PATCH] * gnus-agent.el (gnus-agent-save-alist): Optimized. --- lisp/ChangeLog | 4 ++++ lisp/gnus-agent.el | 25 +++++++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a6079b423..da5b904dc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2002-01-25 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-save-alist): Optimized. + 2002-01-25 Katsumi Yamaoka * dgnushack.el: Commented out the experimental code. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index bc5b9ff14..280bc3af6 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -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." - (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)) -- 2.25.1