⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userdata.c

📁 clips源代码
💻 C
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.20  01/31/02            */   /*                                                     */   /*                  USER DATA MODULE                   */   /*******************************************************//*************************************************************//* Purpose: Routines for attaching user data to constructs,  *//*   facts, instances, user functions, etc.                  *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Revision History:                                         *//*                                                           *//*************************************************************/#define _USERDATA_SOURCE_#include <stdlib.h>#include "setup.h"#include "envrnmnt.h"#include "userdata.h"/*************************************************//* InitializeUserDataData: Allocates environment *//*    data for user data routines.               *//*************************************************/globle void InitializeUserDataData(  void *theEnv)  {   AllocateEnvironmentData(theEnv,USER_DATA_DATA,sizeof(struct userDataData),NULL);  }/******************************************************//* InstallUserDataRecord: Installs a user data record *//*   in the user data record array and returns the    *//*   integer data ID associated with the record.      *//******************************************************/globle unsigned char InstallUserDataRecord(  void *theEnv,  struct userDataRecord *theRecord)  {   theRecord->dataID = UserDataData(theEnv)->UserDataRecordCount;   UserDataData(theEnv)->UserDataRecordArray[UserDataData(theEnv)->UserDataRecordCount] = theRecord;   return(UserDataData(theEnv)->UserDataRecordCount++);  }  /*****************************************************//* FetchUserData: Searches for user data information *//*   from a list of user data structures. A new user *//*   data structure is created if one is not found.  *//*****************************************************/globle struct userData *FetchUserData(  void *theEnv,  unsigned char userDataID,  struct userData **theList)  {   struct userData *theData;   for (theData = *theList;        theData != NULL;        theData = theData->next)     {      if (theData->dataID == userDataID)        { return(theData); }     }        theData = (struct userData *) (*UserDataData(theEnv)->UserDataRecordArray[userDataID]->createUserData)(theEnv);   theData->dataID = userDataID;   theData->next = *theList;   *theList = theData;      return(theData);     }/*****************************************************//* TestUserData: Searches for user data information  *//*   from a list of user data structures. NULL is    *//*   returned if the appropriate user data structure *//*   is not found.                                   *//*****************************************************/globle struct userData *TestUserData(  unsigned char userDataID,  struct userData *theList)  {   struct userData *theData;      for (theData = theList;        theData != NULL;        theData = theData->next)     {      if (theData->dataID == userDataID)        { return(theData); }     }           return(NULL);     }/***************************************************************//* ClearUserDataList: Deallocates a linked list of user data.  *//***************************************************************/globle void ClearUserDataList(  void *theEnv,  struct userData *theList)  {   struct userData *nextData;      while (theList != NULL)     {      nextData = theList->next;      (*UserDataData(theEnv)->UserDataRecordArray[theList->dataID]->deleteUserData)(theEnv,theList);      theList = nextData;     }  }  /*************************************************//* DeleteUserData: Removes user data information *//*   from a list of user data structures.        *//*************************************************/globle struct userData *DeleteUserData(  void *theEnv,  unsigned char userDataID,  struct userData *theList)  {   struct userData *theData, *lastData = NULL;      for (theData = theList;        theData != NULL;        theData = theData->next)     {      if (theData->dataID == userDataID)        {          if (lastData == NULL)           { theList = theData->next; }         else           { lastData->next = theData->next; }                     (*UserDataData(theEnv)->UserDataRecordArray[userDataID]->deleteUserData)(theEnv,theData);         return(theList);        }              lastData = theData;     }           return(theList);     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -