Browse Source

Preliminary model_retype_on_name function

Yentl Van Tendeloo 8 years ago
parent
commit
9282c6208d
2 changed files with 24 additions and 1 deletions
  1. BIN
      bootstrap/bootstrap.m.gz
  2. 24 1
      bootstrap/modelling.alc

BIN
bootstrap/bootstrap.m.gz


+ 24 - 1
bootstrap/modelling.alc

@@ -602,5 +602,28 @@ Element function model_copy(src_model : Element):
 	return dst_model!
 
 Element function model_retype_on_name(model : Element, new_MM : Element, operation : String, name : String):
-	// TODO
+	String key
+	String type
+	Element keys
+	Integer length
+
+	keys = dict_keys(model["model"])
+	length = string_len(name)
+
+	while (read_nr_out(keys) > 0):
+		key = set_pop(keys)
+		type = reverseKeyLookup(model["metamodel"]["model"], dict_read_node(model["type_mapping"], model["model"][key]))
+
+		if (operation == "+"):
+			// Keep all, but augment typename
+			dict_delete_node(model["type_mapping"], model["model"][key])
+			dict_add(model["type_mapping"], model["model"][key], model["metamodel"]["model"][name + type])
+		elif (operation == "-"):
+			// Keep only if typename beginning matches and remove from typename
+			if (string_startswith(type, name)):
+				dict_delete_node(model["type_mapping"], model["model"][key])
+				dict_add(model["type_mapping"], model["model"][key], model["metamodel"]["model"][string_substr(type, length, string_len(type))])
+			else:
+				model_delete_element(model, key)
+
 	return model!