Przeglądaj źródła

Add to dictionary caches in CE as well

Yentl Van Tendeloo 8 lat temu
rodzic
commit
b1db22e26f
1 zmienionych plików z 11 dodań i 2 usunięć
  1. 11 2
      state/modelverse_state/main.py

+ 11 - 2
state/modelverse_state/main.py

@@ -59,7 +59,7 @@ class ModelverseState(object):
         try:
             if os.path.getmtime(picklefile) > os.path.getmtime(filename):
                 # Pickle is more recent than grammarfile, so we can use it
-                self.root, self.free_id, self.nodes, self.edges, self.values = pickle.load(open(picklefile, 'rb'))
+                self.root, self.free_id, self.nodes, self.edges, self.values, self.cache, self.cache_node = pickle.load(open(picklefile, 'rb'))
                 for name in self.edges:
                     source, destination = self.edges[name]
                     self.outgoing.setdefault(source, set()).add(name)
@@ -120,7 +120,7 @@ class ModelverseState(object):
 
             # Creation successful, now also create a pickle
             with open(picklefile, 'wb') as f:
-                pickle.dump((symbols["root"], self.free_id, self.nodes, self.edges, self.values), f, pickle.HIGHEST_PROTOCOL)
+                pickle.dump((symbols["root"], self.free_id, self.nodes, self.edges, self.values, self.cache, self.cache_node), f, pickle.HIGHEST_PROTOCOL)
 
             return symbols["root"]
 
@@ -142,6 +142,13 @@ class ModelverseState(object):
             self.incoming.setdefault(target, set()).add(self.free_id)
             self.edges[self.free_id] = (source, target)
             self.free_id += 1
+            if source in self.edges:
+                # We are creating something dict_readable
+                # Fill in the cache already!
+                dict_source, dict_target = self.edges[source]
+                if target in self.values:
+                    self.cache.setdefault(dict_source, {})[self.values[target]] = source
+                self.cache_node.setdefault(dict_source, {})[target] = source
             return (self.free_id - 1, status.SUCCESS)
 
     def is_valid_datavalue(self, value):
@@ -176,6 +183,7 @@ class ModelverseState(object):
         self.create_edge(e, n)
         self.cache.setdefault(source, {})[data] = e
         self.cache_node.setdefault(source, {})[n] = e
+
         return (None, status.SUCCESS)
 
     def read_value(self, node):
@@ -237,6 +245,7 @@ class ModelverseState(object):
                             # Found a match
                             # Now get the target of the original link
                             self.cache.setdefault(node, {})[value] = e1
+                            print("Cache did not find, but still entry: %s at %s" % (value, node))
                             return (self.edges[e1][1], status.SUCCESS)
 
         if node not in self.nodes and node not in self.edges: