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,229 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.40 07/30/16 */
5
+ /* */
6
+ /* FACT RETE FUNCTION GENERATION HEADER FILE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: */
11
+ /* */
12
+ /* Principal Programmer(s): */
13
+ /* Gary D. Riley */
14
+ /* */
15
+ /* Contributing Programmer(s): */
16
+ /* */
17
+ /* Revision History: */
18
+ /* */
19
+ /* 6.30: Support for performance optimizations. */
20
+ /* */
21
+ /* Increased maximum values for pattern/slot */
22
+ /* indices. */
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_factgen
36
+
37
+ #pragma once
38
+
39
+ #define _H_factgen
40
+
41
+ #include "reorder.h"
42
+
43
+ /**********************************************************/
44
+ /* factGetVarPN1Call: This structure is used to store the */
45
+ /* arguments to the most general extraction routine for */
46
+ /* retrieving a variable from the fact pattern network. */
47
+ /**********************************************************/
48
+ struct factGetVarPN1Call
49
+ {
50
+ unsigned int factAddress : 1;
51
+ unsigned int allFields : 1;
52
+ unsigned short whichField;
53
+ unsigned short whichSlot;
54
+ };
55
+
56
+ /***********************************************************/
57
+ /* factGetVarPN2Call: This structure is used to store the */
58
+ /* arguments to the most specific extraction routine for */
59
+ /* retrieving a variable from the fact pattern network. */
60
+ /* It is used for retrieving the single value stored in */
61
+ /* a single field slot (the slot index can be used to */
62
+ /* directly to retrieve the value from the fact array). */
63
+ /***********************************************************/
64
+ struct factGetVarPN2Call
65
+ {
66
+ unsigned short whichSlot;
67
+ };
68
+
69
+ /**********************************************************/
70
+ /* factGetVarPN3Call: */
71
+ /**********************************************************/
72
+ struct factGetVarPN3Call
73
+ {
74
+ unsigned int fromBeginning : 1;
75
+ unsigned int fromEnd : 1;
76
+ unsigned short beginOffset;
77
+ unsigned short endOffset;
78
+ unsigned short whichSlot;
79
+ };
80
+
81
+ /**************************************************************/
82
+ /* factConstantPN1Call: Used for testing for a constant value */
83
+ /* in the fact pattern network. Compare the value of a */
84
+ /* single field slot to a constant. */
85
+ /**************************************************************/
86
+ struct factConstantPN1Call
87
+ {
88
+ unsigned int testForEquality : 1;
89
+ unsigned short whichSlot;
90
+ };
91
+
92
+ /******************************************************************/
93
+ /* factConstantPN2Call: Used for testing for a constant value in */
94
+ /* the fact pattern network. Compare the value of a multifield */
95
+ /* slot to a constant (where the value retrieved for comparison */
96
+ /* from the slot contains no multifields before or only one */
97
+ /* multifield before and none after). */
98
+ /******************************************************************/
99
+ struct factConstantPN2Call
100
+ {
101
+ unsigned int testForEquality : 1;
102
+ unsigned int fromBeginning : 1;
103
+ unsigned short offset;
104
+ unsigned short whichSlot;
105
+ };
106
+
107
+ /**********************************************************/
108
+ /* factGetVarJN1Call: This structure is used to store the */
109
+ /* arguments to the most general extraction routine for */
110
+ /* retrieving a fact variable from the join network. */
111
+ /**********************************************************/
112
+ struct factGetVarJN1Call
113
+ {
114
+ unsigned int factAddress : 1;
115
+ unsigned int allFields : 1;
116
+ unsigned int lhs : 1;
117
+ unsigned int rhs : 1;
118
+ unsigned short whichPattern;
119
+ unsigned short whichSlot;
120
+ unsigned short whichField;
121
+ };
122
+
123
+ /**********************************************************/
124
+ /* factGetVarJN2Call: */
125
+ /**********************************************************/
126
+ struct factGetVarJN2Call
127
+ {
128
+ unsigned int lhs : 1;
129
+ unsigned int rhs : 1;
130
+ unsigned short whichPattern;
131
+ unsigned short whichSlot;
132
+ };
133
+
134
+ /**********************************************************/
135
+ /* factGetVarJN3Call: */
136
+ /**********************************************************/
137
+ struct factGetVarJN3Call
138
+ {
139
+ unsigned int fromBeginning : 1;
140
+ unsigned int fromEnd : 1;
141
+ unsigned int lhs : 1;
142
+ unsigned int rhs : 1;
143
+ unsigned short beginOffset;
144
+ unsigned short endOffset;
145
+ unsigned short whichPattern;
146
+ unsigned short whichSlot;
147
+ };
148
+
149
+ /**********************************************************/
150
+ /* factCompVarsPN1Call: */
151
+ /**********************************************************/
152
+ struct factCompVarsPN1Call
153
+ {
154
+ unsigned int pass : 1;
155
+ unsigned int fail : 1;
156
+ unsigned short field1;
157
+ unsigned short field2;
158
+ };
159
+
160
+ /**********************************************************/
161
+ /* factCompVarsJN1Call: */
162
+ /**********************************************************/
163
+ struct factCompVarsJN1Call
164
+ {
165
+ unsigned int pass : 1;
166
+ unsigned int fail : 1;
167
+ unsigned int p1lhs: 1;
168
+ unsigned int p1rhs: 1;
169
+ unsigned int p2lhs: 1;
170
+ unsigned int p2rhs: 1;
171
+ unsigned short pattern1;
172
+ unsigned short pattern2;
173
+ unsigned short slot1;
174
+ unsigned short slot2;
175
+ };
176
+
177
+ /**********************************************************/
178
+ /* factCompVarsJN2Call: */
179
+ /**********************************************************/
180
+ struct factCompVarsJN2Call
181
+ {
182
+ unsigned int pass : 1;
183
+ unsigned int fail : 1;
184
+ unsigned int p1lhs: 1;
185
+ unsigned int p1rhs: 1;
186
+ unsigned int p2lhs: 1;
187
+ unsigned int p2rhs: 1;
188
+ unsigned int fromBeginning1 : 1;
189
+ unsigned int fromBeginning2 : 1;
190
+ unsigned short offset1;
191
+ unsigned short offset2;
192
+ unsigned short pattern1;
193
+ unsigned short pattern2;
194
+ unsigned short slot1;
195
+ unsigned short slot2;
196
+ };
197
+
198
+ /**********************************************************/
199
+ /* factCheckLengthPNCall: This structure is used to store */
200
+ /* the arguments to the routine for determining if the */
201
+ /* length of a multifield slot is equal or greater than */
202
+ /* a specified value. */
203
+ /**********************************************************/
204
+
205
+ struct factCheckLengthPNCall
206
+ {
207
+ unsigned int exactly : 1;
208
+ unsigned short minLength;
209
+ unsigned short whichSlot;
210
+ };
211
+
212
+ /****************************************/
213
+ /* GLOBAL EXTERNAL FUNCTION DEFINITIONS */
214
+ /****************************************/
215
+
216
+ void InitializeFactReteFunctions(Environment *);
217
+ struct expr *FactPNVariableComparison(Environment *,struct lhsParseNode *,
218
+ struct lhsParseNode *);
219
+ struct expr *FactJNVariableComparison(Environment *,struct lhsParseNode *,
220
+ struct lhsParseNode *,bool);
221
+ void FactReplaceGetvar(Environment *,struct expr *,struct lhsParseNode *,int);
222
+ void FactReplaceGetfield(Environment *,struct expr *,struct lhsParseNode *);
223
+ struct expr *FactGenPNConstant(Environment *,struct lhsParseNode *);
224
+ struct expr *FactGenGetfield(Environment *,struct lhsParseNode *);
225
+ struct expr *FactGenGetvar(Environment *,struct lhsParseNode *,int);
226
+ struct expr *FactGenCheckLength(Environment *,struct lhsParseNode *);
227
+ struct expr *FactGenCheckZeroLength(Environment *,unsigned short);
228
+
229
+ #endif /* _H_factgen */
@@ -0,0 +1,438 @@
1
+ /*******************************************************/
2
+ /* "C" Language Integrated Production System */
3
+ /* */
4
+ /* CLIPS Version 6.41 12/04/22 */
5
+ /* */
6
+ /* FACT HASHING MODULE */
7
+ /*******************************************************/
8
+
9
+ /*************************************************************/
10
+ /* Purpose: Provides routines for maintaining a fact hash */
11
+ /* table so that duplication of facts can quickly be */
12
+ /* determined. */
13
+ /* */
14
+ /* Principal Programmer(s): */
15
+ /* Gary D. Riley */
16
+ /* */
17
+ /* Contributing Programmer(s): */
18
+ /* */
19
+ /* Revision History: */
20
+ /* */
21
+ /* 6.24: Removed LOGICAL_DEPENDENCIES compilation flag. */
22
+ /* */
23
+ /* Renamed BOOLEAN macro type to intBool. */
24
+ /* */
25
+ /* 6.30: Fact hash table is resizable. */
26
+ /* */
27
+ /* Changed integer type/precision. */
28
+ /* */
29
+ /* Added FactWillBeAsserted. */
30
+ /* */
31
+ /* Converted API macros to function calls. */
32
+ /* */
33
+ /* 6.40: Pragma once and other inclusion changes. */
34
+ /* */
35
+ /* Added support for booleans with <stdbool.h>. */
36
+ /* */
37
+ /* Removed use of void pointers for specific */
38
+ /* data structures. */
39
+ /* */
40
+ /* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
41
+ /* */
42
+ /* UDF redesign. */
43
+ /* */
44
+ /* Modify command preserves fact id and address. */
45
+ /* */
46
+ /* Assert returns duplicate fact. FALSE is now */
47
+ /* returned only if an error occurs. */
48
+ /* */
49
+ /* 6.41: Used gensnprintf in place of gensprintf and. */
50
+ /* sprintf. */
51
+ /* */
52
+ /*************************************************************/
53
+
54
+ #include <stdio.h>
55
+ #include <stdlib.h>
56
+
57
+ #include "setup.h"
58
+
59
+ #if DEFTEMPLATE_CONSTRUCT
60
+
61
+ #include "constant.h"
62
+ #include "envrnmnt.h"
63
+ #include "factmngr.h"
64
+ #include "memalloc.h"
65
+ #include "multifld.h"
66
+ #include "router.h"
67
+ #include "sysdep.h"
68
+ #include "utility.h"
69
+
70
+ #if DEFRULE_CONSTRUCT
71
+ #include "lgcldpnd.h"
72
+ #endif
73
+
74
+ #include "facthsh.h"
75
+
76
+ /***************************************/
77
+ /* LOCAL INTERNAL FUNCTION DEFINITIONS */
78
+ /***************************************/
79
+
80
+ static Fact *FactExists(Environment *,Fact *,size_t);
81
+ static struct factHashEntry **CreateFactHashTable(Environment *,size_t);
82
+ static void ResizeFactHashTable(Environment *);
83
+ static void ResetFactHashTable(Environment *);
84
+
85
+ /************************************************/
86
+ /* HashFact: Returns the hash value for a fact. */
87
+ /************************************************/
88
+ size_t HashFact(
89
+ Fact *theFact)
90
+ {
91
+ size_t count = 0;
92
+
93
+ /*============================================*/
94
+ /* Get a hash value for the deftemplate name. */
95
+ /*============================================*/
96
+
97
+ count += theFact->whichDeftemplate->header.name->bucket * 73981;
98
+
99
+ /*=================================================*/
100
+ /* Add in the hash value for the rest of the fact. */
101
+ /*=================================================*/
102
+
103
+ count += HashMultifield(&theFact->theProposition,0);
104
+
105
+ /*================================*/
106
+ /* Make sure the hash value falls */
107
+ /* in the appropriate range. */
108
+ /*================================*/
109
+
110
+ theFact->hashValue = (unsigned long) count;
111
+
112
+ /*========================*/
113
+ /* Return the hash value. */
114
+ /*========================*/
115
+
116
+ return count;
117
+ }
118
+
119
+ /**********************************************/
120
+ /* FactExists: Determines if a specified fact */
121
+ /* already exists in the fact hash table. */
122
+ /**********************************************/
123
+ static Fact *FactExists(
124
+ Environment *theEnv,
125
+ Fact *theFact,
126
+ size_t hashValue)
127
+ {
128
+ struct factHashEntry *theFactHash;
129
+
130
+ hashValue = (hashValue % FactData(theEnv)->FactHashTableSize);
131
+
132
+ for (theFactHash = FactData(theEnv)->FactHashTable[hashValue];
133
+ theFactHash != NULL;
134
+ theFactHash = theFactHash->next)
135
+ {
136
+ if (theFact->hashValue != theFactHash->theFact->hashValue)
137
+ { continue; }
138
+
139
+ if ((theFact->whichDeftemplate == theFactHash->theFact->whichDeftemplate) ?
140
+ MultifieldsEqual(&theFact->theProposition,
141
+ &theFactHash->theFact->theProposition) : false)
142
+ { return(theFactHash->theFact); }
143
+ }
144
+
145
+ return NULL;
146
+ }
147
+
148
+ /************************************************************/
149
+ /* AddHashedFact: Adds a fact entry to the fact hash table. */
150
+ /************************************************************/
151
+ void AddHashedFact(
152
+ Environment *theEnv,
153
+ Fact *theFact,
154
+ size_t hashValue)
155
+ {
156
+ struct factHashEntry *newhash, *temp;
157
+
158
+ if (FactData(theEnv)->NumberOfFacts > FactData(theEnv)->FactHashTableSize)
159
+ { ResizeFactHashTable(theEnv); }
160
+
161
+ newhash = get_struct(theEnv,factHashEntry);
162
+ newhash->theFact = theFact;
163
+
164
+ hashValue = (hashValue % FactData(theEnv)->FactHashTableSize);
165
+
166
+ temp = FactData(theEnv)->FactHashTable[hashValue];
167
+ FactData(theEnv)->FactHashTable[hashValue] = newhash;
168
+ newhash->next = temp;
169
+ }
170
+
171
+ /******************************************/
172
+ /* RemoveHashedFact: Removes a fact entry */
173
+ /* from the fact hash table. */
174
+ /******************************************/
175
+ bool RemoveHashedFact(
176
+ Environment *theEnv,
177
+ Fact *theFact)
178
+ {
179
+ size_t hashValue;
180
+ struct factHashEntry *hptr, *prev;
181
+
182
+ hashValue = HashFact(theFact);
183
+ hashValue = (hashValue % FactData(theEnv)->FactHashTableSize);
184
+
185
+ for (hptr = FactData(theEnv)->FactHashTable[hashValue], prev = NULL;
186
+ hptr != NULL;
187
+ hptr = hptr->next)
188
+ {
189
+ if (hptr->theFact == theFact)
190
+ {
191
+ if (prev == NULL)
192
+ {
193
+ FactData(theEnv)->FactHashTable[hashValue] = hptr->next;
194
+ rtn_struct(theEnv,factHashEntry,hptr);
195
+ if (FactData(theEnv)->NumberOfFacts == 1)
196
+ { ResetFactHashTable(theEnv); }
197
+ return true;
198
+ }
199
+ else
200
+ {
201
+ prev->next = hptr->next;
202
+ rtn_struct(theEnv,factHashEntry,hptr);
203
+ if (FactData(theEnv)->NumberOfFacts == 1)
204
+ { ResetFactHashTable(theEnv); }
205
+ return true;
206
+ }
207
+ }
208
+ prev = hptr;
209
+ }
210
+
211
+ return false;
212
+ }
213
+
214
+ /****************************************************/
215
+ /* FactWillBeAsserted: Determines if a fact will be */
216
+ /* asserted based on the duplication settings. */
217
+ /****************************************************/
218
+ bool FactWillBeAsserted(
219
+ Environment *theEnv,
220
+ Fact *theFact)
221
+ {
222
+ Fact *tempPtr;
223
+ size_t hashValue;
224
+
225
+ if (FactData(theEnv)->FactDuplication) return true;
226
+
227
+ hashValue = HashFact(theFact);
228
+
229
+ tempPtr = FactExists(theEnv,theFact,hashValue);
230
+ if (tempPtr == NULL) return true;
231
+
232
+ return false;
233
+ }
234
+
235
+ /*****************************************************/
236
+ /* HandleFactDuplication: Determines if a fact to be */
237
+ /* added to the fact-list is a duplicate entry and */
238
+ /* takes appropriate action based on the current */
239
+ /* setting of the fact-duplication flag. */
240
+ /*****************************************************/
241
+ size_t HandleFactDuplication(
242
+ Environment *theEnv,
243
+ Fact *theFact,
244
+ Fact **duplicate,
245
+ long long reuseIndex)
246
+ {
247
+ size_t hashValue;
248
+ *duplicate = NULL;
249
+
250
+ hashValue = HashFact(theFact);
251
+
252
+ if (FactData(theEnv)->FactDuplication)
253
+ { return hashValue; }
254
+
255
+ *duplicate = FactExists(theEnv,theFact,hashValue);
256
+ if (*duplicate == NULL) return hashValue;
257
+
258
+ if (reuseIndex == 0)
259
+ { ReturnFact(theEnv,theFact); }
260
+ else
261
+ {
262
+ theFact->nextFact = FactData(theEnv)->GarbageFacts;
263
+ FactData(theEnv)->GarbageFacts = theFact;
264
+ UtilityData(theEnv)->CurrentGarbageFrame->dirty = true;
265
+ theFact->garbage = true;
266
+ }
267
+
268
+ #if DEFRULE_CONSTRUCT
269
+ AddLogicalDependencies(theEnv,(struct patternEntity *) *duplicate,true);
270
+ #endif
271
+
272
+ return 0;
273
+ }
274
+
275
+ /*******************************************/
276
+ /* GetFactDuplication: C access routine */
277
+ /* for the get-fact-duplication command. */
278
+ /*******************************************/
279
+ bool GetFactDuplication(
280
+ Environment *theEnv)
281
+ {
282
+ return FactData(theEnv)->FactDuplication;
283
+ }
284
+
285
+ /*******************************************/
286
+ /* SetFactDuplication: C access routine */
287
+ /* for the set-fact-duplication command. */
288
+ /*******************************************/
289
+ bool SetFactDuplication(
290
+ Environment *theEnv,
291
+ bool value)
292
+ {
293
+ bool ov;
294
+
295
+ ov = FactData(theEnv)->FactDuplication;
296
+ FactData(theEnv)->FactDuplication = value;
297
+ return ov;
298
+ }
299
+
300
+ /**************************************************/
301
+ /* InitializeFactHashTable: Initializes the table */
302
+ /* entries in the fact hash table to NULL. */
303
+ /**************************************************/
304
+ void InitializeFactHashTable(
305
+ Environment *theEnv)
306
+ {
307
+ FactData(theEnv)->FactHashTable = CreateFactHashTable(theEnv,SIZE_FACT_HASH);
308
+ FactData(theEnv)->FactHashTableSize = SIZE_FACT_HASH;
309
+ }
310
+
311
+ /*******************************************************************/
312
+ /* CreateFactHashTable: Creates and initializes a fact hash table. */
313
+ /*******************************************************************/
314
+ static struct factHashEntry **CreateFactHashTable(
315
+ Environment *theEnv,
316
+ size_t tableSize)
317
+ {
318
+ unsigned long i;
319
+ struct factHashEntry **theTable;
320
+
321
+ theTable = (struct factHashEntry **)
322
+ gm2(theEnv,sizeof (struct factHashEntry *) * tableSize);
323
+
324
+ if (theTable == NULL) ExitRouter(theEnv,EXIT_FAILURE);
325
+
326
+ for (i = 0; i < tableSize; i++) theTable[i] = NULL;
327
+
328
+ return theTable;
329
+ }
330
+
331
+ /************************/
332
+ /* ResizeFactHashTable: */
333
+ /************************/
334
+ static void ResizeFactHashTable(
335
+ Environment *theEnv)
336
+ {
337
+ unsigned long i, newSize, newLocation;
338
+ struct factHashEntry **theTable, **newTable;
339
+ struct factHashEntry *theEntry, *nextEntry;
340
+
341
+ theTable = FactData(theEnv)->FactHashTable;
342
+
343
+ newSize = (FactData(theEnv)->FactHashTableSize * 2) + 1;
344
+ newTable = CreateFactHashTable(theEnv,newSize);
345
+
346
+ /*========================================*/
347
+ /* Copy the old entries to the new table. */
348
+ /*========================================*/
349
+
350
+ for (i = 0; i < FactData(theEnv)->FactHashTableSize; i++)
351
+ {
352
+ theEntry = theTable[i];
353
+ while (theEntry != NULL)
354
+ {
355
+ nextEntry = theEntry->next;
356
+
357
+ newLocation = theEntry->theFact->hashValue % newSize;
358
+ theEntry->next = newTable[newLocation];
359
+ newTable[newLocation] = theEntry;
360
+
361
+ theEntry = nextEntry;
362
+ }
363
+ }
364
+
365
+ /*=====================================================*/
366
+ /* Replace the old hash table with the new hash table. */
367
+ /*=====================================================*/
368
+
369
+ rm(theEnv,theTable,sizeof(struct factHashEntry *) * FactData(theEnv)->FactHashTableSize);
370
+ FactData(theEnv)->FactHashTableSize = newSize;
371
+ FactData(theEnv)->FactHashTable = newTable;
372
+ }
373
+
374
+ /***********************/
375
+ /* ResetFactHashTable: */
376
+ /***********************/
377
+ static void ResetFactHashTable(
378
+ Environment *theEnv)
379
+ {
380
+ struct factHashEntry **newTable;
381
+
382
+ /*=============================================*/
383
+ /* Don't reset the table unless the hash table */
384
+ /* has been expanded from its original size. */
385
+ /*=============================================*/
386
+
387
+ if (FactData(theEnv)->FactHashTableSize == SIZE_FACT_HASH)
388
+ { return; }
389
+
390
+ /*=======================*/
391
+ /* Create the new table. */
392
+ /*=======================*/
393
+
394
+ newTable = CreateFactHashTable(theEnv,SIZE_FACT_HASH);
395
+
396
+ /*=====================================================*/
397
+ /* Replace the old hash table with the new hash table. */
398
+ /*=====================================================*/
399
+
400
+ rm(theEnv,FactData(theEnv)->FactHashTable,sizeof(struct factHashEntry *) * FactData(theEnv)->FactHashTableSize);
401
+ FactData(theEnv)->FactHashTableSize = SIZE_FACT_HASH;
402
+ FactData(theEnv)->FactHashTable = newTable;
403
+ }
404
+
405
+ #if DEVELOPER
406
+
407
+ /****************************************************/
408
+ /* ShowFactHashTableCommand: Displays the number of */
409
+ /* entries in each slot of the fact hash table. */
410
+ /****************************************************/
411
+ void ShowFactHashTableCommand(
412
+ Environment *theEnv,
413
+ UDFContext *context,
414
+ UDFValue *returnValue)
415
+ {
416
+ unsigned long i, count;
417
+ struct factHashEntry *theEntry;
418
+ char buffer[20];
419
+
420
+ for (i = 0; i < FactData(theEnv)->FactHashTableSize; i++)
421
+ {
422
+ for (theEntry = FactData(theEnv)->FactHashTable[i], count = 0;
423
+ theEntry != NULL;
424
+ theEntry = theEntry->next)
425
+ { count++; }
426
+
427
+ if (count != 0)
428
+ {
429
+ gensnprintf(buffer,sizeof(buffer),"%4lu: %4d\n",i,count);
430
+ WriteString(theEnv,STDOUT,buffer);
431
+ }
432
+ }
433
+ }
434
+
435
+ #endif /* DEVELOPER */
436
+
437
+ #endif /* DEFTEMPLATE_CONSTRUCT */
438
+