--- /dev/null
+package org.simantics.graph.diff;\r
+\r
+public class Statement {\r
+ int subject;\r
+ int predicate;\r
+ int inverse;\r
+ int object;\r
+ \r
+ public Statement(int subject, int predicate, int inverse, int object) {\r
+ this.subject = subject;\r
+ this.predicate = predicate;\r
+ this.inverse = inverse;\r
+ this.object = object;\r
+ }\r
+\r
+ @Override\r
+ public int hashCode() {\r
+ final int prime = 31;\r
+ int result = 1;\r
+ result = prime * result + inverse;\r
+ result = prime * result + object;\r
+ result = prime * result + predicate;\r
+ result = prime * result + subject;\r
+ return result;\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
+ Statement other = (Statement) obj;\r
+ if (inverse != other.inverse)\r
+ return false;\r
+ if (object != other.object)\r
+ return false;\r
+ if (predicate != other.predicate)\r
+ return false;\r
+ if (subject != other.subject)\r
+ return false;\r
+ return true;\r
+ }\r
+ \r
+ public Statement map(int[] map) {\r
+ int mappedSubject = map[subject];\r
+ if(mappedSubject < 0) return null;\r
+ int mappedPredicate = map[predicate];\r
+ if(mappedPredicate < 0) return null; \r
+ int mappedInverse;\r
+ if(inverse < 0)\r
+ mappedInverse = inverse;\r
+ else {\r
+ mappedInverse = map[inverse];\r
+ if(mappedInverse < 0) return null;\r
+ }\r
+ int mappedObject = map[object];\r
+ if(mappedObject < 0) return null;\r
+ return new Statement(mappedSubject, mappedPredicate, mappedInverse, mappedObject);\r
+ }\r
+}\r