Przeglądaj źródła

Split off the precompute cardinalities, such that it can be compiled

Yentl Van Tendeloo 9 lat temu
rodzic
commit
cee02ab214
1 zmienionych plików z 41 dodań i 31 usunięć
  1. 41 31
      bootstrap/conformance_scd.alc

+ 41 - 31
bootstrap/conformance_scd.alc

@@ -49,6 +49,44 @@ Boolean function is_nominal_subtype(metamodel : Element, subclass : String, supe
 	
 	return False
 
+Element function precompute_cardinalities(model : Element):
+	Integer slc
+	Integer suc
+	Integer tlc
+	Integer tuc
+	String key
+	Element tmp_dict
+	Element cardinalities
+	Element keys
+	Element metamodel
+
+	metamodel = model["metamodel"]
+	keys = allInstances(metamodel, "Association")
+
+	cardinalities = create_node()
+	while (0 < list_len(keys)):
+		key = set_pop(keys)
+		if (is_edge(model["model"][key])):
+			tmp_dict = create_node()
+			slc = read_attribute(metamodel, key, "source_lower_cardinality")
+			suc = read_attribute(metamodel, key, "source_upper_cardinality")
+			tlc = read_attribute(metamodel, key, "target_lower_cardinality")
+			tuc = read_attribute(metamodel, key, "target_upper_cardinality")
+
+			if (element_neq(slc, read_root())):
+				dict_add(tmp_dict, "slc", slc)
+			if (element_neq(suc, read_root())):
+				dict_add(tmp_dict, "suc", suc)
+			if (element_neq(tlc, read_root())):
+				dict_add(tmp_dict, "tlc", tlc)
+			if (element_neq(tuc, read_root())):
+				dict_add(tmp_dict, "tuc", tuc)
+
+			if (list_len(tmp_dict) > 0):
+				dict_add(cardinalities, key, tmp_dict)
+
+	return cardinalities
+
 String function conformance_scd(model : Element):
 	// Initialization
 	Element keys
@@ -65,7 +103,7 @@ String function conformance_scd(model : Element):
 	Element cardinalities
 	Element scd
 	Integer instances
-
+	String type_name
 	Element spo_cache
 	Element spi_cache
 
@@ -76,39 +114,11 @@ String function conformance_scd(model : Element):
 	scd = import_node("models/SimpleClassDiagrams")
 	metamodel = model["metamodel"]
 	typing = model["type_mapping"]
-	cardinalities = create_node()
+
 
 	// Create dictionary with all associations and allowed cardinalities
 	if (list_len(model["model"]) > 0):
-		Integer slc
-		Integer suc
-		Integer tlc
-		Integer tuc
-		String key
-		Element tmp_dict
-		String type_name
-
-		keys = allInstances(metamodel, "Association")
-		while (0 < list_len(keys)):
-			key = set_pop(keys)
-			tmp_dict = create_node()
-			if (is_edge(model["model"][key])):
-				slc = read_attribute(metamodel, key, "source_lower_cardinality")
-				suc = read_attribute(metamodel, key, "source_upper_cardinality")
-				tlc = read_attribute(metamodel, key, "target_lower_cardinality")
-				tuc = read_attribute(metamodel, key, "target_upper_cardinality")
-
-				if (element_neq(slc, read_root())):
-					dict_add(tmp_dict, "slc", slc)
-				if (element_neq(suc, read_root())):
-					dict_add(tmp_dict, "suc", suc)
-				if (element_neq(tlc, read_root())):
-					dict_add(tmp_dict, "tlc", tlc)
-				if (element_neq(tuc, read_root())):
-					dict_add(tmp_dict, "tuc", tuc)
-
-				if (list_len(tmp_dict) > 0):
-					dict_add(cardinalities, key, tmp_dict)
+		cardinalities = precompute_cardinalities(model)
 
 		// Iterate over each element of the model, finding out whether everything is fine
 		keys = dict_keys(model["model"])