--- /dev/null
+package org.simantics.scl.runtime.chr;\r
+\r
+import java.util.Arrays;\r
+\r
+class PriorityContainer {\r
+ private static final boolean CLEANUP_ENABLED = true;\r
+ \r
+ final int priority;\r
+ Fact[] facts = new Fact[4];\r
+ int size;\r
+\r
+ public PriorityContainer(int priority) {\r
+ this.priority = priority;\r
+ }\r
+ \r
+ public void push(Fact item) {\r
+ if(size == facts.length)\r
+ increaseCapacity();\r
+ facts[size++] = item;\r
+ }\r
+\r
+ private void increaseCapacity() {\r
+ if(CLEANUP_ENABLED) {\r
+ // Cleanup dead facts\r
+ int j=0;\r
+ for(int i=0;i<size;++i) {\r
+ Fact fact = facts[i];\r
+ if(fact.isAlive())\r
+ facts[j++] = fact;\r
+ }\r
+ size = j;\r
+ }\r
+ \r
+ // Resize if necessary\r
+ if(size >= facts.length*3/4)\r
+ facts = Arrays.copyOf(facts, size*2);\r
+ }\r
+\r
+ public Fact pop() {\r
+ return facts[--size];\r
+ }\r
+}\r