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