X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2Fcluster%2FClusterSmall.java;h=d20ddae6cf53d765314cad11250a0a460c7731c5;hp=117ab75a3fc723b66660cd48c6db6231b496a3d1;hb=4aba159170fc72d39c2f930ea224aa71f4cdc2e7;hpb=56a799c9b7d395cefb59e101cd0f7ce8d68f88e6 diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterSmall.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterSmall.java index 117ab75a3..d20ddae6c 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterSmall.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/cluster/ClusterSmall.java @@ -38,8 +38,8 @@ import org.simantics.db.impl.IClusterTable; import org.simantics.db.impl.Table; import org.simantics.db.impl.TableHeader; import org.simantics.db.impl.graph.ReadGraphImpl; -import org.simantics.db.procedure.AsyncContextMultiProcedure; -import org.simantics.db.procedure.AsyncMultiProcedure; +import org.simantics.db.procedure.SyncContextMultiProcedure; +import org.simantics.db.procedure.SyncMultiProcedure; import org.simantics.db.procore.cluster.ClusterMapSmall; import org.simantics.db.procore.cluster.ClusterTraits; import org.simantics.db.procore.cluster.ClusterTraitsSmall; @@ -54,6 +54,7 @@ import org.simantics.db.service.Bytes; import org.simantics.db.service.ClusterUID; import org.simantics.db.service.ResourceUID; +import fi.vtt.simantics.procore.internal.SessionImplSocket; import gnu.trove.map.hash.TIntShortHashMap; import gnu.trove.procedure.TIntProcedure; import gnu.trove.set.hash.TIntHashSet; @@ -300,7 +301,7 @@ final public class ClusterSmall extends ClusterImpl { return objectTable.getSingleObject(objectIndex, support, this); } - public void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, AsyncMultiProcedure procedure, + public void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, SyncMultiProcedure procedure, ClusterSupport support) throws DatabaseException { if (DEBUG) System.out.println("ClusterSmall.forObjects1: rk=" + resourceKey + " pk=" + predicateKey); @@ -314,7 +315,7 @@ final public class ClusterSmall extends ClusterImpl { objectTable.foreachObject(graph, objectIndex, procedure, this); } - public void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, C context, AsyncContextMultiProcedure procedure, + public void forObjects(ReadGraphImpl graph, int resourceKey, int predicateKey, int objectIndex, C context, SyncContextMultiProcedure procedure, ClusterSupport support) throws DatabaseException { if (DEBUG) System.out.println("ClusterSmall.forObjects1: rk=" + resourceKey + " pk=" + predicateKey); @@ -408,29 +409,28 @@ final public class ClusterSmall extends ClusterImpl { @Override public void forObjects(ReadGraphImpl graph, int resourceKey, - int predicateKey, AsyncMultiProcedure procedure) throws DatabaseException { + int predicateKey, SyncMultiProcedure procedure) throws DatabaseException { - throw new UnsupportedOperationException(); - -// SessionImplSocket session = (SessionImplSocket)graph.getSession(); -// ClusterSupport support = session.clusterTranslator; -// if (DEBUG) -// System.out.println("ClusterSmall.forObjects3: rk=" + resourceKey + " pk=" + predicateKey); -// final int resourceIndex = ClusterTraitsBase.getResourceIndexFromResourceKey(resourceKey); -// final int pRef = getInternalReferenceOrZero2(predicateKey, support); -// final int completeType = ClusterTraitsBase.getCompleteTypeIntFromResourceKey(predicateKey); -// final ClusterI.CompleteTypeEnum pCompleteType = CompleteTypeEnum.make(completeType); -// if (completeType > 0) { -// resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); -// return; -// } -// final int predicateIndex = (int)resourceTable.table[(resourceIndex<<1) - 1 + resourceTable.offset] & 0xFFFFFF; -// if (0 == predicateIndex) { -// resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); -// return; -// } -// int objectIndex = predicateTable.getObjectIndex(predicateIndex, pRef & 0xFFFF); -// forObjects(graph, resourceKey, predicateKey, objectIndex, procedure, support); + SessionImplSocket session = (SessionImplSocket)graph.getSession(); + ClusterSupport support = session.clusterTranslator; + if (DEBUG) + System.out.println("ClusterSmall.forObjects3: rk=" + resourceKey + " pk=" + predicateKey); + final int resourceIndex = ClusterTraitsBase.getResourceIndexFromResourceKey(resourceKey); + final int pRef = getInternalReferenceOrZero2(predicateKey, support); + final int completeType = ClusterTraitsBase.getCompleteTypeIntFromResourceKey(predicateKey); + final ClusterI.CompleteTypeEnum pCompleteType = CompleteTypeEnum.make(completeType); + if (completeType > 0) { + resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); + return; + } + final int predicateIndex = (int)resourceTable.table[(resourceIndex<<1) - 1 + resourceTable.offset] & 0xFFFFFF; + if (0 == predicateIndex) { + resourceTable.foreachObject(resourceIndex, graph, procedure, support, pRef, pCompleteType, completeTable, this); + return; + } + int objectIndex = predicateTable.getObjectIndex(predicateIndex, pRef & 0xFFFF); + forObjects(graph, resourceKey, predicateKey, objectIndex, procedure, support); + } public void forObjects(ReadGraphImpl graph, int resourceKey, ForEachObjectProcedure procedure) throws DatabaseException { @@ -596,7 +596,7 @@ final public class ClusterSmall extends ClusterImpl { support.setStreamOff(false); ClusterI cluster2 = cluster.addRelation(sResourceKey, pResourceKey, oResourceKey, support); if (cluster != cluster2) - throw new DatabaseException("Internal error. Contact application support."); + throw new DatabaseException("Internal error, cluster mismatch."); return cluster; } // check(); @@ -642,7 +642,7 @@ final public class ClusterSmall extends ClusterImpl { support.setStreamOff(false); ClusterI cluster2 = cluster.addRelation(sResourceKey, pResourceKey, oResourceKey, support); if (cluster != cluster2) - throw new DatabaseException("Internal error. Contact application support."); + throw new DatabaseException("Internal error, cluster mismatch."); return cluster; } // check();