--- /dev/null
+package org.simantics.graph.matching;\r
+\r
+import java.util.Comparator;\r
+\r
+class Stat {\r
+ public int p, o;\r
+\r
+ public Stat(int p, int o) {\r
+ this.p = p;\r
+ this.o = o;\r
+ }\r
+ \r
+ public Stat(Stat stat) {\r
+ this.p = stat.p;\r
+ this.o = stat.o;\r
+ }\r
+ \r
+ public void map(int[] map) {\r
+ if(p >= 0)\r
+ p = map[p];\r
+ if(o >= 0)\r
+ o = map[o];\r
+ }\r
+ \r
+ @Override\r
+ public String toString() {\r
+ return p + " " + o;\r
+ }\r
+ \r
+ public String toString(String[] names) {\r
+ return (p >= 0 ? names[p] : "?") + " " + (o >= 0 ? names[o] : "?");\r
+ }\r
+ \r
+ @Override\r
+ public int hashCode() {\r
+ return 31*p + o;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj)\r
+ return true;\r
+ if (obj == null)\r
+ return false;\r
+ if (getClass() != obj.getClass())\r
+ return false;\r
+ Stat other = (Stat) obj;\r
+ return p==other.p && o==other.o;\r
+ }\r
+\r
+\r
+\r
+ static final Stat[] NO_STATS = new Stat[0];\r
+ \r
+ static final Comparator<Stat> STAT_COMPARATOR = new Comparator<Stat>() {\r
+ @Override\r
+ public int compare(Stat o1, Stat o2) {\r
+ if(o1.p < o2.p)\r
+ return -1;\r
+ else if(o1.p > o2.p)\r
+ return 1;\r
+ else if(o1.o < o2.o)\r
+ return -1;\r
+ else if(o1.o > o2.o)\r
+ return 1;\r
+ else\r
+ return 0;\r
+ }\r
+ };\r
+}
\ No newline at end of file