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))))