00001 /*******************************************************/ 00002 /* "C" Language Integrated Production System */ 00003 /* */ 00004 /* CLIPS Version 6.30 10/19/06 */ 00005 /* */ 00006 /* DEFRULE BSAVE/BLOAD HEADER FILE */ 00007 /*******************************************************/ 00008 00009 /*************************************************************/ 00010 /* Purpose: Implements the binary save/load feature for the */ 00011 /* defrule construct. */ 00012 /* */ 00013 /* Principal Programmer(s): */ 00014 /* Gary D. Riley */ 00015 /* */ 00016 /* Contributing Programmer(s): */ 00017 /* Brian L. Dantes */ 00018 /* */ 00019 /* Revision History: */ 00020 /* */ 00021 /* 6.30: Added support for hashed alpha memories. */ 00022 /* */ 00023 /*************************************************************/ 00024 00025 #if (! RUN_TIME) 00026 #ifndef _H_rulebin 00027 00028 #define _H_rulebin 00029 00030 #include "modulbin.h" 00031 #include "cstrcbin.h" 00032 #ifndef _H_network 00033 #include "network.h" 00034 #endif 00035 00036 struct bsaveDefrule 00037 { 00038 struct bsaveConstructHeader header; 00039 int salience; 00040 int localVarCnt; 00041 unsigned int complexity : 12; 00042 unsigned int autoFocus : 1; 00043 long dynamicSalience; 00044 long actions; 00045 long logicalJoin; 00046 long lastJoin; 00047 long disjunct; 00048 }; 00049 00050 struct bsavePatternNodeHeader 00051 { 00052 long entryJoin; 00053 long rightHash; 00054 unsigned int singlefieldNode : 1; 00055 unsigned int multifieldNode : 1; 00056 unsigned int stopNode : 1; 00057 unsigned int blocked : 1; 00058 unsigned int initialize : 1; 00059 unsigned int marked : 1; 00060 unsigned int beginSlot : 1; 00061 unsigned int endSlot : 1; 00062 unsigned int selector : 1; 00063 }; 00064 00065 struct bsaveDefruleModule 00066 { 00067 struct bsaveDefmoduleItemHeader header; 00068 }; 00069 00070 struct bsaveJoinLink 00071 { 00072 char enterDirection; 00073 long join; 00074 long next; 00075 }; 00076 00077 struct bsaveJoinNode 00078 { 00079 unsigned int firstJoin : 1; 00080 unsigned int logicalJoin : 1; 00081 unsigned int joinFromTheRight : 1; 00082 unsigned int patternIsNegated : 1; 00083 unsigned int patternIsExists : 1; 00084 unsigned int rhsType : 3; 00085 unsigned int depth : 7; 00086 long networkTest; 00087 long secondaryNetworkTest; 00088 long leftHash; 00089 long rightHash; 00090 long rightSideEntryStructure; 00091 long nextLinks; 00092 long lastLevel; 00093 long rightMatchNode; 00094 long ruleToActivate; 00095 }; 00096 00097 #define RULEBIN_DATA 20 00098 00099 struct defruleBinaryData 00100 { 00101 long NumberOfDefruleModules; 00102 long NumberOfDefrules; 00103 long NumberOfJoins; 00104 long NumberOfLinks; 00105 long RightPrimeIndex; 00106 long LeftPrimeIndex; 00107 struct defruleModule *ModuleArray; 00108 struct defrule *DefruleArray; 00109 struct joinNode *JoinArray; 00110 struct joinLink *LinkArray; 00111 }; 00112 00113 #define DefruleBinaryData(theEnv) ((struct defruleBinaryData *) GetEnvironmentData(theEnv,RULEBIN_DATA)) 00114 00115 #define BloadDefrulePointer(x,i) ((struct defrule *) ((i == -1L) ? NULL : &x[i])) 00116 #define BsaveJoinIndex(joinPtr) ((joinPtr == NULL) ? -1L : ((struct joinNode *) joinPtr)->bsaveID) 00117 #define BloadJoinPointer(i) ((struct joinNode *) ((i == -1L) ? NULL : &DefruleBinaryData(theEnv)->JoinArray[i])) 00118 #define BsaveJoinLinkIndex(linkPtr) ((linkPtr == NULL) ? -1L : ((struct joinLink *) linkPtr)->bsaveID) 00119 #define BloadJoinLinkPointer(i) ((struct joinLink *) ((i == -1L) ? NULL : &DefruleBinaryData(theEnv)->LinkArray[i])) 00120 00121 #ifdef LOCALE 00122 #undef LOCALE 00123 #endif 00124 00125 #ifdef _RULEBIN_SOURCE_ 00126 #define LOCALE 00127 #else 00128 #define LOCALE extern 00129 #endif 00130 00131 LOCALE void DefruleBinarySetup(void *); 00132 LOCALE void UpdatePatternNodeHeader(void *,struct patternNodeHeader *, 00133 struct bsavePatternNodeHeader *); 00134 LOCALE void AssignBsavePatternHeaderValues(void *,struct bsavePatternNodeHeader *, 00135 struct patternNodeHeader *); 00136 LOCALE void *BloadDefruleModuleReference(void *,int); 00137 00138 #endif 00139 #endif 00140 00141 00142 00143
1.5.6