00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _H_objrtmch
00027 #define _H_objrtmch
00028
00029 #if DEFRULE_CONSTRUCT && OBJECT_SYSTEM
00030
00031 #define OBJECT_ASSERT 1
00032 #define OBJECT_RETRACT 2
00033 #define OBJECT_MODIFY 3
00034
00035 #ifndef _H_evaluatn
00036 #include "evaluatn.h"
00037 #endif
00038 #ifndef _H_expressn
00039 #include "expressn.h"
00040 #endif
00041 #ifndef _H_match
00042 #include "match.h"
00043 #endif
00044 #ifndef _H_network
00045 #include "network.h"
00046 #endif
00047 #ifndef _H_object
00048 #include "object.h"
00049 #endif
00050 #ifndef _H_symbol
00051 #include "symbol.h"
00052 #endif
00053
00054 typedef struct classBitMap
00055 {
00056 unsigned short maxid;
00057 char map[1];
00058 } CLASS_BITMAP;
00059
00060 #define ClassBitMapSize(bmp) ((sizeof(CLASS_BITMAP) + \
00061 (sizeof(char) * (bmp->maxid / BITS_PER_BYTE))))
00062
00063 typedef struct slotBitMap
00064 {
00065 unsigned short maxid;
00066 char map[1];
00067 } SLOT_BITMAP;
00068
00069 #define SlotBitMapSize(bmp) ((sizeof(SLOT_BITMAP) + \
00070 (sizeof(char) * (bmp->maxid / BITS_PER_BYTE))))
00071
00072 typedef struct objectAlphaNode OBJECT_ALPHA_NODE;
00073
00074 typedef struct objectPatternNode
00075 {
00076 unsigned blocked : 1;
00077 unsigned multifieldNode : 1;
00078 unsigned endSlot : 1;
00079 unsigned selector : 1;
00080 unsigned whichField : 8;
00081 unsigned short leaveFields;
00082 unsigned long long matchTimeTag;
00083 int slotNameID;
00084 EXPRESSION *networkTest;
00085 struct objectPatternNode *nextLevel;
00086 struct objectPatternNode *lastLevel;
00087 struct objectPatternNode *leftNode;
00088 struct objectPatternNode *rightNode;
00089 OBJECT_ALPHA_NODE *alphaNode;
00090 long bsaveID;
00091 } OBJECT_PATTERN_NODE;
00092
00093 struct objectAlphaNode
00094 {
00095 struct patternNodeHeader header;
00096 unsigned long long matchTimeTag;
00097 BITMAP_HN *classbmp,*slotbmp;
00098 OBJECT_PATTERN_NODE *patternNode;
00099 struct objectAlphaNode *nxtInGroup,
00100 *nxtTerminal;
00101 long bsaveID;
00102 };
00103
00104 typedef struct objectMatchAction
00105 {
00106 int type;
00107 INSTANCE_TYPE *ins;
00108 SLOT_BITMAP *slotNameIDs;
00109 struct objectMatchAction *nxt;
00110 } OBJECT_MATCH_ACTION;
00111
00112 #ifdef LOCALE
00113 #undef LOCALE
00114 #endif
00115
00116 #ifdef _OBJRTMCH_SOURCE_
00117 #define LOCALE
00118 #else
00119 #define LOCALE extern
00120 #endif
00121
00122 LOCALE void ObjectMatchDelay(void *,DATA_OBJECT *);
00123 LOCALE intBool SetDelayObjectPatternMatching(void *,int);
00124 LOCALE intBool GetDelayObjectPatternMatching(void *);
00125 LOCALE OBJECT_PATTERN_NODE *ObjectNetworkPointer(void *);
00126 LOCALE OBJECT_ALPHA_NODE *ObjectNetworkTerminalPointer(void *);
00127 LOCALE void SetObjectNetworkPointer(void *,OBJECT_PATTERN_NODE *);
00128 LOCALE void SetObjectNetworkTerminalPointer(void *,OBJECT_ALPHA_NODE *);
00129 LOCALE void ObjectNetworkAction(void *,int,INSTANCE_TYPE *,int);
00130 LOCALE void ResetObjectMatchTimeTags(void *);
00131
00132 #endif
00133
00134 #endif
00135
00136
00137