1 /*******************************************************/ 2 /* "C" Language Integrated Production System */ 3 /* */ 4 /* CLIPS Version 6.30 08/16/14 */ 5 /* */ 6 /* */ 7 /*******************************************************/ 8 9 /*************************************************************/ 10 /* Purpose: */ 11 /* */ 12 /* Principal Programmer(s): */ 13 /* Brian L. Dantes */ 14 /* */ 15 /* Contributing Programmer(s): */ 16 /* */ 17 /* Revision History: */ 18 /* */ 19 /* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */ 20 /* */ 21 /* 6.24: Removed INCREMENTAL_RESET and */ 22 /* LOGICAL_DEPENDENCIES compilation flags. */ 23 /* */ 24 /* Converted INSTANCE_PATTERN_MATCHING to */ 25 /* DEFRULE_CONSTRUCT. */ 26 /* */ 27 /* Renamed BOOLEAN macro type to intBool. */ 28 /* */ 29 /* 6.30: Modified the QueueObjectMatchAction function */ 30 /* so that instance retract actions always occur */ 31 /* before instance assert and modify actions. */ 32 /* This prevents the pattern matching process */ 33 /* from attempting the evaluation of a join */ 34 /* expression that accesses the slots of a */ 35 /* retracted instance. */ 36 /* */ 37 /* Added support for hashed alpha memories. */ 38 /* */ 39 /* Support for long long integers. */ 40 /* */ 41 /* Added support for hashed comparisons to */ 42 /* constants. */ 43 /* */ 44 /*************************************************************/ 45 46 #ifndef _H_objrtmch 47 #define _H_objrtmch 48 49 #if DEFRULE_CONSTRUCT && OBJECT_SYSTEM 50 51 #define OBJECT_ASSERT 1 52 #define OBJECT_RETRACT 2 53 #define OBJECT_MODIFY 3 54 55 #ifndef _H_evaluatn 56 #include "evaluatn.h" 57 #endif 58 #ifndef _H_expressn 59 #include "expressn.h" 60 #endif 61 #ifndef _H_match 62 #include "match.h" 63 #endif 64 #ifndef _H_network 65 #include "network.h" 66 #endif 67 #ifndef _H_object 68 #include "object.h" 69 #endif 70 #ifndef _H_symbol 71 #include "symbol.h" 72 #endif 73 74 typedef struct classBitMap 75 { 76 unsigned short maxid; 77 char map[1]; 78 } CLASS_BITMAP; 79 80 #define ClassBitMapSize(bmp) ((sizeof(CLASS_BITMAP) + \ 81 (sizeof(char) * (bmp->maxid / BITS_PER_BYTE)))) 82 83 typedef struct slotBitMap 84 { 85 unsigned short maxid; 86 char map[1]; 87 } SLOT_BITMAP; 88 89 #define SlotBitMapSize(bmp) ((sizeof(SLOT_BITMAP) + \ 90 (sizeof(char) * (bmp->maxid / BITS_PER_BYTE)))) 91 92 typedef struct objectAlphaNode OBJECT_ALPHA_NODE; 93 94 typedef struct objectPatternNode 95 { 96 unsigned blocked : 1; 97 unsigned multifieldNode : 1; 98 unsigned endSlot : 1; 99 unsigned selector : 1; 100 unsigned whichField : 8; 101 unsigned short leaveFields; 102 unsigned long long matchTimeTag; 103 int slotNameID; 104 EXPRESSION *networkTest; 105 struct objectPatternNode *nextLevel; 106 struct objectPatternNode *lastLevel; 107 struct objectPatternNode *leftNode; 108 struct objectPatternNode *rightNode; 109 OBJECT_ALPHA_NODE *alphaNode; 110 long bsaveID; 111 } OBJECT_PATTERN_NODE; 112 113 struct objectAlphaNode 114 { 115 struct patternNodeHeader header; 116 unsigned long long matchTimeTag; 117 BITMAP_HN *classbmp,*slotbmp; 118 OBJECT_PATTERN_NODE *patternNode; 119 struct objectAlphaNode *nxtInGroup, 120 *nxtTerminal; 121 long bsaveID; 122 }; 123 124 typedef struct objectMatchAction 125 { 126 int type; 127 INSTANCE_TYPE *ins; 128 SLOT_BITMAP *slotNameIDs; 129 struct objectMatchAction *nxt; 130 } OBJECT_MATCH_ACTION; 131 132 #ifdef LOCALE 133 #undef LOCALE 134 #endif 135 136 #ifdef _OBJRTMCH_SOURCE_ 137 #define LOCALE 138 #else 139 #define LOCALE extern 140 #endif 141 142 LOCALE void ObjectMatchDelay(void *,DATA_OBJECT *); 143 LOCALE intBool SetDelayObjectPatternMatching(void *,int); 144 LOCALE intBool GetDelayObjectPatternMatching(void *); 145 LOCALE OBJECT_PATTERN_NODE *ObjectNetworkPointer(void *); 146 LOCALE OBJECT_ALPHA_NODE *ObjectNetworkTerminalPointer(void *); 147 LOCALE void SetObjectNetworkPointer(void *,OBJECT_PATTERN_NODE *); 148 LOCALE void SetObjectNetworkTerminalPointer(void *,OBJECT_ALPHA_NODE *); 149 LOCALE void ObjectNetworkAction(void *,int,INSTANCE_TYPE *,int); 150 LOCALE void ResetObjectMatchTimeTags(void *); 151 152 #endif /* DEFRULE_CONSTRUCT && OBJECT_SYSTEM */ 153 154 #endif /* _H_objrtmch */ 155 156 157 158