| \begin{lstlisting}[language=qvtc,label=lsting:QVTiExample,caption={QVTi mappings of colored nodes.}] | |
| map HSV2MiddleRoot in ColorChanger { -- Mapping root nodes L to M | |
| hsv() { hsvRoot : HSVNode | hsvRoot.parent = null;} | |
| where() { | |
| realize middleRoot : HSVNode2HLSNode | | |
| middleRoot.hsv := hsvRoot; | |
| middleRoot.rgb := hsv2rgb(hsvRoot.hsv); | |
| } | |
| map HSV2MiddleRecursion { -- recursive call to visit children | |
| hsvNode := hsvRoot.children; | |
| middleParent := middleRoot; | |
| } | |
| map Middle2HLSRoot { -- invoke middle to output mapping | |
| middleNode := middleRoot; | |
| } | |
| } | |
| map HSV2MiddleRecursion in ColorChanger { -- Mapping child nodes L to M | |
| hsv(hsvNode : HSVNode | ) {} | |
| where(middleParent : HSVNode2HLSNode | ) { | |
| realize middleNode : HSVNode2HLSNode | | |
| middleNode.parent := middleParent; | |
| middleNode.hsv := hsvNode; | |
| middleNode.rgb := hsv2rgb(hsvNode.hsv); | |
| } | |
| map HSV2MiddleRecursion { -- recursive call to visit children | |
| hsvNode := hsvNode.children; | |
| middleParent := middleNode; | |
| } | |
| } | |
| map Middle2HLSRoot in ColorChanger { -- Mapping root nodes M to R | |
| enforce hls() { realize hlsNode : HLSNode | } | |
| where(middleNode : HSVNode2HLSNode) { | |
| middleNode.hls := hlsNode; | |
| hlsNode.parent := null; | |
| hlsNode.hls := rgb2hls(middleNode.rgb); | |
| } | |
| map Middle2HLSRecursion { -- recursive call to visit children | |
| middleNode := middleNode.children; | |
| } | |
| } | |
| map Middle2HLSRecursion in ColorChanger { -- Mapping child nodes M to R | |
| enforce hls() { realize hlsNode : HLSNode | } | |
| where(middleNode : HSVNode2HLSNode |) { | |
| middleNode.hls := hlsNode; | |
| hlsNode.parent := middleNode.parent.hls; | |
| hlsNode.hls := rgb2hls(middleNode.rgb); | |
| } | |
| map Middle2HLSRecursion { -- recursive call to visit children | |
| middleNode := middleNode.children; | |
| } | |
| } | |
| \end{lstlisting} |