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

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

?? btreeupdate.c

?? b tree how to operate on b tr
?? C
?? 第 1 頁 / 共 2 頁
字號:
      if(!(flag & FLAG_DONTINSERT)) {	char *dest2;	/* ***  Do actual insertion on a page  *** */	/*  Set new page length  */	BTPAGE_LENGTH(bt,dest) = n + 1;	dest2 = dest + BTOFF_START(bt) + pos * fLen;	/*  Move contents  */	if(pos < n) memmove(dest2 + fLen,dest2,(n - pos) * fLen);	/*  Set up new element  */	memcpy(dest2 + BTOFF_CONTENT(bt),nCont,bt->BAT_FieldLength);	memcpyl(dest2 + BTOFF_SETNR(bt),&nNumber,sizeof(nNumber));#ifdef CONFIG_BTREE_EXTRALEAF	if(!BTPAGE_ISLEAF(bt,dest))#endif	  memcpyl(dest2 + BTOFF_SUBPAGE(bt),&subPage,sizeof(subPage));      }      subPage = nextSub;      /*  If page was split, set up element to pass to upper level  */      if(next) {	memcpy((char *)nCont,next,bt->BAT_FieldLength);	nNumber = nextSetNr;      }      /*  Finally check if root page was split  */      if((flag & FLAG_DIDPAGESPLIT) && nDepth == 0) {	BTreePage newPage;	char *p2;	if((newPage = (*(bt->BAT_PageAdmin))(bt,-1)) < 0 ||	   (p2 = bayGetPage(bt,newPage,BFILEMODE_DIRTY)) == NULL) {	  if(flag & FLAG_RELEASELOCK) goto error1;	  goto error;	}#ifdef DEBUGI	printf("  Root page %d split, newpage %d\n",nStack[nDepth].BTP_PageNr,	       newPage);#endif	/*  Copy old root page to allocated one and set up new root page.	 *   This procedure ensures that the location of the root page	 *   never changes. The reserved fields are not copied.	 */	memcpy(p2,p1,BTPAGE_SIZE(bt) - bt->BAT_Reserved);	/*  Clear root page, insertion in next iteration	 *   will set it up correctly.	 */	BTPAGE_LENGTH(bt,p1) = 0;	BTPAGE_SUBPAGE0(bt,p1) = newPage;	nStack[nDepth].BTP_Position = 0;      } else	/*  Go to next level of insertion  */	nDepth--;      /*  Release lock for old page  */      if((flag & FLAG_RELEASELOCK) && baySetPage(bt,page1,BFILEMODE_UNPROT) < 0)	goto error;    } else { /* ***  Do DELETION  *** */      char *p1,*p2,*p3,*p;      BTreePage page2,page3;      long pos,fLen,fLen2,currMax,len,flag;      /*  Load page and delete element  */      page1 = oStack[oDepth].BTP_PageNr;      pos  = oStack[oDepth].BTP_Position;      if((p1 = bayGetPage(bt,page1,BFILEMODE_DIRTY)) == NULL) goto error;      if(BTPAGE_ISLEAF(bt,p1)) {	fLen = BTLEN_FIELDL(bt);	currMax = bt->BAT_MaxElementLeaf;      } else {	fLen = BTLEN_FIELD(bt);	currMax = bt->BAT_MaxElement;      }#ifdef DEBUGD      printf("  Delete page %d len %d at pos %d\n",page1,	     BTPAGE_LENGTH(bt,p1),pos);#endif      /*  Decrease number of elements on this page       *   and delete actual element. Must ensure       *   that the subpage element of the one to       *   delete has already been handled.       */      len = --BTPAGE_LENGTH(bt,p1);      p = p1 + BTOFF_START(bt) + pos * fLen;      if(pos < len) memmove(p,p + fLen,(len - pos) * fLen);      /*  Does page have still enough elements?  */      if(len >= (currMax / 2)) {	oDepth = -1; /*  deletion finished  */	continue; /*  continue loop, probably we still have to insert?  */      }      /*  Underflow on root page?  */      if(oDepth == 0) {	/*  If root page is non-empty, stop deleting  */	if(len == 0) {	  /* ***  Special case: Root page is empty  *** */#ifdef DEBUGD	  printf("  Root page empty!\n");#endif	  /*  Get the only remaining leftmost subpage element, which	   *   is the page that will become the new root page.	   */	  memcpyl(&page2,p1 + (BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt)),		  sizeof(page2));	  /*  Empty tree reached?  */	  if(page2 >= 0) {	    /*  Copy the sub page to the root page and free sub page.	     *   This again ensures that the position of the root page	     *   never changes.	     */	    if(baySetPage(bt,page1,BFILEMODE_PROT) < 0) goto error;	    if((p2 = bayGetPage(bt,page2,BFILEMODE_DIRTY)) == NULL)	      goto error1;	    memcpy(p1,p2,BTPAGE_SIZE(bt) - bt->BAT_Reserved);	    /*  Unlock and free page  */	    if(baySetPage(bt,page1,BFILEMODE_UNPROT) < 0 ||	       (*(bt->BAT_PageAdmin))(bt,page2) < 0) goto error;	  }	}	oDepth = -1; /*  deletion finished  */	continue;      }      /* **  Handle page concatenation  **       *       *               page2       *                /\       *               /  \       *              /    \       *           page1  page3       */      /*  Get parent page  */      page2 = oStack[oDepth - 1].BTP_PageNr;      pos   = oStack[oDepth - 1].BTP_Position;      if(baySetPage(bt,page1,BFILEMODE_PROT) < 0) goto error;      if((p2 = bayGetPage(bt,page2,BFILEMODE_DIRTY | BFILEMODE_PROT)) == NULL)	goto error1;      fLen2 = BTLEN_FIELD(bt); /*  page2 cannot be a leaf page  */      /*  Are we at the last position on the parent page?  */      if(pos >= BTPAGE_LENGTH(bt,p2)) {	/*  Exchange p1 and p3  */	oStack[oDepth - 1].BTP_Position = --pos;	flag = TRUE;      } else {	flag = FALSE;      }      /*  Get right hand side page  */      if(flag && nDepth >= 0 && nStack[nDepth].BTP_PageNr == page2 &&	 pos == nStack[nDepth].BTP_Position)	/*  Special case: While inserting we just split the page left	 *   to us, so the *real* left hand page is subPage instead	 *   of the pointer on the page.	 */	page3 = subPage;      else	/*  Get left (flag==TRUE) or right (flag==FALSE) neighbouring page  */	memcpyl(&page3,p2 + (BTOFF_START(bt) +			     (flag ? BTOFF_SUBPAGEM1(bt) : BTOFF_SUBPAGE(bt))) +		pos * fLen2,sizeof(page3));      /*  Get neighbouring page  */      if((p3 = bayGetPage(bt,page3,BFILEMODE_DIRTY)) == NULL) {	(void)baySetPage(bt,page2,BFILEMODE_UNPROT);	goto error1;      }#ifdef DEBUGD      printf("  Underflow on page2 %d at pos %d flag %s page3 %d\n",	     page2,pos,flag ? "YES" : "NO",page3);#endif      if(flag) { /*  Exchange left and right page  */	long tp = page1; page1 = page3; page3 = tp;	p = p1; p1 = p3; p3 = p;      }      /*  Go to position of element on page2  */      p = p2 + BTOFF_START(bt) + pos * fLen2;      /*  Check if we can lend elements from the neighbouring page, or if       *   we can unite them to yield a new one.       */      len = BTPAGE_LENGTH(bt,p1) + BTPAGE_LENGTH(bt,p3);      if(len >= currMax) {	long newLen,diff;	newLen = len / 2; /*  page1 will have length newLen afterwards  */	/*  Redistribute elements  */	if(BTPAGE_LENGTH(bt,p1) < newLen) {	  diff = newLen - BTPAGE_LENGTH(bt,p1) - 1;	  /*  Move the parent element from page2 and some elements from	   *   page3 to page1. The subpage entry for the single element	   *   from page2 is taken from the leftmost subpage from page3.	   */	  memcpy(p1 + BTOFF_START(bt) + BTOFF_USER(bt) +		 BTPAGE_LENGTH(bt,p1) * fLen,p + BTOFF_USER(bt),BTLEN_USER(bt));	  /*  Need to copy at least leftmost subpage element  */#ifdef CONFIG_BTREE_EXTRALEAF	  if(BTPAGE_ISLEAF(bt,p1))	    memcpy(p1 + BTOFF_START(bt) + (BTPAGE_LENGTH(bt,p1) + 1) * fLen,		   p3 + BTOFF_START(bt),diff * fLen);	  else#endif	    memcpy(p1 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt) +		   (BTPAGE_LENGTH(bt,p1) + 1) * fLen,		   p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt),		   diff * fLen + sizeof(BTreePage));	  /*  Set new element on page2 and move contents of page3  */	  memcpy(p + BTOFF_USER(bt),		 p3 + BTOFF_START(bt) + BTOFF_USER(bt) + diff * fLen,		 BTLEN_USER(bt));#ifdef CONFIG_BTREE_EXTRALEAF	  if(BTPAGE_ISLEAF(bt,p3))	    memmove(p3 + BTOFF_START(bt),p3 + BTOFF_START(bt) +		    (diff + 1) * fLen,(BTPAGE_LENGTH(bt,p3) - diff - 1) * fLen);	  else#endif	    memmove(p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt),		    p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt) +		    (diff + 1) * fLen,(BTPAGE_LENGTH(bt,p3) - diff - 1) *		    fLen + sizeof(BTreePage));	  BTPAGE_LENGTH(bt,p1) += diff + 1;	  BTPAGE_LENGTH(bt,p3) -= diff + 1;	} else if(BTPAGE_LENGTH(bt,p3) < newLen) {	  /*  Move parent element from page2 and some from page1 to page3	   *   The subpage entry for the single element from page2 is	   *   taken from the leftmost subpage from page3.	   */	  diff = newLen - BTPAGE_LENGTH(bt,p3) - 1;#ifdef CONFIG_BTREE_EXTRALEAF	  if(BTPAGE_ISLEAF(bt,p3))	    memmove(p3 + BTOFF_START(bt) + (diff + 1) * fLen,		    p3 + BTOFF_START(bt),BTPAGE_LENGTH(bt,p3) * fLen);	  else#endif	    memmove(p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt) +		    (diff + 1) * fLen,		    p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt),		    BTPAGE_LENGTH(bt,p3) * fLen + sizeof(BTreePage));	  memcpy(p3 + BTOFF_START(bt) + BTOFF_USER(bt) + diff * fLen,		 p + BTOFF_USER(bt),BTLEN_USER(bt));	  /*  Need to copy at least leftmost subpage element  */#ifdef CONFIG_BTREE_EXTRALEAF	  if(BTPAGE_ISLEAF(bt,p1))	    memcpy(p3 + BTOFF_START(bt),p1 + BTOFF_START(bt) +		   (BTPAGE_LENGTH(bt,p1) - diff) * fLen,diff * fLen);	  else#endif	    memcpy(p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt),		   p1 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt) +		   (BTPAGE_LENGTH(bt,p1) - diff) * fLen,		   diff * fLen + sizeof(BTreePage));	  /*  Set new element on page2 and move contents of page3  */	  memcpy(p + BTOFF_USER(bt),		 p1 + BTOFF_START(bt) + BTOFF_USER(bt) +		 (BTPAGE_LENGTH(bt,p1) - diff - 1) * fLen,BTLEN_USER(bt));	  BTPAGE_LENGTH(bt,p1) -= diff + 1;	  BTPAGE_LENGTH(bt,p3) += diff + 1;	}	oDepth = -1; /*  stop deleting  */      } else {	/* **  We can decrease the number of pages  ** */#ifdef DEBUGD	printf("  CONCAT PAGES %d: %d %d , %d\n",page1,	       BTPAGE_LENGTH(bt,p1),BTPAGE_LENGTH(bt,p3),len + 1);#endif	/*	 *  Move single parent element from page2 and all elements	 *   from page3 to page1. The subpage entry for the element	 *   from page2 is taken from the leftmost subpage from page3.	 */	memcpy(p1 + BTOFF_START(bt) + BTOFF_USER(bt) +	       BTPAGE_LENGTH(bt,p1) * fLen,	       p + BTOFF_USER(bt),BTLEN_USER(bt));#ifdef CONFIG_BTREE_EXTRALEAF	if(BTPAGE_ISLEAF(bt,p1))	  memcpy(p1 + BTOFF_START(bt) + (BTPAGE_LENGTH(bt,p1) + 1) * fLen,		 p3 + BTOFF_START(bt),BTPAGE_LENGTH(bt,p3) * fLen);	else#endif	  memcpy(p1 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt) +		 (BTPAGE_LENGTH(bt,p1) + 1) * fLen,		 p3 + BTOFF_START(bt) + BTOFF_SUBPAGEM1(bt),		 BTPAGE_LENGTH(bt,p3) * fLen + sizeof(BTreePage));	/*  Concatenated page now contains all elements.  */	BTPAGE_LENGTH(bt,p1) = len + 1;	/*  Free the neighbouring page and unlock other one  */	if((*(bt->BAT_PageAdmin))(bt,page3) < 0) {	  (void)baySetPage(bt,page2,BFILEMODE_UNPROT);	  if(flag) page1 = page3;	  goto error1;	}	/*  Go to next level  */	oDepth--;      }      /*  Remove all page locks  */      if(baySetPage(bt,flag ? page3 : page1,BFILEMODE_UNPROT) < 0 ||	 baySetPage(bt,page2,BFILEMODE_UNPROT) < 0) goto error;    }  }  /* ****  END MAIN LOOP  **** */  if(oCont) free(oStack);  if(nCont) free(nStack);#ifndef CONFIG_USE_ALLOCA  if(temp) free(temp);#endif  return(0);error1:  /*  Clean up: Unlock page1 before return  */  (void)baySetPage(bt,page1,BFILEMODE_UNPROT);error:#ifndef CONFIG_USE_ALLOCA  free(temp);#endif  return(-1);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜片在线观看| 亚洲国产视频直播| 亚洲一区二区三区中文字幕在线| 奇米影视7777精品一区二区| heyzo一本久久综合| 欧美一区二区大片| 亚洲免费高清视频在线| 国产成人综合自拍| 91精品国产品国语在线不卡| 亚洲欧美激情视频在线观看一区二区三区 | 国产成人亚洲综合a∨婷婷图片| 在线观看视频一区二区| 国产精品免费网站在线观看| 精一区二区三区| 91精品国产综合久久福利软件 | av亚洲精华国产精华精华| 欧美一区二区三区爱爱| 亚洲高清免费在线| 91麻豆免费观看| 国产精品区一区二区三| 国内不卡的二区三区中文字幕| 欧美日韩精品系列| 亚洲资源中文字幕| 欧美性猛片xxxx免费看久爱| 亚洲卡通动漫在线| 色一情一伦一子一伦一区| 国产精品国产精品国产专区不片| 国产精品911| 国产清纯白嫩初高生在线观看91| 国产一区二区三区在线观看免费| 日韩你懂的在线播放| 久久精品国产久精国产爱| 欧美成人一区二区三区片免费| 日韩精品福利网| 欧美一二三四区在线| 青草av.久久免费一区| 91精品一区二区三区久久久久久| 肉色丝袜一区二区| 欧美α欧美αv大片| 看国产成人h片视频| 久久影视一区二区| 国产suv一区二区三区88区| 国产婷婷色一区二区三区四区| 国产激情视频一区二区三区欧美| 久久久三级国产网站| 成人丝袜高跟foot| 亚洲综合色噜噜狠狠| 欧美日产国产精品| 麻豆精品新av中文字幕| 国产视频一区二区在线| 99国产精品视频免费观看| 一区二区三区日韩精品| 日韩一区二区麻豆国产| 国产一区二区三区精品欧美日韩一区二区三区 | 国产尤物一区二区| 最新成人av在线| 欧美精品丝袜久久久中文字幕| 久久精品国产精品亚洲精品| 欧美国产一区二区在线观看| 色8久久精品久久久久久蜜| 日韩成人精品视频| 国产女人aaa级久久久级| 91麻豆免费观看| 麻豆成人在线观看| 日韩一区在线看| 欧美一级片在线| 成人免费视频app| 五月婷婷久久丁香| 国产精品久久久一本精品| 欧美挠脚心视频网站| 国产精品夜夜嗨| 午夜视频在线观看一区二区| 久久久久国产精品厨房| 欧美午夜视频网站| 懂色av中文字幕一区二区三区 | 蜜桃视频一区二区| 国产精品成人免费在线| 日韩精品一区二区三区中文不卡| 国产91丝袜在线18| 免费成人av在线| 亚洲国产美国国产综合一区二区| 久久欧美中文字幕| 91精品黄色片免费大全| 91网站黄www| 国产麻豆精品久久一二三| 成人免费毛片app| 日韩中文字幕一区二区三区| 亚洲国产精品av| 精品国产区一区| 在线播放91灌醉迷j高跟美女 | 91网站视频在线观看| 紧缚捆绑精品一区二区| 亚洲福中文字幕伊人影院| 一区在线播放视频| 久久影院午夜片一区| 日韩一区二区三区观看| 91黄视频在线观看| 99re这里只有精品6| 国产成人午夜精品5599| 精品一区二区三区久久| 天天av天天翘天天综合网色鬼国产| 亚洲免费电影在线| 亚洲欧洲成人自拍| 国产精品国产三级国产普通话三级 | 欧美午夜精品久久久久久超碰| 成人黄色小视频| 丁香天五香天堂综合| 韩国成人福利片在线播放| 美女脱光内衣内裤视频久久网站 | 日本最新不卡在线| 亚洲1区2区3区视频| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品久久久久婷婷二区次| 欧美激情综合五月色丁香小说| 精品成人一区二区| 久久久99久久精品欧美| 久久婷婷国产综合国色天香| 久久中文字幕电影| 国产亚洲精久久久久久| 久久久99精品免费观看| 中文字幕免费不卡| 亚洲欧美日本在线| 亚洲精选视频在线| 亚洲一二三四在线| 日日夜夜精品视频免费| 美日韩黄色大片| 国产福利一区在线观看| 99riav久久精品riav| 欧美丝袜丝交足nylons图片| 欧美一区二区三区视频免费播放 | 免费在线观看一区| 亚洲人午夜精品天堂一二香蕉| 日韩视频在线观看一区二区| 日韩一区二区三| 久久久精品天堂| 亚洲日穴在线视频| 午夜精品久久久久久久 | 性做久久久久久久久| 蜜芽一区二区三区| 国产精品一区二区视频| 色综合网色综合| 91精品国产色综合久久| 中文字幕欧美日本乱码一线二线| 亚洲男人都懂的| 乱一区二区av| av亚洲精华国产精华精华 | 欧美一区二区三区日韩| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品视频九色porn| 亚洲免费伊人电影| 国内久久精品视频| 色哟哟亚洲精品| 精品av久久707| 亚洲一区二区影院| 国产成人精品www牛牛影视| 欧美日韩成人综合在线一区二区| 久久亚洲综合色| 亚洲国产视频在线| av一本久道久久综合久久鬼色| 欧美一区二区福利视频| 一区二区三区毛片| 豆国产96在线|亚洲| 欧美电影免费提供在线观看| 亚洲免费观看视频| 成人免费观看视频| 欧美sm美女调教| 午夜精品成人在线视频| 99久久国产综合精品色伊| 精品成人一区二区| 青青草原综合久久大伊人精品| 色综合久久综合网欧美综合网| 国产亚洲精品资源在线26u| 日本va欧美va精品发布| 欧美在线观看视频一区二区三区 | 2022国产精品视频| 日本伊人午夜精品| 在线观看成人免费视频| 中文字幕中文字幕在线一区| 国产一区二区三区视频在线播放| 欧美日韩精品一区二区天天拍小说 | 日韩美女视频在线| 亚洲一区二区三区爽爽爽爽爽| 成人一区二区三区中文字幕| 精品国产亚洲在线| 麻豆久久久久久| 欧美伦理影视网| 亚洲一区二区三区四区不卡 | 国产一区二区三区香蕉| 欧美一区二区三区在| 丝袜美腿亚洲色图| 欧美日韩成人在线| 性做久久久久久免费观看欧美| 色综合久久88色综合天天6| 国产精品色眯眯| 成人晚上爱看视频| 国产日韩欧美在线一区| 国产精品18久久久| 国产亚洲欧美日韩日本| 国产裸体歌舞团一区二区| 久久久一区二区三区|