cbd_toRuntime.alc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. String function map_D2P(model : Element, name : String):
  5. Element destinations
  6. String pick
  7. destinations = allAssociationDestinations(model, name, "D2P_block")
  8. pick = name
  9. while (pick == name):
  10. pick = set_pop(destinations)
  11. return pick!
  12. Boolean function main(model : Element):
  13. Element all_blocks
  14. String element_name
  15. String new_element_name
  16. String mm_type_name
  17. Element all_links
  18. all_blocks = allInstances(model, "Design/Block")
  19. while (set_len(all_blocks) > 0):
  20. element_name = set_pop(all_blocks)
  21. mm_type_name = "PartialRuntime/" + cast_string(list_read(string_split(read_type(model, element_name), "/"), 1))
  22. if (set_len(allOutgoingAssociationInstances(model, element_name, "D2P_block")) == 0):
  23. // New design element, so create in partial runtime model as well
  24. new_element_name = instantiate_node(model, mm_type_name, "")
  25. instantiate_link(model, "D2P_block", "", element_name, new_element_name)
  26. log("Found new design element of type " + mm_type_name)
  27. // Always update the value of attributes of PartialRuntime
  28. new_element_name = map_D2P(model, element_name)
  29. if (mm_type_name == "PartialRuntime/ConstantBlock"):
  30. instantiate_attribute(model, new_element_name, "value", read_attribute(model, element_name, "value"))
  31. elif (mm_type_name == "PartialRuntime/ProbeBlock"):
  32. instantiate_attribute(model, new_element_name, "name", read_attribute(model, element_name, "name"))
  33. all_blocks = allInstances(model, "PartialRuntime/Block")
  34. while (set_len(all_blocks) > 0):
  35. element_name = set_pop(all_blocks)
  36. if (set_len(allIncomingAssociationInstances(model, element_name, "D2P_block")) == 0):
  37. // Old partial runtime element, so remove
  38. model_delete_element(model, element_name)
  39. log("Removing unconnected Partial element of type " + read_type(model, element_name))
  40. // Delete all existing links
  41. all_links = allInstances(model, "PartialRuntime/Link")
  42. while (set_len(all_links) > 0):
  43. model_delete_element(model, set_pop(all_links))
  44. all_links = allInstances(model, "PartialRuntime/InitialCondition")
  45. while (set_len(all_links) > 0):
  46. model_delete_element(model, set_pop(all_links))
  47. // Recreate all of them
  48. all_links = allInstances(model, "Design/Link")
  49. while (set_len(all_links) > 0):
  50. element_name = set_pop(all_links)
  51. instantiate_link(model, "PartialRuntime/Link", "", map_D2P(model, readAssociationSource(model, element_name)), map_D2P(model, readAssociationDestination(model, element_name)))
  52. all_links = allInstances(model, "Design/InitialCondition")
  53. while (set_len(all_links) > 0):
  54. element_name = set_pop(all_links)
  55. instantiate_link(model, "PartialRuntime/InitialCondition", "", map_D2P(model, readAssociationSource(model, element_name)), map_D2P(model, readAssociationDestination(model, element_name)))
  56. return True!