]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/chr/PriorityContainer.java
Merge "List the unsatisfied dependencies in CanvasContext"
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / chr / PriorityContainer.java
1 package org.simantics.scl.runtime.chr;\r
2 \r
3 import java.util.Arrays;\r
4 \r
5 class PriorityContainer {\r
6     private static final boolean CLEANUP_ENABLED = true;\r
7     \r
8     final int priority;\r
9     Fact[] facts = new Fact[4];\r
10     int size;\r
11 \r
12     public PriorityContainer(int priority) {\r
13         this.priority = priority;\r
14     }\r
15     \r
16     public void push(Fact item) {\r
17         if(size == facts.length)\r
18             increaseCapacity();\r
19         facts[size++] = item;\r
20     }\r
21 \r
22     private void increaseCapacity() {\r
23         if(CLEANUP_ENABLED) {\r
24             // Cleanup dead facts\r
25             int j=0;\r
26             for(int i=0;i<size;++i) {\r
27                 Fact fact = facts[i];\r
28                 if(fact.isAlive())\r
29                     facts[j++] = fact;\r
30             }\r
31             size = j;\r
32         }\r
33         \r
34         // Resize if necessary\r
35         if(size >= facts.length*3/4)\r
36             facts = Arrays.copyOf(facts, size*2);\r
37     }\r
38 \r
39     public Fact pop() {\r
40         return facts[--size];\r
41     }\r
42 }\r