[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/cl-lib-improvements 1f6fdf123bf: (seq-contains-pred): Split off
From: |
Dmitry Gutov |
Subject: |
feature/cl-lib-improvements 1f6fdf123bf: (seq-contains-pred): Split off list-specialized impl into separate method |
Date: |
Mon, 20 Nov 2023 21:03:12 -0500 (EST) |
branch: feature/cl-lib-improvements
commit 1f6fdf123bf393ea36ace9dfe1bd97a894996ed7
Author: Dmitry Gutov <dmitry@gutov.dev>
Commit: Dmitry Gutov <dmitry@gutov.dev>
(seq-contains-pred): Split off list-specialized impl into separate method
* lisp/emacs-lisp/seq.el (seq-contains-pred): Split off
list-specialized impl into separate method. The result is a bit
slower (about 10%?), but better structured.
---
lisp/emacs-lisp/seq.el | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el
index 832a49d7845..d85c7297ee0 100644
--- a/lisp/emacs-lisp/seq.el
+++ b/lisp/emacs-lisp/seq.el
@@ -463,22 +463,25 @@ whether an element was found or not."
;; (t
;; (cl-call-next-method))))
-(cl-defgeneric seq-contains-pred (sequence &optional testfn)
+(cl-defgeneric seq-contains-pred (_sequence &optional testfn)
+ (lambda (elt sequence)
+ (catch 'seq--break
+ (seq-doseq (e sequence)
+ (let ((r (funcall testfn e elt)))
+ (when r
+ (throw 'seq--break r))))
+ nil)))
+
+(cl-defmethod seq-contains-pred ((_sequence list) &optional testfn)
(cond
- ((and (listp sequence) (or (null testfn) (eq testfn 'equal)))
+ ((or (null testfn) (eq testfn 'equal))
#'member)
- ((and (listp sequence) (eq testfn 'eql))
+ ((eq testfn 'eql)
#'memql)
- ((and (listp sequence) (eq testfn 'eq))
+ ((eq testfn 'eq)
#'memq)
(t
- (lambda (elt sequence)
- (catch 'seq--break
- (seq-doseq (e sequence)
- (let ((r (funcall testfn e elt)))
- (when r
- (throw 'seq--break r))))
- nil)))))
+ (cl-call-next-method))))
(cl-defgeneric seq-set-equal-p (sequence1 sequence2 &optional testfn)
"Return non-nil if SEQUENCE1 and SEQUENCE2 contain the same elements.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- feature/cl-lib-improvements 1f6fdf123bf: (seq-contains-pred): Split off list-specialized impl into separate method,
Dmitry Gutov <=