Browse Source

Add dictionary as a MvS primitive to increase performance and decrease
bootstrap file size

Yentl Van Tendeloo 8 years ago
parent
commit
f8b96c9878

+ 4 - 4
interface/HUTN/hutn_compiler/bootstrap_visitor.py

@@ -51,11 +51,11 @@ class BootstrapVisitor(PrimitivesVisitor):
 
 
                 source = self.rename(source)
                 source = self.rename(source)
                 target = self.rename(target)
                 target = self.rename(target)
-                linkname = "%s_%s_%s" % (source, link_id, target)
                 link_id += 1
                 link_id += 1
-                output.append("Edge _%s_0(%s, %s)\n" % (linkname, source, target))
-                output.append("Node _%s_2(%s)\n" % (linkname, value))
-                output.append("Edge _%s_1(_%s_0, _%s_2)\n" % (linkname, linkname, linkname))
+                output.append("Dict _%s(%s, %s, %s)\n" % (link_id, source, value, target))
+                #output.append("Edge _%s_0(%s, %s)\n" % (linkname, source, target))
+                #output.append("Node _%s_2(%s)\n" % (linkname, value))
+                #output.append("Edge _%s_1(_%s_0, _%s_2)\n" % (linkname, linkname, linkname))
             elif t == "E":
             elif t == "E":
                 name, source, target = data
                 name, source, target = data
                 source = source if self.first != source else "initial_IP"
                 source = source if self.first != source else "initial_IP"

+ 8 - 2
state/modelverse_state/main.py

@@ -103,6 +103,13 @@ class ModelverseState(object):
                     elif element_type == "Edge":
                     elif element_type == "Edge":
                         values = [v.split()[0] for v in values.split(",")]
                         values = [v.split()[0] for v in values.split(",")]
                         symbols[name], status = self.create_edge(resolve(values[0]), resolve(values[1]))
                         symbols[name], status = self.create_edge(resolve(values[0]), resolve(values[1]))
+                    elif element_type == "Dict":
+                        values = [v.split()[0] for v in values.split(",")]
+                        if values[1] in complex_primitives:
+                            values[1] = string_to_instance(values[1])
+                        else:
+                            values[1] = eval(values[1])
+                        symbols[name], status = self.create_dict(resolve(values[0]), values[1], resolve(values[2]))
                     else:
                     else:
                         raise Exception("Unknown element type: %s" % element_type)
                         raise Exception("Unknown element type: %s" % element_type)
 
 
@@ -149,8 +156,7 @@ class ModelverseState(object):
 
 
     def create_nodevalue(self, value):
     def create_nodevalue(self, value):
         if not self.is_valid_datavalue(value):
         if not self.is_valid_datavalue(value):
-            print("Not correct: " + str(value))
-            #raise Exception()
+            raise Exception()
             return (None, status.FAIL_CNV_OOB)
             return (None, status.FAIL_CNV_OOB)
         self.values[self.free_id] = value
         self.values[self.free_id] = value
         self.nodes.add(self.free_id)
         self.nodes.add(self.free_id)