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

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

?? rvobjlist.c

?? 基于h323協議的軟phone
?? C
字號:
/***********************************************************************
Filename   : rvobjlist.c
Description: utility for building lists of objects (structures)
************************************************************************
      Copyright (c) 2001,2002 RADVISION Inc. and RADVISION Ltd.
************************************************************************
NOTICE:
This document contains information that is confidential and proprietary
to RADVISION Inc. and RADVISION Ltd.. No part of this document may be
reproduced in any form whatsoever without written prior approval by
RADVISION Inc. or RADVISION Ltd..

RADVISION Inc. and RADVISION Ltd. reserve the right to revise this
publication and make changes without obligation to notify any person of
such revisions or changes.
***********************************************************************/
#include "rvobjlist.h"

/* Basic list utility for structures. User is responsible for locking */
/* if list is to be shared. */

/* The template object is never touched and is simply used to find the */
/* location of the RvObjListElement structure (elementptr) within it. */
/* It is possible to put the Element structure outside of the the object */
/* and have a negative offset between the two. */
RvObjList *RvObjListConstruct(RvObjList *objlist, void *itemtemp, RvObjListElement *elementptr)
{
#if defined(RV_NULLCHECK)
	if((objlist == NULL) || (itemtemp == NULL) || (elementptr == NULL))
		return NULL;
#endif

	/* List is circular with achor having NULL obj */
	objlist->anchor.prev = &objlist->anchor;
	objlist->anchor.next = &objlist->anchor;
	objlist->anchor.obj = NULL;
	objlist->count = 0;
	objlist->offset = (RvInt8 *)elementptr - (RvInt8 *)itemtemp;

	return objlist;
}

RvSize_t RvObjListSize(RvObjList *objlist)
{
#if defined(RV_NULLCHECK)
	if(objlist == NULL)
		return 0;
#endif
	return(objlist->count);
}

/* If curitem is NULL than item is put at start of list */
void *RvObjListInsertAfter(RvObjList *objlist, void *curitem, void *newitem)
{
	RvObjListElement *curelem, *newelem;

#if defined(RV_NULLCHECK)
	if((objlist == NULL) || (newitem == NULL))
		return NULL;
#endif

	objlist->count += 1;
#if defined(RV_RANGECHECK)
	if(objlist->count == 0) {
		/* We wrapped, which means we can't add anything */
		objlist->count -= 1;
		return NULL;
	}
#endif

	if(curitem != NULL) {
		curelem = (RvObjListElement *)((RvInt8 *)curitem + objlist->offset);
	} else curelem = &objlist->anchor; /* put at start of list */
	newelem = (RvObjListElement *)((RvInt8 *)newitem + objlist->offset);
	newelem->obj = newitem;
	newelem->prev = curelem;
	newelem->next = curelem->next;
	curelem->next = newelem;
	newelem->next->prev = newelem;

	return newitem;
}

/* If curitem is NULL than item is put at end of list */
void *RvObjListInsertBefore(RvObjList *objlist, void *curitem, void *newitem)
{
	RvObjListElement *curelem, *newelem;

#if defined(RV_NULLCHECK)
	if((objlist == NULL) || (newitem == NULL))
		return NULL;
#endif

	objlist->count += RvUintConst(1);
#if defined(RV_RANGECHECK)
	if(objlist->count == 0) {
		/* We wrapped, which means we can't add anything */
		objlist->count -= 1;
		return NULL;
	}
#endif

	if(curitem != NULL) {
		curelem = (RvObjListElement *)((RvInt8 *)curitem + objlist->offset);
	} else curelem = &objlist->anchor; /* put at end of list */
	newelem = (RvObjListElement *)((RvInt8 *)newitem + objlist->offset);
	newelem->obj = newitem;
	newelem->next = curelem;
	newelem->prev = curelem->prev;
	curelem->prev = newelem;
	newelem->prev->next = newelem;

	return newitem;
}


