Ignore:
Timestamp:
04/06/10 13:42:50 (15 years ago)
Author:
lgiessmann
Message:

new-datamodel: added "merge-constructs" for "NameC" and "VariantC"

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified branches/new-datamodel/src/model/datamodel.lisp

    r261 r262  
    877877        (vi-2 (find-version-info (list construct-2))))
    878878    (cond ((not (or vi-1 vi-2))
    879            nil)
     879           construct-1)
    880880          ((not vi-1)
    881881           construct-2)
     
    10311031        (vi-2 (find-version-info (slot-p construct-2 'identified-construct))))
    10321032    (cond ((not (or vi-1 vi-2))
    1033            nil)
     1033           construct-1)
    10341034          ((not vi-1)
    10351035           construct-2)
     
    18591859        (vi-2 (find-version-info (slot-p construct-2 'parent))))
    18601860    (cond ((not (or vi-1 vi-2))
    1861            nil)
     1861           construct-1)
    18621862          ((not vi-1)
    18631863           construct-2)
     
    22792279        (vi-2 (find-version-info (slot-p construct-2 'parent))))
    22802280    (cond ((not (or vi-1 vi-2))
    2281            nil)
     2281           construct-1)
    22822282          ((not vi-1)
    22832283           construct-2)
     
    35383538
    35393539;;; end hacks ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     3540
     3541
     3542(defmethod merge-constructs ((construct-1 VariantC) (construct-2 VariantC)
     3543                             &key (revision *TM-REVISION*))
     3544  (declare (integer revision))
     3545  (if (eql construct-1 construct-2)
     3546      construct-1
     3547      (let ((older-var (find-oldest-construct construct-1 construct-2)))
     3548        (let ((newer-var (if (eql older-var construct-1)
     3549                             construct-2
     3550                             construct-1)))
     3551          (let ((parent-1 (parent older-var :revision revision))
     3552                (parent-2 (parent newer-var :revision revision)))
     3553            (unless (strictly-equivalent-constructs construct-1 construct-2
     3554                                                    :revision revision)
     3555              (error "From merge-constructs(): ~a and ~a are not mergable"
     3556                     construct-1 construct-2))
     3557            (cond ((and parent-1 parent-2)
     3558                   (let ((active-parent
     3559                          (merge-constructs parent-1 parent-2
     3560                                            :revision revision)))
     3561                     (let ((all-names (names active-parent :revision revision)))
     3562                       (if (find-if #'(lambda(name)
     3563                                        (find older-var (variants name :revision
     3564                                                                  revision)))
     3565                                    all-names)
     3566                           older-var
     3567                           newer-var))))
     3568                  ((or parent-1 parent-2)
     3569                   (let ((dst (if parent-1 older-var newer-var))
     3570                         (src (if parent-1 newer-var older-var)))
     3571                     (move-identifiers src dst :revision revision)
     3572                     (move-referenced-constructs src dst :revision revision)
     3573                     dst))
     3574                  (t
     3575                   (move-identifiers newer-var older-var :revision revision)
     3576                   (move-referenced-constructs newer-var older-var
     3577                                               :revision revision)
     3578                   older-var)))))))
     3579
     3580
     3581(defmethod merge-constructs ((construct-1 NameC) (construct-2 NameC)
     3582                             &key (revision *TM-REVISION*))
     3583  (declare (integer revision))
     3584  (if (eql construct-1 construct-2)
     3585      construct-1
     3586      (let ((older-name (find-oldest-construct construct-1 construct-2)))
     3587        (let ((newer-name (if (eql older-name construct-1)
     3588                              construct-2
     3589                              construct-1)))
     3590          (let ((parent-1 (parent older-name :revision revision))
     3591                (parent-2 (parent newer-name :revision revision)))
     3592            (unless (strictly-equivalent-constructs construct-1 construct-2
     3593                                                    :revision revision)
     3594              (error "From merge-constructs(): ~a and ~a are not mergable"
     3595                     construct-1 construct-2))
     3596            (cond ((and parent-1 parent-2)
     3597                   (let ((active-parent (merge-constructs parent-1 parent-2
     3598                                                          :revision revision)))
     3599                     (if (find older-name (names active-parent
     3600                                                 :revision revision))
     3601                         older-name
     3602                         newer-name)))
     3603                  ((or parent-1 parent-2)
     3604                   (let ((dst (if parent-1 older-name newer-name))
     3605                         (src (if parent-1 newer-name older-name)))
     3606                     (move-identifiers src dst :revision revision)
     3607                     (move-referenced-constructs src dst :revision revision)
     3608                     (move-variants src dst :revision revision)
     3609                     dst))
     3610                  (t
     3611                   (move-identifiers newer-name older-name :revision revision)
     3612                   (move-referenced-constructs newer-name older-name
     3613                                               :revision revision)
     3614                   (move-variants newer-name older-name :revision revision)
     3615                   older-name)))))))
     3616
     3617
     3618;TODO: --> include move-yx in move-referenced-constructs
Note: See TracChangeset for help on using the changeset viewer.