+package org.simantics.scl.compiler.internal.codegen.chr;\r
+\r
+import org.simantics.scl.runtime.chr.CHRHashIndex;\r
+import org.simantics.scl.runtime.chr.Fact;\r
+import org.simantics.scl.runtime.chr.FactActivationQueue;\r
+\r
+public class ExampleStore {\r
+ /*\r
+ * constraint ExampleFact Integer Integer where\r
+ * index(bf)\r
+ * \r
+ * =>\r
+ * \r
+ * data Store // class Module$123\r
+ * data ExampleFact // class Module$123/ExampleFact\r
+ * \r
+ * add :: Store -> ExampleFact -> <Proc> ()\r
+ * remove :: Store -> ExampleFact -> <Proc> ()\r
+ * get_bf :: Store -> Integer -> <Proc> ExampleFact\r
+ * next_bf :: ExampleFact -> <Proc> Maybe ExampleFact\r
+ * idOf :: ExampleFact -> <Proc> Integer\r
+ * isAlive :: ExampleFact -> <Proc> Boolean\r
+ */\r
+ \r
+ CHRHashIndex ExampleFact_bfIndex = new CHRHashIndex() {\r
+ @Override\r
+ protected boolean keyEquals(Object a, Object b) {\r
+ return ((ExampleFact)a).c0 == ((ExampleFact)b).c0;\r
+ }\r
+ @Override\r
+ protected int keyHashCode(Object key) {\r
+ return ((ExampleFact)key).c0;\r
+ }\r
+ };\r
+ \r
+ public FactActivationQueue queue = new FactActivationQueue(2);\r
+ \r
+ private ExampleFact ExampleFact_temp = new ExampleFact();\r
+ \r
+ public ExampleFact getExampleFact_bf(int c0) {\r
+ ExampleFact_temp.c0 = c0;\r
+ return (ExampleFact)ExampleFact_bfIndex.getEqual(ExampleFact_temp);\r
+ }\r
+ \r
+ public static class ExampleFact implements Fact {\r
+ public int id;\r
+ public int c0; // key\r
+ public int c1;\r
+ public ExampleFact bfPrev;\r
+ public ExampleFact bfNext;\r
+ \r
+ public ExampleFact() {\r
+ }\r
+ \r
+ public ExampleFact(int c0, int c1) {\r
+ this.c0 = c0;\r
+ this.c1 = c1;\r
+ }\r
+ \r
+ public void add(ExampleStore store) {\r
+ bfNext = (ExampleFact)store.ExampleFact_bfIndex.addFreshAndReturnOld(this);\r
+ if(bfNext != null)\r
+ bfNext.bfPrev = this;\r
+ }\r
+ \r
+ public void remove(ExampleStore store) {\r
+ if(bfPrev == null) {\r
+ if(bfNext == null)\r
+ store.ExampleFact_bfIndex.removeKnownToExistKey(this);\r
+ else {\r
+ bfNext.bfPrev = null;\r
+ store.ExampleFact_bfIndex.replaceKnownToExistKey(this, bfNext);\r
+ }\r
+ }\r
+ else {\r
+ bfPrev.bfNext = bfNext;\r
+ if(bfNext != null)\r
+ bfNext.bfPrev = bfPrev;\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public int activate(Object context, int priority) {\r
+ return -1;\r
+ }\r
+\r
+ @Override\r
+ public boolean isAlive() {\r
+ return id >= 0;\r
+ }\r
+ }\r
+\r
+}\r