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

📄 constrnt.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
   hashValue = (int) (count % SIZE_CONSTRAINT_HASH);   if (hashValue < 0) hashValue = - hashValue;   return(hashValue);  }/**********************************************//* ConstraintCompare: Compares two constraint *//*   records and returns TRUE if they are     *//*   identical, otherwise FALSE.              *//**********************************************/static int ConstraintCompare(  struct constraintRecord *constraint1,  struct constraintRecord *constraint2)  {   struct expr *tmpPtr1, *tmpPtr2;   if ((constraint1->anyAllowed != constraint2->anyAllowed) ||       (constraint1->symbolsAllowed != constraint2->symbolsAllowed) ||       (constraint1->stringsAllowed != constraint2->stringsAllowed) ||       (constraint1->floatsAllowed != constraint2->floatsAllowed) ||       (constraint1->integersAllowed != constraint2->integersAllowed) ||       (constraint1->instanceNamesAllowed != constraint2->instanceNamesAllowed) ||       (constraint1->instanceAddressesAllowed != constraint2->instanceAddressesAllowed) ||       (constraint1->externalAddressesAllowed != constraint2->externalAddressesAllowed) ||       (constraint1->voidAllowed != constraint2->voidAllowed) ||       (constraint1->multifieldsAllowed != constraint2->multifieldsAllowed) ||       (constraint1->singlefieldsAllowed != constraint2->singlefieldsAllowed) ||       (constraint1->factAddressesAllowed != constraint2->factAddressesAllowed) ||       (constraint1->anyRestriction != constraint2->anyRestriction) ||       (constraint1->symbolRestriction != constraint2->symbolRestriction) ||       (constraint1->stringRestriction != constraint2->stringRestriction) ||       (constraint1->floatRestriction != constraint2->floatRestriction) ||       (constraint1->integerRestriction != constraint2->integerRestriction) ||       (constraint1->classRestriction != constraint2->classRestriction) ||       (constraint1->instanceNameRestriction != constraint2->instanceNameRestriction))     { return(FALSE); }   for (tmpPtr1 = constraint1->classList, tmpPtr2 = constraint2->classList;        (tmpPtr1 != NULL) && (tmpPtr2 != NULL);        tmpPtr1 = tmpPtr1->nextArg, tmpPtr2 = tmpPtr2->nextArg)     {      if ((tmpPtr1->type != tmpPtr2->type) || (tmpPtr1->value != tmpPtr2->value))        { return(FALSE); }     }   if (tmpPtr1 != tmpPtr2) return(FALSE);   for (tmpPtr1 = constraint1->restrictionList, tmpPtr2 = constraint2->restrictionList;        (tmpPtr1 != NULL) && (tmpPtr2 != NULL);        tmpPtr1 = tmpPtr1->nextArg, tmpPtr2 = tmpPtr2->nextArg)     {      if ((tmpPtr1->type != tmpPtr2->type) || (tmpPtr1->value != tmpPtr2->value))        { return(FALSE); }     }   if (tmpPtr1 != tmpPtr2) return(FALSE);   for (tmpPtr1 = constraint1->minValue, tmpPtr2 = constraint2->minValue;        (tmpPtr1 != NULL) && (tmpPtr2 != NULL);        tmpPtr1 = tmpPtr1->nextArg, tmpPtr2 = tmpPtr2->nextArg)     {      if ((tmpPtr1->type != tmpPtr2->type) || (tmpPtr1->value != tmpPtr2->value))        { return(FALSE); }     }   if (tmpPtr1 != tmpPtr2) return(FALSE);   for (tmpPtr1 = constraint1->maxValue, tmpPtr2 = constraint2->maxValue;        (tmpPtr1 != NULL) && (tmpPtr2 != NULL);        tmpPtr1 = tmpPtr1->nextArg, tmpPtr2 = tmpPtr2->nextArg)     {      if ((tmpPtr1->type != tmpPtr2->type) || (tmpPtr1->value != tmpPtr2->value))        { return(FALSE); }     }   if (tmpPtr1 != tmpPtr2) return(FALSE);   for (tmpPtr1 = constraint1->minFields, tmpPtr2 = constraint2->minFields;        (tmpPtr1 != NULL) && (tmpPtr2 != NULL);        tmpPtr1 = tmpPtr1->nextArg, tmpPtr2 = tmpPtr2->nextArg)     {      if ((tmpPtr1->type != tmpPtr2->type) || (tmpPtr1->value != tmpPtr2->value))        { return(FALSE); }     }   if (tmpPtr1 != tmpPtr2) return(FALSE);   for (tmpPtr1 = constraint1->maxFields, tmpPtr2 = constraint2->maxFields;        (tmpPtr1 != NULL) && (tmpPtr2 != NULL);        tmpPtr1 = tmpPtr1->nextArg, tmpPtr2 = tmpPtr2->nextArg)     {      if ((tmpPtr1->type != tmpPtr2->type) || (tmpPtr1->value != tmpPtr2->value))        { return(FALSE); }     }   if (tmpPtr1 != tmpPtr2) return(FALSE);   if (((constraint1->multifield == NULL) && (constraint2->multifield != NULL)) ||       ((constraint1->multifield != NULL) && (constraint2->multifield == NULL)))     { return(FALSE); }   else if (constraint1->multifield == constraint2->multifield)     { return(TRUE); }   return(ConstraintCompare(constraint1->multifield,constraint2->multifield));  }/************************************//* AddConstraint: Adds a constraint *//*   to the constraint hash table.  *//************************************/globle struct constraintRecord *AddConstraint(  void *theEnv,  struct constraintRecord *theConstraint)  {   struct constraintRecord *tmpPtr;   int hashValue;   if (theConstraint == NULL) return(NULL);   hashValue = HashConstraint(theConstraint);   for (tmpPtr = ConstraintData(theEnv)->ConstraintHashtable[hashValue];        tmpPtr != NULL;        tmpPtr = tmpPtr->next)     {      if (ConstraintCompare(theConstraint,tmpPtr))        {         tmpPtr->count++;         ReturnConstraintRecord(theEnv,theConstraint);         return(tmpPtr);        }     }   InstallConstraintRecord(theEnv,theConstraint);   theConstraint->count = 1;   theConstraint->bucket = hashValue;   theConstraint->next = ConstraintData(theEnv)->ConstraintHashtable[hashValue];   ConstraintData(theEnv)->ConstraintHashtable[hashValue] = theConstraint;   return(theConstraint);  }/*************************************************//* InstallConstraintRecord: Increments the count *//*   values of all occurrences of primitive data *//*   types found in a constraint record.         *//*************************************************/static void InstallConstraintRecord(  void *theEnv,  CONSTRAINT_RECORD *constraints)  {   struct expr *tempExpr;   tempExpr = AddHashedExpression(theEnv,constraints->classList);   ReturnExpression(theEnv,constraints->classList);   constraints->classList = tempExpr;   tempExpr = AddHashedExpression(theEnv,constraints->restrictionList);   ReturnExpression(theEnv,constraints->restrictionList);   constraints->restrictionList = tempExpr;   tempExpr = AddHashedExpression(theEnv,constraints->maxValue);   ReturnExpression(theEnv,constraints->maxValue);   constraints->maxValue = tempExpr;   tempExpr = AddHashedExpression(theEnv,constraints->minValue);   ReturnExpression(theEnv,constraints->minValue);   constraints->minValue = tempExpr;   tempExpr = AddHashedExpression(theEnv,constraints->minFields);   ReturnExpression(theEnv,constraints->minFields);   constraints->minFields = tempExpr;   tempExpr = AddHashedExpression(theEnv,constraints->maxFields);   ReturnExpression(theEnv,constraints->maxFields);   constraints->maxFields = tempExpr;   if (constraints->multifield != NULL)     { InstallConstraintRecord(theEnv,constraints->multifield); }  }#endif /* (! RUN_TIME) && (! BLOAD_ONLY) *//**********************************************//* SDCCommand: H/L access routine for the     *//*   set-dynamic-constraint-checking command. *//**********************************************/globle int SDCCommand(  void *theEnv)  {   int oldValue;   DATA_OBJECT arg_ptr;   oldValue = EnvGetDynamicConstraintChecking(theEnv);   if (EnvArgCountCheck(theEnv,"set-dynamic-constraint-checking",EXACTLY,1) == -1)     { return(oldValue); }   EnvRtnUnknown(theEnv,1,&arg_ptr);   if ((arg_ptr.value == EnvFalseSymbol(theEnv)) && (arg_ptr.type == SYMBOL))     { EnvSetDynamicConstraintChecking(theEnv,FALSE); }   else     { EnvSetDynamicConstraintChecking(theEnv,TRUE); }   return(oldValue);  }/**********************************************//* GDCCommand: H/L access routine for the     *//*   get-dynamic-constraint-checking command. *//**********************************************/globle int GDCCommand(  void *theEnv)  {   int oldValue;   oldValue = EnvGetDynamicConstraintChecking(theEnv);   if (EnvArgCountCheck(theEnv,"get-dynamic-constraint-checking",EXACTLY,0) == -1)     { return(oldValue); }   return(oldValue);  }/*********************************************//* SSCCommand: H/L access routine for the    *//*   set-static-constraint-checking command. *//*********************************************/globle int SSCCommand(  void *theEnv)  {   int oldValue;   DATA_OBJECT arg_ptr;   oldValue = EnvGetStaticConstraintChecking(theEnv);   if (EnvArgCountCheck(theEnv,"set-static-constraint-checking",EXACTLY,1) == -1)     { return(oldValue); }   EnvRtnUnknown(theEnv,1,&arg_ptr);   if ((arg_ptr.value == EnvFalseSymbol(theEnv)) && (arg_ptr.type == SYMBOL))     { EnvSetStaticConstraintChecking(theEnv,FALSE); }   else     { EnvSetStaticConstraintChecking(theEnv,TRUE); }   return(oldValue);  }/*********************************************//* GSCCommand: H/L access routine for the    *//*   get-static-constraint-checking command. *//*********************************************/globle int GSCCommand(  void *theEnv)  {   int oldValue;   oldValue = EnvGetStaticConstraintChecking(theEnv);   if (EnvArgCountCheck(theEnv,"get-static-constraint-checking",EXACTLY,0) == -1)     { return(oldValue); }   return(oldValue);  }/******************************************************//* EnvSetDynamicConstraintChecking: C access routine  *//*   for the set-dynamic-constraint-checking command. *//******************************************************/globle intBool EnvSetDynamicConstraintChecking(  void *theEnv,  int value)  {   int ov;   ov = ConstraintData(theEnv)->DynamicConstraintChecking;   ConstraintData(theEnv)->DynamicConstraintChecking = value;   return(ov);  }/******************************************************//* EnvGetDynamicConstraintChecking: C access routine  *//*   for the get-dynamic-constraint-checking command. *//******************************************************/globle intBool EnvGetDynamicConstraintChecking(  void *theEnv)  {    return(ConstraintData(theEnv)->DynamicConstraintChecking);   }/*****************************************************//* EnvSetStaticConstraintChecking: C access routine  *//*   for the set-static-constraint-checking command. *//*****************************************************/globle intBool EnvSetStaticConstraintChecking(  void *theEnv,  int value)  {   int ov;   ov = ConstraintData(theEnv)->StaticConstraintChecking;   ConstraintData(theEnv)->StaticConstraintChecking = value;   return(ov);  }/*****************************************************//* EnvGetStaticConstraintChecking: C access routine  *//*   for the get-static-constraint-checking command. *//*****************************************************/globle intBool EnvGetStaticConstraintChecking(  void *theEnv)  {       return(ConstraintData(theEnv)->StaticConstraintChecking);   }

⌨️ 快捷键说明

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