Function: hierarchy--add-relation

hierarchy--add-relation is a byte-compiled function defined in hierarchy.el.gz.

Signature

(hierarchy--add-relation HIERARCHY ITEM PARENT ACCEPTFN)

Documentation

In HIERARCHY, add ITEM as child of PARENT.

ACCEPTFN is a function returning non-nil if its parameter (any object) should be an item of the hierarchy.

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/hierarchy.el.gz
(defun hierarchy--add-relation (hierarchy item parent acceptfn)
  "In HIERARCHY, add ITEM as child of PARENT.

ACCEPTFN is a function returning non-nil if its parameter (any object)
should be an item of the hierarchy."
  (let* ((existing-parent (hierarchy-parent hierarchy item))
         (has-parent-p (funcall acceptfn existing-parent)))
    (cond
     ((and has-parent-p (not (equal existing-parent parent)))
      (error "An item (%s) can only have one parent: '%s' vs '%s'"
             item existing-parent parent))
     ((not has-parent-p)
      (let ((existing-children (map-elt (hierarchy--children hierarchy)
                                        parent (list))))
        (map-put! (hierarchy--children hierarchy)
                  parent (append existing-children (list item))))
      (map-put! (hierarchy--parents hierarchy) item parent)))))