]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/chr/ExampleStore.java
Merge "Re-enabled Acorn transaction cancellation support for testing"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / chr / ExampleStore.java
1 package org.simantics.scl.compiler.internal.codegen.chr;\r
2 \r
3 import org.simantics.scl.runtime.chr.CHRHashIndex;\r
4 import org.simantics.scl.runtime.chr.Fact;\r
5 import org.simantics.scl.runtime.chr.FactActivationQueue;\r
6 \r
7 public class ExampleStore {\r
8     /*\r
9      * constraint ExampleFact Integer Integer where\r
10      *     index(bf)\r
11      *     \r
12      * =>\r
13      * \r
14      * data Store       // class Module$123\r
15      * data ExampleFact // class Module$123/ExampleFact\r
16      * \r
17      * add     :: Store -> ExampleFact -> <Proc> ()\r
18      * remove  :: Store -> ExampleFact -> <Proc> ()\r
19      * get_bf  :: Store -> Integer -> <Proc> ExampleFact\r
20      * next_bf :: ExampleFact -> <Proc> Maybe ExampleFact\r
21      * idOf    :: ExampleFact -> <Proc> Integer\r
22      * isAlive :: ExampleFact -> <Proc> Boolean\r
23      */\r
24     \r
25     CHRHashIndex ExampleFact_bfIndex = new CHRHashIndex() {\r
26         @Override\r
27         protected boolean keyEquals(Object a, Object b) {\r
28             return ((ExampleFact)a).c0 == ((ExampleFact)b).c0;\r
29         }\r
30         @Override\r
31         protected int keyHashCode(Object key) {\r
32             return ((ExampleFact)key).c0;\r
33         }\r
34     };\r
35     \r
36     public FactActivationQueue queue = new FactActivationQueue(2);\r
37     \r
38     private ExampleFact ExampleFact_temp = new ExampleFact();\r
39         \r
40     public ExampleFact getExampleFact_bf(int c0) {\r
41         ExampleFact_temp.c0 = c0;\r
42         return (ExampleFact)ExampleFact_bfIndex.getEqual(ExampleFact_temp);\r
43     }\r
44     \r
45     public static class ExampleFact implements Fact {\r
46         public int id;\r
47         public int c0; // key\r
48         public int c1;\r
49         public ExampleFact bfPrev;\r
50         public ExampleFact bfNext;\r
51         \r
52         public ExampleFact() {\r
53         }\r
54         \r
55         public ExampleFact(int c0, int c1) {\r
56             this.c0 = c0;\r
57             this.c1 = c1;\r
58         }\r
59         \r
60         public void add(ExampleStore store) {\r
61             bfNext = (ExampleFact)store.ExampleFact_bfIndex.addFreshAndReturnOld(this);\r
62             if(bfNext != null)\r
63                 bfNext.bfPrev = this;\r
64         }\r
65         \r
66         public void remove(ExampleStore store) {\r
67             if(bfPrev == null) {\r
68                 if(bfNext == null)\r
69                     store.ExampleFact_bfIndex.removeKnownToExistKey(this);\r
70                 else {\r
71                     bfNext.bfPrev = null;\r
72                     store.ExampleFact_bfIndex.replaceKnownToExistKey(this, bfNext);\r
73                 }\r
74             }\r
75             else {\r
76                 bfPrev.bfNext = bfNext;\r
77                 if(bfNext != null)\r
78                     bfNext.bfPrev = bfPrev;\r
79             }\r
80         }\r
81 \r
82         @Override\r
83         public int activate(Object context, int priority) {\r
84             return -1;\r
85         }\r
86 \r
87         @Override\r
88         public boolean isAlive() {\r
89             return id >= 0;\r
90         }\r
91     }\r
92 \r
93 }\r