X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.runtime%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fruntime%2Fchr%2FFactActivationQueue.java;h=fcfa01f13c8fd6bed8648c2fa0451682c837f1cb;hp=05b410de4b38fcc9b005ad21862ff692df0582f3;hb=d5c76b143c0000994bb76c40f0ea74354eb5ce8a;hpb=cb5fc8d606d8b322563e9345c441eecfa7f01753 diff --git a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/chr/FactActivationQueue.java b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/chr/FactActivationQueue.java index 05b410de4..fcfa01f13 100644 --- a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/chr/FactActivationQueue.java +++ b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/chr/FactActivationQueue.java @@ -1,120 +1,120 @@ -package org.simantics.scl.runtime.chr; - -import java.util.Arrays; - -public class FactActivationQueue { - public static final boolean TRACE = false; - - private final PriorityContainer[] containers; - private PriorityContainer[] activeContainers = new PriorityContainer[8]; - private int activeContainerCount; - - public FactActivationQueue(int priorityCount) { - if(TRACE) - System.out.println("priorityCount = " + priorityCount); - containers = new PriorityContainer[priorityCount]; - for(int i=0;i= activeContainerCount) { - if(npos >= activeContainerCount) - break; - PriorityContainer item1 = activeContainers[npos]; - if(priority > item1.priority) { - activeContainers[pos] = item1; - activeContainers[npos] = item; - return; - } - else - break; - } - PriorityContainer item1 = activeContainers[npos]; - PriorityContainer item2 = activeContainers[npos+1]; - if(priority < item1.priority) { - if(priority < item2.priority) - break; - } - else { - if(item1.priority < item2.priority) { - activeContainers[pos] = item1; - pos = npos; - continue; - } - } - activeContainers[pos] = item2; - pos = npos+1; - } - activeContainers[pos] = item; - } - - private void adjustUpwards(int pos, PriorityContainer item) { - int priority = item.priority; - while(pos > 0) { - int npos = (pos-1)/2; - PriorityContainer item1 = activeContainers[npos]; - if(item1.priority > priority) { - activeContainers[pos] = item1; - pos = npos; - } - else - break; - } - activeContainers[pos] = item; - } - - /** - * Activates all facts with priority less than the current priority - */ - public void activate(Object context, int currentPriority) { - if(TRACE) - System.out.println("FactActivationQueue.activate " + currentPriority); - while(activeContainerCount > 0) { - PriorityContainer topContainer = activeContainers[0]; - int priority = topContainer.priority; - if(priority >= currentPriority) - return; - - Fact fact = topContainer.pop(); - if(topContainer.size == 0) - deactivateContainer(); - - int newPriority = fact.activate(context, priority); - if(TRACE) - System.out.println(" [" + currentPriority + "] " + fact + " oldPriority=" + priority + ", newPriority=" + newPriority); - if(newPriority >= 0) - add(newPriority, fact); - } - } -} +package org.simantics.scl.runtime.chr; + +import java.util.Arrays; + +public class FactActivationQueue { + public static final boolean TRACE = false; + + private final PriorityContainer[] containers; + private PriorityContainer[] activeContainers = new PriorityContainer[8]; + private int activeContainerCount; + + public FactActivationQueue(int priorityCount) { + if(TRACE) + System.out.println("priorityCount = " + priorityCount); + containers = new PriorityContainer[priorityCount]; + for(int i=0;i= activeContainerCount) { + if(npos >= activeContainerCount) + break; + PriorityContainer item1 = activeContainers[npos]; + if(priority > item1.priority) { + activeContainers[pos] = item1; + activeContainers[npos] = item; + return; + } + else + break; + } + PriorityContainer item1 = activeContainers[npos]; + PriorityContainer item2 = activeContainers[npos+1]; + if(priority < item1.priority) { + if(priority < item2.priority) + break; + } + else { + if(item1.priority < item2.priority) { + activeContainers[pos] = item1; + pos = npos; + continue; + } + } + activeContainers[pos] = item2; + pos = npos+1; + } + activeContainers[pos] = item; + } + + private void adjustUpwards(int pos, PriorityContainer item) { + int priority = item.priority; + while(pos > 0) { + int npos = (pos-1)/2; + PriorityContainer item1 = activeContainers[npos]; + if(item1.priority > priority) { + activeContainers[pos] = item1; + pos = npos; + } + else + break; + } + activeContainers[pos] = item; + } + + /** + * Activates all facts with priority less than the current priority + */ + public void activate(Object context, int currentPriority) { + if(TRACE) + System.out.println("FactActivationQueue.activate " + currentPriority); + while(activeContainerCount > 0) { + PriorityContainer topContainer = activeContainers[0]; + int priority = topContainer.priority; + if(priority >= currentPriority) + return; + + Fact fact = topContainer.pop(); + if(topContainer.size == 0) + deactivateContainer(); + + int newPriority = fact.activate(context, priority); + if(TRACE) + System.out.println(" [" + currentPriority + "] " + fact + " oldPriority=" + priority + ", newPriority=" + newPriority); + if(newPriority >= 0) + add(newPriority, fact); + } + } +}