12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- include "primitives.alh"
- include "modelling.alh"
- include "object_operations.alh"
- String function map_D2P(model : Element, name : String):
- Element destinations
- String pick
- destinations = allAssociationDestinations(model, name, "D2P_block")
- pick = name
- while (pick == name):
- pick = set_pop(destinations)
- return pick!
- Boolean function main(model : Element):
- Element all_blocks
- String element_name
- String new_element_name
- String mm_type_name
- Element all_links
- all_blocks = allInstances(model, "Design/Block")
- while (set_len(all_blocks) > 0):
- element_name = set_pop(all_blocks)
- mm_type_name = "PartialRuntime/" + cast_string(list_read(string_split(read_type(model, element_name), "/"), 1))
- if (set_len(allOutgoingAssociationInstances(model, element_name, "D2P_block")) == 0):
- // New design element, so create in partial runtime model as well
- new_element_name = instantiate_node(model, mm_type_name, "")
- instantiate_link(model, "D2P_block", "", element_name, new_element_name)
- // Always update the value of attributes of PartialRuntime
- new_element_name = map_D2P(model, element_name)
- if (mm_type_name == "PartialRuntime/ConstantBlock"):
- instantiate_attribute(model, new_element_name, "value", read_attribute(model, element_name, "value"))
- elif (mm_type_name == "PartialRuntime/ProbeBlock"):
- instantiate_attribute(model, new_element_name, "name", read_attribute(model, element_name, "name"))
- all_blocks = allInstances(model, "PartialRuntime/Block")
- while (set_len(all_blocks) > 0):
- element_name = set_pop(all_blocks)
- if (set_len(allIncomingAssociationInstances(model, element_name, "D2P_block")) == 0):
- // Old partial runtime element, so remove
- model_delete_element(model, element_name)
- // Delete all existing links
- all_links = allInstances(model, "PartialRuntime/Link")
- while (set_len(all_links) > 0):
- model_delete_element(model, set_pop(all_links))
- all_links = allInstances(model, "PartialRuntime/InitialCondition")
- while (set_len(all_links) > 0):
- model_delete_element(model, set_pop(all_links))
- // Recreate all of them
- all_links = allInstances(model, "Design/Link")
- while (set_len(all_links) > 0):
- element_name = set_pop(all_links)
- instantiate_link(model, "PartialRuntime/Link", "", map_D2P(model, readAssociationSource(model, element_name)), map_D2P(model, readAssociationDestination(model, element_name)))
- all_links = allInstances(model, "Design/InitialCondition")
- while (set_len(all_links) > 0):
- element_name = set_pop(all_links)
- instantiate_link(model, "PartialRuntime/InitialCondition", "", map_D2P(model, readAssociationSource(model, element_name)), map_D2P(model, readAssociationDestination(model, element_name)))
- return True!
|