📄 objrtbin.c
字号:
/*******************************************************/ /* "C" Language Integrated Production System */ /* */ /* CLIPS Version 6.05 04/09/97 */ /* */ /* */ /*******************************************************//*************************************************************//* Purpose: Binary Load/Save Functions Defrule *//* Object Pattern Network *//* *//* Principal Programmer(s): *//* Brian L. Donnell *//* *//* Contributing Programmer(s): *//* *//* Revision History: *//* *//*************************************************************/ /* ========================================= ***************************************** EXTERNAL DEFINITIONS ========================================= ***************************************** */#include "setup.h"#if INSTANCE_PATTERN_MATCHING && (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE)#include "bload.h"#include "bsave.h"#include "clipsmem.h"#include "insfun.h"#include "objrtmch.h"#include "rulebin.h"#define _OBJRTBIN_SOURCE_#include "objrtbin.h"/* ========================================= ***************************************** CONSTANTS ========================================= ***************************************** */ /* ========================================= ***************************************** MACROS AND TYPES ========================================= ***************************************** */typedef unsigned long UNLN;typedef struct bsaveObjectPatternNode { unsigned multifieldNode : 1; unsigned endSlot : 1; unsigned whichField : 8; unsigned leaveFields : 8; unsigned slotNameID; long networkTest, nextLevel, lastLevel, leftNode, rightNode, alphaNode; } BSAVE_OBJECT_PATTERN_NODE;typedef struct bsaveObjectAlphaNode { struct bsavePatternNodeHeader header; long classbmp, slotbmp, patternNode, nxtInGroup, nxtTerminal; } BSAVE_OBJECT_ALPHA_NODE;#define BsaveObjectPatternIndex(op) ((op != NULL) ? op->bsaveID : -1L)#define BsaveObjectAlphaIndex(ap) ((ap != NULL) ? ap->bsaveID : -1L)#define ObjectPatternPointer(i) ((i == -1L) ? NULL : (OBJECT_PATTERN_NODE *) &PatternArray[i])#define ObjectAlphaPointer(i) ((i == -1L) ? NULL : (OBJECT_ALPHA_NODE *) &AlphaArray[i])/* ========================================= ***************************************** INTERNALLY VISIBLE FUNCTION HEADERS ========================================= ***************************************** */#if ANSI_COMPILER#if BLOAD_AND_BSAVEstatic VOID BsaveObjectPatternsFind(void);static VOID BsaveStorageObjectPatterns(FILE *);static VOID BsaveObjectPatterns(FILE *);#endifstatic VOID BloadStorageObjectPatterns(void);static VOID BloadObjectPatterns(void);static VOID UpdateAlpha(VOID *,long);static VOID UpdatePattern(VOID *,long);static VOID ClearBloadObjectPatterns(void);#else#if BLOAD_AND_BSAVEstatic VOID BsaveObjectPatternsFind();static VOID BsaveStorageObjectPatterns();static VOID BsaveObjectPatterns();#endifstatic VOID BloadStorageObjectPatterns();static VOID BloadObjectPatterns();static VOID UpdateAlpha();static VOID UpdatePattern();static VOID ClearBloadObjectPatterns();#endif /* ========================================= ***************************************** EXTERNALLY VISIBLE GLOBAL VARIABLES ========================================= ***************************************** *//* ========================================= ***************************************** INTERNALLY VISIBLE GLOBAL VARIABLES ========================================= ***************************************** */static long AlphaNodeCount = 0L, PatternNodeCount = 0L;static OBJECT_ALPHA_NODE HUGE_ADDR *AlphaArray = NULL;static OBJECT_PATTERN_NODE HUGE_ADDR *PatternArray = NULL; /* ========================================= ***************************************** EXTERNALLY VISIBLE FUNCTIONS ========================================= ***************************************** */ /*********************************************************** NAME : SetupObjectsBload DESCRIPTION : Initializes data structures and routines for binary loads of generic function constructs INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : Routines defined and structures initialized NOTES : None ***********************************************************/globle VOID SetupObjectPatternsBload() {#if BLOAD_AND_BSAVE AddBinaryItem("object patterns",0,BsaveObjectPatternsFind,NULL, BsaveStorageObjectPatterns,BsaveObjectPatterns, BloadStorageObjectPatterns,BloadObjectPatterns, ClearBloadObjectPatterns);#endif#if BLOAD || BLOAD_ONLY AddBinaryItem("object patterns",0,NULL,NULL,NULL,NULL, BloadStorageObjectPatterns,BloadObjectPatterns, ClearBloadObjectPatterns);#endif } /* ========================================= ***************************************** INTERNALLY VISIBLE FUNCTIONS ========================================= ***************************************** */#if BLOAD_AND_BSAVE/*************************************************** NAME : BsaveObjectPatternsFind DESCRIPTION : Sets the Bsave IDs for the object pattern data structures and determines how much space (including padding) is necessary for the alpha node bitmPS INPUTS : None RETURNS : Nothing useful SIDE EFFECTS : Counts written NOTES : None ***************************************************/static VOID BsaveObjectPatternsFind() { OBJECT_ALPHA_NODE *alphaPtr; OBJECT_PATTERN_NODE *patternPtr; if (Bloaded()) { SaveBloadCount(AlphaNodeCount); SaveBloadCount(PatternNodeCount); } AlphaNodeCount = 0L; alphaPtr = ObjectNetworkTerminalPointer(); while (alphaPtr != NULL) { alphaPtr->classbmp->neededBitMap = CLIPS_TRUE; if (alphaPtr->slotbmp != NULL) alphaPtr->slotbmp->neededBitMap = CLIPS_TRUE; alphaPtr->bsaveID = AlphaNodeCount++; alphaPtr = alphaPtr->nxtTerminal; } PatternNodeCount = 0L; patternPtr = ObjectNetworkPointer(); while (patternPtr != NULL) { patternPtr->bsaveID = PatternNodeCount++; if (patternPtr->nextLevel == NULL) { while (patternPtr->rightNode == NULL) { patternPtr = patternPtr->lastLevel; if (patternPtr == NULL) return; } patternPtr = patternPtr->rightNode; } else patternPtr = patternPtr->nextLevel; } } /**************************************************** NAME : BsaveStorageObjectPatterns DESCRIPTION : Writes out the number of bytes required for object pattern bitmaps, and the number of object pattern alpha an intermediate nodes INPUTS : Bsave file stream pointer RETURNS : Nothing useful SIDE EFFECTS : Counts written NOTES : None ****************************************************/static VOID BsaveStorageObjectPatterns(fp) FILE *fp; { UNLN space; space = sizeof(long) * 2; GenWrite(&space,(UNLN) sizeof(UNLN),fp); GenWrite(&AlphaNodeCount,(UNLN) sizeof(long),fp); GenWrite(&PatternNodeCount,(UNLN) sizeof(long),fp); } /*************************************************** NAME : BsaveObjectPatterns DESCRIPTION : Writes ouyt object pattern data structures to binary save file INPUTS : Bsave file stream pointer RETURNS : Nothing useful SIDE EFFECTS : Data structures written NOTES : Extra padding written with alpha node bitmaps to ensure correct alignment of structues on bload ***************************************************/static VOID BsaveObjectPatterns(fp) FILE *fp; { UNLN space; OBJECT_ALPHA_NODE *alphaPtr; OBJECT_PATTERN_NODE *patternPtr; BSAVE_OBJECT_ALPHA_NODE dummyAlpha; BSAVE_OBJECT_PATTERN_NODE dummyPattern;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -