ControlConditionSwitch.xtend 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package be.uantwerpen.ansymo.semanticadaptation.cg.cpp.generation
  2. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.data.SAScalarVariable
  3. import java.util.LinkedHashMap
  4. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.data.ReturnInformation
  5. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.ControlRule
  6. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.ControlRuleBlock
  7. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.CustomControlRule
  8. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.DoStep
  9. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.StepSize
  10. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.CurrentTime
  11. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.DoStepFun
  12. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.data.SVType
  13. class ControlConditionSwitch extends InOutRulesConditionSwitch {
  14. new(String adaptationClassName,
  15. String adaptationName,
  16. LinkedHashMap<String,SAScalarVariable> SASVs
  17. ) {
  18. super(adaptationClassName, adaptationName, "", null, SASVs, newLinkedHashMap());
  19. }
  20. override ReturnInformation caseControlRuleBlock(ControlRuleBlock obj) {
  21. var retVal = new ReturnInformation();
  22. for (crtlRule : obj.eAllContents.toIterable.filter(ControlRule)) {
  23. retVal.appendCode(doSwitch(crtlRule).code);
  24. }
  25. return retVal;
  26. }
  27. override ReturnInformation caseCustomControlRule(CustomControlRule object) {
  28. var retVal = new ReturnInformation();
  29. var String tempDoSwitchCode = "";
  30. for (ruleStm : object.controlRulestatements) {
  31. tempDoSwitchCode += doSwitch(ruleStm).code;
  32. }
  33. tempDoSwitchCode += System.lineSeparator() + '''return «doSwitch(object.returnstatement).code»;
  34. ''';
  35. var functionPrefix = "void ";
  36. var functionNameArgs = "executeInternalControlFlow(double h, double dt)"
  37. functionSignatures.add(functionPrefix + functionNameArgs);
  38. retVal.code =
  39. '''
  40. «functionPrefix+this.adaptationClassName»::«functionNameArgs»
  41. {
  42. «tempDoSwitchCode»
  43. }
  44. ''';
  45. return retVal;
  46. }
  47. override ReturnInformation caseDoStepFun(DoStepFun object)
  48. {
  49. var retVal = new ReturnInformation();
  50. retVal.code = '''this->do_step(«object.fmu.name»,«doSwitch(object.h).code»,«doSwitch(object.t).code»);''';
  51. retVal.type = SVType.Integer;
  52. return retVal;
  53. }
  54. override ReturnInformation caseDoStep(DoStep object) {
  55. var retVal = new ReturnInformation();
  56. retVal.code = '''this->do_step(«object.fmu.name»,«doSwitch(object.h).code»,«doSwitch(object.t).code»);''';
  57. return retVal;
  58. }
  59. override ReturnInformation caseStepSize(StepSize object) {
  60. var retVal = new ReturnInformation();
  61. retVal.code = '''h''';
  62. return retVal;
  63. }
  64. override ReturnInformation caseCurrentTime(CurrentTime object) {
  65. var retVal = new ReturnInformation();
  66. retVal.code = '''dt''';
  67. return retVal;
  68. }
  69. }