1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*******************************************************/
/* "C" Language Integrated Production System */
/* */
/* CLIPS Version 6.40 01/21/18 */
/* */
/* CLASS FUNCTIONS HEADER FILE */
/*******************************************************/
/*************************************************************/
/* Purpose: */
/* */
/* Principal Programmer(s): */
/* Brian L. Dantes */
/* */
/* Contributing Programmer(s): */
/* */
/* Revision History: */
/* */
/* 6.24: Converted INSTANCE_PATTERN_MATCHING to */
/* DEFRULE_CONSTRUCT. */
/* */
/* Renamed BOOLEAN macro type to intBool. */
/* */
/* 6.30: Borland C (IBM_TBC) and Metrowerks CodeWarrior */
/* (MAC_MCW, IBM_MCW) are no longer supported. */
/* */
/* Changed integer type/precision. */
/* */
/* Changed garbage collection algorithm. */
/* */
/* Used genstrcpy and genstrcat instead of strcpy */
/* and strcat. */
/* */
/* Added const qualifiers to remove C++ */
/* deprecation warnings. */
/* */
/* 6.31: Optimization of slot ID creation previously */
/* provided by NewSlotNameID function. */
/* */
/* 6.40: Removed LOCALE definition. */
/* */
/* Pragma once and other inclusion changes. */
/* */
/* Added support for booleans with <stdbool.h>. */
/* */
/* Removed use of void pointers for specific */
/* data structures. */
/* */
/* Removed initial-object support. */
/* */
/*************************************************************/
#ifndef _H_classfun
#pragma once
#define _H_classfun
#include "object.h"
#include "scanner.h"
#define TestTraversalID(traversalRecord,id) TestBitMap(traversalRecord,id)
#define SetTraversalID(traversalRecord,id) SetBitMap(traversalRecord,id)
#define ClearTraversalID(traversalRecord,id) ClearBitMap(traversalRecord,id)
#define CLASS_TABLE_HASH_SIZE 167 // TBD Larger?
#define SLOT_NAME_TABLE_HASH_SIZE 167 // TBD Larger?
#define ISA_ID 0
#define NAME_ID 1
#define SLOT_NAME_NOT_FOUND USHRT_MAX
void IncrementDefclassBusyCount(Environment *,Defclass *);
void DecrementDefclassBusyCount(Environment *,Defclass *);
bool InstancesPurge(Environment *,void *);
#if ! RUN_TIME
void InitializeClasses(Environment *);
#endif
SlotDescriptor *FindClassSlot(Defclass *,CLIPSLexeme *);
void ClassExistError(Environment *,const char *,const char *);
void DeleteClassLinks(Environment *,CLASS_LINK *);
void PrintClassName(Environment *,const char *,Defclass *,bool,bool);
#if DEBUGGING_FUNCTIONS || ((! BLOAD_ONLY) && (! RUN_TIME))
void PrintPackedClassLinks(Environment *,const char *,const char *,PACKED_CLASS_LINKS *);
#endif
#if ! RUN_TIME
void PutClassInTable(Environment *,Defclass *);
void RemoveClassFromTable(Environment *,Defclass *);
void AddClassLink(Environment *,PACKED_CLASS_LINKS *,Defclass *,bool,unsigned int);
void DeleteSubclassLink(Environment *,Defclass *,Defclass *);
void DeleteSuperclassLink(Environment *,Defclass *,Defclass *);
Defclass *NewClass(Environment *,CLIPSLexeme *);
void DeletePackedClassLinks(Environment *,PACKED_CLASS_LINKS *,bool);
void AssignClassID(Environment *,Defclass *);
SLOT_NAME *AddSlotName(Environment *,CLIPSLexeme *,unsigned short,bool);
void DeleteSlotName(Environment *,SLOT_NAME *);
void RemoveDefclass(Environment *,Defclass *);
void InstallClass(Environment *,Defclass *,bool);
#endif
void DestroyDefclass(Environment *,Defclass *);
#if (! BLOAD_ONLY) && (! RUN_TIME)
bool IsClassBeingUsed(Defclass *);
bool RemoveAllUserClasses(Environment *);
bool DeleteClassUAG(Environment *,Defclass *);
void MarkBitMapSubclasses(char *,Defclass *,int);
#endif
unsigned short FindSlotNameID(Environment *,CLIPSLexeme *);
CLIPSLexeme *FindIDSlotName(Environment *,unsigned short);
SLOT_NAME *FindIDSlotNameHash(Environment *,unsigned short);
int GetTraversalID(Environment *);
void ReleaseTraversalID(Environment *);
unsigned int HashClass(CLIPSLexeme *);
#define DEFCLASS_DATA 21
#define PRIMITIVE_CLASSES 9
#include "classcom.h"
struct defclassData
{
Construct *DefclassConstruct;
unsigned DefclassModuleIndex;
EntityRecord DefclassEntityRecord;
Defclass *PrimitiveClassMap[PRIMITIVE_CLASSES];
Defclass **ClassIDMap;
Defclass **ClassTable;
unsigned short MaxClassID;
unsigned short AvailClassID;
SLOT_NAME **SlotNameTable;
CLIPSLexeme *ISA_SYMBOL;
CLIPSLexeme *NAME_SYMBOL;
#if DEBUGGING_FUNCTIONS
bool WatchInstances;
bool WatchSlots;
#endif
unsigned short CTID;
struct token ObjectParseToken;
ClassDefaultsMode ClassDefaultsModeValue;
int newSlotID;
};
#define DefclassData(theEnv) ((struct defclassData *) GetEnvironmentData(theEnv,DEFCLASS_DATA))
#endif