瀏覽代碼

Faster reverse dictionary read primitive

Yentl Van Tendeloo 9 年之前
父節點
當前提交
1d0c1dce8d
共有 1 個文件被更改,包括 9 次插入6 次删除
  1. 9 6
      kernel/modelverse_kernel/primitives.py

+ 9 - 6
kernel/modelverse_kernel/primitives.py

@@ -304,12 +304,15 @@ def dict_keys(a, **remainder):
     raise PrimitiveFinished(result)
 
 def dict_reverse(a, b, **remainder):
-    keys = yield [("RDK", [a])]
-    keys = list(keys)
-    values = yield [("RDN", [a, i]) for i in keys]
-    for i, v in enumerate(values):
-        if v == b:
-            raise PrimitiveFinished(keys[i])
+    edges = yield [("RO", [a])]
+    expanded_edges = yield [("RE", [i]) for i in edges]
+    for i, edge in enumerate(expanded_edges):
+        if b == edge[1]:
+            # Found our edge: edges[i]
+            outgoing = yield [("RO", [edges[i]])]
+            result = yield [("RE", [outgoing[0]])]
+            raise PrimitiveFinished(result[1])
+
     result = yield [("CNV", ["(unknown: %s)" % b])]
     raise PrimitiveFinished(result)