X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.graph%2Fsrc%2Forg%2Fsimantics%2Fgraph%2Fstore%2FStatementStore.java;h=cc82975c8191fe2cd980c9eaf3963fa47e49939c;hp=96b6b1c725ee61a073ac2b7cebf949ff94def4bc;hb=55f09d0198f1431c19ffa62e0cad361c1a2787e4;hpb=6f4a838ed439ed3a5f5f51e1837e9adf45c98eef diff --git a/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java b/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java index 96b6b1c72..cc82975c8 100644 --- a/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java +++ b/bundles/org.simantics.graph/src/org/simantics/graph/store/StatementStore.java @@ -1,5 +1,7 @@ package org.simantics.graph.store; +import java.util.ArrayList; + import gnu.trove.list.array.TIntArrayList; import gnu.trove.map.hash.TIntIntHashMap; import gnu.trove.map.hash.TIntObjectHashMap; @@ -10,7 +12,7 @@ import gnu.trove.set.hash.TIntHashSet; /** * Statement store indexes a set of statements. - * @author Hannu Niemistö + * @author Hannu Niemist� */ public class StatementStore implements IStore { @@ -287,5 +289,54 @@ public class StatementStore implements IStore { } }); return statements.toArray(); + } + + private static class CollisionSubjectProcedure implements TIntObjectProcedure> { + CollisionPredicateProcedure predicateProcedure; + + public CollisionSubjectProcedure(CollisionPredicateProcedure predicateProcedure) { + this.predicateProcedure = predicateProcedure; + } + + @Override + public boolean execute(int subject, TIntObjectHashMap predicateObjectMap) { + predicateProcedure.subject = subject; + predicateObjectMap.forEachEntry(predicateProcedure); + return true; + } + + } + + private static class CollisionPredicateProcedure implements TIntObjectProcedure { + ArrayList collisions; + int subject; + + public CollisionPredicateProcedure(ArrayList collisions) { + this.collisions = collisions; + } + + @Override + public boolean execute(int predicate, TIntArrayList objects) { + if(objects.size() > 1) { + objects.sort(); + int oldObject = objects.get(0); + for(int i=1;i getCollisions() { + ArrayList collisions = new ArrayList(); + CollisionPredicateProcedure predicateProcedure = new CollisionPredicateProcedure(collisions); + CollisionSubjectProcedure subjectProcedure = new CollisionSubjectProcedure(predicateProcedure); + statements.forEachEntry(subjectProcedure); + return collisions; } }