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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? constrnt.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  07/01/05            */   /*                                                     */   /*                 CONSTRAINT MODULE                   */   /*******************************************************//*************************************************************//* 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):                               *//*      Brian Donnell                                        *//*                                                           *//* Revision History:                                         *//*      6.23: Correction for FalseSymbol/TrueSymbol. DR0859  *//*                                                           *//*      6.24: Added allowed-classes slot facet.              *//*                                                           *//*            Renamed BOOLEAN macro type to intBool.         *//*                                                           *//*************************************************************/#define _CONSTRNT_SOURCE_#include <stdio.h>#define _STDIO_INCLUDED_#include <stdlib.h>#include "setup.h"#include "argacces.h"#include "constant.h"#include "envrnmnt.h"#include "extnfunc.h"#include "memalloc.h"#include "multifld.h"#include "router.h"#include "scanner.h"#include "constrnt.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/#if (! RUN_TIME) && (! BLOAD_ONLY)   static void                     InstallConstraintRecord(void *,CONSTRAINT_RECORD *);   static int                      ConstraintCompare(struct constraintRecord *,struct constraintRecord *);#endif#if (! RUN_TIME)   static void                     ReturnConstraintRecord(void *,CONSTRAINT_RECORD *);   static void                     DeinstallConstraintRecord(void *,CONSTRAINT_RECORD *);#endif   static void                     DeallocateConstraintData(void *);/*****************************************************//* InitializeConstraints: Initializes the constraint *//*   hash table to NULL and defines the static and   *//*   dynamic constraint access functions.            *//*****************************************************/globle void InitializeConstraints(  void *theEnv)  {#if (! RUN_TIME) && (! BLOAD_ONLY)   int i;#endif   AllocateEnvironmentData(theEnv,CONSTRAINT_DATA,sizeof(struct constraintData),DeallocateConstraintData);      ConstraintData(theEnv)->StaticConstraintChecking = TRUE;   #if (! RUN_TIME) && (! BLOAD_ONLY)    ConstraintData(theEnv)->ConstraintHashtable = (struct constraintRecord **)                          gm2(theEnv,(int) sizeof (struct constraintRecord *) *                                    SIZE_CONSTRAINT_HASH);    if (ConstraintData(theEnv)->ConstraintHashtable == NULL) EnvExitRouter(theEnv,EXIT_FAILURE);    for (i = 0; i < SIZE_CONSTRAINT_HASH; i++) ConstraintData(theEnv)->ConstraintHashtable[i] = NULL;#endif#if (! RUN_TIME)   EnvDefineFunction2(theEnv,"get-dynamic-constraint-checking",'b',GDCCommand,"GDCCommand", "00");   EnvDefineFunction2(theEnv,"set-dynamic-constraint-checking",'b',SDCCommand,"SDCCommand", "11");   EnvDefineFunction2(theEnv,"get-static-constraint-checking",'b',GSCCommand,"GSCCommand", "00");   EnvDefineFunction2(theEnv,"set-static-constraint-checking",'b',SSCCommand,"SSCCommand", "11");#endif  }  /*****************************************************//* DeallocateConstraintData: Deallocates environment *//*    data for constraints.                          *//*****************************************************/static void DeallocateConstraintData(  void *theEnv)  {#if ! RUN_TIME      struct constraintRecord *tmpPtr, *nextPtr;   int i;   for (i = 0; i < SIZE_CONSTRAINT_HASH; i++)     {      tmpPtr = ConstraintData(theEnv)->ConstraintHashtable[i];      while (tmpPtr != NULL)        {         nextPtr = tmpPtr->next;         ReturnConstraintRecord(theEnv,tmpPtr);         tmpPtr = nextPtr;        }     }   rm(theEnv,ConstraintData(theEnv)->ConstraintHashtable,      (int) sizeof (struct constraintRecord *) * SIZE_CONSTRAINT_HASH);#else#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(theEnv)#endif#endif      #if (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) && (! RUN_TIME)   if (ConstraintData(theEnv)->NumberOfConstraints != 0)     {      genfree(theEnv,(void *) ConstraintData(theEnv)->ConstraintArray,              (sizeof(CONSTRAINT_RECORD) * ConstraintData(theEnv)->NumberOfConstraints));     }#endif  }#if (! RUN_TIME)/*************************************************************//* ReturnConstraintRecord: Frees the data structures used by *//*   a constraint record. If the returnOnlyFields argument   *//*   is FALSE, then the constraint record is also freed.     *//*************************************************************/static void ReturnConstraintRecord(  void *theEnv,  CONSTRAINT_RECORD *constraints)  {   if (constraints == NULL) return;   if (constraints->bucket < 0)     {      ReturnExpression(theEnv,constraints->classList);      ReturnExpression(theEnv,constraints->restrictionList);      ReturnExpression(theEnv,constraints->maxValue);      ReturnExpression(theEnv,constraints->minValue);      ReturnExpression(theEnv,constraints->minFields);      ReturnExpression(theEnv,constraints->maxFields);     }   ReturnConstraintRecord(theEnv,constraints->multifield);   rtn_struct(theEnv,constraintRecord,constraints);  }/***************************************************//* DeinstallConstraintRecord: Decrements the count *//*   values of all occurrences of primitive data   *//*   types found in a constraint record.           *//***************************************************/static void DeinstallConstraintRecord(  void *theEnv,  CONSTRAINT_RECORD *constraints)  {   if (constraints->bucket >= 0)     {      RemoveHashedExpression(theEnv,constraints->classList);      RemoveHashedExpression(theEnv,constraints->restrictionList);      RemoveHashedExpression(theEnv,constraints->maxValue);      RemoveHashedExpression(theEnv,constraints->minValue);      RemoveHashedExpression(theEnv,constraints->minFields);      RemoveHashedExpression(theEnv,constraints->maxFields);     }   else     {      ExpressionDeinstall(theEnv,constraints->classList);      ExpressionDeinstall(theEnv,constraints->restrictionList);      ExpressionDeinstall(theEnv,constraints->maxValue);      ExpressionDeinstall(theEnv,constraints->minValue);      ExpressionDeinstall(theEnv,constraints->minFields);      ExpressionDeinstall(theEnv,constraints->maxFields);     }   if (constraints->multifield != NULL)     { DeinstallConstraintRecord(theEnv,constraints->multifield); }  }/******************************************//* RemoveConstraint: Removes a constraint *//*   from the constraint hash table.      *//******************************************/globle void RemoveConstraint(  void *theEnv,  struct constraintRecord *theConstraint)  {   struct constraintRecord *tmpPtr, *prevPtr = NULL;   if (theConstraint == NULL) return;   /*========================================*/   /* If the bucket value is less than zero, */   /* then the constraint wasn't stored in   */   /* the hash table.                        */   /*========================================*/   if (theConstraint->bucket < 0)     {      ReturnConstraintRecord(theEnv,theConstraint);      return;     }   /*================================*/   /* Find and remove the constraint */   /* from the contraint hash table. */   /*================================*/   tmpPtr = ConstraintData(theEnv)->ConstraintHashtable[theConstraint->bucket];   while (tmpPtr != NULL)     {      if (tmpPtr == theConstraint)        {         theConstraint->count--;         if (theConstraint->count == 0)           {            if (prevPtr == NULL)              { ConstraintData(theEnv)->ConstraintHashtable[theConstraint->bucket] = theConstraint->next; }            else              { prevPtr->next = theConstraint->next; }            DeinstallConstraintRecord(theEnv,theConstraint);            ReturnConstraintRecord(theEnv,theConstraint);           }         return;        }      prevPtr = tmpPtr;      tmpPtr = tmpPtr->next;     }   return;  }#endif /* (! RUN_TIME) */#if (! RUN_TIME) && (! BLOAD_ONLY)/***********************************//* HashConstraint: Returns a hash  *//*   value for a given constraint. *//***********************************/globle int HashConstraint(  struct constraintRecord *theConstraint)  {   int i = 0;   unsigned int count = 0;   int hashValue;   struct expr *tmpPtr;   count += (unsigned)      (theConstraint->anyAllowed * 17) +      (theConstraint->symbolsAllowed * 5) +      (theConstraint->stringsAllowed * 23) +      (theConstraint->floatsAllowed * 19) +      (theConstraint->integersAllowed * 29) +      (theConstraint->instanceNamesAllowed * 31) +      (theConstraint->instanceAddressesAllowed * 17);   count += (unsigned)      (theConstraint->externalAddressesAllowed * 29) +      (theConstraint->voidAllowed * 29) +      (theConstraint->multifieldsAllowed * 29) +      (theConstraint->factAddressesAllowed * 79) +      (theConstraint->anyRestriction * 59) +      (theConstraint->symbolRestriction * 61);         count += (unsigned)      (theConstraint->stringRestriction * 3) +      (theConstraint->floatRestriction * 37) +      (theConstraint->integerRestriction * 9) +      (theConstraint->classRestriction * 11) +      (theConstraint->instanceNameRestriction * 7);   for (tmpPtr = theConstraint->classList; tmpPtr != NULL; tmpPtr = tmpPtr->nextArg)     { count += GetAtomicHashValue(tmpPtr->type,tmpPtr->value,i++); }   for (tmpPtr = theConstraint->restrictionList; tmpPtr != NULL; tmpPtr = tmpPtr->nextArg)     { count += GetAtomicHashValue(tmpPtr->type,tmpPtr->value,i++); }   for (tmpPtr = theConstraint->minValue; tmpPtr != NULL; tmpPtr = tmpPtr->nextArg)     { count += GetAtomicHashValue(tmpPtr->type,tmpPtr->value,i++); }   for (tmpPtr = theConstraint->maxValue; tmpPtr != NULL; tmpPtr = tmpPtr->nextArg)     { count += GetAtomicHashValue(tmpPtr->type,tmpPtr->value,i++); }   for (tmpPtr = theConstraint->minFields; tmpPtr != NULL; tmpPtr = tmpPtr->nextArg)     { count += GetAtomicHashValue(tmpPtr->type,tmpPtr->value,i++); }   for (tmpPtr = theConstraint->maxFields; tmpPtr != NULL; tmpPtr = tmpPtr->nextArg)     { count += GetAtomicHashValue(tmpPtr->type,tmpPtr->value,i++); }   if (theConstraint->multifield != NULL)     { count += (unsigned) HashConstraint(theConstraint->multifield); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品在线网站| 偷偷要91色婷婷| 中文字幕精品一区二区精品绿巨人| 日韩三级免费观看| 色呦呦国产精品| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 久久你懂得1024| 久久久久国产精品免费免费搜索 | 奇米色777欧美一区二区| 日韩精品亚洲一区二区三区免费| 亚洲国产精品自拍| 五月综合激情网| 免费人成精品欧美精品| 国产91丝袜在线播放0| 国产麻豆精品视频| 粉嫩一区二区三区性色av| 成人理论电影网| 一本到三区不卡视频| 欧美日韩一区二区三区不卡| 欧美精品第1页| 久久蜜桃一区二区| 中文字幕亚洲区| 亚洲精品国产高清久久伦理二区 | 欧美吻胸吃奶大尺度电影| 欧美视频在线观看一区二区| 日韩一区二区三区四区| 久久综合色婷婷| 中文字幕一区在线观看视频| 亚洲一二三区在线观看| 男人的天堂久久精品| 国产一区二区三区四| heyzo一本久久综合| 欧美日韩和欧美的一区二区| 精品免费日韩av| 亚洲婷婷综合久久一本伊一区| 一区二区三区在线视频免费| 美女网站色91| 99视频在线精品| 日韩一区二区三区视频在线 | 亚洲综合丁香婷婷六月香| 蜜臀久久久久久久| 国产iv一区二区三区| 欧美在线999| 精品免费国产一区二区三区四区| 1000部国产精品成人观看| 天天综合天天综合色| 成人一区二区在线观看| 欧美日韩aaa| 日本一区二区三区国色天香 | 亚洲成人动漫一区| 国产资源在线一区| 色天使色偷偷av一区二区| 欧美一级理论性理论a| 国产精品久久毛片av大全日韩| 偷拍一区二区三区| av一区二区三区四区| 欧美成人在线直播| 一区二区欧美视频| 国产精品12区| 欧美片网站yy| 中文字幕亚洲一区二区av在线| 久久99精品久久久久| 欧美在线观看一二区| 国产喷白浆一区二区三区| 爽爽淫人综合网网站| 99久精品国产| 久久久777精品电影网影网| 亚洲无人区一区| av不卡免费电影| 久久综合久久综合久久| 亚洲午夜久久久久中文字幕久| 懂色av一区二区三区蜜臀| 欧美一卡二卡在线观看| 亚洲亚洲精品在线观看| 成人一区二区三区在线观看| 精品国免费一区二区三区| 亚洲成av人片一区二区梦乃| 欧美高清dvd| 亚洲欧美一区二区不卡| 国产成人精品亚洲日本在线桃色| 日韩欧美国产综合一区 | 成人av集中营| 久久先锋影音av鲁色资源网| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩一区二区在线观看| 亚洲欧美综合在线精品| 国产成人在线观看| 久久综合色鬼综合色| 日本91福利区| 欧美精品一级二级三级| 亚洲国产一区二区三区青草影视 | 欧美极品美女视频| 国产精品资源网| 精品国产一区二区三区忘忧草 | 琪琪久久久久日韩精品| 欧美挠脚心视频网站| 亚洲一级电影视频| 在线观看不卡一区| 亚洲一区二区综合| 欧洲另类一二三四区| 一区二区久久久久| 色妞www精品视频| 自拍偷拍欧美激情| 9人人澡人人爽人人精品| 国产精品久久毛片| 99这里都是精品| 亚洲精品免费看| 91国模大尺度私拍在线视频| 亚洲乱码日产精品bd| 91丝袜高跟美女视频| 亚洲精品国产a| 欧美日韩亚洲综合在线| 日韩高清一区在线| 日韩色在线观看| 国产精品一区二区三区网站| 国产日产精品1区| av在线播放不卡| 亚洲一区在线视频| 日韩一区二区免费视频| 精品一区二区在线播放| 久久久99精品久久| 91同城在线观看| 亚洲成人资源在线| 欧美日韩美女一区二区| 丝袜美腿亚洲一区| 久久亚洲精华国产精华液 | 97久久精品人人做人人爽50路 | 成人中文字幕电影| 亚洲欧美日韩国产综合在线| 欧美日韩一区 二区 三区 久久精品| 五月天国产精品| www久久精品| 99精品视频免费在线观看| 一区二区视频在线看| 欧美另类videos死尸| 九九精品一区二区| 亚洲欧美自拍偷拍| 69av一区二区三区| 国产精品一区二区三区四区| 亚洲日本一区二区三区| 欧美一区二区三区在线观看| 国产精品自在在线| 亚洲一区二区三区激情| 欧美tk—视频vk| 91啪亚洲精品| 久久电影网站中文字幕| 亚洲天堂精品在线观看| 91精品国产综合久久香蕉麻豆| 国模大尺度一区二区三区| 亚洲色图一区二区三区| 日韩一区二区三区在线| av电影在线观看一区| 美女看a上一区| 亚洲视频一二区| 精品国产乱码久久久久久1区2区| 99久久精品久久久久久清纯| 日韩国产成人精品| 自拍偷拍国产亚洲| 欧美精品一区视频| 在线观看日产精品| 国产精品亚洲午夜一区二区三区 | 亚洲欧美激情一区二区| 国产精品国产三级国产专播品爱网| 91福利国产精品| 国产一区二区三区四| 午夜欧美电影在线观看| 国产精品每日更新| 日韩欧美一区在线| 欧美综合在线视频| 成人国产一区二区三区精品| 久久99久久久久久久久久久| 亚洲精品午夜久久久| 中文字幕精品综合| 精品久久久久久久久久久久包黑料| 欧美在线不卡一区| www..com久久爱| 国产一区二区三区免费| 青青国产91久久久久久| 亚洲一区免费观看| 最好看的中文字幕久久| 久久一区二区三区国产精品| 3d动漫精品啪啪一区二区竹菊| 色呦呦国产精品| 99国产一区二区三精品乱码| 国产成人激情av| 久久国产人妖系列| 亚洲一区二区三区四区中文字幕| 国产精品无码永久免费888| 欧美大片在线观看一区二区| 欧美日韩高清在线播放| 色久综合一二码| 99国产精品久久久久久久久久久| 丁香天五香天堂综合| 经典三级视频一区| 免费在线看成人av| 亚洲成人免费视频| 午夜精品一区在线观看| 亚洲一区二区偷拍精品| 玉米视频成人免费看| 一区二区三区.www|