cbd_toRuntime.alc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. log("Got destinations: " + set_to_string(destinations))
  9. pick = name
  10. while (pick == name):
  11. pick = set_pop(destinations)
  12. return pick!
  13. Boolean function main(model : Element):
  14. Element all_blocks
  15. String element_name
  16. String new_element_name
  17. String mm_type_name
  18. Element all_links
  19. all_blocks = allInstances(model, "Design/Block")
  20. while (set_len(all_blocks) > 0):
  21. element_name = set_pop(all_blocks)
  22. mm_type_name = "PartialRuntime/" + cast_string(list_read(string_split(read_type(model, element_name), "/"), 1))
  23. if (set_len(allOutgoingAssociationInstances(model, element_name, "D2P_block")) == 0):
  24. // New design element, so create in partial runtime model as well
  25. new_element_name = instantiate_node(model, mm_type_name, "")
  26. instantiate_link(model, "D2P_block", "", element_name, new_element_name)
  27. log("Create link to element " + new_element_name)
  28. // Always update the value of attributes of PartialRuntime
  29. new_element_name = map_D2P(model, element_name)
  30. if (mm_type_name == "PartialRuntime/ConstantBlock"):
  31. instantiate_attribute(model, new_element_name, "value", read_attribute(model, element_name, "value"))
  32. elif (mm_type_name == "PartialRuntime/ProbeBlock"):
  33. instantiate_attribute(model, new_element_name, "name", read_attribute(model, element_name, "name"))
  34. all_blocks = allInstances(model, "PartialRuntime/Block")
  35. while (set_len(all_blocks) > 0):
  36. element_name = set_pop(all_blocks)
  37. if (set_len(allIncomingAssociationInstances(model, element_name, "D2P_block")) == 0):
  38. // Old partial runtime element, so remove
  39. model_delete_element(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. log("Create Link")
  53. log(" from: " + map_D2P(model, readAssociationSource(model, element_name)))
  54. log(" to: " + map_D2P(model, readAssociationDestination(model, element_name)))
  55. all_links = allInstances(model, "Design/InitialCondition")
  56. while (set_len(all_links) > 0):
  57. element_name = set_pop(all_links)
  58. instantiate_link(model, "PartialRuntime/InitialCondition", "", map_D2P(model, readAssociationSource(model, element_name)), map_D2P(model, readAssociationDestination(model, element_name)))
  59. return True!