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

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

?? cstrnops.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  07/01/05            */   /*                                                     */   /*            CONSTRAINT OPERATIONS MODULE             */   /*******************************************************//*************************************************************//* Purpose: Provides functions for performing operations on  *//*   constraint records including computing the intersection *//*   and union of constraint records.                        *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*                                                           *//*      6.24: Added allowed-classes slot facet.              *//*                                                           *//*************************************************************/#define _CSTRNOPS_SOURCE_#include "setup.h"#include <stdio.h>#define _STDIO_INCLUDED_#include <stdlib.h>#if (! RUN_TIME)#include "constant.h"#include "envrnmnt.h"#include "memalloc.h"#include "router.h"#include "extnfunc.h"#include "scanner.h"#include "multifld.h"#include "constrnt.h"#include "cstrnchk.h"#include "cstrnutl.h"#include "cstrnops.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static void                     IntersectNumericExpressions(void *,                                                               CONSTRAINT_RECORD *,                                                               CONSTRAINT_RECORD *,                                                               CONSTRAINT_RECORD *,int);   static void                     IntersectAllowedValueExpressions(void *,                                                                    CONSTRAINT_RECORD *,                                                                    CONSTRAINT_RECORD *,                                                                    CONSTRAINT_RECORD *);   static void                     IntersectAllowedClassExpressions(void *,                                                                    CONSTRAINT_RECORD *,                                                                    CONSTRAINT_RECORD *,                                                                    CONSTRAINT_RECORD *);   static int                      FindItemInExpression(int,void *,int,struct expr *);   static void                     UpdateRestrictionFlags(CONSTRAINT_RECORD *);#if (! BLOAD_ONLY)   static void                     UnionRangeMinMaxValueWithList(void *,                                                                 struct expr *,                                                                 struct expr *,                                                                 struct expr **,                                                                 struct expr **);   static void                     UnionNumericExpressions(void *,                                                         CONSTRAINT_RECORD *,                                                         CONSTRAINT_RECORD *,                                                         CONSTRAINT_RECORD *,int);   static struct expr             *AddToUnionList(void *,                                                  struct expr *,struct expr *,                                                  CONSTRAINT_RECORD *);   static void                     UnionAllowedValueExpressions(void *,                                                                CONSTRAINT_RECORD *,                                                                CONSTRAINT_RECORD *,                                                                CONSTRAINT_RECORD *);   static void                     UnionAllowedClassExpressions(void *,                                                                CONSTRAINT_RECORD *,                                                                CONSTRAINT_RECORD *,                                                                CONSTRAINT_RECORD *);   static int                      RestrictionOnType(int,CONSTRAINT_RECORD *);#endif/**************************************************************//* IntersectConstraints: Creates a new constraint record that *//*   is the intersection of two other constraint records.     *//**************************************************************/globle struct constraintRecord *IntersectConstraints(  void *theEnv,  CONSTRAINT_RECORD *c1,  CONSTRAINT_RECORD *c2)  {   struct constraintRecord *rv;   int c1Changed = FALSE, c2Changed = FALSE;   /*=================================================*/   /* If both constraint records are NULL,then create */   /* a constraint record that allows any value.      */   /*=================================================*/   if ((c1 == NULL) && (c2 == NULL))     {      rv = GetConstraintRecord(theEnv);      rv->multifieldsAllowed = TRUE;      return(rv);     }   /*=================================================*/   /* If one of the constraint records is NULL, then  */   /* the intersection is the other constraint record */   /* (a NULL value means no constraints).            */   /*=================================================*/   if (c1 == NULL) return(CopyConstraintRecord(theEnv,c2));   if (c2 == NULL) return(CopyConstraintRecord(theEnv,c1));   /*=================================*/   /* Create a new constraint record. */   /*=================================*/   rv = GetConstraintRecord(theEnv);   /*==============================*/   /* Intersect the allowed types. */   /*==============================*/   if ((c1->multifieldsAllowed != c2->multifieldsAllowed) &&       (c1->singlefieldsAllowed != c2->singlefieldsAllowed))     {      rv->anyAllowed = FALSE;      return(rv);     }   if (c1->multifieldsAllowed && c2->multifieldsAllowed)     { rv->multifieldsAllowed = TRUE; }   else     { rv->multifieldsAllowed = FALSE; }   if (c1->singlefieldsAllowed && c2->singlefieldsAllowed)     { rv->singlefieldsAllowed = TRUE; }   else     { rv->singlefieldsAllowed = FALSE; }   if (c1->anyAllowed && c2->anyAllowed) rv->anyAllowed = TRUE;   else     {      if (c1->anyAllowed)        {         c1Changed = TRUE;         SetAnyAllowedFlags(c1,FALSE);        }      else if (c2->anyAllowed)        {         c2Changed = TRUE;         SetAnyAllowedFlags(c2,FALSE);        }      rv->anyAllowed = FALSE;      rv->symbolsAllowed = (c1->symbolsAllowed && c2->symbolsAllowed);      rv->stringsAllowed = (c1->stringsAllowed && c2->stringsAllowed);      rv->floatsAllowed = (c1->floatsAllowed && c2->floatsAllowed);      rv->integersAllowed = (c1->integersAllowed && c2->integersAllowed);      rv->instanceNamesAllowed = (c1->instanceNamesAllowed && c2->instanceNamesAllowed);      rv->instanceAddressesAllowed = (c1->instanceAddressesAllowed && c2->instanceAddressesAllowed);      rv->externalAddressesAllowed = (c1->externalAddressesAllowed && c2->externalAddressesAllowed);      rv->voidAllowed = (c1->voidAllowed && c2->voidAllowed);      rv->multifieldsAllowed = (c1->multifieldsAllowed && c2->multifieldsAllowed);      rv->factAddressesAllowed = (c1->factAddressesAllowed && c2->factAddressesAllowed);      if (c1Changed) SetAnyAllowedFlags(c1,TRUE);      if (c2Changed) SetAnyAllowedFlags(c2,TRUE);     }   /*=====================================*/   /* Intersect the allowed-values flags. */   /*=====================================*/   if (c1->anyRestriction || c2->anyRestriction) rv->anyRestriction = TRUE;   else     {      rv->anyRestriction = FALSE;      rv->symbolRestriction = (c1->symbolRestriction || c2->symbolRestriction);      rv->stringRestriction = (c1->stringRestriction || c2->stringRestriction);      rv->floatRestriction = (c1->floatRestriction || c2->floatRestriction);      rv->integerRestriction = (c1->integerRestriction || c2->integerRestriction);      rv->classRestriction = (c1->classRestriction || c2->classRestriction);      rv->instanceNameRestriction = (c1->instanceNameRestriction || c2->instanceNameRestriction);     }   /*==================================================*/   /* Intersect the allowed values list, allowed class */   /* list, min and max values, and the range values.  */   /*==================================================*/   IntersectAllowedValueExpressions(theEnv,c1,c2,rv);   IntersectAllowedClassExpressions(theEnv,c1,c2,rv);   IntersectNumericExpressions(theEnv,c1,c2,rv,TRUE);   IntersectNumericExpressions(theEnv,c1,c2,rv,FALSE);   /*==========================================*/   /* Update the allowed-values flags based on */   /* the previous intersection for allowed,   */   /* min and max, and range values.           */   /*==========================================*/   UpdateRestrictionFlags(rv);   /*============================================*/   /* If multifields are allowed, then intersect */   /* the constraint record for them.            */   /*============================================*/   if (rv->multifieldsAllowed)     {      rv->multifield = IntersectConstraints(theEnv,c1->multifield,c2->multifield);      if (UnmatchableConstraint(rv->multifield))        { rv->multifieldsAllowed = FALSE; }     }   /*========================*/   /* Return the intersected */   /* constraint record.     */   /*========================*/   return(rv);  }/*************************************************//* IntersectAllowedValueExpressions: Creates the *//*   intersection of two allowed-values lists.   *//*************************************************/static void IntersectAllowedValueExpressions(  void *theEnv,  CONSTRAINT_RECORD *constraint1,  CONSTRAINT_RECORD *constraint2,  CONSTRAINT_RECORD *newConstraint)  {   struct expr *theList1, *theList2;   struct expr *theHead = NULL, *tmpExpr;   /*===========================================*/   /* Loop through each value in allowed-values */   /* list of the first constraint record. Add  */   /* each value to a list if it satisfies the  */   /* restrictions for both constraint records. */   /*===========================================*/   for (theList1 = constraint1->restrictionList;        theList1 != NULL;        theList1 = theList1->nextArg)     {      if (CheckAllowedValuesConstraint(theList1->type,theList1->value,constraint1) &&          CheckAllowedValuesConstraint(theList1->type,theList1->value,constraint2))        {         tmpExpr = GenConstant(theEnv,theList1->type,theList1->value);         tmpExpr->nextArg = theHead;         theHead = tmpExpr;        }     }   /*===========================================*/   /* Loop through each value in allowed-values */   /* list of the second constraint record. Add */   /* each value to a list if it satisfies the  */   /* restrictions for both constraint records. */   /*===========================================*/   for (theList2 = constraint2->restrictionList;        theList2 != NULL;        theList2 = theList2->nextArg)     {      if (FindItemInExpression(theList2->type,theList2->value,TRUE,theHead))        { /* The value is already in the list--Do nothing */ }      else if (CheckAllowedValuesConstraint(theList2->type,theList2->value,constraint1) &&               CheckAllowedValuesConstraint(theList2->type,theList2->value,constraint2))        {         tmpExpr = GenConstant(theEnv,theList2->type,theList2->value);         tmpExpr->nextArg = theHead;         theHead = tmpExpr;        }     }   /*================================================*/   /* Set the allowed values list for the constraint */   /* record to the intersected values of the two    */   /* other constraint records.                      */   /*================================================*/   newConstraint->restrictionList = theHead;  }  /*************************************************//* IntersectAllowedClassExpressions: Creates the *//*   intersection of two allowed-classes lists.  *//*************************************************/static void IntersectAllowedClassExpressions(  void *theEnv,  CONSTRAINT_RECORD *constraint1,  CONSTRAINT_RECORD *constraint2,  CONSTRAINT_RECORD *newConstraint)  {   struct expr *theList1, *theList2;   struct expr *theHead = NULL, *tmpExpr;   /*============================================*/   /* Loop through each value in allowed-classes */   /* list of the first constraint record. Add   */   /* each value to a list if it satisfies the   */   /* restrictions for both constraint records.  */   /*============================================*/      for (theList1 = constraint1->classList;        theList1 != NULL;        theList1 = theList1->nextArg)     {      if (CheckAllowedClassesConstraint(theEnv,theList1->type,theList1->value,constraint1) &&          CheckAllowedClassesConstraint(theEnv,theList1->type,theList1->value,constraint2))        {         tmpExpr = GenConstant(theEnv,theList1->type,theList1->value);         tmpExpr->nextArg = theHead;         theHead = tmpExpr;        }     }   /*============================================*/   /* Loop through each value in allowed-classes */   /* list of the second constraint record. Add  */   /* each value to a list if it satisfies the   */   /* restrictions for both constraint records.  */   /*============================================*/   for (theList2 = constraint2->classList;        theList2 != NULL;        theList2 = theList2->nextArg)     {      if (FindItemInExpression(theList2->type,theList2->value,TRUE,theHead))        { /* The value is already in the list--Do nothing */ }      else if (CheckAllowedClassesConstraint(theEnv,theList2->type,theList2->value,constraint1) &&               CheckAllowedClassesConstraint(theEnv,theList2->type,theList2->value,constraint2))        {         tmpExpr = GenConstant(theEnv,theList2->type,theList2->value);         tmpExpr->nextArg = theHead;         theHead = tmpExpr;        }     }   /*=================================================*/   /* Set the allowed classes list for the constraint */   /* record to the intersected values of the two     */   /* other constraint records.                       */   /*=================================================*/   newConstraint->classList = theHead;  }  /*********************************************************//* IntersectNumericExpressions: Creates the intersection *//*   of two range or two min/max-fields constraints.     *//*********************************************************/static void IntersectNumericExpressions(  void *theEnv,  CONSTRAINT_RECORD *constraint1,  CONSTRAINT_RECORD *constraint2,  CONSTRAINT_RECORD *newConstraint,  int range)  {   struct expr *tmpmin1, *tmpmax1, *tmpmin2, *tmpmax2, *theMin, *theMax;   struct expr *theMinList, *theMaxList, *lastMin = NULL, *lastMax = NULL;   int cmaxmax, cminmin, cmaxmin, cminmax;   /*==========================================*/   /* Initialize the new range/min/max values  */   /* for the intersection of the constraints. */   /*==========================================*/   theMinList = NULL;   theMaxList = NULL;   /*=================================*/   /* Determine the min/max values of */   /* the first constraint record.    */   /*=================================*/   if (range)     {      tmpmin1 = constraint1->minValue;      tmpmax1 = constraint1->maxValue;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区四区| 久久综合久久综合久久综合| 亚洲r级在线视频| 欧美一区日韩一区| 国产老肥熟一区二区三区| 国产精品久久久久久久久久免费看 | 日韩欧美国产电影| 国产专区欧美精品| 亚洲三级久久久| 欧美电视剧在线看免费| 99精品欧美一区二区三区综合在线| 亚洲成人一区二区| 久久蜜桃av一区精品变态类天堂 | 裸体歌舞表演一区二区| 国产三级欧美三级日产三级99| 欧美无砖专区一中文字| 国产一区二区三区日韩 | 欧美福利一区二区| 国产成人精品免费视频网站| 亚洲已满18点击进入久久| 精品乱人伦小说| 欧美色男人天堂| 成人国产精品免费观看视频| 亚洲视频 欧洲视频| 国产欧美一区二区精品婷婷| 欧美久久一二三四区| 国产一区二区三区四区五区入口 | 91福利精品视频| 国产真实乱子伦精品视频| 亚洲国产日韩一级| 国产精品女主播在线观看| 欧美疯狂做受xxxx富婆| 91麻豆国产精品久久| 国产经典欧美精品| 青青国产91久久久久久 | 精品日韩成人av| 欧美视频在线一区二区三区| 成人午夜在线播放| 久久99精品国产| 日本一道高清亚洲日美韩| 一色屋精品亚洲香蕉网站| 欧美一二三区在线观看| 欧美日韩国产乱码电影| 99re热视频精品| 国产91丝袜在线18| 国产成人精品在线看| 久88久久88久久久| 亚洲成av人综合在线观看| 中文字幕在线视频一区| 欧美国产亚洲另类动漫| 337p日本欧洲亚洲大胆色噜噜| 777色狠狠一区二区三区| 欧美日韩在线电影| 欧美夫妻性生活| 91精品久久久久久久久99蜜臂| 欧美日本国产视频| 日韩欧美电影一区| 亚洲精品一区二区三区香蕉| 国产日韩欧美a| 日韩伦理av电影| 亚洲一二三四久久| 日本中文在线一区| 国产成人av自拍| 日本电影欧美片| 欧美一区二区三区四区高清 | 欧美精品一区二区高清在线观看 | 欧美一区二区免费| 久久久久久免费| 亚洲欧洲成人精品av97| 亚洲国产欧美一区二区三区丁香婷| 丝袜美腿亚洲综合| 国产成人无遮挡在线视频| 一本色道久久综合精品竹菊| 91精品国产高清一区二区三区| 久久久久9999亚洲精品| 亚洲欧美日韩精品久久久久| 天天综合色天天综合色h| 韩国欧美国产1区| 色综合久久六月婷婷中文字幕| 在线综合亚洲欧美在线视频| 久久夜色精品国产噜噜av| 综合欧美一区二区三区| 午夜激情一区二区| 丁香六月久久综合狠狠色| 欧美日韩在线亚洲一区蜜芽| 国产视频一区在线观看| 婷婷久久综合九色国产成人| 成人在线综合网| 91麻豆精品国产| 亚洲人成7777| 精品一区二区日韩| 欧美日韩亚洲另类| 国产精品色噜噜| 免费成人在线视频观看| 99精品视频在线播放观看| 欧美www视频| 亚洲一二三区在线观看| 国产成人午夜高潮毛片| 欧美一区二区三区四区久久| 亚洲日本一区二区| 国产九九视频一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 欧美激情一区在线观看| 久久91精品久久久久久秒播| 在线免费亚洲电影| 国产精品丝袜91| 黄网站免费久久| 制服丝袜国产精品| 夜夜夜精品看看| 91免费国产视频网站| 2欧美一区二区三区在线观看视频| 亚洲第一在线综合网站| 91网站最新网址| 国产亚洲精品资源在线26u| 久久丁香综合五月国产三级网站| 欧美日韩激情一区二区三区| 亚洲欧美国产毛片在线| 成人国产精品免费| 久久久久久毛片| 国产一区二区不卡老阿姨| 精品久久国产97色综合| 亚洲1区2区3区4区| 欧美日韩国产天堂| 亚洲高清不卡在线| 欧美日韩一区久久| 亚洲综合999| 欧美亚洲高清一区| 亚洲成人黄色影院| 欧美日韩欧美一区二区| 亚洲高清免费在线| 欧美日韩亚洲综合| 天堂av在线一区| 欧美一级电影网站| 精品在线免费观看| 欧美成人女星排名| 精品亚洲成a人| 久久你懂得1024| 国产精品一区二区在线观看网站 | 日韩无一区二区| 另类人妖一区二区av| 欧美tk—视频vk| 国产盗摄一区二区三区| 国产欧美一区二区精品忘忧草| 风间由美一区二区av101| 欧美激情一区二区在线| 成人av在线看| 亚洲综合色网站| 欧美日韩国产另类一区| 免费在线观看成人| 欧美成人a在线| 国产成人在线观看| 亚洲视频狠狠干| 欧美日韩久久一区二区| 美女性感视频久久| 久久久99久久精品欧美| 99久精品国产| 亚洲一二三四区| 日韩一级成人av| 国产一区二区三区在线看麻豆| 亚洲国产精品激情在线观看| 一本久久a久久精品亚洲| 午夜私人影院久久久久| 7777精品伊人久久久大香线蕉| 国产在线精品一区在线观看麻豆| 中文一区一区三区高中清不卡| 色悠悠久久综合| 午夜激情一区二区三区| 久久久久久97三级| 91浏览器打开| 久久99精品国产.久久久久久| 国产精品三级在线观看| 欧美日韩的一区二区| 国产九九视频一区二区三区| 一区二区三区不卡视频在线观看| 欧美一区二区三区成人| 粉嫩av亚洲一区二区图片| 亚洲五月六月丁香激情| 久久亚洲捆绑美女| 在线国产电影不卡| 国产一区亚洲一区| 亚洲一二三级电影| 久久久99免费| 欧美三级蜜桃2在线观看| 国产成人精品一区二区三区四区| 亚洲摸摸操操av| 精品久久免费看| 欧美亚洲禁片免费| 成人av在线资源网| 久久精品国产99国产| 亚洲日本护士毛茸茸| 精品久久久久久久久久久久久久久久久 | 亚洲午夜激情网站| 中文字幕第一页久久| 在线不卡中文字幕| 成人动漫视频在线| 久久疯狂做爰流白浆xx| 亚洲国产精品久久久男人的天堂 | 亚洲精品亚洲人成人网| 精品国偷自产国产一区| 欧美三级日韩三级国产三级|