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
|
/*******************************************************/
/* "C" Language Integrated Production System */
/* */
/* CLIPS Version 6.30 08/16/14 */
/* */
/* ENVRNMNT HEADER FILE */
/*******************************************************/
/*************************************************************/
/* Purpose: Routines for supporting multiple environments. */
/* */
/* Principal Programmer(s): */
/* Gary D. Riley */
/* */
/* Revision History: */
/* */
/* 6.24: Added code to CreateEnvironment to free */
/* already allocated data if one of the malloc */
/* calls fail. */
/* */
/* Modified AllocateEnvironmentData to print a */
/* message if it was unable to allocate memory. */
/* */
/* Renamed BOOLEAN macro type to intBool. */
/* */
/* Added CreateRuntimeEnvironment function. */
/* */
/* Added support for context information when an */
/* environment is created (i.e a pointer from the */
/* CLIPS environment to its parent environment). */
/* */
/* 6.30: Added support for passing context information */
/* to user defined functions and callback */
/* functions. */
/* */
/* Support for hashing EXTERNAL_ADDRESS data */
/* type. */
/* */
/* Added const qualifiers to remove C++ */
/* deprecation warnings. */
/* */
/*************************************************************/
#ifndef _H_envrnmnt
#define _H_envrnmnt
#ifndef _H_symbol
#include "symbol.h"
#endif
#ifdef LOCALE
#undef LOCALE
#endif
#ifdef _ENVRNMNT_SOURCE_
#define LOCALE
#else
#define LOCALE extern
#endif
#define USER_ENVIRONMENT_DATA 70
#define MAXIMUM_ENVIRONMENT_POSITIONS 100
struct environmentCleanupFunction
{
const char *name;
void (*func)(void *);
int priority;
struct environmentCleanupFunction *next;
};
struct environmentData
{
unsigned int initialized : 1;
unsigned long environmentIndex;
void *context;
void *routerContext;
void *functionContext;
void *callbackContext;
void **theData;
void (**cleanupFunctions)(void *);
struct environmentCleanupFunction *listOfCleanupEnvironmentFunctions;
struct environmentData *next;
};
typedef struct environmentData ENVIRONMENT_DATA;
typedef struct environmentData * ENVIRONMENT_DATA_PTR;
#define GetEnvironmentData(theEnv,position) (((struct environmentData *) theEnv)->theData[position])
#define SetEnvironmentData(theEnv,position,value) (((struct environmentData *) theEnv)->theData[position] = value)
LOCALE intBool AllocateEnvironmentData(void *,unsigned int,unsigned long,void (*)(void *));
LOCALE intBool DeallocateEnvironmentData(void);
#if ALLOW_ENVIRONMENT_GLOBALS
LOCALE void SetCurrentEnvironment(void *);
LOCALE intBool SetCurrentEnvironmentByIndex(unsigned long);
LOCALE void *GetEnvironmentByIndex(unsigned long);
LOCALE void *GetCurrentEnvironment(void);
LOCALE unsigned long GetEnvironmentIndex(void *);
#endif
LOCALE void *CreateEnvironment(void);
LOCALE void *CreateRuntimeEnvironment(struct symbolHashNode **,struct floatHashNode **,
struct integerHashNode **,struct bitMapHashNode **);
LOCALE intBool DestroyEnvironment(void *);
LOCALE intBool AddEnvironmentCleanupFunction(void *,const char *,void (*)(void *),int);
LOCALE void *GetEnvironmentContext(void *);
LOCALE void *SetEnvironmentContext(void *,void *);
LOCALE void *GetEnvironmentRouterContext(void *);
LOCALE void *SetEnvironmentRouterContext(void *,void *);
LOCALE void *GetEnvironmentFunctionContext(void *);
LOCALE void *SetEnvironmentFunctionContext(void *,void *);
LOCALE void *GetEnvironmentCallbackContext(void *);
LOCALE void *SetEnvironmentCallbackContext(void *,void *);
#endif /* _H_envrnmnt */
|