clipsruby 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/clipsruby/agenda.c +1373 -0
- data/ext/clipsruby/agenda.h +169 -0
- data/ext/clipsruby/analysis.c +1142 -0
- data/ext/clipsruby/analysis.h +61 -0
- data/ext/clipsruby/argacces.c +526 -0
- data/ext/clipsruby/argacces.h +77 -0
- data/ext/clipsruby/bload.c +884 -0
- data/ext/clipsruby/bload.h +94 -0
- data/ext/clipsruby/bmathfun.c +557 -0
- data/ext/clipsruby/bmathfun.h +66 -0
- data/ext/clipsruby/bsave.c +634 -0
- data/ext/clipsruby/bsave.h +130 -0
- data/ext/clipsruby/classcom.c +976 -0
- data/ext/clipsruby/classcom.h +115 -0
- data/ext/clipsruby/classexm.c +1376 -0
- data/ext/clipsruby/classexm.h +97 -0
- data/ext/clipsruby/classfun.c +1392 -0
- data/ext/clipsruby/classfun.h +164 -0
- data/ext/clipsruby/classinf.c +1245 -0
- data/ext/clipsruby/classinf.h +94 -0
- data/ext/clipsruby/classini.c +843 -0
- data/ext/clipsruby/classini.h +75 -0
- data/ext/clipsruby/classpsr.c +957 -0
- data/ext/clipsruby/classpsr.h +73 -0
- data/ext/clipsruby/clips.h +133 -0
- data/ext/clipsruby/clipsruby.c +619 -0
- data/ext/clipsruby/clsltpsr.c +931 -0
- data/ext/clipsruby/clsltpsr.h +72 -0
- data/ext/clipsruby/commline.c +1217 -0
- data/ext/clipsruby/commline.h +131 -0
- data/ext/clipsruby/conscomp.c +1593 -0
- data/ext/clipsruby/conscomp.h +150 -0
- data/ext/clipsruby/constant.h +264 -0
- data/ext/clipsruby/constrct.c +1090 -0
- data/ext/clipsruby/constrct.h +216 -0
- data/ext/clipsruby/constrnt.c +554 -0
- data/ext/clipsruby/constrnt.h +132 -0
- data/ext/clipsruby/crstrtgy.c +1088 -0
- data/ext/clipsruby/crstrtgy.h +85 -0
- data/ext/clipsruby/cstrcbin.c +185 -0
- data/ext/clipsruby/cstrcbin.h +61 -0
- data/ext/clipsruby/cstrccmp.h +43 -0
- data/ext/clipsruby/cstrccom.c +1791 -0
- data/ext/clipsruby/cstrccom.h +115 -0
- data/ext/clipsruby/cstrcpsr.c +835 -0
- data/ext/clipsruby/cstrcpsr.h +97 -0
- data/ext/clipsruby/cstrnbin.c +282 -0
- data/ext/clipsruby/cstrnbin.h +55 -0
- data/ext/clipsruby/cstrnchk.c +826 -0
- data/ext/clipsruby/cstrnchk.h +91 -0
- data/ext/clipsruby/cstrncmp.c +238 -0
- data/ext/clipsruby/cstrncmp.h +57 -0
- data/ext/clipsruby/cstrnops.c +1176 -0
- data/ext/clipsruby/cstrnops.h +47 -0
- data/ext/clipsruby/cstrnpsr.c +1394 -0
- data/ext/clipsruby/cstrnpsr.h +88 -0
- data/ext/clipsruby/cstrnutl.c +564 -0
- data/ext/clipsruby/cstrnutl.h +54 -0
- data/ext/clipsruby/default.c +454 -0
- data/ext/clipsruby/default.h +57 -0
- data/ext/clipsruby/defins.c +971 -0
- data/ext/clipsruby/defins.h +127 -0
- data/ext/clipsruby/developr.c +677 -0
- data/ext/clipsruby/developr.h +69 -0
- data/ext/clipsruby/dffctbin.c +477 -0
- data/ext/clipsruby/dffctbin.h +76 -0
- data/ext/clipsruby/dffctbsc.c +308 -0
- data/ext/clipsruby/dffctbsc.h +72 -0
- data/ext/clipsruby/dffctcmp.c +297 -0
- data/ext/clipsruby/dffctcmp.h +44 -0
- data/ext/clipsruby/dffctdef.c +364 -0
- data/ext/clipsruby/dffctdef.h +104 -0
- data/ext/clipsruby/dffctpsr.c +179 -0
- data/ext/clipsruby/dffctpsr.h +49 -0
- data/ext/clipsruby/dffnxbin.c +520 -0
- data/ext/clipsruby/dffnxbin.h +67 -0
- data/ext/clipsruby/dffnxcmp.c +378 -0
- data/ext/clipsruby/dffnxcmp.h +54 -0
- data/ext/clipsruby/dffnxexe.c +241 -0
- data/ext/clipsruby/dffnxexe.h +58 -0
- data/ext/clipsruby/dffnxfun.c +1192 -0
- data/ext/clipsruby/dffnxfun.h +155 -0
- data/ext/clipsruby/dffnxpsr.c +514 -0
- data/ext/clipsruby/dffnxpsr.h +57 -0
- data/ext/clipsruby/dfinsbin.c +509 -0
- data/ext/clipsruby/dfinsbin.h +66 -0
- data/ext/clipsruby/dfinscmp.c +345 -0
- data/ext/clipsruby/dfinscmp.h +48 -0
- data/ext/clipsruby/drive.c +1191 -0
- data/ext/clipsruby/drive.h +65 -0
- data/ext/clipsruby/emathfun.c +1213 -0
- data/ext/clipsruby/emathfun.h +99 -0
- data/ext/clipsruby/engine.c +1568 -0
- data/ext/clipsruby/engine.h +203 -0
- data/ext/clipsruby/entities.h +276 -0
- data/ext/clipsruby/envrnbld.c +514 -0
- data/ext/clipsruby/envrnbld.h +40 -0
- data/ext/clipsruby/envrnmnt.c +257 -0
- data/ext/clipsruby/envrnmnt.h +112 -0
- data/ext/clipsruby/evaluatn.c +1736 -0
- data/ext/clipsruby/evaluatn.h +211 -0
- data/ext/clipsruby/expressn.c +494 -0
- data/ext/clipsruby/expressn.h +154 -0
- data/ext/clipsruby/exprnbin.c +538 -0
- data/ext/clipsruby/exprnbin.h +60 -0
- data/ext/clipsruby/exprnops.c +564 -0
- data/ext/clipsruby/exprnops.h +67 -0
- data/ext/clipsruby/exprnpsr.c +1112 -0
- data/ext/clipsruby/exprnpsr.h +98 -0
- data/ext/clipsruby/extconf.rb +2 -0
- data/ext/clipsruby/extnfunc.c +1015 -0
- data/ext/clipsruby/extnfunc.h +157 -0
- data/ext/clipsruby/factbin.c +447 -0
- data/ext/clipsruby/factbin.h +56 -0
- data/ext/clipsruby/factbld.c +1035 -0
- data/ext/clipsruby/factbld.h +63 -0
- data/ext/clipsruby/factcmp.c +386 -0
- data/ext/clipsruby/factcmp.h +46 -0
- data/ext/clipsruby/factcom.c +759 -0
- data/ext/clipsruby/factcom.h +80 -0
- data/ext/clipsruby/factfile.c +1761 -0
- data/ext/clipsruby/factfile.h +54 -0
- data/ext/clipsruby/factfun.c +682 -0
- data/ext/clipsruby/factfun.h +77 -0
- data/ext/clipsruby/factgen.c +1305 -0
- data/ext/clipsruby/factgen.h +229 -0
- data/ext/clipsruby/facthsh.c +438 -0
- data/ext/clipsruby/facthsh.h +81 -0
- data/ext/clipsruby/factlhs.c +250 -0
- data/ext/clipsruby/factlhs.h +54 -0
- data/ext/clipsruby/factmch.c +905 -0
- data/ext/clipsruby/factmch.h +68 -0
- data/ext/clipsruby/factmngr.c +3373 -0
- data/ext/clipsruby/factmngr.h +325 -0
- data/ext/clipsruby/factprt.c +498 -0
- data/ext/clipsruby/factprt.h +60 -0
- data/ext/clipsruby/factqpsr.c +796 -0
- data/ext/clipsruby/factqpsr.h +61 -0
- data/ext/clipsruby/factqury.c +1267 -0
- data/ext/clipsruby/factqury.h +112 -0
- data/ext/clipsruby/factrete.c +978 -0
- data/ext/clipsruby/factrete.h +70 -0
- data/ext/clipsruby/factrhs.c +667 -0
- data/ext/clipsruby/factrhs.h +55 -0
- data/ext/clipsruby/filecom.c +353 -0
- data/ext/clipsruby/filecom.h +137 -0
- data/ext/clipsruby/filertr.c +481 -0
- data/ext/clipsruby/filertr.h +94 -0
- data/ext/clipsruby/fileutil.c +1020 -0
- data/ext/clipsruby/fileutil.h +50 -0
- data/ext/clipsruby/generate.c +1079 -0
- data/ext/clipsruby/generate.h +57 -0
- data/ext/clipsruby/genrcbin.c +902 -0
- data/ext/clipsruby/genrcbin.h +69 -0
- data/ext/clipsruby/genrccmp.c +640 -0
- data/ext/clipsruby/genrccmp.h +59 -0
- data/ext/clipsruby/genrccom.c +2017 -0
- data/ext/clipsruby/genrccom.h +119 -0
- data/ext/clipsruby/genrcexe.c +737 -0
- data/ext/clipsruby/genrcexe.h +73 -0
- data/ext/clipsruby/genrcfun.c +890 -0
- data/ext/clipsruby/genrcfun.h +185 -0
- data/ext/clipsruby/genrcpsr.c +1618 -0
- data/ext/clipsruby/genrcpsr.h +80 -0
- data/ext/clipsruby/globlbin.c +458 -0
- data/ext/clipsruby/globlbin.h +71 -0
- data/ext/clipsruby/globlbsc.c +361 -0
- data/ext/clipsruby/globlbsc.h +83 -0
- data/ext/clipsruby/globlcmp.c +330 -0
- data/ext/clipsruby/globlcmp.h +52 -0
- data/ext/clipsruby/globlcom.c +289 -0
- data/ext/clipsruby/globlcom.h +63 -0
- data/ext/clipsruby/globldef.c +1087 -0
- data/ext/clipsruby/globldef.h +151 -0
- data/ext/clipsruby/globlpsr.c +530 -0
- data/ext/clipsruby/globlpsr.h +59 -0
- data/ext/clipsruby/immthpsr.c +431 -0
- data/ext/clipsruby/immthpsr.h +55 -0
- data/ext/clipsruby/incrrset.c +530 -0
- data/ext/clipsruby/incrrset.h +73 -0
- data/ext/clipsruby/inherpsr.c +850 -0
- data/ext/clipsruby/inherpsr.h +52 -0
- data/ext/clipsruby/inscom.c +2076 -0
- data/ext/clipsruby/inscom.h +182 -0
- data/ext/clipsruby/insfile.c +1764 -0
- data/ext/clipsruby/insfile.h +96 -0
- data/ext/clipsruby/insfun.c +1451 -0
- data/ext/clipsruby/insfun.h +134 -0
- data/ext/clipsruby/insmngr.c +2550 -0
- data/ext/clipsruby/insmngr.h +125 -0
- data/ext/clipsruby/insmoddp.c +1041 -0
- data/ext/clipsruby/insmoddp.h +91 -0
- data/ext/clipsruby/insmult.c +804 -0
- data/ext/clipsruby/insmult.h +62 -0
- data/ext/clipsruby/inspsr.c +602 -0
- data/ext/clipsruby/inspsr.h +60 -0
- data/ext/clipsruby/insquery.c +1278 -0
- data/ext/clipsruby/insquery.h +115 -0
- data/ext/clipsruby/insqypsr.c +729 -0
- data/ext/clipsruby/insqypsr.h +63 -0
- data/ext/clipsruby/iofun.c +2045 -0
- data/ext/clipsruby/iofun.h +116 -0
- data/ext/clipsruby/lgcldpnd.c +644 -0
- data/ext/clipsruby/lgcldpnd.h +75 -0
- data/ext/clipsruby/main.c +112 -0
- data/ext/clipsruby/match.h +142 -0
- data/ext/clipsruby/memalloc.c +481 -0
- data/ext/clipsruby/memalloc.h +197 -0
- data/ext/clipsruby/miscfun.c +1801 -0
- data/ext/clipsruby/miscfun.h +132 -0
- data/ext/clipsruby/modulbin.c +607 -0
- data/ext/clipsruby/modulbin.h +84 -0
- data/ext/clipsruby/modulbsc.c +347 -0
- data/ext/clipsruby/modulbsc.h +67 -0
- data/ext/clipsruby/modulcmp.c +499 -0
- data/ext/clipsruby/modulcmp.h +54 -0
- data/ext/clipsruby/moduldef.c +817 -0
- data/ext/clipsruby/moduldef.h +271 -0
- data/ext/clipsruby/modulpsr.c +1150 -0
- data/ext/clipsruby/modulpsr.h +69 -0
- data/ext/clipsruby/modulutl.c +1036 -0
- data/ext/clipsruby/modulutl.h +84 -0
- data/ext/clipsruby/msgcom.c +1221 -0
- data/ext/clipsruby/msgcom.h +125 -0
- data/ext/clipsruby/msgfun.c +1076 -0
- data/ext/clipsruby/msgfun.h +118 -0
- data/ext/clipsruby/msgpass.c +1441 -0
- data/ext/clipsruby/msgpass.h +103 -0
- data/ext/clipsruby/msgpsr.c +698 -0
- data/ext/clipsruby/msgpsr.h +73 -0
- data/ext/clipsruby/multifld.c +1404 -0
- data/ext/clipsruby/multifld.h +130 -0
- data/ext/clipsruby/multifun.c +2182 -0
- data/ext/clipsruby/multifun.h +102 -0
- data/ext/clipsruby/network.h +142 -0
- data/ext/clipsruby/objbin.c +1522 -0
- data/ext/clipsruby/objbin.h +79 -0
- data/ext/clipsruby/objcmp.c +1507 -0
- data/ext/clipsruby/objcmp.h +71 -0
- data/ext/clipsruby/object.h +260 -0
- data/ext/clipsruby/objrtbin.c +701 -0
- data/ext/clipsruby/objrtbin.h +79 -0
- data/ext/clipsruby/objrtbld.c +2393 -0
- data/ext/clipsruby/objrtbld.h +66 -0
- data/ext/clipsruby/objrtcmp.c +734 -0
- data/ext/clipsruby/objrtcmp.h +66 -0
- data/ext/clipsruby/objrtfnx.c +1330 -0
- data/ext/clipsruby/objrtfnx.h +222 -0
- data/ext/clipsruby/objrtgen.c +736 -0
- data/ext/clipsruby/objrtgen.h +63 -0
- data/ext/clipsruby/objrtmch.c +1524 -0
- data/ext/clipsruby/objrtmch.h +160 -0
- data/ext/clipsruby/parsefun.c +415 -0
- data/ext/clipsruby/parsefun.h +67 -0
- data/ext/clipsruby/pattern.c +1265 -0
- data/ext/clipsruby/pattern.h +163 -0
- data/ext/clipsruby/pprint.c +328 -0
- data/ext/clipsruby/pprint.h +79 -0
- data/ext/clipsruby/prccode.c +1478 -0
- data/ext/clipsruby/prccode.h +145 -0
- data/ext/clipsruby/prcdrfun.c +640 -0
- data/ext/clipsruby/prcdrfun.h +95 -0
- data/ext/clipsruby/prcdrpsr.c +1068 -0
- data/ext/clipsruby/prcdrpsr.h +79 -0
- data/ext/clipsruby/prdctfun.c +869 -0
- data/ext/clipsruby/prdctfun.h +77 -0
- data/ext/clipsruby/prntutil.c +878 -0
- data/ext/clipsruby/prntutil.h +125 -0
- data/ext/clipsruby/proflfun.c +827 -0
- data/ext/clipsruby/proflfun.h +118 -0
- data/ext/clipsruby/reorder.c +2082 -0
- data/ext/clipsruby/reorder.h +172 -0
- data/ext/clipsruby/reteutil.c +1732 -0
- data/ext/clipsruby/reteutil.h +111 -0
- data/ext/clipsruby/retract.c +710 -0
- data/ext/clipsruby/retract.h +74 -0
- data/ext/clipsruby/router.c +737 -0
- data/ext/clipsruby/router.h +147 -0
- data/ext/clipsruby/rulebin.c +1136 -0
- data/ext/clipsruby/rulebin.h +153 -0
- data/ext/clipsruby/rulebld.c +1328 -0
- data/ext/clipsruby/rulebld.h +62 -0
- data/ext/clipsruby/rulebsc.c +517 -0
- data/ext/clipsruby/rulebsc.h +91 -0
- data/ext/clipsruby/rulecmp.c +733 -0
- data/ext/clipsruby/rulecmp.h +63 -0
- data/ext/clipsruby/rulecom.c +1583 -0
- data/ext/clipsruby/rulecom.h +116 -0
- data/ext/clipsruby/rulecstr.c +892 -0
- data/ext/clipsruby/rulecstr.h +53 -0
- data/ext/clipsruby/ruledef.c +559 -0
- data/ext/clipsruby/ruledef.h +179 -0
- data/ext/clipsruby/ruledlt.c +599 -0
- data/ext/clipsruby/ruledlt.h +58 -0
- data/ext/clipsruby/rulelhs.c +1216 -0
- data/ext/clipsruby/rulelhs.h +52 -0
- data/ext/clipsruby/rulepsr.c +1073 -0
- data/ext/clipsruby/rulepsr.h +61 -0
- data/ext/clipsruby/scanner.c +856 -0
- data/ext/clipsruby/scanner.h +112 -0
- data/ext/clipsruby/setup.h +488 -0
- data/ext/clipsruby/sortfun.c +433 -0
- data/ext/clipsruby/sortfun.h +55 -0
- data/ext/clipsruby/strngfun.c +1173 -0
- data/ext/clipsruby/strngfun.h +96 -0
- data/ext/clipsruby/strngrtr.c +523 -0
- data/ext/clipsruby/strngrtr.h +97 -0
- data/ext/clipsruby/symblbin.c +648 -0
- data/ext/clipsruby/symblbin.h +64 -0
- data/ext/clipsruby/symblcmp.c +893 -0
- data/ext/clipsruby/symblcmp.h +61 -0
- data/ext/clipsruby/symbol.c +1961 -0
- data/ext/clipsruby/symbol.h +243 -0
- data/ext/clipsruby/sysdep.c +894 -0
- data/ext/clipsruby/sysdep.h +164 -0
- data/ext/clipsruby/textpro.c +1388 -0
- data/ext/clipsruby/textpro.h +77 -0
- data/ext/clipsruby/tmpltbin.c +609 -0
- data/ext/clipsruby/tmpltbin.h +108 -0
- data/ext/clipsruby/tmpltbsc.c +327 -0
- data/ext/clipsruby/tmpltbsc.h +87 -0
- data/ext/clipsruby/tmpltcmp.c +450 -0
- data/ext/clipsruby/tmpltcmp.h +57 -0
- data/ext/clipsruby/tmpltdef.c +584 -0
- data/ext/clipsruby/tmpltdef.h +155 -0
- data/ext/clipsruby/tmpltfun.c +2477 -0
- data/ext/clipsruby/tmpltfun.h +122 -0
- data/ext/clipsruby/tmpltlhs.c +379 -0
- data/ext/clipsruby/tmpltlhs.h +50 -0
- data/ext/clipsruby/tmpltpsr.c +819 -0
- data/ext/clipsruby/tmpltpsr.h +59 -0
- data/ext/clipsruby/tmpltrhs.c +595 -0
- data/ext/clipsruby/tmpltrhs.h +55 -0
- data/ext/clipsruby/tmpltutl.c +637 -0
- data/ext/clipsruby/tmpltutl.h +82 -0
- data/ext/clipsruby/userdata.c +156 -0
- data/ext/clipsruby/userdata.h +72 -0
- data/ext/clipsruby/userfunctions.c +70 -0
- data/ext/clipsruby/usrsetup.h +7 -0
- data/ext/clipsruby/utility.c +1594 -0
- data/ext/clipsruby/utility.h +250 -0
- data/ext/clipsruby/watch.c +865 -0
- data/ext/clipsruby/watch.h +124 -0
- data/lib/clipsruby.rb +1 -0
- metadata +388 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* RULE CONSTRAINTS HEADER FILE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Provides routines for detecting constraint */
|
11
|
+
/* conflicts in the LHS and RHS of rules. */
|
12
|
+
/* */
|
13
|
+
/* Principal Programmer(s): */
|
14
|
+
/* Gary D. Riley */
|
15
|
+
/* */
|
16
|
+
/* Contributing Programmer(s): */
|
17
|
+
/* */
|
18
|
+
/* Revision History: */
|
19
|
+
/* */
|
20
|
+
/* 6.24: Renamed BOOLEAN macro type to intBool. */
|
21
|
+
/* */
|
22
|
+
/* 6.30: Support for long long integers. */
|
23
|
+
/* */
|
24
|
+
/* 6.40: Removed LOCALE definition. */
|
25
|
+
/* */
|
26
|
+
/* Pragma once and other inclusion changes. */
|
27
|
+
/* */
|
28
|
+
/* Added support for booleans with <stdbool.h>. */
|
29
|
+
/* */
|
30
|
+
/* Removed use of void pointers for specific */
|
31
|
+
/* data structures. */
|
32
|
+
/* */
|
33
|
+
/*************************************************************/
|
34
|
+
|
35
|
+
#ifndef _H_rulecstr
|
36
|
+
|
37
|
+
#pragma once
|
38
|
+
|
39
|
+
#define _H_rulecstr
|
40
|
+
|
41
|
+
struct lhsParseNode *GetExpressionVarConstraints(Environment *,struct lhsParseNode *);
|
42
|
+
struct lhsParseNode *DeriveVariableConstraints(Environment *,struct lhsParseNode *);
|
43
|
+
bool ProcessConnectedConstraints(Environment *,struct lhsParseNode *,struct lhsParseNode *,struct lhsParseNode *);
|
44
|
+
void ConstraintReferenceErrorMessage(Environment *,
|
45
|
+
CLIPSLexeme *,
|
46
|
+
struct lhsParseNode *,
|
47
|
+
int,int,
|
48
|
+
CLIPSLexeme *,
|
49
|
+
int);
|
50
|
+
bool CheckRHSForConstraintErrors(Environment *,struct expr *,struct lhsParseNode *);
|
51
|
+
|
52
|
+
#endif /* _H_rulecstr */
|
53
|
+
|
@@ -0,0 +1,559 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 08/06/16 */
|
5
|
+
/* */
|
6
|
+
/* DEFRULE MODULE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Defines basic defrule primitive functions such */
|
11
|
+
/* as allocating and deallocating, traversing, and finding */
|
12
|
+
/* defrule data structures. */
|
13
|
+
/* */
|
14
|
+
/* Principal Programmer(s): */
|
15
|
+
/* Gary D. Riley */
|
16
|
+
/* */
|
17
|
+
/* Contributing Programmer(s): */
|
18
|
+
/* Brian L. Dantes */
|
19
|
+
/* */
|
20
|
+
/* Revision History: */
|
21
|
+
/* */
|
22
|
+
/* 6.24: Removed DYNAMIC_SALIENCE and */
|
23
|
+
/* LOGICAL_DEPENDENCIES compilation flags. */
|
24
|
+
/* */
|
25
|
+
/* Removed CONFLICT_RESOLUTION_STRATEGIES */
|
26
|
+
/* compilation flag. */
|
27
|
+
/* */
|
28
|
+
/* Renamed BOOLEAN macro type to intBool. */
|
29
|
+
/* */
|
30
|
+
/* Corrected code to remove run-time program */
|
31
|
+
/* compiler warnings. */
|
32
|
+
/* */
|
33
|
+
/* 6.30: Removed conditional code for unsupported */
|
34
|
+
/* compilers/operating systems (IBM_MCW, */
|
35
|
+
/* MAC_MCW, and IBM_TBC). */
|
36
|
+
/* */
|
37
|
+
/* Added support for hashed memories. */
|
38
|
+
/* */
|
39
|
+
/* Added additional developer statistics to help */
|
40
|
+
/* analyze join network performance. */
|
41
|
+
/* */
|
42
|
+
/* Added salience groups to improve performance */
|
43
|
+
/* with large numbers of activations of different */
|
44
|
+
/* saliences. */
|
45
|
+
/* */
|
46
|
+
/* Added EnvGetDisjunctCount and */
|
47
|
+
/* EnvGetNthDisjunct functions. */
|
48
|
+
/* */
|
49
|
+
/* Added const qualifiers to remove C++ */
|
50
|
+
/* deprecation warnings. */
|
51
|
+
/* */
|
52
|
+
/* Converted API macros to function calls. */
|
53
|
+
/* */
|
54
|
+
/* Changed find construct functionality so that */
|
55
|
+
/* imported modules are search when locating a */
|
56
|
+
/* named construct. */
|
57
|
+
/* */
|
58
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
59
|
+
/* */
|
60
|
+
/* Added support for booleans with <stdbool.h>. */
|
61
|
+
/* */
|
62
|
+
/* Removed use of void pointers for specific */
|
63
|
+
/* data structures. */
|
64
|
+
/* */
|
65
|
+
/* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
|
66
|
+
/* */
|
67
|
+
/*************************************************************/
|
68
|
+
|
69
|
+
#include "setup.h"
|
70
|
+
|
71
|
+
#if DEFRULE_CONSTRUCT
|
72
|
+
|
73
|
+
#include <stdio.h>
|
74
|
+
|
75
|
+
#include "agenda.h"
|
76
|
+
#include "drive.h"
|
77
|
+
#include "engine.h"
|
78
|
+
#include "envrnmnt.h"
|
79
|
+
#include "memalloc.h"
|
80
|
+
#include "pattern.h"
|
81
|
+
#include "retract.h"
|
82
|
+
#include "reteutil.h"
|
83
|
+
#include "rulebsc.h"
|
84
|
+
#include "rulecom.h"
|
85
|
+
#include "rulepsr.h"
|
86
|
+
#include "ruledlt.h"
|
87
|
+
|
88
|
+
#if BLOAD || BLOAD_AND_BSAVE || BLOAD_ONLY
|
89
|
+
#include "bload.h"
|
90
|
+
#include "rulebin.h"
|
91
|
+
#endif
|
92
|
+
|
93
|
+
#if CONSTRUCT_COMPILER && (! RUN_TIME)
|
94
|
+
#include "rulecmp.h"
|
95
|
+
#endif
|
96
|
+
|
97
|
+
#include "ruledef.h"
|
98
|
+
|
99
|
+
/***************************************/
|
100
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
101
|
+
/***************************************/
|
102
|
+
|
103
|
+
static void *AllocateModule(Environment *);
|
104
|
+
static void ReturnModule(Environment *,void *);
|
105
|
+
static void InitializeDefruleModules(Environment *);
|
106
|
+
static void DeallocateDefruleData(Environment *);
|
107
|
+
static void DestroyDefruleAction(Environment *,ConstructHeader *,void *);
|
108
|
+
#if RUN_TIME
|
109
|
+
static void AddBetaMemoriesToRule(Environment *,struct joinNode *);
|
110
|
+
#endif
|
111
|
+
|
112
|
+
/**********************************************************/
|
113
|
+
/* InitializeDefrules: Initializes the defrule construct. */
|
114
|
+
/**********************************************************/
|
115
|
+
void InitializeDefrules(
|
116
|
+
Environment *theEnv)
|
117
|
+
{
|
118
|
+
unsigned long i;
|
119
|
+
AllocateEnvironmentData(theEnv,DEFRULE_DATA,sizeof(struct defruleData),DeallocateDefruleData);
|
120
|
+
|
121
|
+
InitializeEngine(theEnv);
|
122
|
+
InitializeAgenda(theEnv);
|
123
|
+
InitializePatterns(theEnv);
|
124
|
+
InitializeDefruleModules(theEnv);
|
125
|
+
|
126
|
+
AddReservedPatternSymbol(theEnv,"and",NULL);
|
127
|
+
AddReservedPatternSymbol(theEnv,"not",NULL);
|
128
|
+
AddReservedPatternSymbol(theEnv,"or",NULL);
|
129
|
+
AddReservedPatternSymbol(theEnv,"test",NULL);
|
130
|
+
AddReservedPatternSymbol(theEnv,"logical",NULL);
|
131
|
+
AddReservedPatternSymbol(theEnv,"exists",NULL);
|
132
|
+
AddReservedPatternSymbol(theEnv,"forall",NULL);
|
133
|
+
|
134
|
+
DefruleBasicCommands(theEnv);
|
135
|
+
|
136
|
+
DefruleCommands(theEnv);
|
137
|
+
|
138
|
+
DefruleData(theEnv)->DefruleConstruct =
|
139
|
+
AddConstruct(theEnv,"defrule","defrules",
|
140
|
+
ParseDefrule,
|
141
|
+
(FindConstructFunction *) FindDefrule,
|
142
|
+
GetConstructNamePointer,GetConstructPPForm,
|
143
|
+
GetConstructModuleItem,
|
144
|
+
(GetNextConstructFunction *) GetNextDefrule,
|
145
|
+
SetNextConstruct,
|
146
|
+
(IsConstructDeletableFunction *) DefruleIsDeletable,
|
147
|
+
(DeleteConstructFunction *) Undefrule,
|
148
|
+
(FreeConstructFunction *) ReturnDefrule);
|
149
|
+
|
150
|
+
DefruleData(theEnv)->AlphaMemoryTable = (ALPHA_MEMORY_HASH **)
|
151
|
+
gm2(theEnv,sizeof (ALPHA_MEMORY_HASH *) * ALPHA_MEMORY_HASH_SIZE);
|
152
|
+
|
153
|
+
for (i = 0; i < ALPHA_MEMORY_HASH_SIZE; i++) DefruleData(theEnv)->AlphaMemoryTable[i] = NULL;
|
154
|
+
|
155
|
+
DefruleData(theEnv)->BetaMemoryResizingFlag = true;
|
156
|
+
|
157
|
+
DefruleData(theEnv)->RightPrimeJoins = NULL;
|
158
|
+
DefruleData(theEnv)->LeftPrimeJoins = NULL;
|
159
|
+
}
|
160
|
+
|
161
|
+
/**************************************************/
|
162
|
+
/* DeallocateDefruleData: Deallocates environment */
|
163
|
+
/* data for the defrule construct. */
|
164
|
+
/**************************************************/
|
165
|
+
static void DeallocateDefruleData(
|
166
|
+
Environment *theEnv)
|
167
|
+
{
|
168
|
+
struct defruleModule *theModuleItem;
|
169
|
+
Defmodule *theModule;
|
170
|
+
Activation *theActivation, *tmpActivation;
|
171
|
+
struct salienceGroup *theGroup, *tmpGroup;
|
172
|
+
|
173
|
+
#if BLOAD || BLOAD_AND_BSAVE
|
174
|
+
if (Bloaded(theEnv))
|
175
|
+
{ return; }
|
176
|
+
#endif
|
177
|
+
|
178
|
+
DoForAllConstructs(theEnv,DestroyDefruleAction,
|
179
|
+
DefruleData(theEnv)->DefruleModuleIndex,false,NULL);
|
180
|
+
|
181
|
+
for (theModule = GetNextDefmodule(theEnv,NULL);
|
182
|
+
theModule != NULL;
|
183
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
184
|
+
{
|
185
|
+
theModuleItem = (struct defruleModule *)
|
186
|
+
GetModuleItem(theEnv,theModule,
|
187
|
+
DefruleData(theEnv)->DefruleModuleIndex);
|
188
|
+
|
189
|
+
theActivation = theModuleItem->agenda;
|
190
|
+
while (theActivation != NULL)
|
191
|
+
{
|
192
|
+
tmpActivation = theActivation->next;
|
193
|
+
|
194
|
+
rtn_struct(theEnv,activation,theActivation);
|
195
|
+
|
196
|
+
theActivation = tmpActivation;
|
197
|
+
}
|
198
|
+
|
199
|
+
theGroup = theModuleItem->groupings;
|
200
|
+
while (theGroup != NULL)
|
201
|
+
{
|
202
|
+
tmpGroup = theGroup->next;
|
203
|
+
|
204
|
+
rtn_struct(theEnv,salienceGroup,theGroup);
|
205
|
+
|
206
|
+
theGroup = tmpGroup;
|
207
|
+
}
|
208
|
+
|
209
|
+
#if ! RUN_TIME
|
210
|
+
rtn_struct(theEnv,defruleModule,theModuleItem);
|
211
|
+
#endif
|
212
|
+
}
|
213
|
+
|
214
|
+
rm(theEnv,DefruleData(theEnv)->AlphaMemoryTable,sizeof (ALPHA_MEMORY_HASH *) * ALPHA_MEMORY_HASH_SIZE);
|
215
|
+
}
|
216
|
+
|
217
|
+
/********************************************************/
|
218
|
+
/* DestroyDefruleAction: Action used to remove defrules */
|
219
|
+
/* as a result of DestroyEnvironment. */
|
220
|
+
/********************************************************/
|
221
|
+
static void DestroyDefruleAction(
|
222
|
+
Environment *theEnv,
|
223
|
+
ConstructHeader *theConstruct,
|
224
|
+
void *buffer)
|
225
|
+
{
|
226
|
+
#if MAC_XCD
|
227
|
+
#pragma unused(buffer)
|
228
|
+
#endif
|
229
|
+
Defrule *theDefrule = (Defrule *) theConstruct;
|
230
|
+
|
231
|
+
DestroyDefrule(theEnv,theDefrule);
|
232
|
+
}
|
233
|
+
|
234
|
+
/*****************************************************/
|
235
|
+
/* InitializeDefruleModules: Initializes the defrule */
|
236
|
+
/* construct for use with the defmodule construct. */
|
237
|
+
/*****************************************************/
|
238
|
+
static void InitializeDefruleModules(
|
239
|
+
Environment *theEnv)
|
240
|
+
{
|
241
|
+
DefruleData(theEnv)->DefruleModuleIndex = RegisterModuleItem(theEnv,"defrule",
|
242
|
+
AllocateModule,
|
243
|
+
ReturnModule,
|
244
|
+
#if BLOAD_AND_BSAVE || BLOAD || BLOAD_ONLY
|
245
|
+
BloadDefruleModuleReference,
|
246
|
+
#else
|
247
|
+
NULL,
|
248
|
+
#endif
|
249
|
+
#if CONSTRUCT_COMPILER && (! RUN_TIME)
|
250
|
+
DefruleCModuleReference,
|
251
|
+
#else
|
252
|
+
NULL,
|
253
|
+
#endif
|
254
|
+
(FindConstructFunction *) FindDefruleInModule);
|
255
|
+
}
|
256
|
+
|
257
|
+
/***********************************************/
|
258
|
+
/* AllocateModule: Allocates a defrule module. */
|
259
|
+
/***********************************************/
|
260
|
+
static void *AllocateModule(
|
261
|
+
Environment *theEnv)
|
262
|
+
{
|
263
|
+
struct defruleModule *theItem;
|
264
|
+
|
265
|
+
theItem = get_struct(theEnv,defruleModule);
|
266
|
+
theItem->agenda = NULL;
|
267
|
+
theItem->groupings = NULL;
|
268
|
+
return((void *) theItem);
|
269
|
+
}
|
270
|
+
|
271
|
+
/***********************************************/
|
272
|
+
/* ReturnModule: Deallocates a defrule module. */
|
273
|
+
/***********************************************/
|
274
|
+
static void ReturnModule(
|
275
|
+
Environment *theEnv,
|
276
|
+
void *theItem)
|
277
|
+
{
|
278
|
+
FreeConstructHeaderModule(theEnv,(struct defmoduleItemHeader *) theItem,DefruleData(theEnv)->DefruleConstruct);
|
279
|
+
rtn_struct(theEnv,defruleModule,theItem);
|
280
|
+
}
|
281
|
+
|
282
|
+
/************************************************************/
|
283
|
+
/* GetDefruleModuleItem: Returns a pointer to the defmodule */
|
284
|
+
/* item for the specified defrule or defmodule. */
|
285
|
+
/************************************************************/
|
286
|
+
struct defruleModule *GetDefruleModuleItem(
|
287
|
+
Environment *theEnv,
|
288
|
+
Defmodule *theModule)
|
289
|
+
{
|
290
|
+
return((struct defruleModule *) GetConstructModuleItemByIndex(theEnv,theModule,DefruleData(theEnv)->DefruleModuleIndex));
|
291
|
+
}
|
292
|
+
|
293
|
+
/****************************************************************/
|
294
|
+
/* FindDefrule: Searches for a defrule in the list of defrules. */
|
295
|
+
/* Returns a pointer to the defrule if found, otherwise NULL. */
|
296
|
+
/****************************************************************/
|
297
|
+
Defrule *FindDefrule(
|
298
|
+
Environment *theEnv,
|
299
|
+
const char *defruleName)
|
300
|
+
{
|
301
|
+
return (Defrule *) FindNamedConstructInModuleOrImports(theEnv,defruleName,DefruleData(theEnv)->DefruleConstruct);
|
302
|
+
}
|
303
|
+
|
304
|
+
/************************************************************************/
|
305
|
+
/* FindDefruleInModule: Searches for a defrule in the list of defrules. */
|
306
|
+
/* Returns a pointer to the defrule if found, otherwise NULL. */
|
307
|
+
/************************************************************************/
|
308
|
+
Defrule *FindDefruleInModule(
|
309
|
+
Environment *theEnv,
|
310
|
+
const char *defruleName)
|
311
|
+
{
|
312
|
+
return (Defrule *) FindNamedConstructInModule(theEnv,defruleName,DefruleData(theEnv)->DefruleConstruct);
|
313
|
+
}
|
314
|
+
|
315
|
+
/************************************************************/
|
316
|
+
/* GetNextDefrule: If passed a NULL pointer, returns the */
|
317
|
+
/* first defrule in the ListOfDefrules. Otherwise returns */
|
318
|
+
/* the next defrule following the defrule passed as an */
|
319
|
+
/* argument. */
|
320
|
+
/************************************************************/
|
321
|
+
Defrule *GetNextDefrule(
|
322
|
+
Environment *theEnv,
|
323
|
+
Defrule *defrulePtr)
|
324
|
+
{
|
325
|
+
return (Defrule *) GetNextConstructItem(theEnv,&defrulePtr->header,DefruleData(theEnv)->DefruleModuleIndex);
|
326
|
+
}
|
327
|
+
|
328
|
+
/******************************************************/
|
329
|
+
/* DefruleIsDeletable: Returns true if a particular */
|
330
|
+
/* defrule can be deleted, otherwise returns false. */
|
331
|
+
/******************************************************/
|
332
|
+
bool DefruleIsDeletable(
|
333
|
+
Defrule *theDefrule)
|
334
|
+
{
|
335
|
+
Environment *theEnv = theDefrule->header.env;
|
336
|
+
|
337
|
+
if (! ConstructsDeletable(theEnv))
|
338
|
+
{ return false; }
|
339
|
+
|
340
|
+
for ( ;
|
341
|
+
theDefrule != NULL;
|
342
|
+
theDefrule = theDefrule->disjunct)
|
343
|
+
{ if (theDefrule->executing) return false; }
|
344
|
+
|
345
|
+
if (EngineData(theEnv)->JoinOperationInProgress) return false;
|
346
|
+
|
347
|
+
return true;
|
348
|
+
}
|
349
|
+
|
350
|
+
/********************************************************/
|
351
|
+
/* GetDisjunctCount: Returns the number of disjuncts of */
|
352
|
+
/* a rule (permutations caused by the use of or CEs). */
|
353
|
+
/********************************************************/
|
354
|
+
long GetDisjunctCount(
|
355
|
+
Environment *theEnv,
|
356
|
+
Defrule *theDefrule)
|
357
|
+
{
|
358
|
+
long count = 0;
|
359
|
+
|
360
|
+
for ( ;
|
361
|
+
theDefrule != NULL;
|
362
|
+
theDefrule = theDefrule->disjunct)
|
363
|
+
{ count++; }
|
364
|
+
|
365
|
+
return(count);
|
366
|
+
}
|
367
|
+
|
368
|
+
/*******************************************************/
|
369
|
+
/* GetNthDisjunct: Returns the nth disjunct of a rule. */
|
370
|
+
/* The disjunct indices run from 1 to N rather than */
|
371
|
+
/* 0 to N - 1. */
|
372
|
+
/*******************************************************/
|
373
|
+
Defrule *GetNthDisjunct(
|
374
|
+
Environment *theEnv,
|
375
|
+
Defrule *theDefrule,
|
376
|
+
long index)
|
377
|
+
{
|
378
|
+
long count = 0;
|
379
|
+
|
380
|
+
for ( ;
|
381
|
+
theDefrule != NULL;
|
382
|
+
theDefrule = theDefrule->disjunct)
|
383
|
+
{
|
384
|
+
count++;
|
385
|
+
if (count == index)
|
386
|
+
{ return theDefrule; }
|
387
|
+
}
|
388
|
+
|
389
|
+
return NULL;
|
390
|
+
}
|
391
|
+
|
392
|
+
#if RUN_TIME
|
393
|
+
|
394
|
+
/******************************************/
|
395
|
+
/* DefruleRunTimeInitialize: Initializes */
|
396
|
+
/* defrule in a run-time module. */
|
397
|
+
/******************************************/
|
398
|
+
void DefruleRunTimeInitialize(
|
399
|
+
Environment *theEnv,
|
400
|
+
struct joinLink *rightPrime,
|
401
|
+
struct joinLink *leftPrime)
|
402
|
+
{
|
403
|
+
Defmodule *theModule;
|
404
|
+
Defrule *theRule, *theDisjunct;
|
405
|
+
|
406
|
+
DefruleData(theEnv)->RightPrimeJoins = rightPrime;
|
407
|
+
DefruleData(theEnv)->LeftPrimeJoins = leftPrime;
|
408
|
+
|
409
|
+
SaveCurrentModule(theEnv);
|
410
|
+
|
411
|
+
for (theModule = GetNextDefmodule(theEnv,NULL);
|
412
|
+
theModule != NULL;
|
413
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
414
|
+
{
|
415
|
+
SetCurrentModule(theEnv,theModule);
|
416
|
+
for (theRule = GetNextDefrule(theEnv,NULL);
|
417
|
+
theRule != NULL;
|
418
|
+
theRule = GetNextDefrule(theEnv,theRule))
|
419
|
+
{
|
420
|
+
for (theDisjunct = theRule;
|
421
|
+
theDisjunct != NULL;
|
422
|
+
theDisjunct = theDisjunct->disjunct)
|
423
|
+
{
|
424
|
+
theDisjunct->header.env = theEnv;
|
425
|
+
AddBetaMemoriesToRule(theEnv,theDisjunct->lastJoin);
|
426
|
+
}
|
427
|
+
}
|
428
|
+
}
|
429
|
+
|
430
|
+
RestoreCurrentModule(theEnv);
|
431
|
+
}
|
432
|
+
|
433
|
+
|
434
|
+
/**************************/
|
435
|
+
/* AddBetaMemoriesToRule: */
|
436
|
+
/**************************/
|
437
|
+
static void AddBetaMemoriesToRule(
|
438
|
+
Environment *theEnv,
|
439
|
+
struct joinNode *theNode)
|
440
|
+
{
|
441
|
+
AddBetaMemoriesToJoin(theEnv,theNode);
|
442
|
+
|
443
|
+
if (theNode->lastLevel != NULL)
|
444
|
+
{ AddBetaMemoriesToRule(theEnv,theNode->lastLevel); }
|
445
|
+
|
446
|
+
if (theNode->joinFromTheRight)
|
447
|
+
{ AddBetaMemoriesToRule(theEnv,(struct joinNode *) theNode->rightSideEntryStructure); }
|
448
|
+
}
|
449
|
+
|
450
|
+
#endif /* RUN_TIME */
|
451
|
+
|
452
|
+
#if RUN_TIME || BLOAD_ONLY || BLOAD || BLOAD_AND_BSAVE
|
453
|
+
|
454
|
+
/**************************/
|
455
|
+
/* AddBetaMemoriesToJoin: */
|
456
|
+
/**************************/
|
457
|
+
void AddBetaMemoriesToJoin(
|
458
|
+
Environment *theEnv,
|
459
|
+
struct joinNode *theNode)
|
460
|
+
{
|
461
|
+
if ((theNode->leftMemory != NULL) || (theNode->rightMemory != NULL))
|
462
|
+
{ return; }
|
463
|
+
|
464
|
+
if ((! theNode->firstJoin) || theNode->patternIsExists || theNode-> patternIsNegated || theNode->joinFromTheRight)
|
465
|
+
{
|
466
|
+
if (theNode->leftHash == NULL)
|
467
|
+
{
|
468
|
+
theNode->leftMemory = get_struct(theEnv,betaMemory);
|
469
|
+
theNode->leftMemory->beta = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *));
|
470
|
+
theNode->leftMemory->beta[0] = NULL;
|
471
|
+
theNode->leftMemory->size = 1;
|
472
|
+
theNode->leftMemory->count = 0;
|
473
|
+
theNode->leftMemory->last = NULL;
|
474
|
+
}
|
475
|
+
else
|
476
|
+
{
|
477
|
+
theNode->leftMemory = get_struct(theEnv,betaMemory);
|
478
|
+
theNode->leftMemory->beta = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *) * INITIAL_BETA_HASH_SIZE);
|
479
|
+
memset(theNode->leftMemory->beta,0,sizeof(struct partialMatch *) * INITIAL_BETA_HASH_SIZE);
|
480
|
+
theNode->leftMemory->size = INITIAL_BETA_HASH_SIZE;
|
481
|
+
theNode->leftMemory->count = 0;
|
482
|
+
theNode->leftMemory->last = NULL;
|
483
|
+
}
|
484
|
+
|
485
|
+
if (theNode->firstJoin && (theNode->patternIsExists || theNode-> patternIsNegated || theNode->joinFromTheRight))
|
486
|
+
{
|
487
|
+
theNode->leftMemory->beta[0] = CreateEmptyPartialMatch(theEnv);
|
488
|
+
theNode->leftMemory->beta[0]->owner = theNode;
|
489
|
+
}
|
490
|
+
}
|
491
|
+
else
|
492
|
+
{ theNode->leftMemory = NULL; }
|
493
|
+
|
494
|
+
if (theNode->joinFromTheRight)
|
495
|
+
{
|
496
|
+
if (theNode->leftHash == NULL)
|
497
|
+
{
|
498
|
+
theNode->rightMemory = get_struct(theEnv,betaMemory);
|
499
|
+
theNode->rightMemory->beta = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *));
|
500
|
+
theNode->rightMemory->last = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *));
|
501
|
+
theNode->rightMemory->beta[0] = NULL;
|
502
|
+
theNode->rightMemory->last[0] = NULL;
|
503
|
+
theNode->rightMemory->size = 1;
|
504
|
+
theNode->rightMemory->count = 0;
|
505
|
+
}
|
506
|
+
else
|
507
|
+
{
|
508
|
+
theNode->rightMemory = get_struct(theEnv,betaMemory);
|
509
|
+
theNode->rightMemory->beta = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *) * INITIAL_BETA_HASH_SIZE);
|
510
|
+
theNode->rightMemory->last = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *) * INITIAL_BETA_HASH_SIZE);
|
511
|
+
memset(theNode->rightMemory->beta,0,sizeof(struct partialMatch **) * INITIAL_BETA_HASH_SIZE);
|
512
|
+
memset(theNode->rightMemory->last,0,sizeof(struct partialMatch **) * INITIAL_BETA_HASH_SIZE);
|
513
|
+
theNode->rightMemory->size = INITIAL_BETA_HASH_SIZE;
|
514
|
+
theNode->rightMemory->count = 0;
|
515
|
+
}
|
516
|
+
}
|
517
|
+
else if (theNode->rightSideEntryStructure == NULL)
|
518
|
+
{
|
519
|
+
theNode->rightMemory = get_struct(theEnv,betaMemory);
|
520
|
+
theNode->rightMemory->beta = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *));
|
521
|
+
theNode->rightMemory->last = (struct partialMatch **) genalloc(theEnv,sizeof(struct partialMatch *));
|
522
|
+
theNode->rightMemory->beta[0] = CreateEmptyPartialMatch(theEnv);
|
523
|
+
theNode->rightMemory->beta[0]->owner = theNode;
|
524
|
+
theNode->rightMemory->beta[0]->rhsMemory = true;
|
525
|
+
theNode->rightMemory->last[0] = theNode->rightMemory->beta[0];
|
526
|
+
theNode->rightMemory->size = 1;
|
527
|
+
theNode->rightMemory->count = 1;
|
528
|
+
}
|
529
|
+
else
|
530
|
+
{ theNode->rightMemory = NULL; }
|
531
|
+
}
|
532
|
+
|
533
|
+
#endif /* RUN_TIME || BLOAD_ONLY || BLOAD || BLOAD_AND_BSAVE */
|
534
|
+
|
535
|
+
/*##################################*/
|
536
|
+
/* Additional Environment Functions */
|
537
|
+
/*##################################*/
|
538
|
+
|
539
|
+
const char *DefruleModule(
|
540
|
+
Defrule *theDefrule)
|
541
|
+
{
|
542
|
+
return GetConstructModuleName(&theDefrule->header);
|
543
|
+
}
|
544
|
+
|
545
|
+
const char *DefruleName(
|
546
|
+
Defrule *theDefrule)
|
547
|
+
{
|
548
|
+
return GetConstructNameString(&theDefrule->header);
|
549
|
+
}
|
550
|
+
|
551
|
+
const char *DefrulePPForm(
|
552
|
+
Defrule *theDefrule)
|
553
|
+
{
|
554
|
+
return GetConstructPPForm(&theDefrule->header);
|
555
|
+
}
|
556
|
+
|
557
|
+
#endif /* DEFRULE_CONSTRUCT */
|
558
|
+
|
559
|
+
|