/* Gets next item (if curitem is NULL than get first item) */
void *RvObjListGetNext(RvObjList *objlist, void *curitem, RvBool removeitem)
{
	RvObjListElement *elem;
	void *item;

#if defined(RV_NULLCHECK)
	if(objlist == NULL)
		return NULL;
#endif

	if(curitem != NULL) {
		elem = (RvObjListElement *)((RvInt8 *)curitem + objlist->offset);
		elem = elem->next;
	} else elem = objlist->anchor.next; /* Get first item */
	item = elem->obj;
	if((removeitem == RV_OBJLIST_REMOVE) && (item != NULL)) {
		/* Only remove the item if requested and its not the anchor */
		elem->prev->next = elem->next;
		elem->next->prev = elem->prev;
		objlist->count -= 1;
	}

	return item;
}

/* Gets previous item (if curitem is NULL than get last item) */
void *RvObjListGetPrevious(RvObjList *objlist, void *curitem, RvBool removeitem)
{
	RvObjListElement *elem;
	void *item;

#if defined(RV_NULLCHECK)
	if(objlist == NULL)
		return NULL;
#endif

	if(curitem != NULL) {
		elem = (RvObjListElement *)((RvInt8 *)curitem + objlist->offset);
		elem = elem->prev;
	} else elem = objlist->anchor.prev; /* Get last item */
	item = elem->obj;
	if((removeitem == RV_OBJLIST_REMOVE) && (item != NULL)) {
		/* Only remove the item if requested and its not the anchor */
		elem->prev->next = elem->next;
		elem->next->prev = elem->prev;
		objlist->count -= 1;
	}

	return item;
}

void *RvObjListRemoveItem(RvObjList *objlist, void *item)
{
	RvObjListElement *elem;

#if defined(RV_NULLCHECK)
	if((objlist == NULL) || (item == NULL))
		return NULL;
#endif
	
	elem = (RvObjListElement *)((RvInt8 *)item + objlist->offset);
	elem->prev->next = elem->next;
	elem->next->prev = elem->prev;
	objlist->count -= 1;

	return item;
}

#if defined(RV_TEST_CODE)
#include "rvstdio.h"
typedef struct {
	RvInt32 dummy1;
	RvInt64 dummy2;
	RvObjListElement listElem;
	RvChar dummy3[80];
	RvInt index;
} RvObjListTestStruct;

#define RV_OBJLIST_NUMTESTOBJ 1000
static RvObjListTestStruct RvObjTestData[RV_OBJLIST_NUMTESTOBJ];

void RvObjListTest(void)
{
	RvInt i;
	RvObjList list, *cresult;
	void *result;

	RvPrintf("Starting test of rvobjlist.\n");
	
	for(i = 0; i < RV_OBJLIST_NUMTESTOBJ; i++)
		RvObjTestData[i].index = i;

	RvPrintf("RvObjListConstruct: ");
	cresult = RvObjListConstruct(&list, &RvObjTestData[0], &RvObjTestData[0].listElem);
	if(cresult != NULL) {
		RvPrintf("OK\n");
	} else RvPrintf("ERROR\n");

	RvPrintf("Adding %d items to list (alternating begin/end): ", RV_OBJLIST_NUMTESTOBJ);
	result = NULL;
	for(i = 0; i < RV_OBJLIST_NUMTESTOBJ; i++) {
		if(i % 2) {
			result = RvObjListInsertAfter(&list, NULL, &RvObjTestData[i]); /* Front */
		} else result = RvObjListInsertBefore(&list, NULL, &RvObjTestData[i]); /* End */
		if(result == NULL) {
			RvPrintf("ERROR\n");
			break;
		}
	}
	if(result != NULL)
		RvPrintf("OK\n");

	RvPrintf("RvObjListSize = %u\n", RvObjListSize(&list));

	RvPrintf("Removing %d items from end of list: ", (RV_OBJLIST_NUMTESTOBJ / 2));
	for(i = 0; i < (RV_OBJLIST_NUMTESTOBJ / 2); i++) {
		result = RvObjListGetPrevious(&list, NULL, RV_OBJLIST_REMOVE);
		if(result == NULL) {
			RvPrintf("ERROR\n");
			break;
		}
	}
	if(result != NULL)
		RvPrintf("OK\n");
	
	RvPrintf("Removing %d items from beginning of list: ", (RV_OBJLIST_NUMTESTOBJ / 2));
	for(i = (RV_OBJLIST_NUMTESTOBJ / 2); i < RV_OBJLIST_NUMTESTOBJ; i++) {
		result = RvObjListGetNext(&list, NULL, RV_OBJLIST_REMOVE);
		if(result == NULL) {
			RvPrintf("ERROR\n");
			break;
		}
	}
	if(result != NULL)
		RvPrintf("OK\n");

	RvPrintf("RvObjListSize = %u\n", RvObjListSize(&list));

	RvPrintf("Trying to remove one more from beginning of list: ");
	result = RvObjListGetNext(&list, NULL, RV_OBJLIST_REMOVE);
	if(result == NULL) {
		RvPrintf("OK\n");
	} else RvPrintf("ERROR\n");

	RvPrintf("Trying to remove one more from end of list: ");
	result = RvObjListGetPrevious(&list, NULL, RV_OBJLIST_REMOVE);
	if(result == NULL) {
		RvPrintf("OK\n");
	} else RvPrintf("ERROR\n");

	RvPrintf("RvObjListSize = %u\n", RvObjListSize(&list));

	RvPrintf("Destructing list.\n");
	RvObjListDestruct(&list);
}

