dynamic_trafficlight.mvc 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. include "primitives.alh"
  2. Diagram dynamic_trafficlight {
  3. name = "Dynamic Traffic Light"
  4. author = "Yentl Van Tendeloo"
  5. }
  6. Class manager {
  7. name = "Manager"
  8. default = True
  9. constructor_body = $
  10. Void function constructor(attributes : Element, parameters : Element):
  11. dict_add(attributes, "counter", 0)
  12. return !
  13. $
  14. {behaviour} CompositeState manager_root {
  15. name = "root"
  16. isInitial = True
  17. {composite_children} BasicState manager_root_start {
  18. name = "start"
  19. isInitial = True
  20. }
  21. }
  22. }
  23. transition (manager_root_start, manager_root_start) {
  24. name = "create"
  25. event = "create"
  26. {transition_raises} Raise {
  27. scope = "cd"
  28. event = "create_instance"
  29. parameter = $
  30. Element function raise(attributes : Element, parameters : Element):
  31. Element result
  32. result = create_node()
  33. list_append(result, "TrafficLight")
  34. list_append(result, attributes["counter"])
  35. list_append(result, read_root())
  36. dict_overwrite(attributes, "counter", integer_addition(attributes["counter"], 1))
  37. return result!
  38. $
  39. }
  40. }
  41. transition (manager_root_start, manager_root_start) {
  42. name = "delete"
  43. event = "delete"
  44. {transition_raises} Raise {
  45. scope = "cd"
  46. event = "delete_instance"
  47. parameter = $
  48. Element function raise(attributes : Element, parameters : Element):
  49. Element result
  50. result = create_node()
  51. list_append(result, parameters["id"])
  52. return result!
  53. $
  54. }
  55. }