亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? envrnmnt.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.30  10/19/06            */   /*                                                     */   /*                ENVIRONMENT MODULE                   */   /*******************************************************//*************************************************************//* 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.                     *//*                                                           *//*************************************************************/#define _ENVRNMNT_SOURCE_#include <stdlib.h>#include <stdio.h>#include <string.h>#include "setup.h"#include "memalloc.h"#include "prntutil.h"#include "router.h"#include "engine.h"#include "sysdep.h"#include "utility.h"#include "envrnmnt.h"#define SIZE_ENVIRONMENT_HASH  131/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/#if ALLOW_ENVIRONMENT_GLOBALS   static void                    AddHashedEnvironment(struct environmentData *);   static struct environmentData *FindEnvironment(unsigned long);   static intBool                 RemoveHashedEnvironment(struct environmentData *);   static void                    InitializeEnvironmentHashTable(void);#endif   static void                    RemoveEnvironmentCleanupFunctions(struct environmentData *);   static void                   *CreateEnvironmentDriver(struct symbolHashNode **,struct floatHashNode **,                                                          struct integerHashNode **,struct bitMapHashNode **);/***************************************//* LOCAL INTERNAL VARIABLE DEFINITIONS *//***************************************/#if ALLOW_ENVIRONMENT_GLOBALS   static unsigned long              NextEnvironmentIndex = 0;   static struct environmentData   **EnvironmentHashTable = NULL;   static struct environmentData    *CurrentEnvironment = NULL;#endif/*******************************************************//* AllocateEnvironmentData: Allocates environment data *//*    for the specified environment data record.       *//*******************************************************/globle intBool AllocateEnvironmentData(  void *vtheEnvironment,  unsigned int position,  unsigned long size,  void (*cleanupFunction)(void *))  {         struct environmentData *theEnvironment = (struct environmentData *) vtheEnvironment;   /*===========================================*/   /* Environment data can't be of length zero. */   /*===========================================*/      if (size <= 0)     {      printf("\n[ENVRNMNT1] Environment data position %d allocated with size of 0 or less.\n",position);            return(FALSE);     }        /*================================================================*/   /* Check to see if the data position exceeds the maximum allowed. */   /*================================================================*/      if (position >= MAXIMUM_ENVIRONMENT_POSITIONS)     {      printf("\n[ENVRNMNT2] Environment data position %d exceeds the maximum allowed.\n",position);            return(FALSE);     }        /*============================================================*/   /* Check if the environment data has already been registered. */   /*============================================================*/      if (theEnvironment->theData[position] != NULL)     {      printf("\n[ENVRNMNT3] Environment data position %d already allocated.\n",position);            return(FALSE);     }        /*====================*/   /* Allocate the data. */   /*====================*/      theEnvironment->theData[position] = malloc(size);   if (theEnvironment->theData[position] == NULL)     {      printf("\n[ENVRNMNT4] Environment data position %d could not be allocated.\n",position);            return(FALSE);     }      memset(theEnvironment->theData[position],0,size);      /*=============================*/   /* Store the cleanup function. */   /*=============================*/      theEnvironment->cleanupFunctions[position] = cleanupFunction;      /*===============================*/   /* Data successfully registered. */   /*===============================*/      return(TRUE);  }/***************************************************************//* DeallocateEnvironmentData: Deallocates all environments     *//*   stored in the environment hash table and then deallocates *//*   the environment hash table.                               *//***************************************************************/globle intBool DeallocateEnvironmentData()  {#if ALLOW_ENVIRONMENT_GLOBALS   struct environmentData *theEnvironment, *nextEnvironment;   int i, rv = TRUE;      for (i = 0; i < SIZE_ENVIRONMENT_HASH; i++)     {      for (theEnvironment = EnvironmentHashTable[i];           theEnvironment != NULL;          )        {         nextEnvironment = theEnvironment->next;                  if (! DestroyEnvironment(theEnvironment))           { rv = FALSE; }                  theEnvironment = nextEnvironment;        }     }   free(EnvironmentHashTable);      return(rv);#else   return(FALSE);#endif  }#if ALLOW_ENVIRONMENT_GLOBALS/*********************************************************//* InitializeEnvironmentHashTable: Initializes the table *//*   entries in the environment hash table to NULL.      *//*********************************************************/static void InitializeEnvironmentHashTable()  {   int i;       if (EnvironmentHashTable != NULL)     { return; }   EnvironmentHashTable = (struct environmentData **)                          malloc(sizeof (struct environmentData *) * SIZE_ENVIRONMENT_HASH);   if (EnvironmentHashTable == NULL)     {      printf("\n[ENVRNMNT4] Unable to initialize environment hash table.\n");            return;     }   for (i = 0; i < SIZE_ENVIRONMENT_HASH; i++) EnvironmentHashTable[i] = NULL;  }/*********************************************//* AddHashedEnvironment: Adds an environment *//*    entry to the environment hash table.   *//*********************************************/static void AddHashedEnvironment(  struct environmentData *theEnvironment)  {   struct environmentData *temp;   unsigned long hashValue;      if (EnvironmentHashTable == NULL)     { InitializeEnvironmentHashTable(); }        hashValue = theEnvironment->environmentIndex % SIZE_ENVIRONMENT_HASH;   temp = EnvironmentHashTable[hashValue];   EnvironmentHashTable[hashValue] = theEnvironment;   theEnvironment->next = temp;  }  /***************************************************//* RemoveHashedEnvironment: Removes an environment *//*   entry from the environment hash table.        *//***************************************************/static intBool RemoveHashedEnvironment(  struct environmentData *theEnvironment)  {   unsigned long hashValue;   struct environmentData *hptr, *prev;   hashValue = theEnvironment->environmentIndex % SIZE_ENVIRONMENT_HASH;   for (hptr = EnvironmentHashTable[hashValue], prev = NULL;        hptr != NULL;        hptr = hptr->next)     {      if (hptr == theEnvironment)        {         if (prev == NULL)           {            EnvironmentHashTable[hashValue] = hptr->next;            return(TRUE);           }         else           {            prev->next = hptr->next;            return(TRUE);           }        }      prev = hptr;     }   return(FALSE);  }/**********************************************************//* FindEnvironment: Determines if a specified environment *//*   index has an entry in the environment hash table.    *//**********************************************************/static struct environmentData *FindEnvironment(  unsigned long environmentIndex)  {   struct environmentData *theEnvironment;   unsigned long hashValue;      hashValue = environmentIndex % SIZE_ENVIRONMENT_HASH;      for (theEnvironment = EnvironmentHashTable[hashValue];        theEnvironment != NULL;        theEnvironment = theEnvironment->next)     {      if (theEnvironment->environmentIndex == environmentIndex)        { return(theEnvironment); }     }   return(NULL);  }#endif/************************************************************//* CreateEnvironment: Creates an environment data structure *//*   and initializes its content to zero/null.              *//************************************************************/globle void *CreateEnvironment()  {   return CreateEnvironmentDriver(NULL,NULL,NULL,NULL);  }/**********************************************************//* CreateRuntimeEnvironment: Creates an environment data  *//*   structure and initializes its content to zero/null.  *//**********************************************************/globle void *CreateRuntimeEnvironment(  struct symbolHashNode **symbolTable,  struct floatHashNode **floatTable,  struct integerHashNode **integerTable,  struct bitMapHashNode **bitmapTable)  {   return CreateEnvironmentDriver(symbolTable,floatTable,integerTable,bitmapTable);  }  /*********************************************************//* CreateEnvironmentDriver: Creates an environment data  *//*   structure and initializes its content to zero/null. *//*********************************************************/globle void *CreateEnvironmentDriver(  struct symbolHashNode **symbolTable,  struct floatHashNode **floatTable,  struct integerHashNode **integerTable,  struct bitMapHashNode **bitmapTable)  {   struct environmentData *theEnvironment;   void *theData;      theEnvironment = (struct environmentData *) malloc(sizeof(struct environmentData));     if (theEnvironment == NULL)     {      printf("\n[ENVRNMNT5] Unable to create new environment.\n");      return(NULL);     }   theData = malloc(sizeof(void *) * MAXIMUM_ENVIRONMENT_POSITIONS);      if (theData == NULL)     {      free(theEnvironment);      printf("\n[ENVRNMNT6] Unable to create environment data.\n");      return(NULL);     }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性高清videossexo| 亚洲欧洲国产日本综合| 国产91富婆露脸刺激对白| 亚洲品质自拍视频| 日韩你懂的在线播放| 99精品视频在线免费观看| 久久国内精品自在自线400部| 亚洲婷婷综合色高清在线| 精品国产91久久久久久久妲己| 日本乱人伦aⅴ精品| 国产美女精品人人做人人爽| 亚洲成a人片在线不卡一二三区| 精品国产91九色蝌蚪| 欧美浪妇xxxx高跟鞋交| 色综合久久66| 99久久精品国产毛片| 国产精品白丝在线| 国产精品久久久久久久久图文区| 欧美日本高清视频在线观看| 波多野结衣亚洲| 国产美女久久久久| 久久福利资源站| 三级在线观看一区二区| 日av在线不卡| 亚洲成年人网站在线观看| 中文字幕在线不卡视频| 国产欧美一区二区精品久导航 | 欧美亚洲日本国产| 99久久婷婷国产综合精品电影| 国产精品一品视频| 国产激情一区二区三区四区| 老司机免费视频一区二区| 天堂久久久久va久久久久| 亚洲夂夂婷婷色拍ww47| 一级日本不卡的影视| 亚洲欧美日韩一区二区三区在线观看 | 国精产品一区一区三区mba视频| 日韩综合小视频| 亚洲色图色小说| 亚洲色图视频网站| 久久久91精品国产一区二区精品 | 日韩欧美视频一区| 日韩一区二区高清| 欧美一区二区大片| 这里是久久伊人| 日韩欧美一二三| 久久亚洲影视婷婷| 国产亚洲一二三区| 欧美极品aⅴ影院| 国产精品免费看片| 亚洲欧美色图小说| 亚洲国产综合视频在线观看| 亚洲成人高清在线| 人人狠狠综合久久亚洲| 国精产品一区一区三区mba视频 | 欧美一级欧美三级在线观看| 欧美一级生活片| 亚洲精品一区二区三区影院| 久久久高清一区二区三区| 国产精品不卡视频| 亚洲第四色夜色| 美女视频黄久久| 国产91精品一区二区麻豆网站| 成人黄色软件下载| 在线观看免费一区| 欧美xxxxxxxx| 国产精品欧美一区二区三区| 亚洲精品免费电影| 日本最新不卡在线| 国产福利精品一区| 在线免费观看成人短视频| 91精品在线免费| 国产三级欧美三级| 亚洲免费观看视频| 日韩影院在线观看| 丁香天五香天堂综合| 色综合视频一区二区三区高清| 欧美日韩国产精品成人| 久久久亚洲高清| 夜夜亚洲天天久久| 国产一区激情在线| 色噜噜狠狠成人网p站| 欧美xfplay| 亚洲卡通欧美制服中文| 青青草伊人久久| 99久久婷婷国产综合精品电影| 欧美精品aⅴ在线视频| 国产女同互慰高潮91漫画| 午夜欧美电影在线观看| 大美女一区二区三区| 欧美性猛交一区二区三区精品| 国产亚洲综合色| 亚洲一区视频在线观看视频| 成人av午夜影院| 国产欧美精品国产国产专区| 成人午夜伦理影院| 中文字幕一区二区三中文字幕| 麻豆国产欧美日韩综合精品二区 | 欧美tickling挠脚心丨vk| 国产欧美一二三区| 日日骚欧美日韩| 99精品视频中文字幕| 精品免费日韩av| 亚洲第一综合色| 不卡一卡二卡三乱码免费网站| 欧美一级二级在线观看| 亚洲精品亚洲人成人网| 粉嫩绯色av一区二区在线观看| 91精品婷婷国产综合久久| 专区另类欧美日韩| 国产成人av网站| 日韩女优电影在线观看| 亚洲一区二区三区视频在线 | 久久天堂av综合合色蜜桃网| 欧美日韩国产另类一区| 国产精品自拍一区| 国产成人免费在线观看不卡| 91在线国产观看| 国产丝袜欧美中文另类| 精品亚洲成a人| 欧美一区二区三区系列电影| 亚洲一区在线视频观看| 91视频免费观看| 一片黄亚洲嫩模| 99久久久国产精品免费蜜臀| 亚洲国产高清aⅴ视频| 国产一区二区三区四区在线观看| 91精品欧美综合在线观看最新| 一区二区三区四区高清精品免费观看 | 日韩美女一区二区三区| 日本午夜精品视频在线观看| 欧美日韩精品一区二区在线播放| 亚洲一级二级在线| 色悠悠久久综合| 亚洲人午夜精品天堂一二香蕉| 不卡视频一二三| 日韩美女视频一区二区| 色域天天综合网| 亚洲免费观看视频| 亚洲va欧美va国产va天堂影院| 久久99精品视频| 日韩精品一区二区三区四区视频 | 欧美视频在线一区| 一区二区三区视频在线看| 色综合色综合色综合色综合色综合 | 欧美一区二区视频在线观看| 午夜久久久久久电影| 欧美人狂配大交3d怪物一区| 日韩高清不卡在线| 日韩一区二区免费高清| 韩国毛片一区二区三区| 久久久www免费人成精品| 成人性生交大片| 亚洲免费在线看| 欧美色综合久久| 青青国产91久久久久久| 久久久国产综合精品女国产盗摄| 成人自拍视频在线观看| 亚洲天堂网中文字| 欧美日韩国产一二三| 久久狠狠亚洲综合| 日本一区二区三区四区 | 精品国产乱码久久久久久久久 | 色哟哟一区二区| 天天av天天翘天天综合网色鬼国产 | 欧美日韩国产美| 精品一二三四区| 中文字幕综合网| 欧美一区二区黄| 成人免费看黄yyy456| 亚洲自拍偷拍麻豆| 日韩免费成人网| 暴力调教一区二区三区| 一区二区免费在线| 日韩久久久精品| 91原创在线视频| 日产欧产美韩系列久久99| 中文字幕av一区二区三区高| 91福利视频在线| 久久99在线观看| 亚洲欧美日韩一区| 精品国产网站在线观看| 日本电影亚洲天堂一区| 久久精品国产成人一区二区三区| 中文字幕欧美一区| 91精品欧美久久久久久动漫 | 在线日韩一区二区| 国产一区二区三区免费| 亚洲男人天堂av| www欧美成人18+| 欧美日韩视频第一区| 丁香网亚洲国际| 玖玖九九国产精品| 亚洲综合激情网| 国产精品久久久久久久第一福利 | 国产精品理论在线观看| 日韩欧美激情四射| 欧美自拍偷拍一区| 国产成人av电影| 精品一区二区成人精品|