anchor.diff:  
   (defgeneric id-for-object (transaction obj))
   
  -(defgeneric add-changed-node (transaction node))
  -
  -(defgeneric add-opened-node (transaction node id))
  +(defgeneric add-new-object (transaction object))
  +
  +(defgeneric add-changed-object (transaction object))
  +
  +(defgeneric add-opened-object (transaction object id))
   
   (defgeneric prb-open-storage (storage)
     (:documentation "Prepare storage for use; after this call load & save operations should succeed"))
  
positive.code: (defmethod rb-make-node :around ((tree persistent-red-black-tree) &key ((:key key) nil) ((:data data) nil))
    (declare (ignorable key data))
    (require-rb-transaction)
    (let ((node (call-next-method)))
      (add-new-node *rb-transaction* node)
      node))
  
  (defmethod add-changed-node ((*rb-transaction* red-black-tree-transaction) node)
    (unless (gethash (id-for-object *rb-transaction* node) (changes *rb-transaction*))
      (let ((old-id (id-for-object *rb-transaction* node)) 
  	  (new-id (allocate-id *rb-transaction* node)))
        (setf (gethash node (object-to-id *rb-transaction*)) new-id)
        (setf (gethash new-id (id-to-object *rb-transaction*)) node)
        (setf (gethash new-id (changes *rb-transaction*)) old-id))))
  
  (defmethod add-opened-node ((*rb-transaction* red-black-tree-transaction) node id)
    (setf (gethash node (object-to-id *rb-transaction*)) id)
    (setf (gethash id (id-to-object *rb-transaction*)) node))
  
  (defmethod add-new-node ((*rb-transaction* red-black-tree-transaction) node)
    (let ((new-id (allocate-id *rb-transaction* node)))
      (setf (gethash node (object-to-id *rb-transaction*)) new-id)
      (setf (gethash new-id (id-to-object *rb-transaction*)) node)
      (setf (gethash new-id (changes *rb-transaction*)) new-id)))
  
  (defmacro with-rb-transaction ((tree) &rest body)
    `(let* ((existing-transaction *rb-transaction*) 
  
negative.code: 			 #'<))
  	(storage (storage (tree *rb-transaction*))))
      (loop for id in ids
         do (prb-save storage *rb-transaction* id (object-for-id *rb-transaction* id)))
      (when (new-root *rb-transaction*)
            (setf (root storage) (new-root *rb-transaction*))
        	  (setf (slot-value (tree *rb-transaction*) 'root) (new-root *rb-transaction*)))))