Przeglądaj źródła

Added both schedule_init and schedule_run to the code

Yentl Van Tendeloo 8 lat temu
rodzic
commit
578fdb04e2
1 zmienionych plików z 21 dodań i 1 usunięć
  1. 21 1
      integration/code/cbd_semantics.alc

+ 21 - 1
integration/code/cbd_semantics.alc

@@ -100,7 +100,27 @@ Void function create_schedule(model : Element, is_time_zero : Boolean):
 
 		while (list_len(to_visit) > 0):
 			element_name = list_read(to_visit, list_len(to_visit) - 1)
-			incoming_links = allIncomingAssociationInstances(model, element_name, "Link")
+			if (reverseKeyLookup(model["metamodel"]["model"], dict_read_node(model["type_mapping"], model["model"][element_name])) == "DelayBlock"):
+				if (is_time_zero):
+					incoming_links = allIncomingAssociationInstances(model, element_name, "InitialCondition")
+				else:
+					incoming_links = create_node()
+			else:
+				incoming_links = allIncomingAssociationInstances(model, element_name, "Link")
+			ready = True
+
+			while (list_len(incoming_links) > 0):
+				link = set_pop(incoming_links)
+				source = readAssociationSource(model, link)
+				if (bool_not(set_in(visited, source))):
+					list_append(to_visit, source)
+					ready = False
+
+			if (ready):
+				new_schedule = instantiate_node(model, "Schedule", "")
+				instantiate_attribute(model, reverseKeyLookup(model["model"], schedule), "block", model["model"][element_name])
+				instantiate_attribute(model, reverseKeyLookup(model["model"], schedule), "next", model["model"][new_schedule])
+				schedule = new_schedule
 
 	return !