Ensure the data is associated with nodes using identity, except variables, which are identified by symbol
This commit is contained in:
parent
004480ca70
commit
690e2929bb
|
|
@ -42,7 +42,7 @@ import java.util.*;
|
|||
*/
|
||||
public class UnionFindTermGraphUnifier {
|
||||
|
||||
private Map<Object, Data> myData = new HashMap<Object, Data>();
|
||||
private Map<Object, Data> myData = new IdentityHashMap<Object, Data>();
|
||||
|
||||
public Substitution unify(Node a, Node b) {
|
||||
if (!unifClosure(a, b)) {
|
||||
|
|
@ -287,7 +287,16 @@ public class UnionFindTermGraphUnifier {
|
|||
}
|
||||
|
||||
private boolean hasData(Node n) {
|
||||
return myData.containsKey(n);
|
||||
Object key = n.is(Node.Kind.VAR) ? String.valueOf(n.symbol()).intern() : n;
|
||||
return myData.containsKey(key);
|
||||
}
|
||||
|
||||
private Data getData(Node n) {
|
||||
Object key = n.is(Node.Kind.VAR) ? String.valueOf(n.symbol()).intern() : n;
|
||||
if (myData.containsKey(key)) return myData.get(key);
|
||||
Data data = new Data(n);
|
||||
myData.put(key, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
private List<Node> collectVars(Node n) {
|
||||
|
|
@ -297,13 +306,6 @@ public class UnionFindTermGraphUnifier {
|
|||
return Collections.<Node>emptyList();
|
||||
}
|
||||
|
||||
private Data getData(Node n) {
|
||||
if (myData.containsKey(n)) return myData.get(n);
|
||||
Data data = new Data(n);
|
||||
myData.put(n, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
private boolean eq(Object a, Object b) {
|
||||
return a == null ? b == null : a.equals(b);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue