blob: 4e887cd3ce3a0f08239a3317429f6e392a03d3b5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007,2008 Tata Consultancy Services and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* TCS - initial implementation for ModelMorf
* E.D.Willink - alignment with evolved specification
* E.D.Willink - rename / comment
*******************************************************************************/
--import listMM : '../../../../../../../../../org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/forward2reverse/DoublyLinkedList.ecore#/';
import listMM : 'DoublyLinkedList.ecore#/';
package org::eclipse::qvtd::xtext::qvtrelation::tests::forward2reverse {
/**
* Reverse the order of elements in a circular list.
*/
transformation Forward2Reverse(forward:listMM, reverse:listMM)
{
/**
* Map each list to a list
*/
top relation list2list {
listName : String;
domain forward forwardList : DoublyLinkedList {
name = listName
};
enforce domain reverse reverseList : DoublyLinkedList {
name = listName
};
where {
listHead2listHead(forwardList, reverseList);
}
}
relation listHead2listHead {
domain forward forwardList : DoublyLinkedList {
headElement = forwardHead : Element{}
};
enforce domain reverse reverseList : DoublyLinkedList {
headElement = reverseHead : Element{}
};
when {
element2element(forwardHead, reverseHead);
}
}
/**
* Map each element to an element with reversed source/target linkage.
*/
top relation element2element {
elementName : String;
domain forward forwardElement : Element {
list = forwardList : DoublyLinkedList{},
name = elementName,
target = forwardTarget : Element{}
};
enforce domain reverse reverseElement : Element {
list = reverseList : DoublyLinkedList{},
name = elementName,
source = reverseSource : Element{}
};
when {
list2list(forwardList, reverseList);
element2element(forwardTarget, reverseSource);
}
}
}
}