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,701 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 02/03/18 */
|
5
|
+
/* */
|
6
|
+
/* */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: Binary Load/Save Functions Defrule */
|
11
|
+
/* Object Pattern Network */
|
12
|
+
/* */
|
13
|
+
/* Principal Programmer(s): */
|
14
|
+
/* Brian L. Dantes */
|
15
|
+
/* */
|
16
|
+
/* Contributing Programmer(s): */
|
17
|
+
/* */
|
18
|
+
/* Revision History: */
|
19
|
+
/* */
|
20
|
+
/* 6.24: Converted INSTANCE_PATTERN_MATCHING to */
|
21
|
+
/* DEFRULE_CONSTRUCT. */
|
22
|
+
/* */
|
23
|
+
/* ResetObjectMatchTimeTags did not pass in the */
|
24
|
+
/* environment argument when BLOAD_ONLY was set. */
|
25
|
+
/* */
|
26
|
+
/* 6.30: Changed integer type/precision. */
|
27
|
+
/* */
|
28
|
+
/* Added support for hashed comparisons to */
|
29
|
+
/* constants. */
|
30
|
+
/* */
|
31
|
+
/* Added support for hashed alpha memories. */
|
32
|
+
/* */
|
33
|
+
/* 6.31: Optimization for marking relevant alpha nodes */
|
34
|
+
/* in the object pattern network. */
|
35
|
+
/* */
|
36
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
37
|
+
/* */
|
38
|
+
/* Added support for booleans with <stdbool.h>. */
|
39
|
+
/* */
|
40
|
+
/* Removed use of void pointers for specific */
|
41
|
+
/* data structures. */
|
42
|
+
/* */
|
43
|
+
/*************************************************************/
|
44
|
+
|
45
|
+
/* =========================================
|
46
|
+
*****************************************
|
47
|
+
EXTERNAL DEFINITIONS
|
48
|
+
=========================================
|
49
|
+
***************************************** */
|
50
|
+
#include "setup.h"
|
51
|
+
|
52
|
+
#if DEFRULE_CONSTRUCT && OBJECT_SYSTEM && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)
|
53
|
+
|
54
|
+
#include "bload.h"
|
55
|
+
#include "bsave.h"
|
56
|
+
#include "classfun.h"
|
57
|
+
#include "envrnmnt.h"
|
58
|
+
#include "memalloc.h"
|
59
|
+
#include "insfun.h"
|
60
|
+
#include "objrtmch.h"
|
61
|
+
#include "pattern.h"
|
62
|
+
#include "reteutil.h"
|
63
|
+
#include "rulebin.h"
|
64
|
+
|
65
|
+
#include "objrtbin.h"
|
66
|
+
|
67
|
+
/* =========================================
|
68
|
+
*****************************************
|
69
|
+
MACROS AND TYPES
|
70
|
+
=========================================
|
71
|
+
***************************************** */
|
72
|
+
typedef unsigned long UNLN;
|
73
|
+
|
74
|
+
typedef struct bsaveObjectPatternNode
|
75
|
+
{
|
76
|
+
unsigned multifieldNode : 1;
|
77
|
+
unsigned endSlot : 1;
|
78
|
+
unsigned selector : 1;
|
79
|
+
unsigned whichField : 8;
|
80
|
+
unsigned short leaveFields;
|
81
|
+
unsigned short slotNameID;
|
82
|
+
unsigned long networkTest,
|
83
|
+
nextLevel,
|
84
|
+
lastLevel,
|
85
|
+
leftNode,
|
86
|
+
rightNode,
|
87
|
+
alphaNode;
|
88
|
+
} BSAVE_OBJECT_PATTERN_NODE;
|
89
|
+
|
90
|
+
typedef struct bsaveObjectAlphaNode
|
91
|
+
{
|
92
|
+
struct bsavePatternNodeHeader header;
|
93
|
+
unsigned long classbmp,
|
94
|
+
slotbmp,
|
95
|
+
patternNode,
|
96
|
+
nxtInGroup,
|
97
|
+
nxtTerminal;
|
98
|
+
} BSAVE_OBJECT_ALPHA_NODE;
|
99
|
+
|
100
|
+
typedef struct bsaveClassAlphaLink
|
101
|
+
{
|
102
|
+
unsigned long alphaNode;
|
103
|
+
unsigned long next;
|
104
|
+
} BSAVE_CLASS_ALPHA_LINK;
|
105
|
+
|
106
|
+
#define BsaveObjectPatternIndex(op) ((op != NULL) ? op->bsaveID : ULONG_MAX)
|
107
|
+
#define BsaveObjectAlphaIndex(ap) ((ap != NULL) ? ap->bsaveID : ULONG_MAX)
|
108
|
+
#define BsaveClassAlphaIndex(cp) ((cp != NULL) ? cp->bsaveID : ULONG_MAX)
|
109
|
+
|
110
|
+
#define ObjectPatternPointer(i) ((i == ULONG_MAX) ? NULL : (OBJECT_PATTERN_NODE *) &ObjectReteBinaryData(theEnv)->PatternArray[i])
|
111
|
+
#define ObjectAlphaPointer(i) ((i == ULONG_MAX) ? NULL : (OBJECT_ALPHA_NODE *) &ObjectReteBinaryData(theEnv)->AlphaArray[i])
|
112
|
+
|
113
|
+
/***************************************/
|
114
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
115
|
+
/***************************************/
|
116
|
+
|
117
|
+
#if BLOAD_AND_BSAVE
|
118
|
+
static void BsaveObjectPatternsFind(Environment *);
|
119
|
+
static void MarkDefclassItems(Environment *,struct constructHeader *,void *);
|
120
|
+
static void BsaveStorageObjectPatterns(Environment *,FILE *);
|
121
|
+
static void BsaveObjectPatterns(Environment *,FILE *);
|
122
|
+
static void BsaveAlphaLinks(Environment *,struct constructHeader *,void *);
|
123
|
+
#endif
|
124
|
+
static void BloadStorageObjectPatterns(Environment *);
|
125
|
+
static void BloadObjectPatterns(Environment *);
|
126
|
+
static void UpdateAlpha(Environment *,void *,unsigned long);
|
127
|
+
static void UpdatePattern(Environment *,void *,unsigned long);
|
128
|
+
static void UpdateLink(Environment *,void *,unsigned long);
|
129
|
+
static void ClearBloadObjectPatterns(Environment *);
|
130
|
+
static void DeallocateObjectReteBinaryData(Environment *);
|
131
|
+
|
132
|
+
/* =========================================
|
133
|
+
*****************************************
|
134
|
+
EXTERNALLY VISIBLE FUNCTIONS
|
135
|
+
=========================================
|
136
|
+
***************************************** */
|
137
|
+
|
138
|
+
/***********************************************************
|
139
|
+
NAME : SetupObjectPatternsBload
|
140
|
+
DESCRIPTION : Initializes data structures and
|
141
|
+
routines for binary loads of
|
142
|
+
generic function constructs
|
143
|
+
INPUTS : None
|
144
|
+
RETURNS : Nothing useful
|
145
|
+
SIDE EFFECTS : Routines defined and structures initialized
|
146
|
+
NOTES : None
|
147
|
+
***********************************************************/
|
148
|
+
void SetupObjectPatternsBload(
|
149
|
+
Environment *theEnv)
|
150
|
+
{
|
151
|
+
AllocateEnvironmentData(theEnv,OBJECTRETEBIN_DATA,sizeof(struct objectReteBinaryData),DeallocateObjectReteBinaryData);
|
152
|
+
|
153
|
+
#if BLOAD_AND_BSAVE
|
154
|
+
AddBinaryItem(theEnv,"object patterns",0,BsaveObjectPatternsFind,NULL,
|
155
|
+
BsaveStorageObjectPatterns,BsaveObjectPatterns,
|
156
|
+
BloadStorageObjectPatterns,BloadObjectPatterns,
|
157
|
+
ClearBloadObjectPatterns);
|
158
|
+
#endif
|
159
|
+
#if BLOAD || BLOAD_ONLY
|
160
|
+
AddBinaryItem(theEnv,"object patterns",0,NULL,NULL,NULL,NULL,
|
161
|
+
BloadStorageObjectPatterns,BloadObjectPatterns,
|
162
|
+
ClearBloadObjectPatterns);
|
163
|
+
#endif
|
164
|
+
}
|
165
|
+
|
166
|
+
/***********************************************************/
|
167
|
+
/* DeallocateObjectReteBinaryData: Deallocates environment */
|
168
|
+
/* data for object rete binary functionality. */
|
169
|
+
/***********************************************************/
|
170
|
+
static void DeallocateObjectReteBinaryData(
|
171
|
+
Environment *theEnv)
|
172
|
+
{
|
173
|
+
#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME)
|
174
|
+
size_t space;
|
175
|
+
unsigned long i;
|
176
|
+
|
177
|
+
for (i = 0; i < ObjectReteBinaryData(theEnv)->AlphaNodeCount; i++)
|
178
|
+
{ DestroyAlphaMemory(theEnv,&ObjectReteBinaryData(theEnv)->AlphaArray[i].header,false); }
|
179
|
+
|
180
|
+
space = ObjectReteBinaryData(theEnv)->AlphaNodeCount * sizeof(struct objectAlphaNode);
|
181
|
+
if (space != 0) genfree(theEnv,ObjectReteBinaryData(theEnv)->AlphaArray,space);
|
182
|
+
|
183
|
+
space = ObjectReteBinaryData(theEnv)->PatternNodeCount * sizeof(struct objectPatternNode);
|
184
|
+
if (space != 0) genfree(theEnv,ObjectReteBinaryData(theEnv)->PatternArray,space);
|
185
|
+
|
186
|
+
space = ObjectReteBinaryData(theEnv)->AlphaLinkCount * sizeof(struct classAlphaLink);
|
187
|
+
if (space != 0) genfree(theEnv,ObjectReteBinaryData(theEnv)->AlphaLinkArray,space);
|
188
|
+
#endif
|
189
|
+
}
|
190
|
+
|
191
|
+
/* =========================================
|
192
|
+
*****************************************
|
193
|
+
INTERNALLY VISIBLE FUNCTIONS
|
194
|
+
=========================================
|
195
|
+
***************************************** */
|
196
|
+
|
197
|
+
#if BLOAD_AND_BSAVE
|
198
|
+
|
199
|
+
/***************************************************
|
200
|
+
NAME : BsaveObjectPatternsFind
|
201
|
+
DESCRIPTION : Sets the Bsave IDs for the object
|
202
|
+
pattern data structures and
|
203
|
+
determines how much space
|
204
|
+
(including padding) is necessary
|
205
|
+
for the alpha node bitmPS
|
206
|
+
INPUTS : None
|
207
|
+
RETURNS : Nothing useful
|
208
|
+
SIDE EFFECTS : Counts written
|
209
|
+
NOTES : None
|
210
|
+
***************************************************/
|
211
|
+
static void BsaveObjectPatternsFind(
|
212
|
+
Environment *theEnv)
|
213
|
+
{
|
214
|
+
OBJECT_ALPHA_NODE *alphaPtr;
|
215
|
+
OBJECT_PATTERN_NODE *patternPtr;
|
216
|
+
|
217
|
+
SaveBloadCount(theEnv,ObjectReteBinaryData(theEnv)->AlphaNodeCount);
|
218
|
+
SaveBloadCount(theEnv,ObjectReteBinaryData(theEnv)->PatternNodeCount);
|
219
|
+
SaveBloadCount(theEnv,ObjectReteBinaryData(theEnv)->AlphaLinkCount);
|
220
|
+
|
221
|
+
ObjectReteBinaryData(theEnv)->AlphaLinkCount = 0L;
|
222
|
+
DoForAllConstructs(theEnv,MarkDefclassItems,DefclassData(theEnv)->DefclassModuleIndex,false,NULL);
|
223
|
+
|
224
|
+
ObjectReteBinaryData(theEnv)->AlphaNodeCount = 0L;
|
225
|
+
alphaPtr = ObjectNetworkTerminalPointer(theEnv);
|
226
|
+
while (alphaPtr != NULL)
|
227
|
+
{
|
228
|
+
alphaPtr->classbmp->neededBitMap = true;
|
229
|
+
if (alphaPtr->slotbmp != NULL)
|
230
|
+
alphaPtr->slotbmp->neededBitMap = true;
|
231
|
+
alphaPtr->bsaveID = ObjectReteBinaryData(theEnv)->AlphaNodeCount++;
|
232
|
+
alphaPtr = alphaPtr->nxtTerminal;
|
233
|
+
}
|
234
|
+
|
235
|
+
ObjectReteBinaryData(theEnv)->PatternNodeCount = 0L;
|
236
|
+
patternPtr = ObjectNetworkPointer(theEnv);
|
237
|
+
while (patternPtr != NULL)
|
238
|
+
{
|
239
|
+
patternPtr->bsaveID = ObjectReteBinaryData(theEnv)->PatternNodeCount++;
|
240
|
+
if (patternPtr->nextLevel == NULL)
|
241
|
+
{
|
242
|
+
while (patternPtr->rightNode == NULL)
|
243
|
+
{
|
244
|
+
patternPtr = patternPtr->lastLevel;
|
245
|
+
if (patternPtr == NULL)
|
246
|
+
return;
|
247
|
+
}
|
248
|
+
patternPtr = patternPtr->rightNode;
|
249
|
+
}
|
250
|
+
else
|
251
|
+
patternPtr = patternPtr->nextLevel;
|
252
|
+
}
|
253
|
+
}
|
254
|
+
|
255
|
+
/***************************************************
|
256
|
+
NAME : MarkDefclassItems
|
257
|
+
DESCRIPTION : Marks needed items for a defclass
|
258
|
+
using rules
|
259
|
+
INPUTS : 1) The defclass
|
260
|
+
2) User buffer (ignored)
|
261
|
+
RETURNS : Nothing useful
|
262
|
+
SIDE EFFECTS : Bsave indices set
|
263
|
+
NOTES : None
|
264
|
+
***************************************************/
|
265
|
+
static void MarkDefclassItems(
|
266
|
+
Environment *theEnv,
|
267
|
+
struct constructHeader *theDefclass,
|
268
|
+
void *buf)
|
269
|
+
{
|
270
|
+
#if MAC_XCD
|
271
|
+
#pragma unused(buf)
|
272
|
+
#endif
|
273
|
+
Defclass *cls = (Defclass *) theDefclass;
|
274
|
+
CLASS_ALPHA_LINK *alphaLink;
|
275
|
+
|
276
|
+
for (alphaLink = cls->relevant_terminal_alpha_nodes;
|
277
|
+
alphaLink != NULL;
|
278
|
+
alphaLink = alphaLink->next)
|
279
|
+
{ alphaLink->bsaveID = ObjectReteBinaryData(theEnv)->AlphaLinkCount++; }
|
280
|
+
}
|
281
|
+
|
282
|
+
/****************************************************
|
283
|
+
NAME : BsaveStorageObjectPatterns
|
284
|
+
DESCRIPTION : Writes out the number of bytes
|
285
|
+
required for object pattern bitmaps,
|
286
|
+
and the number of object pattern
|
287
|
+
alpha an intermediate nodes
|
288
|
+
INPUTS : Bsave file stream pointer
|
289
|
+
RETURNS : Nothing useful
|
290
|
+
SIDE EFFECTS : Counts written
|
291
|
+
NOTES : None
|
292
|
+
****************************************************/
|
293
|
+
static void BsaveStorageObjectPatterns(
|
294
|
+
Environment *theEnv,
|
295
|
+
FILE *fp)
|
296
|
+
{
|
297
|
+
size_t space;
|
298
|
+
|
299
|
+
space = sizeof(long) * 3;
|
300
|
+
GenWrite(&space,sizeof(size_t),fp);
|
301
|
+
GenWrite(&ObjectReteBinaryData(theEnv)->AlphaNodeCount,sizeof(long),fp);
|
302
|
+
GenWrite(&ObjectReteBinaryData(theEnv)->PatternNodeCount,sizeof(long),fp);
|
303
|
+
GenWrite(&ObjectReteBinaryData(theEnv)->AlphaLinkCount,sizeof(long),fp);
|
304
|
+
}
|
305
|
+
|
306
|
+
/***************************************************
|
307
|
+
NAME : BsaveObjectPatterns
|
308
|
+
DESCRIPTION : Writes out object pattern data
|
309
|
+
structures to binary save file
|
310
|
+
INPUTS : Bsave file stream pointer
|
311
|
+
RETURNS : Nothing useful
|
312
|
+
SIDE EFFECTS : Data structures written
|
313
|
+
NOTES : Extra padding written with alpha
|
314
|
+
node bitmaps to ensure correct
|
315
|
+
alignment of structues on bload
|
316
|
+
***************************************************/
|
317
|
+
static void BsaveObjectPatterns(
|
318
|
+
Environment *theEnv,
|
319
|
+
FILE *fp)
|
320
|
+
{
|
321
|
+
size_t space;
|
322
|
+
OBJECT_ALPHA_NODE *alphaPtr;
|
323
|
+
OBJECT_PATTERN_NODE *patternPtr;
|
324
|
+
BSAVE_OBJECT_ALPHA_NODE dummyAlpha;
|
325
|
+
BSAVE_OBJECT_PATTERN_NODE dummyPattern;
|
326
|
+
|
327
|
+
space = (sizeof(BSAVE_OBJECT_ALPHA_NODE) * ObjectReteBinaryData(theEnv)->AlphaNodeCount) +
|
328
|
+
(sizeof(BSAVE_OBJECT_PATTERN_NODE) * ObjectReteBinaryData(theEnv)->PatternNodeCount) +
|
329
|
+
(sizeof(BSAVE_CLASS_ALPHA_LINK) * ObjectReteBinaryData(theEnv)->AlphaLinkCount);
|
330
|
+
GenWrite(&space,sizeof(size_t),fp);
|
331
|
+
|
332
|
+
DoForAllConstructs(theEnv,BsaveAlphaLinks,DefclassData(theEnv)->DefclassModuleIndex,false,fp);
|
333
|
+
|
334
|
+
/* ==========================================
|
335
|
+
Write out the alpha terminal pattern nodes
|
336
|
+
========================================== */
|
337
|
+
alphaPtr = ObjectNetworkTerminalPointer(theEnv);
|
338
|
+
while (alphaPtr != NULL)
|
339
|
+
{
|
340
|
+
AssignBsavePatternHeaderValues(theEnv,&dummyAlpha.header,&alphaPtr->header);
|
341
|
+
dummyAlpha.classbmp = alphaPtr->classbmp->bucket;
|
342
|
+
if (alphaPtr->slotbmp != NULL)
|
343
|
+
dummyAlpha.slotbmp = alphaPtr->slotbmp->bucket;
|
344
|
+
else
|
345
|
+
dummyAlpha.slotbmp = ULONG_MAX;
|
346
|
+
dummyAlpha.patternNode = BsaveObjectPatternIndex(alphaPtr->patternNode);
|
347
|
+
dummyAlpha.nxtInGroup = BsaveObjectAlphaIndex(alphaPtr->nxtInGroup);
|
348
|
+
dummyAlpha.nxtTerminal = BsaveObjectAlphaIndex(alphaPtr->nxtTerminal);
|
349
|
+
GenWrite(&dummyAlpha,sizeof(BSAVE_OBJECT_ALPHA_NODE),fp);
|
350
|
+
alphaPtr = alphaPtr->nxtTerminal;
|
351
|
+
}
|
352
|
+
|
353
|
+
/* ========================================
|
354
|
+
Write out the intermediate pattern nodes
|
355
|
+
======================================== */
|
356
|
+
patternPtr = ObjectNetworkPointer(theEnv);
|
357
|
+
while (patternPtr != NULL)
|
358
|
+
{
|
359
|
+
dummyPattern.multifieldNode = patternPtr->multifieldNode;
|
360
|
+
dummyPattern.whichField = patternPtr->whichField;
|
361
|
+
dummyPattern.leaveFields = patternPtr->leaveFields;
|
362
|
+
dummyPattern.endSlot = patternPtr->endSlot;
|
363
|
+
dummyPattern.selector = patternPtr->selector;
|
364
|
+
dummyPattern.slotNameID = patternPtr->slotNameID;
|
365
|
+
dummyPattern.networkTest = HashedExpressionIndex(theEnv,patternPtr->networkTest);
|
366
|
+
dummyPattern.nextLevel = BsaveObjectPatternIndex(patternPtr->nextLevel);
|
367
|
+
dummyPattern.lastLevel = BsaveObjectPatternIndex(patternPtr->lastLevel);
|
368
|
+
dummyPattern.leftNode = BsaveObjectPatternIndex(patternPtr->leftNode);
|
369
|
+
dummyPattern.rightNode = BsaveObjectPatternIndex(patternPtr->rightNode);
|
370
|
+
dummyPattern.alphaNode = BsaveObjectAlphaIndex(patternPtr->alphaNode);
|
371
|
+
GenWrite(&dummyPattern,sizeof(BSAVE_OBJECT_PATTERN_NODE),fp);
|
372
|
+
|
373
|
+
if (patternPtr->nextLevel == NULL)
|
374
|
+
{
|
375
|
+
while (patternPtr->rightNode == NULL)
|
376
|
+
{
|
377
|
+
patternPtr = patternPtr->lastLevel;
|
378
|
+
if (patternPtr == NULL)
|
379
|
+
{
|
380
|
+
RestoreBloadCount(theEnv,&ObjectReteBinaryData(theEnv)->AlphaNodeCount);
|
381
|
+
RestoreBloadCount(theEnv,&ObjectReteBinaryData(theEnv)->PatternNodeCount);
|
382
|
+
RestoreBloadCount(theEnv,&ObjectReteBinaryData(theEnv)->AlphaLinkCount);
|
383
|
+
return;
|
384
|
+
}
|
385
|
+
}
|
386
|
+
patternPtr = patternPtr->rightNode;
|
387
|
+
}
|
388
|
+
else
|
389
|
+
patternPtr = patternPtr->nextLevel;
|
390
|
+
}
|
391
|
+
|
392
|
+
RestoreBloadCount(theEnv,&ObjectReteBinaryData(theEnv)->AlphaNodeCount);
|
393
|
+
RestoreBloadCount(theEnv,&ObjectReteBinaryData(theEnv)->PatternNodeCount);
|
394
|
+
RestoreBloadCount(theEnv,&ObjectReteBinaryData(theEnv)->AlphaLinkCount);
|
395
|
+
}
|
396
|
+
|
397
|
+
/***************************************************
|
398
|
+
NAME : BsaveAlphaLinks
|
399
|
+
DESCRIPTION : Writes class alpha links binary data
|
400
|
+
INPUTS : 1) The defclass
|
401
|
+
2) The binary file pointer
|
402
|
+
RETURNS : Nothing useful
|
403
|
+
SIDE EFFECTS : Defclass alpha links binary data written
|
404
|
+
NOTES : None
|
405
|
+
***************************************************/
|
406
|
+
static void BsaveAlphaLinks(
|
407
|
+
Environment *theEnv,
|
408
|
+
struct constructHeader *theDefclass,
|
409
|
+
void *buf)
|
410
|
+
{
|
411
|
+
Defclass *cls = (Defclass *) theDefclass;
|
412
|
+
BSAVE_CLASS_ALPHA_LINK dummy_alpha_link;
|
413
|
+
CLASS_ALPHA_LINK *alphaLink;
|
414
|
+
|
415
|
+
for (alphaLink = cls->relevant_terminal_alpha_nodes;
|
416
|
+
alphaLink != NULL;
|
417
|
+
alphaLink = alphaLink->next)
|
418
|
+
{
|
419
|
+
dummy_alpha_link.alphaNode = alphaLink->alphaNode->bsaveID;
|
420
|
+
|
421
|
+
if (alphaLink->next != NULL)
|
422
|
+
{ dummy_alpha_link.next = alphaLink->next->bsaveID; }
|
423
|
+
else
|
424
|
+
{ dummy_alpha_link.next = ULONG_MAX; }
|
425
|
+
|
426
|
+
GenWrite((void *) &dummy_alpha_link,sizeof(BSAVE_CLASS_ALPHA_LINK),(FILE *) buf);
|
427
|
+
}
|
428
|
+
}
|
429
|
+
|
430
|
+
#endif
|
431
|
+
|
432
|
+
/***************************************************
|
433
|
+
NAME : BloadStorageObjectPatterns
|
434
|
+
DESCRIPTION : Reads in the storage requirements
|
435
|
+
for the object patterns in this
|
436
|
+
bload image
|
437
|
+
INPUTS : None
|
438
|
+
RETURNS : Nothing useful
|
439
|
+
SIDE EFFECTS : Counts read and arrays allocated
|
440
|
+
NOTES : None
|
441
|
+
***************************************************/
|
442
|
+
static void BloadStorageObjectPatterns(
|
443
|
+
Environment *theEnv)
|
444
|
+
{
|
445
|
+
size_t space;
|
446
|
+
unsigned long counts[3];
|
447
|
+
|
448
|
+
GenReadBinary(theEnv,&space,sizeof(size_t));
|
449
|
+
GenReadBinary(theEnv,counts,space);
|
450
|
+
ObjectReteBinaryData(theEnv)->AlphaNodeCount = counts[0];
|
451
|
+
ObjectReteBinaryData(theEnv)->PatternNodeCount = counts[1];
|
452
|
+
ObjectReteBinaryData(theEnv)->AlphaLinkCount = counts[2];
|
453
|
+
|
454
|
+
if (ObjectReteBinaryData(theEnv)->AlphaNodeCount == 0L)
|
455
|
+
ObjectReteBinaryData(theEnv)->AlphaArray = NULL;
|
456
|
+
else
|
457
|
+
{
|
458
|
+
space = (ObjectReteBinaryData(theEnv)->AlphaNodeCount * sizeof(OBJECT_ALPHA_NODE));
|
459
|
+
ObjectReteBinaryData(theEnv)->AlphaArray = (OBJECT_ALPHA_NODE *) genalloc(theEnv,space);
|
460
|
+
}
|
461
|
+
|
462
|
+
if (ObjectReteBinaryData(theEnv)->PatternNodeCount == 0L)
|
463
|
+
ObjectReteBinaryData(theEnv)->PatternArray = NULL;
|
464
|
+
else
|
465
|
+
{
|
466
|
+
space = (ObjectReteBinaryData(theEnv)->PatternNodeCount * sizeof(OBJECT_PATTERN_NODE));
|
467
|
+
ObjectReteBinaryData(theEnv)->PatternArray = (OBJECT_PATTERN_NODE *) genalloc(theEnv,space);
|
468
|
+
}
|
469
|
+
|
470
|
+
if (ObjectReteBinaryData(theEnv)->AlphaLinkCount == 0L)
|
471
|
+
ObjectReteBinaryData(theEnv)->AlphaLinkArray = NULL;
|
472
|
+
else
|
473
|
+
{
|
474
|
+
space = (ObjectReteBinaryData(theEnv)->AlphaLinkCount * sizeof(CLASS_ALPHA_LINK));
|
475
|
+
ObjectReteBinaryData(theEnv)->AlphaLinkArray = (CLASS_ALPHA_LINK *) genalloc(theEnv,space);
|
476
|
+
}
|
477
|
+
}
|
478
|
+
|
479
|
+
/****************************************************
|
480
|
+
NAME : BloadObjectPatterns
|
481
|
+
DESCRIPTION : Reads in all object pattern
|
482
|
+
data structures from binary
|
483
|
+
image and updates pointers
|
484
|
+
INPUTS : None
|
485
|
+
RETURNS : Nothing useful
|
486
|
+
SIDE EFFECTS : Binary data structures updated
|
487
|
+
NOTES : Assumes storage allocated previously
|
488
|
+
****************************************************/
|
489
|
+
static void BloadObjectPatterns(
|
490
|
+
Environment *theEnv)
|
491
|
+
{
|
492
|
+
size_t space;
|
493
|
+
unsigned long i;
|
494
|
+
|
495
|
+
GenReadBinary(theEnv,&space,sizeof(size_t));
|
496
|
+
if (space == 0L)
|
497
|
+
return;
|
498
|
+
|
499
|
+
/* ================================================
|
500
|
+
Read in the alpha and intermediate pattern nodes
|
501
|
+
================================================ */
|
502
|
+
|
503
|
+
BloadandRefresh(theEnv,ObjectReteBinaryData(theEnv)->AlphaLinkCount,sizeof(BSAVE_CLASS_ALPHA_LINK),UpdateLink);
|
504
|
+
BloadandRefresh(theEnv,ObjectReteBinaryData(theEnv)->AlphaNodeCount,sizeof(BSAVE_OBJECT_ALPHA_NODE),UpdateAlpha);
|
505
|
+
BloadandRefresh(theEnv,ObjectReteBinaryData(theEnv)->PatternNodeCount,sizeof(BSAVE_OBJECT_PATTERN_NODE),UpdatePattern);
|
506
|
+
|
507
|
+
for (i = 0; i < ObjectReteBinaryData(theEnv)->PatternNodeCount; i++)
|
508
|
+
{
|
509
|
+
if ((ObjectReteBinaryData(theEnv)->PatternArray[i].lastLevel != NULL) &&
|
510
|
+
(ObjectReteBinaryData(theEnv)->PatternArray[i].lastLevel->selector))
|
511
|
+
{
|
512
|
+
AddHashedPatternNode(theEnv,ObjectReteBinaryData(theEnv)->PatternArray[i].lastLevel,
|
513
|
+
&ObjectReteBinaryData(theEnv)->PatternArray[i],
|
514
|
+
ObjectReteBinaryData(theEnv)->PatternArray[i].networkTest->type,
|
515
|
+
ObjectReteBinaryData(theEnv)->PatternArray[i].networkTest->value);
|
516
|
+
}
|
517
|
+
}
|
518
|
+
|
519
|
+
/* =======================
|
520
|
+
Set the global pointers
|
521
|
+
======================= */
|
522
|
+
SetObjectNetworkTerminalPointer(theEnv,(OBJECT_ALPHA_NODE *) &ObjectReteBinaryData(theEnv)->AlphaArray[0]);
|
523
|
+
SetObjectNetworkPointer(theEnv,(OBJECT_PATTERN_NODE *) &ObjectReteBinaryData(theEnv)->PatternArray[0]);
|
524
|
+
}
|
525
|
+
|
526
|
+
/***************************************************
|
527
|
+
NAME : UpdateAlpha
|
528
|
+
DESCRIPTION : Updates all the pointers for an
|
529
|
+
alpha node based on the binary
|
530
|
+
image indices
|
531
|
+
INPUTS : 1) A pointer to the binary
|
532
|
+
image alpha node buffer
|
533
|
+
2) The index of the actual
|
534
|
+
alpha node in the array
|
535
|
+
RETURNS : Nothing useful
|
536
|
+
SIDE EFFECTS : Alpha node updated
|
537
|
+
NOTES : None
|
538
|
+
***************************************************/
|
539
|
+
static void UpdateAlpha(
|
540
|
+
Environment *theEnv,
|
541
|
+
void *buf,
|
542
|
+
unsigned long obji)
|
543
|
+
{
|
544
|
+
BSAVE_OBJECT_ALPHA_NODE *bap;
|
545
|
+
OBJECT_ALPHA_NODE *ap;
|
546
|
+
|
547
|
+
bap = (BSAVE_OBJECT_ALPHA_NODE *) buf;
|
548
|
+
ap = (OBJECT_ALPHA_NODE *) &ObjectReteBinaryData(theEnv)->AlphaArray[obji];
|
549
|
+
|
550
|
+
UpdatePatternNodeHeader(theEnv,&ap->header,&bap->header);
|
551
|
+
ap->matchTimeTag = 0L;
|
552
|
+
ap->classbmp = BitMapPointer(bap->classbmp);
|
553
|
+
if (bap->slotbmp != ULONG_MAX)
|
554
|
+
{
|
555
|
+
ap->slotbmp = BitMapPointer(bap->slotbmp);
|
556
|
+
IncrementBitMapCount(ap->slotbmp);
|
557
|
+
}
|
558
|
+
else
|
559
|
+
ap->slotbmp = NULL;
|
560
|
+
IncrementBitMapCount(ap->classbmp);
|
561
|
+
ap->patternNode = ObjectPatternPointer(bap->patternNode);
|
562
|
+
ap->nxtInGroup = ObjectAlphaPointer(bap->nxtInGroup);
|
563
|
+
ap->nxtTerminal = ObjectAlphaPointer(bap->nxtTerminal);
|
564
|
+
ap->bsaveID = 0L;
|
565
|
+
}
|
566
|
+
|
567
|
+
/***************************************************
|
568
|
+
NAME : UpdatePattern
|
569
|
+
DESCRIPTION : Updates all the pointers for a
|
570
|
+
pattern node based on the binary
|
571
|
+
image indices
|
572
|
+
INPUTS : 1) A pointer to the binary
|
573
|
+
image pattern node buffer
|
574
|
+
2) The index of the actual
|
575
|
+
pattern node in the array
|
576
|
+
RETURNS : Nothing useful
|
577
|
+
SIDE EFFECTS : Pattern node updated
|
578
|
+
NOTES : None
|
579
|
+
***************************************************/
|
580
|
+
static void UpdatePattern(
|
581
|
+
Environment *theEnv,
|
582
|
+
void *buf,
|
583
|
+
unsigned long obji)
|
584
|
+
{
|
585
|
+
BSAVE_OBJECT_PATTERN_NODE *bop;
|
586
|
+
OBJECT_PATTERN_NODE *op;
|
587
|
+
|
588
|
+
bop = (BSAVE_OBJECT_PATTERN_NODE *) buf;
|
589
|
+
op = (OBJECT_PATTERN_NODE *) &ObjectReteBinaryData(theEnv)->PatternArray[obji];
|
590
|
+
|
591
|
+
op->blocked = false;
|
592
|
+
op->multifieldNode = bop->multifieldNode;
|
593
|
+
op->whichField = bop->whichField;
|
594
|
+
op->leaveFields = bop->leaveFields;
|
595
|
+
op->endSlot = bop->endSlot;
|
596
|
+
op->selector = bop->selector;
|
597
|
+
op->matchTimeTag = 0L;
|
598
|
+
op->slotNameID = bop->slotNameID;
|
599
|
+
op->networkTest = HashedExpressionPointer(bop->networkTest);
|
600
|
+
op->nextLevel = ObjectPatternPointer(bop->nextLevel);
|
601
|
+
op->lastLevel = ObjectPatternPointer(bop->lastLevel);
|
602
|
+
op->leftNode = ObjectPatternPointer(bop->leftNode);
|
603
|
+
op->rightNode = ObjectPatternPointer(bop->rightNode);
|
604
|
+
op->alphaNode = ObjectAlphaPointer(bop->alphaNode);
|
605
|
+
op->bsaveID = 0L;
|
606
|
+
}
|
607
|
+
|
608
|
+
/***************************************************
|
609
|
+
NAME : UpdateLink
|
610
|
+
DESCRIPTION : Updates all the pointers for a
|
611
|
+
pattern node based on the binary
|
612
|
+
image indices
|
613
|
+
INPUTS : 1) A pointer to the binary
|
614
|
+
image pattern node buffer
|
615
|
+
2) The index of the actual
|
616
|
+
pattern node in the array
|
617
|
+
RETURNS : Nothing useful
|
618
|
+
SIDE EFFECTS : Pattern node updated
|
619
|
+
NOTES : None
|
620
|
+
***************************************************/
|
621
|
+
static void UpdateLink(
|
622
|
+
Environment *theEnv,
|
623
|
+
void *buf,
|
624
|
+
unsigned long obji)
|
625
|
+
{
|
626
|
+
BSAVE_CLASS_ALPHA_LINK *bal;
|
627
|
+
CLASS_ALPHA_LINK *al;
|
628
|
+
|
629
|
+
bal = (BSAVE_CLASS_ALPHA_LINK *) buf;
|
630
|
+
al = (CLASS_ALPHA_LINK *) &ObjectReteBinaryData(theEnv)->AlphaLinkArray[obji];
|
631
|
+
|
632
|
+
al->alphaNode = ObjectAlphaPointer(bal->alphaNode);
|
633
|
+
al->next = ClassAlphaPointer(bal->next);
|
634
|
+
al->bsaveID = 0L;
|
635
|
+
}
|
636
|
+
|
637
|
+
/***************************************************
|
638
|
+
NAME : ClearBloadObjectPatterns
|
639
|
+
DESCRIPTION : Releases all emmory associated
|
640
|
+
with binary image object patterns
|
641
|
+
INPUTS : None
|
642
|
+
RETURNS : Nothing useful
|
643
|
+
SIDE EFFECTS : Memory released and global
|
644
|
+
network pointers set to NULL
|
645
|
+
NOTES : None
|
646
|
+
***************************************************/
|
647
|
+
static void ClearBloadObjectPatterns(
|
648
|
+
Environment *theEnv)
|
649
|
+
{
|
650
|
+
size_t space;
|
651
|
+
unsigned long i;
|
652
|
+
|
653
|
+
for (i = 0; i < ObjectReteBinaryData(theEnv)->PatternNodeCount; i++)
|
654
|
+
{
|
655
|
+
if ((ObjectReteBinaryData(theEnv)->PatternArray[i].lastLevel != NULL) &&
|
656
|
+
(ObjectReteBinaryData(theEnv)->PatternArray[i].lastLevel->selector))
|
657
|
+
{
|
658
|
+
RemoveHashedPatternNode(theEnv,ObjectReteBinaryData(theEnv)->PatternArray[i].lastLevel,
|
659
|
+
&ObjectReteBinaryData(theEnv)->PatternArray[i],
|
660
|
+
ObjectReteBinaryData(theEnv)->PatternArray[i].networkTest->type,
|
661
|
+
ObjectReteBinaryData(theEnv)->PatternArray[i].networkTest->value);
|
662
|
+
}
|
663
|
+
}
|
664
|
+
|
665
|
+
/* ================================================
|
666
|
+
All instances have been deleted by this point
|
667
|
+
so we don't need to worry about clearing partial
|
668
|
+
matches
|
669
|
+
================================================ */
|
670
|
+
for (i = 0L ; i < ObjectReteBinaryData(theEnv)->AlphaNodeCount ; i++)
|
671
|
+
{
|
672
|
+
DecrementBitMapReferenceCount(theEnv,ObjectReteBinaryData(theEnv)->AlphaArray[i].classbmp);
|
673
|
+
if (ObjectReteBinaryData(theEnv)->AlphaArray[i].slotbmp != NULL)
|
674
|
+
DecrementBitMapReferenceCount(theEnv,ObjectReteBinaryData(theEnv)->AlphaArray[i].slotbmp);
|
675
|
+
}
|
676
|
+
|
677
|
+
if (ObjectReteBinaryData(theEnv)->AlphaNodeCount != 0L)
|
678
|
+
{
|
679
|
+
space = (ObjectReteBinaryData(theEnv)->AlphaNodeCount * sizeof(OBJECT_ALPHA_NODE));
|
680
|
+
genfree(theEnv,ObjectReteBinaryData(theEnv)->AlphaArray,space);
|
681
|
+
ObjectReteBinaryData(theEnv)->AlphaArray = NULL;
|
682
|
+
ObjectReteBinaryData(theEnv)->AlphaNodeCount = 0;
|
683
|
+
space = (ObjectReteBinaryData(theEnv)->PatternNodeCount * sizeof(OBJECT_PATTERN_NODE));
|
684
|
+
genfree(theEnv,ObjectReteBinaryData(theEnv)->PatternArray,space);
|
685
|
+
ObjectReteBinaryData(theEnv)->PatternArray = NULL;
|
686
|
+
ObjectReteBinaryData(theEnv)->PatternNodeCount = 0;
|
687
|
+
space = (ObjectReteBinaryData(theEnv)->AlphaLinkCount * sizeof(CLASS_ALPHA_LINK));
|
688
|
+
genfree(theEnv,(void *) ObjectReteBinaryData(theEnv)->AlphaLinkArray,space);
|
689
|
+
ObjectReteBinaryData(theEnv)->AlphaLinkArray = NULL;
|
690
|
+
ObjectReteBinaryData(theEnv)->AlphaLinkCount = 0;
|
691
|
+
}
|
692
|
+
|
693
|
+
SetObjectNetworkTerminalPointer(theEnv,NULL);
|
694
|
+
SetObjectNetworkPointer(theEnv,NULL);
|
695
|
+
#if BLOAD_ONLY
|
696
|
+
ResetObjectMatchTimeTags(theEnv);
|
697
|
+
#endif
|
698
|
+
}
|
699
|
+
|
700
|
+
#endif
|
701
|
+
|