Function: reftex-uniquify
reftex-uniquify is a byte-compiled function defined in reftex.el.gz.
Signature
(reftex-uniquify LIST &optional SORT)
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/reftex.el.gz
(defun reftex-uniquify (list &optional sort)
;; Return a list of all strings in LIST, but each only once, keeping order
;; unless SORT is set (faster!).
(setq list (copy-sequence list))
(if sort
(progn
(setq list (sort list #'string<))
(let ((p list))
(while (cdr p)
(if (string= (car p) (car (cdr p)))
(setcdr p (cdr (cdr p)))
(setq p (cdr p)))))
list)
(let ((p list) lst elt)
;; push all sublists into lst in reverse(!) order
(while p
(push p lst)
(setq p (cdr p)))
;; sort all sublists
(setq lst (sort lst (lambda (x1 x2) (string< (car x1) (car x2)))))
(while (cdr lst)
(setq elt (car (car lst)))
;; for equal elements in the sorted sublist, replace the
;; last(!) original list member with nil
(when (string= elt (car (cadr lst)))
(setcar (pop lst) nil)
(while (and (cdr lst) (string= elt (car (cadr lst))))
(setcar (pop lst) nil)))
(pop lst)))
;; weed out all nils and return.
(delq nil list)))