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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cstrnops.c

?? clips源代碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
   /*******************************************************/   /*      "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;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选一区二区| 欧美另类videos死尸| 欧美电影一区二区三区| 欧美丝袜自拍制服另类| 欧美国产在线观看| 欧美系列在线观看| 色综合婷婷久久| 精品一区二区在线免费观看| 久久久99久久| 欧美国产日韩a欧美在线观看| 一区二区中文视频| 色婷婷综合久久久中文字幕| 亚洲国产视频直播| 成人av免费网站| 欧美精品 日韩| 精品久久久三级丝袜| 欧美激情中文不卡| 51精品视频一区二区三区| 亚洲欧美一区二区三区国产精品| 日韩一区精品视频| 91看片淫黄大片一级| 国产精品久久网站| 91精品国产入口在线| 性做久久久久久久免费看| 精品一区二区三区视频| 国产精品女人毛片| 91精品国产综合久久蜜臀| 成人国产免费视频| 国内精品久久久久影院薰衣草| 亚洲一区二区三区四区五区黄| 国产精品每日更新| 国产亚洲精品免费| 精品少妇一区二区三区免费观看| 欧美视频中文一区二区三区在线观看 | 欧美午夜精品理论片a级按摩| 风间由美一区二区三区在线观看| 久国产精品韩国三级视频| 毛片av一区二区| 久久国产精品免费| 久久国产精品99精品国产| 美女视频一区在线观看| 久久国产精品无码网站| 精品在线免费观看| 国产麻豆9l精品三级站| 国产黄人亚洲片| 成人99免费视频| 色狠狠av一区二区三区| 欧美性做爰猛烈叫床潮| 欧美日韩日日骚| 欧美一区国产二区| 欧美精品一区二区高清在线观看| 亚洲精品一区二区精华| 久久久九九九九| 中文字幕欧美日韩一区| 中文字幕一区视频| 亚洲一区二区三区影院| 石原莉奈一区二区三区在线观看| 青草av.久久免费一区| 久久99精品国产.久久久久| 国产一区二区三区精品视频| 成人h版在线观看| 日本精品一区二区三区四区的功能| 91国偷自产一区二区使用方法| 欧美色爱综合网| 欧美xxxx老人做受| 国产精品天干天干在线综合| 夜夜爽夜夜爽精品视频| 免费不卡在线视频| 成人av片在线观看| 欧美日韩电影在线播放| 欧美精品一区二区三区在线播放| 国产精品久久三| 亚洲成a人片在线不卡一二三区| 麻豆精品视频在线| 暴力调教一区二区三区| 欧美视频在线一区| 国产香蕉久久精品综合网| 亚洲女厕所小便bbb| 奇米综合一区二区三区精品视频| 国产成人啪免费观看软件| 色狠狠色狠狠综合| 欧美精品一区二| 亚洲已满18点击进入久久| 极品少妇一区二区| 在线观看视频91| 久久精品日韩一区二区三区| 一区二区欧美在线观看| 国产中文字幕精品| 成人高清免费观看| 5858s免费视频成人| 中文乱码免费一区二区| 天天影视色香欲综合网老头| 国产不卡视频一区| 91精品国产入口在线| 国产精品高潮呻吟| 奇米一区二区三区| 一本色道亚洲精品aⅴ| 欧美精品一区二区久久久| 亚洲综合久久av| 国产精品主播直播| 欧美另类一区二区三区| 亚洲色图欧洲色图婷婷| 久久超级碰视频| 欧美精品色综合| 亚洲精品自拍动漫在线| 丁香婷婷深情五月亚洲| 日韩一区二区免费视频| 亚洲国产美国国产综合一区二区| 国产不卡视频在线播放| 精品国产三级电影在线观看| 亚洲精品久久久久久国产精华液 | 成人av午夜影院| 精品国产不卡一区二区三区| 亚洲在线中文字幕| 成人黄色一级视频| 国产视频一区不卡| 国内欧美视频一区二区| 制服视频三区第一页精品| 一区二区三区欧美激情| 国产成人免费视频网站| 欧美精品一区二区三区在线播放 | 亚洲电影一级片| 色丁香久综合在线久综合在线观看 | 欧美日韩亚洲另类| 一区二区三区四区在线| 北条麻妃国产九九精品视频| 国产欧美视频一区二区三区| 国产一二精品视频| 精品电影一区二区三区| 久久99国产精品久久99果冻传媒| 欧美精品丝袜中出| 日韩成人免费电影| 51精品视频一区二区三区| 五月天一区二区| 51午夜精品国产| 日韩av一区二区三区四区| 91精品视频网| 久久精品噜噜噜成人88aⅴ | 欧美精品一区二区三区视频| 久久激情五月婷婷| 久久一区二区三区国产精品| 久久国产欧美日韩精品| 精品99一区二区| 国产成人在线看| 国产精品久久久久久久久晋中 | 日韩欧美黄色影院| 黄色资源网久久资源365| 精品久久久久久久人人人人传媒| 精品一区二区免费视频| 欧美va天堂va视频va在线| 国内外成人在线| 国产精品妹子av| 91福利国产成人精品照片| 亚洲成人动漫在线免费观看| 91精品国产高清一区二区三区蜜臀 | 日韩专区一卡二卡| 日韩免费高清视频| 国产福利一区二区三区在线视频| 国产亚洲va综合人人澡精品| a级高清视频欧美日韩| 亚洲综合免费观看高清完整版| 欧美日韩一区不卡| 免费观看91视频大全| 久久这里只有精品首页| 丁香五精品蜜臀久久久久99网站 | av高清久久久| 亚洲国产欧美在线| 欧美大度的电影原声| 成人听书哪个软件好| 亚洲第一综合色| 2017欧美狠狠色| 97精品国产97久久久久久久久久久久| 一区二区日韩av| 亚洲精品一区在线观看| 99精品久久久久久| 免费人成网站在线观看欧美高清| 国产片一区二区三区| 欧美网站大全在线观看| 麻豆国产一区二区| 亚洲色图视频网| 精品国产一区二区三区四区四| www.一区二区| 免费人成黄页网站在线一区二区| 国产精品美女久久久久av爽李琼| 欧美色窝79yyyycom| 国产成+人+日韩+欧美+亚洲| 亚洲妇女屁股眼交7| 国产日韩欧美亚洲| 欧美精品丝袜中出| 91首页免费视频| 国模一区二区三区白浆| 亚洲综合色视频| 中文字幕巨乱亚洲| 日韩一区二区三区四区| av午夜一区麻豆| 国产一区二区调教| 亚洲高清免费视频| 日韩一区在线看| 精品国产自在久精品国产| 欧美日韩视频一区二区|