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.
Files changed (346) hide show
  1. checksums.yaml +7 -0
  2. data/ext/clipsruby/agenda.c +1373 -0
  3. data/ext/clipsruby/agenda.h +169 -0
  4. data/ext/clipsruby/analysis.c +1142 -0
  5. data/ext/clipsruby/analysis.h +61 -0
  6. data/ext/clipsruby/argacces.c +526 -0
  7. data/ext/clipsruby/argacces.h +77 -0
  8. data/ext/clipsruby/bload.c +884 -0
  9. data/ext/clipsruby/bload.h +94 -0
  10. data/ext/clipsruby/bmathfun.c +557 -0
  11. data/ext/clipsruby/bmathfun.h +66 -0
  12. data/ext/clipsruby/bsave.c +634 -0
  13. data/ext/clipsruby/bsave.h +130 -0
  14. data/ext/clipsruby/classcom.c +976 -0
  15. data/ext/clipsruby/classcom.h +115 -0
  16. data/ext/clipsruby/classexm.c +1376 -0
  17. data/ext/clipsruby/classexm.h +97 -0
  18. data/ext/clipsruby/classfun.c +1392 -0
  19. data/ext/clipsruby/classfun.h +164 -0
  20. data/ext/clipsruby/classinf.c +1245 -0
  21. data/ext/clipsruby/classinf.h +94 -0
  22. data/ext/clipsruby/classini.c +843 -0
  23. data/ext/clipsruby/classini.h +75 -0
  24. data/ext/clipsruby/classpsr.c +957 -0
  25. data/ext/clipsruby/classpsr.h +73 -0
  26. data/ext/clipsruby/clips.h +133 -0
  27. data/ext/clipsruby/clipsruby.c +619 -0
  28. data/ext/clipsruby/clsltpsr.c +931 -0
  29. data/ext/clipsruby/clsltpsr.h +72 -0
  30. data/ext/clipsruby/commline.c +1217 -0
  31. data/ext/clipsruby/commline.h +131 -0
  32. data/ext/clipsruby/conscomp.c +1593 -0
  33. data/ext/clipsruby/conscomp.h +150 -0
  34. data/ext/clipsruby/constant.h +264 -0
  35. data/ext/clipsruby/constrct.c +1090 -0
  36. data/ext/clipsruby/constrct.h +216 -0
  37. data/ext/clipsruby/constrnt.c +554 -0
  38. data/ext/clipsruby/constrnt.h +132 -0
  39. data/ext/clipsruby/crstrtgy.c +1088 -0
  40. data/ext/clipsruby/crstrtgy.h +85 -0
  41. data/ext/clipsruby/cstrcbin.c +185 -0
  42. data/ext/clipsruby/cstrcbin.h +61 -0
  43. data/ext/clipsruby/cstrccmp.h +43 -0
  44. data/ext/clipsruby/cstrccom.c +1791 -0
  45. data/ext/clipsruby/cstrccom.h +115 -0
  46. data/ext/clipsruby/cstrcpsr.c +835 -0
  47. data/ext/clipsruby/cstrcpsr.h +97 -0
  48. data/ext/clipsruby/cstrnbin.c +282 -0
  49. data/ext/clipsruby/cstrnbin.h +55 -0
  50. data/ext/clipsruby/cstrnchk.c +826 -0
  51. data/ext/clipsruby/cstrnchk.h +91 -0
  52. data/ext/clipsruby/cstrncmp.c +238 -0
  53. data/ext/clipsruby/cstrncmp.h +57 -0
  54. data/ext/clipsruby/cstrnops.c +1176 -0
  55. data/ext/clipsruby/cstrnops.h +47 -0
  56. data/ext/clipsruby/cstrnpsr.c +1394 -0
  57. data/ext/clipsruby/cstrnpsr.h +88 -0
  58. data/ext/clipsruby/cstrnutl.c +564 -0
  59. data/ext/clipsruby/cstrnutl.h +54 -0
  60. data/ext/clipsruby/default.c +454 -0
  61. data/ext/clipsruby/default.h +57 -0
  62. data/ext/clipsruby/defins.c +971 -0
  63. data/ext/clipsruby/defins.h +127 -0
  64. data/ext/clipsruby/developr.c +677 -0
  65. data/ext/clipsruby/developr.h +69 -0
  66. data/ext/clipsruby/dffctbin.c +477 -0
  67. data/ext/clipsruby/dffctbin.h +76 -0
  68. data/ext/clipsruby/dffctbsc.c +308 -0
  69. data/ext/clipsruby/dffctbsc.h +72 -0
  70. data/ext/clipsruby/dffctcmp.c +297 -0
  71. data/ext/clipsruby/dffctcmp.h +44 -0
  72. data/ext/clipsruby/dffctdef.c +364 -0
  73. data/ext/clipsruby/dffctdef.h +104 -0
  74. data/ext/clipsruby/dffctpsr.c +179 -0
  75. data/ext/clipsruby/dffctpsr.h +49 -0
  76. data/ext/clipsruby/dffnxbin.c +520 -0
  77. data/ext/clipsruby/dffnxbin.h +67 -0
  78. data/ext/clipsruby/dffnxcmp.c +378 -0
  79. data/ext/clipsruby/dffnxcmp.h +54 -0
  80. data/ext/clipsruby/dffnxexe.c +241 -0
  81. data/ext/clipsruby/dffnxexe.h +58 -0
  82. data/ext/clipsruby/dffnxfun.c +1192 -0
  83. data/ext/clipsruby/dffnxfun.h +155 -0
  84. data/ext/clipsruby/dffnxpsr.c +514 -0
  85. data/ext/clipsruby/dffnxpsr.h +57 -0
  86. data/ext/clipsruby/dfinsbin.c +509 -0
  87. data/ext/clipsruby/dfinsbin.h +66 -0
  88. data/ext/clipsruby/dfinscmp.c +345 -0
  89. data/ext/clipsruby/dfinscmp.h +48 -0
  90. data/ext/clipsruby/drive.c +1191 -0
  91. data/ext/clipsruby/drive.h +65 -0
  92. data/ext/clipsruby/emathfun.c +1213 -0
  93. data/ext/clipsruby/emathfun.h +99 -0
  94. data/ext/clipsruby/engine.c +1568 -0
  95. data/ext/clipsruby/engine.h +203 -0
  96. data/ext/clipsruby/entities.h +276 -0
  97. data/ext/clipsruby/envrnbld.c +514 -0
  98. data/ext/clipsruby/envrnbld.h +40 -0
  99. data/ext/clipsruby/envrnmnt.c +257 -0
  100. data/ext/clipsruby/envrnmnt.h +112 -0
  101. data/ext/clipsruby/evaluatn.c +1736 -0
  102. data/ext/clipsruby/evaluatn.h +211 -0
  103. data/ext/clipsruby/expressn.c +494 -0
  104. data/ext/clipsruby/expressn.h +154 -0
  105. data/ext/clipsruby/exprnbin.c +538 -0
  106. data/ext/clipsruby/exprnbin.h +60 -0
  107. data/ext/clipsruby/exprnops.c +564 -0
  108. data/ext/clipsruby/exprnops.h +67 -0
  109. data/ext/clipsruby/exprnpsr.c +1112 -0
  110. data/ext/clipsruby/exprnpsr.h +98 -0
  111. data/ext/clipsruby/extconf.rb +2 -0
  112. data/ext/clipsruby/extnfunc.c +1015 -0
  113. data/ext/clipsruby/extnfunc.h +157 -0
  114. data/ext/clipsruby/factbin.c +447 -0
  115. data/ext/clipsruby/factbin.h +56 -0
  116. data/ext/clipsruby/factbld.c +1035 -0
  117. data/ext/clipsruby/factbld.h +63 -0
  118. data/ext/clipsruby/factcmp.c +386 -0
  119. data/ext/clipsruby/factcmp.h +46 -0
  120. data/ext/clipsruby/factcom.c +759 -0
  121. data/ext/clipsruby/factcom.h +80 -0
  122. data/ext/clipsruby/factfile.c +1761 -0
  123. data/ext/clipsruby/factfile.h +54 -0
  124. data/ext/clipsruby/factfun.c +682 -0
  125. data/ext/clipsruby/factfun.h +77 -0
  126. data/ext/clipsruby/factgen.c +1305 -0
  127. data/ext/clipsruby/factgen.h +229 -0
  128. data/ext/clipsruby/facthsh.c +438 -0
  129. data/ext/clipsruby/facthsh.h +81 -0
  130. data/ext/clipsruby/factlhs.c +250 -0
  131. data/ext/clipsruby/factlhs.h +54 -0
  132. data/ext/clipsruby/factmch.c +905 -0
  133. data/ext/clipsruby/factmch.h +68 -0
  134. data/ext/clipsruby/factmngr.c +3373 -0
  135. data/ext/clipsruby/factmngr.h +325 -0
  136. data/ext/clipsruby/factprt.c +498 -0
  137. data/ext/clipsruby/factprt.h +60 -0
  138. data/ext/clipsruby/factqpsr.c +796 -0
  139. data/ext/clipsruby/factqpsr.h +61 -0
  140. data/ext/clipsruby/factqury.c +1267 -0
  141. data/ext/clipsruby/factqury.h +112 -0
  142. data/ext/clipsruby/factrete.c +978 -0
  143. data/ext/clipsruby/factrete.h +70 -0
  144. data/ext/clipsruby/factrhs.c +667 -0
  145. data/ext/clipsruby/factrhs.h +55 -0
  146. data/ext/clipsruby/filecom.c +353 -0
  147. data/ext/clipsruby/filecom.h +137 -0
  148. data/ext/clipsruby/filertr.c +481 -0
  149. data/ext/clipsruby/filertr.h +94 -0
  150. data/ext/clipsruby/fileutil.c +1020 -0
  151. data/ext/clipsruby/fileutil.h +50 -0
  152. data/ext/clipsruby/generate.c +1079 -0
  153. data/ext/clipsruby/generate.h +57 -0
  154. data/ext/clipsruby/genrcbin.c +902 -0
  155. data/ext/clipsruby/genrcbin.h +69 -0
  156. data/ext/clipsruby/genrccmp.c +640 -0
  157. data/ext/clipsruby/genrccmp.h +59 -0
  158. data/ext/clipsruby/genrccom.c +2017 -0
  159. data/ext/clipsruby/genrccom.h +119 -0
  160. data/ext/clipsruby/genrcexe.c +737 -0
  161. data/ext/clipsruby/genrcexe.h +73 -0
  162. data/ext/clipsruby/genrcfun.c +890 -0
  163. data/ext/clipsruby/genrcfun.h +185 -0
  164. data/ext/clipsruby/genrcpsr.c +1618 -0
  165. data/ext/clipsruby/genrcpsr.h +80 -0
  166. data/ext/clipsruby/globlbin.c +458 -0
  167. data/ext/clipsruby/globlbin.h +71 -0
  168. data/ext/clipsruby/globlbsc.c +361 -0
  169. data/ext/clipsruby/globlbsc.h +83 -0
  170. data/ext/clipsruby/globlcmp.c +330 -0
  171. data/ext/clipsruby/globlcmp.h +52 -0
  172. data/ext/clipsruby/globlcom.c +289 -0
  173. data/ext/clipsruby/globlcom.h +63 -0
  174. data/ext/clipsruby/globldef.c +1087 -0
  175. data/ext/clipsruby/globldef.h +151 -0
  176. data/ext/clipsruby/globlpsr.c +530 -0
  177. data/ext/clipsruby/globlpsr.h +59 -0
  178. data/ext/clipsruby/immthpsr.c +431 -0
  179. data/ext/clipsruby/immthpsr.h +55 -0
  180. data/ext/clipsruby/incrrset.c +530 -0
  181. data/ext/clipsruby/incrrset.h +73 -0
  182. data/ext/clipsruby/inherpsr.c +850 -0
  183. data/ext/clipsruby/inherpsr.h +52 -0
  184. data/ext/clipsruby/inscom.c +2076 -0
  185. data/ext/clipsruby/inscom.h +182 -0
  186. data/ext/clipsruby/insfile.c +1764 -0
  187. data/ext/clipsruby/insfile.h +96 -0
  188. data/ext/clipsruby/insfun.c +1451 -0
  189. data/ext/clipsruby/insfun.h +134 -0
  190. data/ext/clipsruby/insmngr.c +2550 -0
  191. data/ext/clipsruby/insmngr.h +125 -0
  192. data/ext/clipsruby/insmoddp.c +1041 -0
  193. data/ext/clipsruby/insmoddp.h +91 -0
  194. data/ext/clipsruby/insmult.c +804 -0
  195. data/ext/clipsruby/insmult.h +62 -0
  196. data/ext/clipsruby/inspsr.c +602 -0
  197. data/ext/clipsruby/inspsr.h +60 -0
  198. data/ext/clipsruby/insquery.c +1278 -0
  199. data/ext/clipsruby/insquery.h +115 -0
  200. data/ext/clipsruby/insqypsr.c +729 -0
  201. data/ext/clipsruby/insqypsr.h +63 -0
  202. data/ext/clipsruby/iofun.c +2045 -0
  203. data/ext/clipsruby/iofun.h +116 -0
  204. data/ext/clipsruby/lgcldpnd.c +644 -0
  205. data/ext/clipsruby/lgcldpnd.h +75 -0
  206. data/ext/clipsruby/main.c +112 -0
  207. data/ext/clipsruby/match.h +142 -0
  208. data/ext/clipsruby/memalloc.c +481 -0
  209. data/ext/clipsruby/memalloc.h +197 -0
  210. data/ext/clipsruby/miscfun.c +1801 -0
  211. data/ext/clipsruby/miscfun.h +132 -0
  212. data/ext/clipsruby/modulbin.c +607 -0
  213. data/ext/clipsruby/modulbin.h +84 -0
  214. data/ext/clipsruby/modulbsc.c +347 -0
  215. data/ext/clipsruby/modulbsc.h +67 -0
  216. data/ext/clipsruby/modulcmp.c +499 -0
  217. data/ext/clipsruby/modulcmp.h +54 -0
  218. data/ext/clipsruby/moduldef.c +817 -0
  219. data/ext/clipsruby/moduldef.h +271 -0
  220. data/ext/clipsruby/modulpsr.c +1150 -0
  221. data/ext/clipsruby/modulpsr.h +69 -0
  222. data/ext/clipsruby/modulutl.c +1036 -0
  223. data/ext/clipsruby/modulutl.h +84 -0
  224. data/ext/clipsruby/msgcom.c +1221 -0
  225. data/ext/clipsruby/msgcom.h +125 -0
  226. data/ext/clipsruby/msgfun.c +1076 -0
  227. data/ext/clipsruby/msgfun.h +118 -0
  228. data/ext/clipsruby/msgpass.c +1441 -0
  229. data/ext/clipsruby/msgpass.h +103 -0
  230. data/ext/clipsruby/msgpsr.c +698 -0
  231. data/ext/clipsruby/msgpsr.h +73 -0
  232. data/ext/clipsruby/multifld.c +1404 -0
  233. data/ext/clipsruby/multifld.h +130 -0
  234. data/ext/clipsruby/multifun.c +2182 -0
  235. data/ext/clipsruby/multifun.h +102 -0
  236. data/ext/clipsruby/network.h +142 -0
  237. data/ext/clipsruby/objbin.c +1522 -0
  238. data/ext/clipsruby/objbin.h +79 -0
  239. data/ext/clipsruby/objcmp.c +1507 -0
  240. data/ext/clipsruby/objcmp.h +71 -0
  241. data/ext/clipsruby/object.h +260 -0
  242. data/ext/clipsruby/objrtbin.c +701 -0
  243. data/ext/clipsruby/objrtbin.h +79 -0
  244. data/ext/clipsruby/objrtbld.c +2393 -0
  245. data/ext/clipsruby/objrtbld.h +66 -0
  246. data/ext/clipsruby/objrtcmp.c +734 -0
  247. data/ext/clipsruby/objrtcmp.h +66 -0
  248. data/ext/clipsruby/objrtfnx.c +1330 -0
  249. data/ext/clipsruby/objrtfnx.h +222 -0
  250. data/ext/clipsruby/objrtgen.c +736 -0
  251. data/ext/clipsruby/objrtgen.h +63 -0
  252. data/ext/clipsruby/objrtmch.c +1524 -0
  253. data/ext/clipsruby/objrtmch.h +160 -0
  254. data/ext/clipsruby/parsefun.c +415 -0
  255. data/ext/clipsruby/parsefun.h +67 -0
  256. data/ext/clipsruby/pattern.c +1265 -0
  257. data/ext/clipsruby/pattern.h +163 -0
  258. data/ext/clipsruby/pprint.c +328 -0
  259. data/ext/clipsruby/pprint.h +79 -0
  260. data/ext/clipsruby/prccode.c +1478 -0
  261. data/ext/clipsruby/prccode.h +145 -0
  262. data/ext/clipsruby/prcdrfun.c +640 -0
  263. data/ext/clipsruby/prcdrfun.h +95 -0
  264. data/ext/clipsruby/prcdrpsr.c +1068 -0
  265. data/ext/clipsruby/prcdrpsr.h +79 -0
  266. data/ext/clipsruby/prdctfun.c +869 -0
  267. data/ext/clipsruby/prdctfun.h +77 -0
  268. data/ext/clipsruby/prntutil.c +878 -0
  269. data/ext/clipsruby/prntutil.h +125 -0
  270. data/ext/clipsruby/proflfun.c +827 -0
  271. data/ext/clipsruby/proflfun.h +118 -0
  272. data/ext/clipsruby/reorder.c +2082 -0
  273. data/ext/clipsruby/reorder.h +172 -0
  274. data/ext/clipsruby/reteutil.c +1732 -0
  275. data/ext/clipsruby/reteutil.h +111 -0
  276. data/ext/clipsruby/retract.c +710 -0
  277. data/ext/clipsruby/retract.h +74 -0
  278. data/ext/clipsruby/router.c +737 -0
  279. data/ext/clipsruby/router.h +147 -0
  280. data/ext/clipsruby/rulebin.c +1136 -0
  281. data/ext/clipsruby/rulebin.h +153 -0
  282. data/ext/clipsruby/rulebld.c +1328 -0
  283. data/ext/clipsruby/rulebld.h +62 -0
  284. data/ext/clipsruby/rulebsc.c +517 -0
  285. data/ext/clipsruby/rulebsc.h +91 -0
  286. data/ext/clipsruby/rulecmp.c +733 -0
  287. data/ext/clipsruby/rulecmp.h +63 -0
  288. data/ext/clipsruby/rulecom.c +1583 -0
  289. data/ext/clipsruby/rulecom.h +116 -0
  290. data/ext/clipsruby/rulecstr.c +892 -0
  291. data/ext/clipsruby/rulecstr.h +53 -0
  292. data/ext/clipsruby/ruledef.c +559 -0
  293. data/ext/clipsruby/ruledef.h +179 -0
  294. data/ext/clipsruby/ruledlt.c +599 -0
  295. data/ext/clipsruby/ruledlt.h +58 -0
  296. data/ext/clipsruby/rulelhs.c +1216 -0
  297. data/ext/clipsruby/rulelhs.h +52 -0
  298. data/ext/clipsruby/rulepsr.c +1073 -0
  299. data/ext/clipsruby/rulepsr.h +61 -0
  300. data/ext/clipsruby/scanner.c +856 -0
  301. data/ext/clipsruby/scanner.h +112 -0
  302. data/ext/clipsruby/setup.h +488 -0
  303. data/ext/clipsruby/sortfun.c +433 -0
  304. data/ext/clipsruby/sortfun.h +55 -0
  305. data/ext/clipsruby/strngfun.c +1173 -0
  306. data/ext/clipsruby/strngfun.h +96 -0
  307. data/ext/clipsruby/strngrtr.c +523 -0
  308. data/ext/clipsruby/strngrtr.h +97 -0
  309. data/ext/clipsruby/symblbin.c +648 -0
  310. data/ext/clipsruby/symblbin.h +64 -0
  311. data/ext/clipsruby/symblcmp.c +893 -0
  312. data/ext/clipsruby/symblcmp.h +61 -0
  313. data/ext/clipsruby/symbol.c +1961 -0
  314. data/ext/clipsruby/symbol.h +243 -0
  315. data/ext/clipsruby/sysdep.c +894 -0
  316. data/ext/clipsruby/sysdep.h +164 -0
  317. data/ext/clipsruby/textpro.c +1388 -0
  318. data/ext/clipsruby/textpro.h +77 -0
  319. data/ext/clipsruby/tmpltbin.c +609 -0
  320. data/ext/clipsruby/tmpltbin.h +108 -0
  321. data/ext/clipsruby/tmpltbsc.c +327 -0
  322. data/ext/clipsruby/tmpltbsc.h +87 -0
  323. data/ext/clipsruby/tmpltcmp.c +450 -0
  324. data/ext/clipsruby/tmpltcmp.h +57 -0
  325. data/ext/clipsruby/tmpltdef.c +584 -0
  326. data/ext/clipsruby/tmpltdef.h +155 -0
  327. data/ext/clipsruby/tmpltfun.c +2477 -0
  328. data/ext/clipsruby/tmpltfun.h +122 -0
  329. data/ext/clipsruby/tmpltlhs.c +379 -0
  330. data/ext/clipsruby/tmpltlhs.h +50 -0
  331. data/ext/clipsruby/tmpltpsr.c +819 -0
  332. data/ext/clipsruby/tmpltpsr.h +59 -0
  333. data/ext/clipsruby/tmpltrhs.c +595 -0
  334. data/ext/clipsruby/tmpltrhs.h +55 -0
  335. data/ext/clipsruby/tmpltutl.c +637 -0
  336. data/ext/clipsruby/tmpltutl.h +82 -0
  337. data/ext/clipsruby/userdata.c +156 -0
  338. data/ext/clipsruby/userdata.h +72 -0
  339. data/ext/clipsruby/userfunctions.c +70 -0
  340. data/ext/clipsruby/usrsetup.h +7 -0
  341. data/ext/clipsruby/utility.c +1594 -0
  342. data/ext/clipsruby/utility.h +250 -0
  343. data/ext/clipsruby/watch.c +865 -0
  344. data/ext/clipsruby/watch.h +124 -0
  345. data/lib/clipsruby.rb +1 -0
  346. 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
+