Function: rx--interval-set-union
rx--interval-set-union is a byte-compiled function defined in
rx.el.gz.
Signature
(rx--interval-set-union IVS-A IVS-B)
Documentation
Union of the interval sets IVS-A and IVS-B.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/rx.el.gz
(defun rx--interval-set-union (ivs-a ivs-b)
"Union of the interval sets IVS-A and IVS-B."
(let ((union nil))
(while (and ivs-a ivs-b)
(let ((a (car ivs-a))
(b (car ivs-b)))
(cond
((< (1+ (cdr a)) (car b)) ; a before b, not adacent
(push a union)
(setq ivs-a (cdr ivs-a)))
((< (1+ (cdr b)) (car a)) ; b before a, not adacent
(push b union)
(setq ivs-b (cdr ivs-b)))
(t ; a and b adjacent or overlap
(setq ivs-a (cdr ivs-a))
(setq ivs-b (cdr ivs-b))
(if (< (cdr a) (cdr b))
(push (cons (min (car a) (car b))
(cdr b))
ivs-b)
(push (cons (min (car a) (car b))
(cdr a))
ivs-a))))))
(nconc (nreverse union) (or ivs-a ivs-b))))