Function: gnus-create-xref-hashtb

gnus-create-xref-hashtb is a byte-compiled function defined in gnus-sum.el.gz.

Signature

(gnus-create-xref-hashtb FROM-NEWSGROUP HEADERS UNREADS)

Documentation

Go through the HEADERS list and add all Xrefs to a hash table.

The resulting hash table is returned, or nil if no Xrefs were found.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
(defun gnus-create-xref-hashtb (from-newsgroup headers unreads)
  "Go through the HEADERS list and add all Xrefs to a hash table.
The resulting hash table is returned, or nil if no Xrefs were found."
  (let* ((virtual (gnus-virtual-group-p from-newsgroup))
	 (prefix (if virtual "" (gnus-group-real-prefix from-newsgroup)))
	 (xref-hashtb (gnus-make-hashtable))
	 start group entry number xrefs header)
    (while headers
      (setq header (pop headers))
      (when (and (setq xrefs (mail-header-xref header))
		 (not (memq (setq number (mail-header-number header))
			    unreads)))
	(setq start 0)
	(while (string-match "\\([^ ]+\\)[:/]\\([0-9]+\\)" xrefs start)
	  (setq start (match-end 0))
	  (setq group (if prefix
			  (concat prefix (substring xrefs (match-beginning 1)
						    (match-end 1)))
			(substring xrefs (match-beginning 1) (match-end 1))))
	  (setq number
		(string-to-number (substring xrefs (match-beginning 2)
					  (match-end 2))))
	  (if (setq entry (gethash group xref-hashtb))
	      (setcdr entry (cons number (cdr entry)))
	    (puthash group (cons number nil) xref-hashtb)))))
    (and start xref-hashtb)))