| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html><head> |
| <title></title> |
| <style type="text/css"> |
| <!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }--> |
| </style> |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
| </head><body> |
| |
| |
| <!-- ======================================================== --> |
| <!-- = Java Sourcecode to HTML automatically converted code = --> |
| <!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --> |
| <!-- = Further information: http://www.java2html.de = --> |
| <div align="left" class="java"> |
| <table border="0" cellpadding="3" cellspacing="0" bgcolor="#ffffff"> |
| <tr> |
| <!-- start source code --> |
| <td nowrap="nowrap" valign="top" align="left"> |
| <code> |
| <font color="#7f0055"><b>package </b></font><font color="#000000">oclastview.visitors.arithSimp;</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">java.util.List;</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EClass;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EClassifier;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EEnumLiteral;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EObject;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EOperation;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EPackage;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EParameter;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.emf.ecore.EStructuralFeature;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.Environment;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.ecore.CallOperationAction;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.ecore.Constraint;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.ecore.EcoreEnvironmentFactory;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.ecore.SendSignalAction;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.expressions.ExpressionsFactory;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.expressions.IntegerLiteralExp;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.expressions.NumericLiteralExp;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.expressions.OCLExpression;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.expressions.OperationCallExp;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.expressions.RealLiteralExp;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.utilities.PredefinedType;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.utilities.UtilitiesPackage;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.ocl.utilities.Visitable;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.Class;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.Classifier;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.EnumerationLiteral;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.Operation;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.Package;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.Parameter;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.Property;</font><br /> |
| <font color="#7f0055"><b>import </b></font><font color="#000000">org.eclipse.uml2.uml.State;</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#7f0055"><b>public class </b></font><font color="#000000">OCLArithSimplifier<C, O, P, EL, PM, S, COA, SSA, CT> </font><font color="#7f0055"><b>extends </b></font><font color="#000000">OCLCloner<C, O, P, EL, PM, S, COA, SSA, CT> </font><font color="#000000">{</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>protected </b></font><font color="#000000">OCLArithSimplifier</font><font color="#000000">(</font><font color="#000000">Environment env</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>super</b></font><font color="#000000">(</font><font color="#000000">env</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>public static </b></font><font color="#000000">OCLArithSimplifier<EClassifier, EOperation, EStructuralFeature, EEnumLiteral, EParameter, EObject, CallOperationAction, SendSignalAction, Constraint> getEcoreVersion</font><font color="#000000">() {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Environment<EPackage, EClassifier, EOperation, EStructuralFeature, EEnumLiteral, EParameter, EObject, CallOperationAction, SendSignalAction, Constraint, EClass, EObject> auxEnv = EcoreEnvironmentFactory.INSTANCE</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.createEnvironment</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OCLArithSimplifier<EClassifier, EOperation, EStructuralFeature, EEnumLiteral, EParameter, EObject, CallOperationAction, SendSignalAction, Constraint> res = </font><font color="#7f0055"><b>new </b></font><font color="#000000">OCLArithSimplifier<EClassifier, EOperation, EStructuralFeature, EEnumLiteral, EParameter, EObject, CallOperationAction, SendSignalAction, Constraint></font><font color="#000000">(</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">auxEnv</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>public static </b></font><font color="#000000">OCLArithSimplifier<Classifier, Operation, Property, EnumerationLiteral, Parameter, State, CallOperationAction, SendSignalAction, org.eclipse.uml2.uml.Constraint> getUML2Version</font><font color="#000000">() {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">org.eclipse.ocl.uml.OCL umlocl = org.eclipse.ocl.uml.OCL.newInstance</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Environment<Package, Classifier, Operation, Property, EnumerationLiteral, Parameter, State, org.eclipse.uml2.uml.CallOperationAction, org.eclipse.uml2.uml.SendSignalAction, org.eclipse.uml2.uml.Constraint, Class, EObject> auxEnv = umlocl</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.getEnvironment</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OCLArithSimplifier<Classifier, Operation, Property, EnumerationLiteral, Parameter, State, CallOperationAction, SendSignalAction, org.eclipse.uml2.uml.Constraint> res = </font><font color="#7f0055"><b>new </b></font><font color="#000000">OCLArithSimplifier</font><font color="#000000">(</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">auxEnv</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#646464">@Override</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>protected </b></font><font color="#000000">Visitable handleOperationCallExp</font><font color="#000000">(</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OperationCallExp<C, O> callExp, Visitable sourceResult,</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">List<Visitable> argumentResults</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>int </b></font><font color="#000000">opcode = callExp.getOperationCode</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">!isArithmeticOp</font><font color="#000000">(</font><font color="#000000">callExp</font><font color="#000000">)) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return super</b></font><font color="#000000">.handleOperationCallExp</font><font color="#000000">(</font><font color="#000000">callExp, sourceResult, argumentResults</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OCLExpression<C> newSource = </font><font color="#000000">(</font><font color="#000000">OCLExpression<C></font><font color="#000000">) </font><font color="#000000">sourceResult;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OCLExpression<C> newArg = </font><font color="#000000">(</font><font color="#000000">OCLExpression<C></font><font color="#000000">) </font><font color="#000000">argumentResults.get</font><font color="#000000">(</font><font color="#990000">0</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">!</font><font color="#000000">(</font><font color="#000000">newSource </font><font color="#7f0055"><b>instanceof </b></font><font color="#000000">NumericLiteralExp</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| !</font><font color="#000000">(</font><font color="#000000">newArg </font><font color="#7f0055"><b>instanceof </b></font><font color="#000000">NumericLiteralExp</font><font color="#000000">)) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return super</b></font><font color="#000000">.handleOperationCallExp</font><font color="#000000">(</font><font color="#000000">callExp, sourceResult, argumentResults</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">/*</font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">* if one of source or arg is not IntegerLiteralExp then promotion to</font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">* Real takes place</font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">*/</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">newSource </font><font color="#7f0055"><b>instanceof </b></font><font color="#000000">IntegerLiteralExp</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">&& newArg </font><font color="#7f0055"><b>instanceof </b></font><font color="#000000">IntegerLiteralExp</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Integer intSource = </font><font color="#000000">((</font><font color="#000000">IntegerLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newSource</font><font color="#000000">)</font><font color="#000000">.getIntegerSymbol</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Integer intArg = </font><font color="#000000">((</font><font color="#000000">IntegerLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newArg</font><font color="#000000">)</font><font color="#000000">.getIntegerSymbol</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OCLExpression<C> res = simplifyInteger</font><font color="#000000">(</font><font color="#000000">opcode, intSource, intArg, </font><font color="#000000">((</font><font color="#000000">IntegerLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newSource</font><font color="#000000">)</font><font color="#000000">.getType</font><font color="#000000">())</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">/* promote to Double, compute, and return */</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Double dSource = </font><font color="#7f0055"><b>null</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Double dArg = </font><font color="#7f0055"><b>null</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">C type = </font><font color="#7f0055"><b>null</b></font><font color="#000000">; </font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">newSource </font><font color="#7f0055"><b>instanceof </b></font><font color="#000000">IntegerLiteralExp</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">dSource = </font><font color="#000000">((</font><font color="#000000">IntegerLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newSource</font><font color="#000000">)</font><font color="#000000">.getIntegerSymbol</font><font color="#000000">()</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.doubleValue</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">} </font><font color="#7f0055"><b>else </b></font><font color="#000000">{</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">dSource = </font><font color="#000000">((</font><font color="#000000">RealLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newSource</font><font color="#000000">)</font><font color="#000000">.getRealSymbol</font><font color="#000000">()</font><font color="#000000">.doubleValue</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">type = </font><font color="#000000">((</font><font color="#000000">RealLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newSource</font><font color="#000000">)</font><font color="#000000">.getType</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">newArg </font><font color="#7f0055"><b>instanceof </b></font><font color="#000000">IntegerLiteralExp</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">dArg = </font><font color="#000000">((</font><font color="#000000">IntegerLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newArg</font><font color="#000000">)</font><font color="#000000">.getIntegerSymbol</font><font color="#000000">()</font><font color="#000000">.doubleValue</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">} </font><font color="#7f0055"><b>else </b></font><font color="#000000">{</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">dArg = </font><font color="#000000">((</font><font color="#000000">RealLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newArg</font><font color="#000000">)</font><font color="#000000">.getRealSymbol</font><font color="#000000">()</font><font color="#000000">.doubleValue</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">type = </font><font color="#000000">((</font><font color="#000000">RealLiteralExp<C></font><font color="#000000">) </font><font color="#000000">newArg</font><font color="#000000">)</font><font color="#000000">.getType</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">OCLExpression<C> res = simplifyDouble</font><font color="#000000">(</font><font color="#000000">opcode, dSource, dArg, type</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">/**</font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* Returns either a RealLiteralExp or InvalidLiteralExp</font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">type </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">*/</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>private </b></font><font color="#000000">OCLExpression<C> simplifyDouble</font><font color="#000000">(</font><font color="#7f0055"><b>int </b></font><font color="#000000">opcode, Double source, Double arg, C type</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#000000">RealLiteralExp<C> res = ExpressionsFactory.eINSTANCE</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.createRealLiteralExp</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">((</font><font color="#000000">opcode == PredefinedType.PLUS</font><font color="#000000">) </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.MINUS</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.TIMES</font><font color="#000000">)) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>switch </b></font><font color="#000000">(</font><font color="#000000">opcode</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>case </b></font><font color="#000000">PredefinedType.PLUS:</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setRealSymbol</font><font color="#000000">(</font><font color="#000000">source + arg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>break</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>case </b></font><font color="#000000">PredefinedType.MINUS:</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setRealSymbol</font><font color="#000000">(</font><font color="#000000">source - arg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>break</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>case </b></font><font color="#000000">PredefinedType.TIMES:</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setRealSymbol</font><font color="#000000">(</font><font color="#000000">source * arg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>break</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">// denominator of 0 means undefined</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>double </b></font><font color="#000000">num = source;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>double </b></font><font color="#000000">denom = arg;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Double d = </font><font color="#000000">(</font><font color="#000000">denom == </font><font color="#990000">0.0</font><font color="#000000">) </font><font color="#000000">? </font><font color="#7f0055"><b>null </b></font><font color="#000000">: </font><font color="#7f0055"><b>new </b></font><font color="#000000">Double</font><font color="#000000">(</font><font color="#000000">num / denom</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">d == </font><font color="#7f0055"><b>null</b></font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">ExpressionsFactory.eINSTANCE.createInvalidLiteralExp</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setRealSymbol</font><font color="#000000">(</font><font color="#000000">d</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setType</font><font color="#000000">(</font><font color="#000000">type</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">/**</font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* Returns either an IntegerLiteralExp, RealLiteralExp, or InvalidLiteralExp</font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* </font><font color="#7f9fbf">@param </font><font color="#3f5fbf">type </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">* </font><br /> |
| <font color="#ffffff"> </font><font color="#3f5fbf">*/</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>private </b></font><font color="#000000">OCLExpression<C> simplifyInteger</font><font color="#000000">(</font><font color="#7f0055"><b>int </b></font><font color="#000000">opcode, </font><font color="#7f0055"><b>int </b></font><font color="#000000">intSource, </font><font color="#7f0055"><b>int </b></font><font color="#000000">intArg, C type</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">((</font><font color="#000000">opcode == PredefinedType.PLUS</font><font color="#000000">) </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.MINUS</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.TIMES</font><font color="#000000">)) {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">IntegerLiteralExp<C> res = ExpressionsFactory.eINSTANCE</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.createIntegerLiteralExp</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>switch </b></font><font color="#000000">(</font><font color="#000000">opcode</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>case </b></font><font color="#000000">PredefinedType.PLUS:</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setIntegerSymbol</font><font color="#000000">(</font><font color="#000000">intSource + intArg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>break</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>case </b></font><font color="#000000">PredefinedType.MINUS:</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setIntegerSymbol</font><font color="#000000">(</font><font color="#000000">intSource - intArg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>break</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>case </b></font><font color="#000000">PredefinedType.TIMES:</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setIntegerSymbol</font><font color="#000000">(</font><font color="#000000">intSource * intArg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>break</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setType</font><font color="#000000">(</font><font color="#000000">type</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">// denominator of 0 means undefined</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>double </b></font><font color="#000000">num = intSource;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>double </b></font><font color="#000000">denom = intArg;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">Double d = </font><font color="#000000">(</font><font color="#000000">denom == </font><font color="#990000">0.0</font><font color="#000000">) </font><font color="#000000">? </font><font color="#7f0055"><b>null </b></font><font color="#000000">: </font><font color="#7f0055"><b>new </b></font><font color="#000000">Double</font><font color="#000000">(</font><font color="#000000">num / denom</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">d == </font><font color="#7f0055"><b>null</b></font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">ExpressionsFactory.eINSTANCE.createInvalidLiteralExp</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.DIVIDE</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">RealLiteralExp<C> rle = ExpressionsFactory.eINSTANCE</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.createRealLiteralExp</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">rle.setRealSymbol</font><font color="#000000">(</font><font color="#000000">d</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">rle;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>if </b></font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.DIV</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">IntegerLiteralExp<C> res = ExpressionsFactory.eINSTANCE</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">.createIntegerLiteralExp</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">res.setIntegerSymbol</font><font color="#000000">(</font><font color="#000000">intSource / intArg</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#3f7f5f">// we won't get to this point, just to make the compiler happy</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return null</b></font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>private </b></font><font color="#7f0055"><b>boolean </b></font><font color="#000000">isArithmeticOp</font><font color="#000000">(</font><font color="#000000">OperationCallExp<C, O> oc</font><font color="#000000">) {</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>int </b></font><font color="#000000">opcode = oc.getOperationCode</font><font color="#000000">()</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>boolean </b></font><font color="#000000">res = </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.PLUS</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.MINUS</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.TIMES</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.DIVIDE</font><font color="#000000">)</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">|| </font><font color="#000000">(</font><font color="#000000">opcode == PredefinedType.DIV</font><font color="#000000">)</font><font color="#000000">;</font><br /> |
| <font color="#ffffff"> </font><font color="#7f0055"><b>return </b></font><font color="#000000">res;</font><br /> |
| <font color="#ffffff"> </font><font color="#000000">}</font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#ffffff"></font><br /> |
| <font color="#000000">}</font></code> |
| |
| </td> |
| <!-- end source code --> |
| </tr> |
| </table> |
| </div> |
| <!-- = END of automatically generated HTML code = --> |
| <!-- ======================================================== --> |
| |
| |
| </body></html> |