X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fgnus-range.el;h=091276ee4f8bfedb9a433ea9b8f46dbaf745a559;hb=d1a9bfb4363aceb094957e8d94cfca73be3e2c13;hp=a4262df5328277d7c5396cfdb92f50067827c1fc;hpb=df6ac45b952171e7e709c1b0bf23cc7346429f81;p=gnus diff --git a/lisp/gnus-range.el b/lisp/gnus-range.el index a4262df53..091276ee4 100644 --- a/lisp/gnus-range.el +++ b/lisp/gnus-range.el @@ -1,7 +1,6 @@ ;;; gnus-range.el --- range and sequence functions for Gnus -;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +;; Copyright (C) 1996-2012 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -53,11 +52,13 @@ If RANGE is a single range, return (RANGE). Otherwise, return RANGE." (defun gnus-set-difference (list1 list2) "Return a list of elements of LIST1 that do not appear in LIST2." - (let ((list1 (copy-sequence list1))) - (while list2 - (setq list1 (delq (car list2) list1)) - (setq list2 (cdr list2))) - list1)) + (let ((hash2 (make-hash-table :test 'eq)) + (result nil)) + (dolist (elt list2) (puthash elt t hash2)) + (dolist (elt list1) + (unless (gethash elt hash2) + (setq result (cons elt result)))) + (nreverse result))) (defun gnus-range-nconcat (&rest ranges) "Return a range comprising all the RANGES, which are pre-sorted. @@ -117,10 +118,10 @@ Both ranges must be in ascending order." ;; All done with range2 (setq r nil)) ((< max1 min2) - ;; No overlap: range1 preceeds range2 + ;; No overlap: range1 precedes range2 (pop r)) ((< max2 min1) - ;; No overlap: range2 preceeds range1 + ;; No overlap: range2 precedes range1 (pop range2)) ((and (<= min2 min1) (<= max1 max2)) ;; Complete overlap: range1 removed @@ -233,10 +234,10 @@ RANGE1 and RANGE2 have to be sorted over <." (setq range1 (cdr range1) range2 (cdr range2)) (while (and min1 min2) - (cond ((< max1 min2) ; range1 preceeds range2 + (cond ((< max1 min2) ; range1 precedes range2 (setq range1 (cdr range1) min1 nil)) - ((< max2 min1) ; range2 preceeds range1 + ((< max2 min1) ; range2 precedes range1 (setq range2 (cdr range2) min2 nil)) (t ; some sort of overlap is occurring @@ -593,15 +594,6 @@ LIST is a sorted list." (setq sum (+ sum (if (consp x) (- (cdr x) (car x) -1) 1)))))))) -(defun gnus-sublist-p (list sublist) - "Test whether all elements in SUBLIST are members of LIST." - (let ((sublistp t)) - (while sublist - (unless (memq (pop sublist) list) - (setq sublistp nil - sublist nil))) - sublistp)) - (defun gnus-range-add (range1 range2) "Add RANGE2 to RANGE1 (nondestructively)." (unless (listp (cdr range1))