Function: cl--delete-duplicates
cl--delete-duplicates is a byte-compiled function defined in
cl-seq.el.gz.
Signature
(cl--delete-duplicates SEQ CL-KEYS COPY)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-seq.el.gz
(defun cl--delete-duplicates (seq cl-keys copy)
(if (listp seq)
(cl--parsing-keywords
;; We need to parse :if, otherwise `cl-if' is unbound.
(:test :test-not :key (:start 0) :end :from-end :if)
()
(if cl-from-end
(let ((p (nthcdr cl-start seq)) i)
(setq cl-end (- (or cl-end (length seq)) cl-start))
(while (> cl-end 1)
(setq i 0)
(while (setq i (cl--position (cl--check-key (car p))
(cdr p) i (1- cl-end)))
(if copy (setq seq (copy-sequence seq)
p (nthcdr cl-start seq) copy nil))
(let ((tail (nthcdr i p)))
(setcdr tail (cdr (cdr tail))))
(setq cl-end (1- cl-end)))
(setq p (cdr p) cl-end (1- cl-end)
cl-start (1+ cl-start)))
seq)
(setq cl-end (- (or cl-end (length seq)) cl-start))
(while (and (cdr seq) (= cl-start 0) (> cl-end 1)
(cl--position (cl--check-key (car seq))
(cdr seq) 0 (1- cl-end)))
(setq seq (cdr seq) cl-end (1- cl-end)))
(let ((p (if (> cl-start 0) (nthcdr (1- cl-start) seq)
(setq cl-end (1- cl-end) cl-start 1) seq)))
(while (and (cdr (cdr p)) (> cl-end 1))
(if (cl--position (cl--check-key (car (cdr p)))
(cdr (cdr p)) 0 (1- cl-end))
(progn
(if copy (setq seq (copy-sequence seq)
p (nthcdr (1- cl-start) seq)
copy nil))
(setcdr p (cdr (cdr p))))
(setq p (cdr p)))
(setq cl-end (1- cl-end) cl-start (1+ cl-start)))
seq)))
(let ((res (cl--delete-duplicates (append seq nil) cl-keys nil)))
(if (stringp seq) (concat res) (vconcat res)))))