Function: org-sxhash-safe

org-sxhash-safe is a byte-compiled function defined in org-macs.el.gz.

Signature

(org-sxhash-safe OBJ &optional COUNTER)

Documentation

Like sxhash for OBJ, but collision-free for in-memory objects.

When COUNTER is non-nil, return safe hash for (COUNTER . OBJ).

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-macs.el.gz
(defun org-sxhash-safe (obj &optional counter)
  "Like `sxhash' for OBJ, but collision-free for in-memory objects.
When COUNTER is non-nil, return safe hash for (COUNTER . OBJ)."
  ;; Note: third-party code may modify OBJ by side effect.
  ;; Should not affect anything as long as `org-sxhash-safe'
  ;; is used to calculate hash.
  (or (and (not counter) (gethash obj org-sxhash-hashes))
      (let* ((hash (sxhash (if counter (cons counter obj) obj)))
	     (obj-old (gethash hash org-sxhash-objects)))
	(if obj-old ; collision
	    (org-sxhash-safe obj (if counter (1+ counter) 1))
	  ;; No collision.  Remember and return normal hash.
	  (puthash hash obj org-sxhash-objects)
	  (puthash obj hash org-sxhash-hashes)))))