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

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

?? sortfun.c

?? clips源代碼
?? C
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  07/01/05            */   /*                                                     */   /*                SORT FUNCTIONS MODULE                */   /*******************************************************//*************************************************************//* Purpose: Contains the code for sorting functions.         *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*      6.23: Correction for FalseSymbol/TrueSymbol. DR0859  *//*                                                           *//*      6.24: The sort function leaks memory when called     *//*            with a multifield value of length zero.        *//*            DR0864                                         *//*                                                           *//*************************************************************/#define _SORTFUN_SOURCE_#include "setup.h"#include "argacces.h"#include "dffnxfun.h"#include "envrnmnt.h"#include "evaluatn.h"#include "extnfunc.h"#include "memalloc.h"#include "multifld.h"#include "sysdep.h"#include "sortfun.h"#define SORTFUN_DATA 7struct sortFunctionData  {    struct expr *SortComparisonFunction;  };#define SortFunctionData(theEnv) ((struct sortFunctionData *) GetEnvironmentData(theEnv,SORTFUN_DATA))/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static void                    DoMergeSort(void *,DATA_OBJECT *,DATA_OBJECT *,unsigned long,                                              unsigned long,unsigned long,unsigned long,                                              int (*)(void *,DATA_OBJECT *,DATA_OBJECT *));   static int                     DefaultCompareSwapFunction(void *,DATA_OBJECT *,DATA_OBJECT *);   static void                    DeallocateSortFunctionData(void *);   /****************************************//* SortFunctionDefinitions: Initializes *//*   the sorting functions.             *//****************************************/globle void SortFunctionDefinitions(  void *theEnv)  {   AllocateEnvironmentData(theEnv,SORTFUN_DATA,sizeof(struct sortFunctionData),DeallocateSortFunctionData);#if ! RUN_TIME   EnvDefineFunction2(theEnv,"sort",'u', PTIEF SortFunction,"SortFunction","1**w");#endif  }/*******************************************************//* DeallocateSortFunctionData: Deallocates environment *//*    data for the sort function.                      *//*******************************************************/static void DeallocateSortFunctionData(  void *theEnv)  {   ReturnExpression(theEnv,SortFunctionData(theEnv)->SortComparisonFunction);  }/**************************************//* DefaultCompareSwapFunction:  *//**************************************/static int DefaultCompareSwapFunction(  void *theEnv,  DATA_OBJECT *item1,  DATA_OBJECT *item2)  {   DATA_OBJECT returnValue;   SortFunctionData(theEnv)->SortComparisonFunction->argList = GenConstant(theEnv,item1->type,item1->value);   SortFunctionData(theEnv)->SortComparisonFunction->argList->nextArg = GenConstant(theEnv,item2->type,item2->value);   ExpressionInstall(theEnv,SortFunctionData(theEnv)->SortComparisonFunction);   EvaluateExpression(theEnv,SortFunctionData(theEnv)->SortComparisonFunction,&returnValue);   ExpressionDeinstall(theEnv,SortFunctionData(theEnv)->SortComparisonFunction);   ReturnExpression(theEnv,SortFunctionData(theEnv)->SortComparisonFunction->argList);   SortFunctionData(theEnv)->SortComparisonFunction->argList = NULL;   if ((GetType(returnValue) == SYMBOL) &&       (GetValue(returnValue) == EnvFalseSymbol(theEnv)))     { return(FALSE); }   return(TRUE);  }/**************************************//* SortFunction: H/L access routine   *//*   for the rest$ function.          *//**************************************/globle void SortFunction(  void *theEnv,  DATA_OBJECT_PTR returnValue)  {   long argumentCount, i, j, k = 0;   DATA_OBJECT *theArguments, *theArguments2;   DATA_OBJECT theArg;   struct multifield *theMultifield, *tempMultifield;   char *functionName;   struct expr *functionReference;   int argumentSize = 0;   struct FunctionDefinition *fptr;#if DEFFUNCTION_CONSTRUCT   DEFFUNCTION *dptr;#endif   /*==================================*/   /* Set up the default return value. */   /*==================================*/   SetpType(returnValue,SYMBOL);   SetpValue(returnValue,EnvFalseSymbol(theEnv));   /*=============================================*/   /* The function expects at least one argument. */   /*=============================================*/   if ((argumentCount = EnvArgCountCheck(theEnv,"sort",AT_LEAST,1)) == -1)     { return; }   /*=============================================*/   /* Verify that the comparison function exists. */   /*=============================================*/   if (EnvArgTypeCheck(theEnv,"sort",1,SYMBOL,&theArg) == FALSE)     { return; }   functionName = DOToString(theArg);   functionReference = FunctionReferenceExpression(theEnv,functionName);   if (functionReference == NULL)     {      ExpectedTypeError1(theEnv,"sort",1,"function name, deffunction name, or defgeneric name");      return;     }   /*======================================*/   /* For an external function, verify the */   /* correct number of arguments.         */   /*======================================*/      if (functionReference->type == FCALL)     {      fptr = (struct FunctionDefinition *) functionReference->value;      if ((GetMinimumArgs(fptr) > 2) ||          (GetMaximumArgs(fptr) == 0) ||          (GetMaximumArgs(fptr) == 1))        {         ExpectedTypeError1(theEnv,"sort",1,"function name expecting two arguments");         ReturnExpression(theEnv,functionReference);         return;        }     }        /*=======================================*/   /* For a deffunction, verify the correct */   /* number of arguments.                  */   /*=======================================*/  #if DEFFUNCTION_CONSTRUCT   if (functionReference->type == PCALL)     {      dptr = (DEFFUNCTION *) functionReference->value;      if ((dptr->minNumberOfParameters > 2) ||          (dptr->maxNumberOfParameters == 0) ||          (dptr->maxNumberOfParameters == 1))        {         ExpectedTypeError1(theEnv,"sort",1,"deffunction name expecting two arguments");         ReturnExpression(theEnv,functionReference);         return;        }     }#endif   /*=====================================*/   /* If there are no items to be sorted, */   /* then return an empty multifield.    */   /*=====================================*/   if (argumentCount == 1)     {      EnvSetMultifieldErrorValue(theEnv,returnValue);      ReturnExpression(theEnv,functionReference);      return;     }        /*=====================================*/   /* Retrieve the arguments to be sorted */   /* and determine how many there are.   */   /*=====================================*/   theArguments = (DATA_OBJECT *) genalloc(theEnv,(argumentCount - 1) * sizeof(DATA_OBJECT));   for (i = 2; i <= argumentCount; i++)     {      EnvRtnUnknown(theEnv,i,&theArguments[i-2]);      if (GetType(theArguments[i-2]) == MULTIFIELD)        { argumentSize += GetpDOLength(&theArguments[i-2]); }      else        { argumentSize++; }     }        if (argumentSize == 0)     {         genfree(theEnv,theArguments,(argumentCount - 1) * sizeof(DATA_OBJECT)); /* Bug Fix */      EnvSetMultifieldErrorValue(theEnv,returnValue);      ReturnExpression(theEnv,functionReference);      return;     }      /*====================================*/   /* Pack all of the items to be sorted */   /* into a data object array.          */   /*====================================*/      theArguments2 = (DATA_OBJECT *) genalloc(theEnv,argumentSize * sizeof(DATA_OBJECT));   for (i = 2; i <= argumentCount; i++)     {      if (GetType(theArguments[i-2]) == MULTIFIELD)        {         tempMultifield = (struct multifield *) GetValue(theArguments[i-2]);         for (j = GetDOBegin(theArguments[i-2]); j <= GetDOEnd(theArguments[i-2]); j++, k++)           {            SetType(theArguments2[k],GetMFType(tempMultifield,j));            SetValue(theArguments2[k],GetMFValue(tempMultifield,j));           }        }      else        {         SetType(theArguments2[k],GetType(theArguments[i-2]));         SetValue(theArguments2[k],GetValue(theArguments[i-2]));         k++;        }     }        genfree(theEnv,theArguments,(argumentCount - 1) * sizeof(DATA_OBJECT));   functionReference->nextArg = SortFunctionData(theEnv)->SortComparisonFunction;   SortFunctionData(theEnv)->SortComparisonFunction = functionReference;   for (i = 0; i < argumentSize; i++)     { ValueInstall(theEnv,&theArguments2[i]); }   MergeSort(theEnv,(unsigned long) argumentSize,theArguments2,DefaultCompareSwapFunction);     for (i = 0; i < argumentSize; i++)     { ValueDeinstall(theEnv,&theArguments2[i]); }   SortFunctionData(theEnv)->SortComparisonFunction = SortFunctionData(theEnv)->SortComparisonFunction->nextArg;   functionReference->nextArg = NULL;   ReturnExpression(theEnv,functionReference);   theMultifield = (struct multifield *) EnvCreateMultifield(theEnv,(unsigned long) argumentSize);   for (i = 0; i < argumentSize; i++)     {      SetMFType(theMultifield,i+1,GetType(theArguments2[i]));      SetMFValue(theMultifield,i+1,GetValue(theArguments2[i]));     }        genfree(theEnv,theArguments2,argumentSize * sizeof(DATA_OBJECT));   SetpType(returnValue,MULTIFIELD);   SetpDOBegin(returnValue,1);   SetpDOEnd(returnValue,argumentSize);   SetpValue(returnValue,(void *) theMultifield);  }/*******************************************//* MergeSort: Sorts a list of fields       *//*   according to user specified criteria. *//*******************************************/void MergeSort(  void *theEnv,  unsigned long listSize,  DATA_OBJECT *theList,  int (*swapFunction)(void *,DATA_OBJECT *,DATA_OBJECT  *))  {   DATA_OBJECT *tempList;   unsigned long middle;   if (listSize <= 1) return;   /*==============================*/   /* Create the temporary storage */   /* needed for the merge sort.   */   /*==============================*/   tempList = (DATA_OBJECT *) genalloc(theEnv,listSize * sizeof(DATA_OBJECT));   /*=====================================*/   /* Call the merge sort driver routine. */   /*=====================================*/   middle = (listSize + 1) / 2;   DoMergeSort(theEnv,theList,tempList,0,middle-1,middle,listSize - 1,swapFunction);   /*==================================*/   /* Deallocate the temporary storage */   /* needed by the merge sort.        */   /*==================================*/   genfree(theEnv,tempList,listSize * sizeof(DATA_OBJECT));  }/******************************************************//* DoMergeSort: Driver routine for performing a merge *//*   sort on an array of DATA_OBJECT structures.      *//******************************************************/static void DoMergeSort(  void *theEnv,  DATA_OBJECT *theList,  DATA_OBJECT *tempList,  unsigned long s1,  unsigned long e1,  unsigned long s2,  unsigned long e2,  int (*swapFunction)(void *,DATA_OBJECT *,DATA_OBJECT *))  {   DATA_OBJECT temp;   unsigned long middle, size;   unsigned long c1, c2, mergePoint;   /* Sort the two subareas before merging them. */   if (s1 == e1)     { /* List doesn't need to be merged. */ }   else if ((s1 + 1) == e1)     {      if ((*swapFunction)(theEnv,&theList[s1],&theList[e1]))        {         TransferDataObjectValues(&temp,&theList[s1]);         TransferDataObjectValues(&theList[s1],&theList[e1]);         TransferDataObjectValues(&theList[e1],&temp);        }     }   else     {      size = ((e1 - s1) + 1);      middle = s1 + ((size + 1) / 2);      DoMergeSort(theEnv,theList,tempList,s1,middle-1,middle,e1,swapFunction);     }   if (s2 == e2)     { /* List doesn't need to be merged. */ }   else if ((s2 + 1) == e2)     {      if ((*swapFunction)(theEnv,&theList[s2],&theList[e2]))        {         TransferDataObjectValues(&temp,&theList[s2]);         TransferDataObjectValues(&theList[s2],&theList[e2]);         TransferDataObjectValues(&theList[e2],&temp);        }     }   else     {      size = ((e2 - s2) + 1);      middle = s2 + ((size + 1) / 2);      DoMergeSort(theEnv,theList,tempList,s2,middle-1,middle,e2,swapFunction);     }   /*======================*/   /* Merge the two areas. */   /*======================*/   mergePoint = s1;   c1 = s1;   c2 = s2;   while (mergePoint <= e2)     {      if (c1 > e1)        {         TransferDataObjectValues(&tempList[mergePoint],&theList[c2]);         c2++;         mergePoint++;        }      else if (c2 > e2)        {         TransferDataObjectValues(&tempList[mergePoint],&theList[c1]);         c1++;         mergePoint++;        }      else if ((*swapFunction)(theEnv,&theList[c1],&theList[c2]))        {         TransferDataObjectValues(&tempList[mergePoint],&theList[c2]);         c2++;         mergePoint++;        }      else        {         TransferDataObjectValues(&tempList[mergePoint],&theList[c1]);         c1++;         mergePoint++;        }     }   /*=======================================*/   /* Copy them back to the original array. */   /*=======================================*/   for (c1 = s1; c1 <= e2; c1++)     { TransferDataObjectValues(&theList[c1],&tempList[c1]); }  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人电影天堂| 成人av电影在线网| 久久精品这里都是精品| 欧美一区二区三区视频在线| 欧美无砖专区一中文字| 91亚洲精品乱码久久久久久蜜桃| 波多野结衣在线一区| 亚洲丶国产丶欧美一区二区三区| 亚洲精品国产品国语在线app| 亚洲精品在线观看视频| 床上的激情91.| 丁香亚洲综合激情啪啪综合| 久久综合色之久久综合| 色乱码一区二区三区88| 捆绑调教美女网站视频一区| 日韩欧美亚洲另类制服综合在线| 久草精品在线观看| 亚洲国产精品激情在线观看| 91蝌蚪porny九色| 亚洲高清视频中文字幕| 日韩欧美的一区| 国产精品一区二区你懂的| 欧美日韩视频不卡| 日韩欧美一级二级三级| 欧美激情在线免费观看| 亚洲午夜激情av| 国产精品国产三级国产aⅴ中文 | 国产亚洲人成网站| 成人av电影免费观看| 亚洲啪啪综合av一区二区三区| 欧洲生活片亚洲生活在线观看| 另类小说视频一区二区| 亚洲精品va在线观看| 精品久久久久一区| 91行情网站电视在线观看高清版| 日本不卡中文字幕| 亚洲欧洲日产国码二区| 精品成人在线观看| 欧洲一区在线观看| 国产伦精品一区二区三区视频青涩 | 久久一区二区三区四区| 在线精品视频一区二区三四| 国产一级精品在线| 三级欧美在线一区| 中文字幕中文在线不卡住| 日韩三级高清在线| 欧美视频第二页| 成人免费看的视频| 久草在线在线精品观看| 亚洲在线观看免费视频| 久久久久久黄色| 欧美喷潮久久久xxxxx| 成人sese在线| 激情成人午夜视频| 亚洲444eee在线观看| 亚洲欧美日韩精品久久久久| 久久嫩草精品久久久精品一| 久久久综合视频| 欧美一区二区国产| 欧美亚洲综合色| 99精品视频一区| 国产成人a级片| 国内精品嫩模私拍在线| 日韩av中文在线观看| 亚洲国产日韩在线一区模特 | 91福利资源站| 94-欧美-setu| 99精品黄色片免费大全| 国产不卡一区视频| 国产馆精品极品| 久久aⅴ国产欧美74aaa| 看电影不卡的网站| 久久国产精品99精品国产| 青青青伊人色综合久久| 日韩激情一二三区| 日韩电影一区二区三区四区| 性久久久久久久久| 亚洲一区免费在线观看| 一区二区理论电影在线观看| 一区二区三国产精华液| 亚洲欧美国产高清| 亚洲综合男人的天堂| 一区二区三区日本| 亚洲成人www| 日韩电影在线看| 另类欧美日韩国产在线| 久久99国产精品久久| 国产在线国偷精品产拍免费yy | 视频一区中文字幕| 青青草国产精品97视觉盛宴| 日本不卡高清视频| 久久精品999| 国产一区二区三区电影在线观看| 精品一区二区日韩| 国产成人夜色高潮福利影视| 99视频有精品| 欧美成人女星排行榜| 久久人人爽爽爽人久久久| 26uuu色噜噜精品一区二区| 久久精品视频网| 国产精品久久久久久久久免费丝袜 | 成人免费一区二区三区在线观看| 亚洲男同性恋视频| 视频在线观看91| 国产乱码精品一区二区三| 成人免费毛片嘿嘿连载视频| 麻豆精品视频在线观看免费| 亚洲成人av资源| 精品一区二区三区免费视频| 激情综合一区二区三区| 成人一区二区三区在线观看| 国产精品99久| 日本精品裸体写真集在线观看| 91蝌蚪porny| 欧美网站大全在线观看| 精品国产伦一区二区三区观看方式| 欧美高清dvd| 国产精品天天看| 一区二区三区在线观看动漫 | 欧美一区二区三区喷汁尤物| 奇米综合一区二区三区精品视频| 亚洲aaa精品| 欧洲另类一二三四区| 欧美在线视频日韩| 色吧成人激情小说| 久久亚洲一区二区三区四区| 91首页免费视频| 成人av网址在线观看| 奇米777欧美一区二区| 成人午夜大片免费观看| 制服丝袜日韩国产| 国产精品视频你懂的| 日本成人中文字幕在线视频 | 国产一区二区三区在线观看精品| 亚洲激情六月丁香| 久久国产精品色婷婷| 一本大道av伊人久久综合| 欧美不卡一区二区三区四区| 亚洲人成电影网站色mp4| 裸体在线国模精品偷拍| 91小视频在线观看| 久久久三级国产网站| 国产精品99久久久久久似苏梦涵| 91啪九色porn原创视频在线观看| 亚洲伦理在线免费看| 成人性生交大片免费| 欧美sm美女调教| 亚洲第四色夜色| 色欧美日韩亚洲| 中文字幕色av一区二区三区| 精品综合久久久久久8888| 欧美日韩三级在线| 亚洲不卡av一区二区三区| 色噜噜狠狠色综合中国| 亚洲国产精品99久久久久久久久| 国内精品国产三级国产a久久| 91精品国产色综合久久不卡电影| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品99精品久久免费| 日韩欧美一级二级三级| 丝袜亚洲另类丝袜在线| 欧美日韩亚洲另类| 一区二区三区国产豹纹内裤在线| 99国内精品久久| 中文字幕一区二区三区四区不卡 | 亚洲女同ⅹxx女同tv| 99re免费视频精品全部| 国产精品久久久久久久久动漫 | 欧美大肚乱孕交hd孕妇| 偷拍亚洲欧洲综合| 欧美性淫爽ww久久久久无| 亚洲男女一区二区三区| 91久久精品午夜一区二区| 综合网在线视频| 日本电影欧美片| 天天做天天摸天天爽国产一区 | 欧美一级高清片| 久久99久久久欧美国产| 欧美成人精精品一区二区频| 久久精品99国产精品| 久久久久久黄色| 成人久久18免费网站麻豆| 18成人在线观看| 91官网在线观看| 日韩电影一二三区| 欧美成人激情免费网| 国产一区二区美女诱惑| 香蕉乱码成人久久天堂爱免费| 欧美日韩亚洲综合| 久久99最新地址| 国产精品久久精品日日| 欧美日韩国产首页在线观看| 日本女人一区二区三区| 国产欧美日韩激情| 在线观看免费视频综合| 青青草原综合久久大伊人精品 | 日韩精品一区二区三区视频在线观看| 国内精品嫩模私拍在线| 亚洲另类一区二区| 欧美大胆人体bbbb|