#endif /* RV_TEST_CODE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷久久久久swag精品| 99综合电影在线视频| 91伊人久久大香线蕉| 欧美一卡二卡在线观看| 一区二区三区在线看| 风流少妇一区二区| 日韩西西人体444www| 一区二区三区在线播放| 高清成人免费视频| 欧美成va人片在线观看| 亚洲成a人片在线不卡一二三区| 国产高清无密码一区二区三区| 91精品在线观看入口| 一区二区三区影院| 成人美女视频在线观看18| 精品国产乱码久久久久久老虎| 亚洲电影视频在线| 色婷婷av一区二区三区之一色屋| 国产欧美一区二区三区在线老狼 | 欧美一区二区成人| 亚洲午夜视频在线| 色婷婷亚洲综合| 中文字幕日本不卡| 成人听书哪个软件好| 久久精品男人天堂av| 激情综合色播五月| 日韩欧美国产综合一区| 日本特黄久久久高潮| 欧美美女黄视频| 亚洲国产成人91porn| 欧美性受xxxx黑人xyx性爽| 精品在线亚洲视频| 精品欧美一区二区久久| 蜜桃视频第一区免费观看| 欧美一区二区精品久久911| 图片区小说区国产精品视频| 欧美日韩免费观看一区三区| 亚洲午夜一二三区视频| 欧美日本精品一区二区三区| 亚洲综合激情小说| 欧美日韩在线三级| 亚洲gay无套男同| 欧美日韩一本到| 一区av在线播放| 欧美午夜精品一区| 五月天欧美精品| 91精品国产福利| 蜜桃av一区二区三区| 精品免费国产二区三区| 精品无人码麻豆乱码1区2区 | 欧美性大战久久久久久久蜜臀| 亚洲免费观看高清完整版在线观看| 91视频.com| 一区二区成人在线观看| 欧美高清视频在线高清观看mv色露露十八| 亚洲成人激情社区| 日韩一区二区三区电影在线观看| 久久99久国产精品黄毛片色诱| 26uuu久久综合| 国产成a人亚洲| 日韩理论在线观看| 欧美午夜精品理论片a级按摩| 日日夜夜精品视频免费 | 一本到三区不卡视频| 一片黄亚洲嫩模| 日韩欧美一区二区不卡| 国产成人精品在线看| 亚洲视频香蕉人妖| 欧美日韩一区二区三区视频| 久久国产精品露脸对白| 欧美国产国产综合| 在线看国产一区| 青青国产91久久久久久| 国产欧美一区二区三区在线老狼| 91麻豆免费视频| 日本欧美加勒比视频| 久久精品亚洲乱码伦伦中文| 91美女片黄在线观看91美女| 视频一区欧美精品| 国产欧美一区二区三区鸳鸯浴 | 欧美午夜寂寞影院| 激情综合网天天干| 亚洲狼人国产精品| 欧美成人猛片aaaaaaa| av高清久久久| 蜜臀久久99精品久久久久久9| 国产日韩欧美精品电影三级在线| 欧美亚洲国产一区在线观看网站| 精品亚洲国内自在自线福利| 国产**成人网毛片九色| 亚洲已满18点击进入久久| 欧美成人女星排行榜| 一本到高清视频免费精品| 蜜臀a∨国产成人精品| 亚洲欧洲av一区二区三区久久| 911精品国产一区二区在线| 风流少妇一区二区| 日韩精品免费视频人成| 亚洲欧美在线视频| 日韩免费高清av| 色偷偷久久一区二区三区| 久久国产精品99久久久久久老狼| 亚洲日本在线a| 精品国产91乱码一区二区三区| 欧美性猛片xxxx免费看久爱| 国产成人午夜高潮毛片| 日韩在线a电影| 亚洲女性喷水在线观看一区| 欧美精品一区二区三区很污很色的| 色伊人久久综合中文字幕| 国产一区美女在线| 午夜一区二区三区视频| 亚洲欧洲国产日本综合| 久久一二三国产| 在线成人av网站| 色94色欧美sute亚洲线路一ni| 国产在线精品免费av| 天天综合色天天| 亚洲人亚洲人成电影网站色| 久久九九全国免费| 91精品国产综合久久福利软件| 色哟哟一区二区在线观看| 福利电影一区二区| 国产自产高清不卡| 轻轻草成人在线| 亚洲午夜激情网站| 亚洲日本在线视频观看| 中文字幕第一区| 精品国产91乱码一区二区三区| 91精品国产一区二区人妖| 欧美视频一区二区在线观看| 99精品国产一区二区三区不卡| 国产一区二区三区国产| 免费av网站大全久久| 亚洲bt欧美bt精品777| 亚洲夂夂婷婷色拍ww47| 亚洲精品高清在线| 综合色中文字幕| 国产精品福利影院| 欧美激情中文不卡| 久久久久9999亚洲精品| 久久综合久久综合九色| 精品成人私密视频| 日韩精品一区二区三区老鸭窝| 91精品国产色综合久久不卡蜜臀 | 欧美三级中文字| 一本色道综合亚洲| 99久久精品费精品国产一区二区| 成人黄色av电影| 成人一区在线观看| 懂色中文一区二区在线播放| 国产精品一区二区免费不卡| 国内欧美视频一区二区| 看片网站欧美日韩| 美女爽到高潮91| 精品在线播放午夜| 欧美成人伊人久久综合网| 91精品国产高清一区二区三区 | ww亚洲ww在线观看国产| 欧美变态tickling挠脚心| 欧美成人r级一区二区三区| 精品国产免费久久| 久久久亚洲国产美女国产盗摄| 国产亚洲制服色| 亚洲国产成人自拍| ...中文天堂在线一区| 亚洲人成网站影音先锋播放| 一区二区三区免费网站| 亚洲国产aⅴ天堂久久| 日韩**一区毛片| 久久精品免费看| 国产精品亚洲一区二区三区妖精 | 色av综合在线| 欧美日韩视频在线第一区 | 欧美xxxxx牲另类人与| 久久午夜电影网| 国产亚洲一二三区| 国产亚洲精品福利| 亚洲色图视频网| 午夜免费久久看| 久久成人免费日本黄色| 国产91色综合久久免费分享| 91亚洲大成网污www| 欧美在线短视频| 欧美在线高清视频| 精品少妇一区二区三区在线播放| 日本一区二区三区四区| 一区二区三区精品视频| 秋霞电影网一区二区| 国产成人三级在线观看| 色呦呦网站一区| 日韩欧美电影一二三| 国产精品萝li| 亚洲高清在线视频| 久久精品国产99久久6| 国产91精品免费| 欧美三级视频在线播放| 欧美成人女星排行榜| 亚洲天堂a在线| 日本vs亚洲vs韩国一区三区|