|
@@ -6,6 +6,7 @@ Element function make_matching_schedule(LHS_model : Element):
|
|
|
Element schedule
|
|
|
Element workset
|
|
|
Element all_elements
|
|
|
+ Element full_all_elements
|
|
|
Integer required_size
|
|
|
String new_element
|
|
|
Integer counter
|
|
@@ -15,6 +16,7 @@ Element function make_matching_schedule(LHS_model : Element):
|
|
|
schedule = create_node()
|
|
|
workset = create_node()
|
|
|
all_elements = allInstances(LHS_model, "Pre_Element")
|
|
|
+ full_all_elements = set_copy(all_elements)
|
|
|
required_size = read_nr_out(all_elements)
|
|
|
|
|
|
// Need to keep adding to the schedule
|
|
@@ -41,26 +43,29 @@ Element function make_matching_schedule(LHS_model : Element):
|
|
|
log("Check if already in schedule")
|
|
|
if (bool_not(set_in(schedule, next))):
|
|
|
log("NO")
|
|
|
- list_append(schedule, next)
|
|
|
+ if (set_in(full_all_elements, next)):
|
|
|
+ list_append(schedule, next)
|
|
|
|
|
|
- // If it is an edge, we should also add the target and source
|
|
|
- log("Edge?")
|
|
|
- if (is_edge(LHS_model["model"][next])):
|
|
|
- log("YES")
|
|
|
- // Add the target/source to the schedule
|
|
|
- set_add(workset, reverseKeyLookup(LHS_model["model"], read_edge_src(LHS_model["model"][next])))
|
|
|
- set_add(workset, reverseKeyLookup(LHS_model["model"], read_edge_dst(LHS_model["model"][next])))
|
|
|
+ // If it is an edge, we should also add the target and source
|
|
|
+ log("Edge?")
|
|
|
+ if (is_edge(LHS_model["model"][next])):
|
|
|
+ log("YES")
|
|
|
+ // Add the target/source to the schedule
|
|
|
+ set_add(workset, reverseKeyLookup(LHS_model["model"], read_edge_src(LHS_model["model"][next])))
|
|
|
+ set_add(workset, reverseKeyLookup(LHS_model["model"], read_edge_dst(LHS_model["model"][next])))
|
|
|
|
|
|
- // Also add all outgoing links
|
|
|
- log("Recurse")
|
|
|
- counter = read_nr_out(LHS_model["model"][next])
|
|
|
- while (counter > 0):
|
|
|
- log("Check")
|
|
|
- counter = counter - 1
|
|
|
- if (set_in_node(LHS_model["model"], read_out(LHS_model["model"][next], counter))):
|
|
|
- log("ADD")
|
|
|
- set_add(workset, reverseKeyLookup(LHS_model["model"], read_out(LHS_model["model"][next], counter)))
|
|
|
- log("DONE")
|
|
|
+ // Also add all outgoing links
|
|
|
+ log("Recurse")
|
|
|
+ counter = read_nr_out(LHS_model["model"][next])
|
|
|
+ while (counter > 0):
|
|
|
+ log("Check")
|
|
|
+ counter = counter - 1
|
|
|
+ if (set_in_node(LHS_model["model"], read_out(LHS_model["model"][next], counter))):
|
|
|
+ log("ADD")
|
|
|
+ set_add(workset, reverseKeyLookup(LHS_model["model"], read_out(LHS_model["model"][next], counter)))
|
|
|
+ log("DONE")
|
|
|
+ else:
|
|
|
+ log("Not a Pre_Element and thus not matchable")
|
|
|
|
|
|
return schedule!
|
|
|
|