|
@@ -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:
|