Function: rmail-summary-fill-message-parents-and-descs-vectors

rmail-summary-fill-message-parents-and-descs-vectors is a byte-compiled function defined in rmailsum.el.gz.

Signature

(rmail-summary-fill-message-parents-and-descs-vectors)

Documentation

Fill parents and descendants vectors for messages.

This populates rmail-summary-message-parents-vector and rmail-summary-message-descendants-vector.

Source Code

;; Defined in /usr/src/emacs/lisp/mail/rmailsum.el.gz
(defun rmail-summary-fill-message-parents-and-descs-vectors ()
  "Fill parents and descendants vectors for messages.
This populates `rmail-summary-message-parents-vector'
and `rmail-summary-message-descendants-vector'."
  (with-current-buffer rmail-buffer
    (rmail-summary-fill-message-ids-hash-table)
    (setq rmail-summary-subjects-hash-table
          (make-hash-table :test 'equal :size 1024))
    (setq rmail-summary-message-parents-vector
          (make-vector (1+ rmail-total-messages) nil))
    (setq rmail-summary-message-descendants-vector
          (make-vector (1+ rmail-total-messages) nil))
    (let ((msgnum 1))
      (while (<= msgnum rmail-total-messages)
	(let* ((parents nil)
	       (subject (rmail-simplified-subject msgnum))
	       (subj-cell (gethash subject rmail-summary-subjects-hash-table))
	       (subj-par (assoc subject subj-cell))
	       (refs (rmail-summary--split-header-field "References" msgnum))
	       (reply-tos (rmail-summary--split-header-field "In-reply-to"
                                                            msgnum)))
	  (if subj-par
	      (progn
		(setq parents (cons (cdr subj-par) nil))
		(aset rmail-summary-message-descendants-vector (cdr subj-par)
		      (cons msgnum
                            (aref rmail-summary-message-descendants-vector
                                  (cdr subj-par)))))
	    (puthash subject (cons (cons subject msgnum) subj-cell)
		     rmail-summary-subjects-hash-table))
	  (dolist (id (append refs reply-tos))
	    (let ((ent
                   (assoc id
                          (gethash id rmail-summary-message-ids-hash-table))))
	      (when ent
		(setq parents (cons (cdr ent) parents))
		(aset rmail-summary-message-descendants-vector (cdr ent)
		      (cons msgnum
                            (aref rmail-summary-message-descendants-vector
                                  (cdr ent)))))))
	  (aset rmail-summary-message-parents-vector msgnum parents)
	  (setq msgnum (1+ msgnum)))))))