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

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

?? tktextbtree.c

?? linux系統(tǒng)下的音頻通信
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
    }    while (nodePtr->level > 0) {	nodePtr = nodePtr->children.nodePtr;    }    return nodePtr->children.linePtr;}/* *---------------------------------------------------------------------- * * TkBTreePreviousLine -- * *	Given an existing line in a B-tree, this procedure locates the *	previous line in the B-tree.  This procedure is used for scanning *	through the B-tree in the reverse direction. * * Results: *	The return value is a pointer to the line that immediately *	preceeds linePtr, or NULL if there is no such line. * * Side effects: *	None. * *---------------------------------------------------------------------- */TkTextLine *TkBTreePreviousLine(linePtr)    register TkTextLine *linePtr;	/* Pointer to existing line in					 * B-tree. */{    register Node *nodePtr;    register Node *node2Ptr;    register TkTextLine *prevPtr;    /*     * Find the line under this node just before the starting line.     */    prevPtr = linePtr->parentPtr->children.linePtr;	/* First line at leaf */    while (prevPtr != linePtr) {	if (prevPtr->nextPtr == linePtr) {	    return prevPtr;	}	prevPtr = prevPtr->nextPtr;	if (prevPtr == (TkTextLine *) NULL) {	    panic("TkBTreePreviousLine ran out of lines");	}    }    /*     * This was the first line associated with the particular parent node.     * Search up the tree for the previous node, then search down from that     * node to find its last line.     */    for (nodePtr = linePtr->parentPtr; ; nodePtr = nodePtr->parentPtr) {	if (nodePtr == (Node *) NULL || nodePtr->parentPtr == (Node *) NULL) {	    return (TkTextLine *) NULL;	}	if (nodePtr != nodePtr->parentPtr->children.nodePtr) {	    break;	}    }    for (node2Ptr = nodePtr->parentPtr->children.nodePtr; ; 	    node2Ptr = node2Ptr->children.nodePtr) {	while (node2Ptr->nextPtr != nodePtr) {	    node2Ptr = node2Ptr->nextPtr;	}	if (node2Ptr->level == 0) {	    break;	}	nodePtr = (Node *)NULL;    }    for (prevPtr = node2Ptr->children.linePtr ; ; prevPtr = prevPtr->nextPtr) {	if (prevPtr->nextPtr == (TkTextLine *) NULL) {	    return prevPtr;	}    }}/* *---------------------------------------------------------------------- * * TkBTreeLineIndex -- * *	Given a pointer to a line in a B-tree, return the numerical *	index of that line. * * Results: *	The result is the index of linePtr within the tree, where 0 *	corresponds to the first line in the tree. * * Side effects: *	None. * *---------------------------------------------------------------------- */intTkBTreeLineIndex(linePtr)    TkTextLine *linePtr;		/* Pointer to existing line in					 * B-tree. */{    register TkTextLine *linePtr2;    register Node *nodePtr, *parentPtr, *nodePtr2;    int index;    /*     * First count how many lines precede this one in its level-0     * node.     */    nodePtr = linePtr->parentPtr;    index = 0;    for (linePtr2 = nodePtr->children.linePtr; linePtr2 != linePtr;	    linePtr2 = linePtr2->nextPtr) {	if (linePtr2 == NULL) {	    panic("TkBTreeLineIndex couldn't find line");	}	index += 1;    }    /*     * Now work up through the levels of the tree one at a time,     * counting how many lines are in nodes preceding the current     * node.     */    for (parentPtr = nodePtr->parentPtr ; parentPtr != NULL;	    nodePtr = parentPtr, parentPtr = parentPtr->parentPtr) {	for (nodePtr2 = parentPtr->children.nodePtr; nodePtr2 != nodePtr;		nodePtr2 = nodePtr2->nextPtr) {	    if (nodePtr2 == NULL) {		panic("TkBTreeLineIndex couldn't find node");	    }	    index += nodePtr2->numLines;	}    }    return index;}/* *---------------------------------------------------------------------- * * TkBTreeLinkSegment -- * *	This procedure adds a new segment to a B-tree at a given *	location. * * Results: *	None. * * Side effects: *	SegPtr will be linked into its tree. * *---------------------------------------------------------------------- */	/* ARGSUSED */voidTkBTreeLinkSegment(segPtr, indexPtr)    TkTextSegment *segPtr;	/* Pointer to new segment to be added to				 * B-tree.  Should be completely initialized				 * by caller except for nextPtr field. */    TkTextIndex *indexPtr;	/* Where to add segment:  it gets linked				 * in just before the segment indicated				 * here. */{    register TkTextSegment *prevPtr;    prevPtr = SplitSeg(indexPtr);    if (prevPtr == NULL) {	segPtr->nextPtr = indexPtr->linePtr->segPtr;	indexPtr->linePtr->segPtr = segPtr;    } else {	segPtr->nextPtr = prevPtr->nextPtr;	prevPtr->nextPtr = segPtr;    }    CleanupLine(indexPtr->linePtr);    if (tkBTreeDebug) {	TkBTreeCheck(indexPtr->tree);    }}/* *---------------------------------------------------------------------- * * TkBTreeUnlinkSegment -- * *	This procedure unlinks a segment from its line in a B-tree. * * Results: *	None. * * Side effects: *	SegPtr will be unlinked from linePtr.  The segment itself *	isn't modified by this procedure. * *---------------------------------------------------------------------- */	/* ARGSUSED */voidTkBTreeUnlinkSegment(tree, segPtr, linePtr)    TkTextBTree tree;			/* Tree containing segment. */    TkTextSegment *segPtr;		/* Segment to be unlinked. */    TkTextLine *linePtr;		/* Line that currently contains					 * segment. */{    register TkTextSegment *prevPtr;    if (linePtr->segPtr == segPtr) {	linePtr->segPtr = segPtr->nextPtr;    } else {	for (prevPtr = linePtr->segPtr; prevPtr->nextPtr != segPtr;		prevPtr = prevPtr->nextPtr) {	    /* Empty loop body. */	}	prevPtr->nextPtr = segPtr->nextPtr;    }    CleanupLine(linePtr);}/* *---------------------------------------------------------------------- * * TkBTreeTag -- * *	Turn a given tag on or off for a given range of characters in *	a B-tree of text. * * Results: *	None. * * Side effects: *	The given tag is added to the given range of characters *	in the tree or removed from all those characters, depending *	on the "add" argument.  The structure of the btree is modified *	enough that index1Ptr and index2Ptr are no longer valid after *	this procedure returns, and the indexes may be modified by *	this procedure. * *---------------------------------------------------------------------- */voidTkBTreeTag(index1Ptr, index2Ptr, tagPtr, add)    register TkTextIndex *index1Ptr;	/* Indicates first character in					 * range. */    register TkTextIndex *index2Ptr;	/* Indicates character just after the					 * last one in range. */    TkTextTag *tagPtr;			/* Tag to add or remove. */    int add;				/* One means add tag to the given					 * range of characters;  zero means					 * remove the tag from the range. */{    TkTextSegment *segPtr, *prevPtr;    TkTextSearch search;    TkTextLine *cleanupLinePtr;    int oldState;    int changed;    /*     * See whether the tag is present at the start of the range.  If     * the state doesn't already match what we want then add a toggle     * there.     */    oldState = TkBTreeCharTagged(index1Ptr, tagPtr);    if ((add != 0) ^ oldState) {	segPtr = (TkTextSegment *) ckalloc(TSEG_SIZE);	segPtr->typePtr = (add) ? &tkTextToggleOnType : &tkTextToggleOffType;	prevPtr = SplitSeg(index1Ptr);	if (prevPtr == NULL) {	    segPtr->nextPtr = index1Ptr->linePtr->segPtr;	    index1Ptr->linePtr->segPtr = segPtr;	} else {	    segPtr->nextPtr = prevPtr->nextPtr;	    prevPtr->nextPtr = segPtr;	}	segPtr->size = 0;	segPtr->body.toggle.tagPtr = tagPtr;	segPtr->body.toggle.inNodeCounts = 0;    }    /*     * Scan the range of characters and delete any internal tag     * transitions.  Keep track of what the old state was at the end     * of the range, and add a toggle there if it's needed.     */    TkBTreeStartSearch(index1Ptr, index2Ptr, tagPtr, &search);    cleanupLinePtr = index1Ptr->linePtr;    while (TkBTreeNextTag(&search)) {	oldState ^= 1;	segPtr = search.segPtr;	prevPtr = search.curIndex.linePtr->segPtr;	if (prevPtr == segPtr) {	    search.curIndex.linePtr->segPtr = segPtr->nextPtr;	} else {	    while (prevPtr->nextPtr != segPtr) {		prevPtr = prevPtr->nextPtr;	    }	    prevPtr->nextPtr = segPtr->nextPtr;	}	if (segPtr->body.toggle.inNodeCounts) {	    ChangeNodeToggleCount(search.curIndex.linePtr->parentPtr,		    segPtr->body.toggle.tagPtr, -1);	    segPtr->body.toggle.inNodeCounts = 0;	    changed = 1;	} else {	    changed = 0;	}	ckfree((char *) segPtr);	/*	 * The code below is a bit tricky.  After deleting a toggle	 * we eventually have to call CleanupLine, in order to allow	 * character segments to be merged together.  To do this, we	 * remember in cleanupLinePtr a line that needs to be	 * cleaned up, but we don't clean it up until we've moved	 * on to a different line.  That way the cleanup process	 * won't goof up segPtr.	 */	if (cleanupLinePtr != search.curIndex.linePtr) {	    CleanupLine(cleanupLinePtr);	    cleanupLinePtr = search.curIndex.linePtr;	}	/*	 * Quick hack.  ChangeNodeToggleCount may move the tag's root	 * location around and leave the search in the void.  This resets	 * the search.	 */	if (changed) {	    TkBTreeStartSearch(index1Ptr, index2Ptr, tagPtr, &search);	}    }    if ((add != 0) ^ oldState) {	segPtr = (TkTextSegment *) ckalloc(TSEG_SIZE);	segPtr->typePtr = (add) ? &tkTextToggleOffType : &tkTextToggleOnType;	prevPtr = SplitSeg(index2Ptr);	if (prevPtr == NULL) {	    segPtr->nextPtr = index2Ptr->linePtr->segPtr;	    index2Ptr->linePtr->segPtr = segPtr;	} else {	    segPtr->nextPtr = prevPtr->nextPtr;	    prevPtr->nextPtr = segPtr;	}	segPtr->size = 0;	segPtr->body.toggle.tagPtr = tagPtr;	segPtr->body.toggle.inNodeCounts = 0;    }    /*     * Cleanup cleanupLinePtr and the last line of the range, if     * these are different.     */    CleanupLine(cleanupLinePtr);    if (cleanupLinePtr != index2Ptr->linePtr) {	CleanupLine(index2Ptr->linePtr);    }    if (tkBTreeDebug) {	TkBTreeCheck(index1Ptr->tree);    }}/* *---------------------------------------------------------------------- * * ChangeNodeToggleCount -- * *	This procedure increments or decrements the toggle count for *	a particular tag in a particular node and all its ancestors *	up to the per-tag root node. * * Results: *	None. * * Side effects: *	The toggle count for tag is adjusted up or down by "delta" in *	nodePtr.  This routine maintains the tagRootPtr that identifies *	the root node for the tag, moving it up or down the tree as needed. * *---------------------------------------------------------------------- */static voidChangeNodeToggleCount(nodePtr, tagPtr, delta)    register Node *nodePtr;		/* Node whose toggle count for a tag					 * must be changed. */    TkTextTag *tagPtr;			/* Information about tag. */    int delta;				/* Amount to add to current toggle					 * count for tag (may be negative). */{    register Summary *summaryPtr, *prevPtr;    register Node *node2Ptr;    int rootLevel;			/* Level of original tag root */    tagPtr->toggleCount += delta;    if (tagPtr->tagRootPtr == (Node *) NULL) {	tagPtr->tagRootPtr = nodePtr;	return;    }    /*     * Note the level of the existing root for the tag so we can detect     * if it needs to be moved because of the toggle count change.     */    rootLevel = tagPtr->tagRootPtr->level;    /*     * Iterate over the node and its ancestors up to the tag root, adjusting     * summary counts at each node and moving the tag's root upwards if     * necessary.     */    for ( ; nodePtr != tagPtr->tagRootPtr; nodePtr = nodePtr->parentPtr) {	/*	 * See if there's already an entry for this tag for this node.  If so,	 * perhaps all we have to do is adjust its count.	 */    	for (prevPtr = NULL, summaryPtr = nodePtr->summaryPtr;		summaryPtr != NULL;		prevPtr = summaryPtr, summaryPtr = summaryPtr->nextPtr) {	    if (summaryPtr->tagPtr == tagPtr) {		break;	    }	}	if (summaryPtr != NULL) {	    summaryPtr->toggleCount += delta;	    if (summaryPtr->toggleCount > 0 &&		    summaryPtr->toggleCount < tagPtr->toggleCount) {		continue;	    }	    if (summaryPtr->toggleCount != 0) {		/*		 * Should never find a node with max toggle count at this		 * point (there shouldn't have been a summary entry in the		 * first place).		 */		panic("ChangeNodeToggleCount: bad toggle count (%d) max (%d)",		    summaryPtr->toggleCount, tagPtr->toggleCount);	    }    	    /*	     * Zero toggle count;  must remove this tag from the list.	     */	    if (prevPtr == NULL) {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线精品视频一区二区三四| 亚洲欧美偷拍三级| 91精品国产乱码| 欧美精品一卡二卡| 欧美乱妇20p| 欧美一区二区在线观看| 欧美一区二区三区人| 精品国产一区二区三区四区四| 欧美大尺度电影在线| 精品国产凹凸成av人网站| 久久久午夜电影| 国产精品看片你懂得| 亚洲裸体在线观看| 国产69精品久久99不卡| 国产v综合v亚洲欧| 99精品视频一区| 欧美日韩一区 二区 三区 久久精品| 欧美性大战久久久久久久| 在线成人免费观看| 欧美变态tickle挠乳网站| 久久久不卡网国产精品二区 | 久久久噜噜噜久噜久久综合| 欧美精品一区二区高清在线观看| 久久久久成人黄色影片| 国产精品福利在线播放| 亚洲午夜私人影院| 男人的天堂久久精品| 国产成人综合自拍| 在线免费一区三区| 日韩午夜在线观看视频| 国产日韩欧美一区二区三区乱码 | 2023国产精品自拍| 国产精品美女久久久久久2018| 亚洲欧美在线高清| 亚洲成a天堂v人片| 国产真实乱子伦精品视频| 成人在线综合网| 91成人在线精品| 欧美不卡视频一区| 最新久久zyz资源站| 图片区小说区区亚洲影院| 国内精品国产成人| 在线精品视频免费观看| 精品国产凹凸成av人网站| 日韩美女视频一区| 久久精工是国产品牌吗| 91视频免费观看| 日韩欧美一级二级三级久久久| 国产精品国产三级国产aⅴ中文 | 美女视频黄免费的久久| 成人教育av在线| 91精品国产91综合久久蜜臀| 亚洲欧洲三级电影| 老司机精品视频线观看86| 91蜜桃网址入口| www国产成人| 午夜视频一区在线观看| 成a人片亚洲日本久久| 日韩欧美亚洲另类制服综合在线| 中文字幕一区日韩精品欧美| 欧美aa在线视频| 91福利在线看| 丝袜美腿亚洲色图| 99re8在线精品视频免费播放| 日韩一二三区不卡| 亚洲最大色网站| 99久久久久免费精品国产 | 中文字幕人成不卡一区| 久久精品99国产精品日本| 欧美色中文字幕| 国产精品久久久久婷婷| 久久国产乱子精品免费女| 欧美视频在线播放| 一区二区三区影院| av亚洲精华国产精华精| 久久久久久99久久久精品网站| 秋霞成人午夜伦在线观看| 色综合天天综合给合国产| 亚洲国产精品二十页| 国产乱子轮精品视频| 欧美一区二区三区免费视频 | 成人在线综合网站| 亚洲精品在线免费播放| 蜜桃视频在线观看一区二区| 欧美色综合影院| 一区二区在线观看免费| 99久久99精品久久久久久| 国产欧美久久久精品影院| 国产伦精品一区二区三区在线观看| 欧美一区二区成人6969| 欧美aaa在线| 欧美一区二区久久久| 日本美女一区二区三区| 欧美剧情片在线观看| 亚洲成人免费av| 欧美精三区欧美精三区| 午夜伊人狠狠久久| 欧美日韩电影一区| 亚洲国产欧美在线| 欧美另类z0zxhd电影| 日韩有码一区二区三区| 91精品国产高清一区二区三区| 日韩专区欧美专区| 欧美一级久久久久久久大片| 免费观看在线色综合| 日韩免费观看2025年上映的电影| 麻豆精品国产传媒mv男同| 精品国产91乱码一区二区三区| 韩国女主播一区| 国产日产欧美一区| 99精品久久久久久| 一区二区三区不卡视频在线观看| 91黄色免费网站| 日韩一区欧美二区| 精品国产a毛片| 懂色av中文字幕一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋 | 久久综合久久99| 国产高清亚洲一区| 欧美韩国日本一区| 91黄视频在线| 免费美女久久99| 亚洲精品一区二区三区蜜桃下载 | 91在线精品一区二区| 亚洲欧美激情在线| 欧美日韩性生活| 黄页网站大全一区二区| 国产欧美精品一区二区三区四区| 99综合影院在线| 亚洲成人在线免费| 精品sm在线观看| 91视频你懂的| 蜜臀av一区二区在线免费观看| 久久精品男人天堂av| 91农村精品一区二区在线| 天天综合色天天综合| 欧美精品一区二区三区蜜臀| 99久久精品国产导航| 视频一区欧美日韩| 国产三级三级三级精品8ⅰ区| 色一情一伦一子一伦一区| 蜜臂av日日欢夜夜爽一区| 国产三级精品视频| 欧美日韩一级二级| 国产69精品久久777的优势| 亚洲一二三四在线| 国产色91在线| 91精品在线观看入口| 成人黄色免费短视频| 天天操天天综合网| 国产精品日韩成人| 91精品黄色片免费大全| 成年人午夜久久久| 麻豆视频观看网址久久| 亚洲乱码国产乱码精品精98午夜| 欧美大片国产精品| 欧美在线观看视频一区二区 | 久久综合999| 欧美丝袜丝交足nylons图片| 国产精品正在播放| 日本人妖一区二区| 亚洲精品国产成人久久av盗摄| 久久综合九色综合97_久久久| 在线观看91精品国产入口| 国产精品99久久久久| 三级在线观看一区二区| 亚洲天堂2014| 久久久久久久久久久久久久久99 | 欧美人与性动xxxx| 99久久亚洲一区二区三区青草| 蜜臀国产一区二区三区在线播放| 一区二区在线观看免费| 国产女主播一区| 精品国产凹凸成av人导航| 欧美日韩一区二区在线观看视频| 成人午夜又粗又硬又大| 精品在线观看视频| 午夜视频一区在线观看| 亚洲精品综合在线| 国产欧美综合色| 午夜私人影院久久久久| 亚洲天堂免费在线观看视频| 久久久99精品久久| 精品国产乱码久久久久久蜜臀| 欧美精品久久天天躁| 欧美综合在线视频| 一本色道久久加勒比精品| 成人午夜视频在线| 国产高清精品在线| 国产一区二区不卡| 黄页视频在线91| 韩国精品在线观看| 久久精品99国产精品日本| 喷白浆一区二区| 日本成人中文字幕在线视频| 一区二区三区美女| 亚洲免费观看在线视频| 亚洲天堂中文字幕| 亚洲欧美另类图片小说| 亚洲男人天堂一区|