|
@@ -17,6 +17,9 @@ Element function model_fuse(models : Element):
|
|
|
Element selected_MM
|
|
|
String type
|
|
|
|
|
|
+ Element reverse
|
|
|
+ reverse = make_reverse_dictionary(model["model"])
|
|
|
+
|
|
|
// Read out some data first
|
|
|
tagged_model = set_pop(models)
|
|
|
set_add(models, tagged_model)
|
|
@@ -39,8 +42,8 @@ Element function model_fuse(models : Element):
|
|
|
if (is_edge(model["model"][key])):
|
|
|
String src
|
|
|
String dst
|
|
|
- src = model_name + reverseKeyLookup(model["model"], read_edge_src(model["model"][key]))
|
|
|
- dst = model_name + reverseKeyLookup(model["model"], read_edge_dst(model["model"][key]))
|
|
|
+ src = model_name + cast_e2s(reverse[cast_id2s(read_edge_src(model["model"][key])))
|
|
|
+ dst = model_name + cast_e2s(reverse[cast_id2s(read_edge_dst(model["model"][key])))
|
|
|
if (bool_and(dict_in(new_model["model"], src), dict_in(new_model["model"], dst))):
|
|
|
instantiate_link(new_model, type, model_name + key, src, dst)
|
|
|
else:
|
|
@@ -63,6 +66,9 @@ Element function model_copy(src_model : Element):
|
|
|
Element second_keys
|
|
|
String type
|
|
|
|
|
|
+ Element reverse
|
|
|
+ reverse = make_reverse_dictionary(src_model["model"])
|
|
|
+
|
|
|
dst_model = instantiate_model(src_model["metamodel"])
|
|
|
keys = dict_keys(src_model["model"])
|
|
|
second_keys = create_node()
|
|
@@ -75,8 +81,9 @@ Element function model_copy(src_model : Element):
|
|
|
String src
|
|
|
String dst
|
|
|
|
|
|
- src = reverseKeyLookup(src_model["model"], read_edge_src(src_model["model"][name]))
|
|
|
- dst = reverseKeyLookup(src_model["model"], read_edge_dst(src_model["model"][name]))
|
|
|
+ src = reverse[cast_id2s(read_edge_src(src_model["model"][name]))]
|
|
|
+ dst = reverse[cast_id2s(read_edge_dst(src_model["model"][name]))]
|
|
|
+
|
|
|
type = read_type(src_model, name)
|
|
|
|
|
|
if (bool_and(dict_in(dst_model["model"], src), dict_in(dst_model["model"], dst))):
|
|
@@ -141,18 +148,19 @@ Void function model_join(dst_model : Element, src_model : Element, retyping_key
|
|
|
String type
|
|
|
String src
|
|
|
String dst
|
|
|
- Element cached_src_model_model
|
|
|
Element elem
|
|
|
- cached_src_model_model = src_model["model"]
|
|
|
|
|
|
mapping = create_node()
|
|
|
|
|
|
second_keys = create_node()
|
|
|
|
|
|
+ Element reverse
|
|
|
+ reverse = make_reverse_dictionary(src_model["model"])
|
|
|
+
|
|
|
keys = dict_keys(src_model["model"])
|
|
|
while (read_nr_out(keys) > 0):
|
|
|
name = set_pop(keys)
|
|
|
- elem = cached_src_model_model[name]
|
|
|
+ elem = src_model["model"][name]
|
|
|
type = read_type(src_model, name)
|
|
|
|
|
|
if (is_edge(elem)):
|
|
@@ -160,8 +168,8 @@ Void function model_join(dst_model : Element, src_model : Element, retyping_key
|
|
|
String src
|
|
|
String dst
|
|
|
|
|
|
- src = reverseKeyLookup(cached_src_model_model, read_edge_src(elem))
|
|
|
- dst = reverseKeyLookup(cached_src_model_model, read_edge_dst(elem))
|
|
|
+ src = reverse[cast_id2s(read_edge_src(elem))]
|
|
|
+ dst = reverse[cast_id2s(read_edge_dst(elem))]
|
|
|
|
|
|
if (bool_and(dict_in(mapping, src), dict_in(mapping, dst))):
|
|
|
// All present, so create the link between them
|
|
@@ -197,9 +205,7 @@ Element function model_split(src_model : Element, target_metamodel : Element, re
|
|
|
String dst
|
|
|
Integer length
|
|
|
String new_type
|
|
|
- Element cached_src_model_model
|
|
|
Element elem
|
|
|
- cached_src_model_model = src_model["model"]
|
|
|
|
|
|
mapping = create_node()
|
|
|
length = string_len(retyping_key)
|
|
@@ -207,9 +213,12 @@ Element function model_split(src_model : Element, target_metamodel : Element, re
|
|
|
keys = dict_keys(src_model["model"])
|
|
|
second_keys = create_node()
|
|
|
|
|
|
+ Element reverse
|
|
|
+ reverse = make_reverse_dictionary(src_model["model"])
|
|
|
+
|
|
|
while (read_nr_out(keys) > 0):
|
|
|
name = set_pop(keys)
|
|
|
- elem = cached_src_model_model[name]
|
|
|
+ elem = src_model["model"][name]
|
|
|
|
|
|
type = read_type(src_model, name)
|
|
|
if (string_startswith(type, retyping_key)):
|
|
@@ -219,8 +228,8 @@ Element function model_split(src_model : Element, target_metamodel : Element, re
|
|
|
String src
|
|
|
String dst
|
|
|
|
|
|
- src = reverseKeyLookup(cached_src_model_model, read_edge_src(elem))
|
|
|
- dst = reverseKeyLookup(cached_src_model_model, read_edge_dst(elem))
|
|
|
+ src = reverse[cast_id2s(read_edge_src(elem))]
|
|
|
+ dst = reverse[cast_id2s(read_edge_dst(elem))]
|
|
|
|
|
|
if (bool_and(dict_in(mapping, src), dict_in(mapping, dst))):
|
|
|
// All present, so create the link between them
|