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
/*******************************************************/
/* "C" Language Integrated Production System */
/* */
/* CLIPS Version 6.40 12/02/19 */
/* */
/* CONSTRAINT HEADER FILE */
/*******************************************************/
/*************************************************************/
/* Purpose: Provides functions for creating and removing */
/* constraint records, adding them to the contraint hash */
/* table, and enabling and disabling static and dynamic */
/* constraint checking. */
/* */
/* Principal Programmer(s): */
/* Gary D. Riley */
/* */
/* Contributing Programmer(s): */
/* */
/* Revision History: */
/* */
/* 6.23: Correction for FalseSymbol/TrueSymbol. DR0859 */
/* */
/* 6.24: Added allowed-classes slot facet. */
/* */
/* Renamed BOOLEAN macro type to intBool. */
/* */
/* 6.30: Removed conditional code for unsupported */
/* compilers/operating systems (IBM_MCW and */
/* MAC_MCW). */
/* */
/* Changed integer type/precision. */
/* */
/* Converted API macros to function calls. */
/* */
/* 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. */
/* */
/* ALLOW_ENVIRONMENT_GLOBALS no longer supported. */
/* */
/* Static constraint checking is always enabled. */
/* */
/* UDF redesign. */
/* */
/* Eval support for run time and bload only. */
/* */
/*************************************************************/
#ifndef _H_constrnt
#pragma once
#define _H_constrnt
struct constraintRecord;
typedef struct constraintRecord CONSTRAINT_RECORD;
#include "evaluatn.h"
struct constraintRecord
{
unsigned int anyAllowed : 1;
unsigned int symbolsAllowed : 1;
unsigned int stringsAllowed : 1;
unsigned int floatsAllowed : 1;
unsigned int integersAllowed : 1;
unsigned int instanceNamesAllowed : 1;
unsigned int instanceAddressesAllowed : 1;
unsigned int externalAddressesAllowed : 1;
unsigned int factAddressesAllowed : 1;
unsigned int voidAllowed : 1;
unsigned int anyRestriction : 1;
unsigned int symbolRestriction : 1;
unsigned int stringRestriction : 1;
unsigned int floatRestriction : 1;
unsigned int integerRestriction : 1;
unsigned int classRestriction : 1;
unsigned int instanceNameRestriction : 1;
unsigned int multifieldsAllowed : 1;
unsigned int singlefieldsAllowed : 1;
unsigned int installed : 1;
unsigned long bsaveID;
struct expr *classList;
struct expr *restrictionList;
struct expr *minValue;
struct expr *maxValue;
struct expr *minFields;
struct expr *maxFields;
struct constraintRecord *multifield;
struct constraintRecord *next;
unsigned int bucket;
unsigned int count;
};
#define SIZE_CONSTRAINT_HASH 167
#define CONSTRAINT_DATA 43
struct constraintData
{
struct constraintRecord **ConstraintHashtable;
bool DynamicConstraintChecking;
#if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME)
struct constraintRecord *ConstraintArray;
unsigned long NumberOfConstraints;
#endif
};
#define ConstraintData(theEnv) ((struct constraintData *) GetEnvironmentData(theEnv,CONSTRAINT_DATA))
void InitializeConstraints(Environment *);
void GDCCommand(Environment *,UDFContext *,UDFValue *);
void SDCCommand(Environment *,UDFContext *,UDFValue *);
bool SetDynamicConstraintChecking(Environment *,bool);
bool GetDynamicConstraintChecking(Environment *);
#if (! BLOAD_ONLY) && (! RUN_TIME)
unsigned long HashConstraint(struct constraintRecord *);
struct constraintRecord *AddConstraint(Environment *,struct constraintRecord *);
#endif
void RemoveConstraint(Environment *,struct constraintRecord *);
#endif