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

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

?? qpribmaplib.c

?? vxworks5.5.1源代碼。完整源代碼
?? C
字號:
/* qPriBMapLib.c - bit mapped priority queue management library *//* Copyright 1984-1998 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02o,16nov98,cdp  make ARM CPUs with ARM_THUMB==TRUE use portable routines.02m,06jan98,cym  added simnt support02n,22apr97,jpd  removed ARM from PORTABLE list.02m,29jan97,elp  added ARM support02l,12jul95,ism  added simsolaris support02l,04nov94,yao  added PPC support.02k,11aug93,gae  vxsim hppa from rrr.02j,12jun93,rrr  vxsim.02i,27jul92,jcf  all architectures now utilize this library.                 added nPriority selection for memory conservation.02h,19jul92,pme  made qPriBMapRemove return STATUS.02g,18jul92,smb  Changed errno.h to errnoLib.h02f,26may92,rrr  the tree shuffle02e,22apr92,jwt  converted CPU==SPARC to CPU_FAMILY==SPARC; copyright.02d,19nov91,rrr  shut up some ansi warnings.02c,04oct91,rrr  passed through the ansification filter                  -changed functions to ansi style		  -fixed #else and #endif		  -changed TINY and UTINY to INT8 and UINT8		  -changed VOID to void		  -changed copyright notice02b,25mar91,del  added I960 to portable checklist.02a,10jan91,jcf  changed BMAP_LIST for portability to other architectures.01e,20dec90,gae  added declaration of qPriBMapSet and qPriBMapClear.01d,28sep90,jcf	 documentation.01c,05jul90,jcf	 added null routine for calibrateRtn field in Q_CLASS.01b,10may90,jcf	 fixed PORTABLE definition.		 changed ffs () to ffsMsb ().01a,14jun89,jcf	 written.*//*DESCRIPTIONThis library contains routines to manage a priority queue.  The queue ismaintained in priority order with no sorting time, so its performance isconstant.  Its restrictions are that it requires a 2K byte bit map, and itcan only prioritize nodes with keys in the range 0 to 255.This queue complies with the multi-way queue data structures and thus may beutilized by any multi-way queue.  The priority bit mapped multi-way queueclass is accessed by the global id qPriBMapClassId.SEE ALSO: qLib()*/#include "vxWorks.h"#include "qClass.h"#include "qPriBMapLib.h"#include "memLib.h"#include "errnoLib.h"#include "string.h"#include "stdlib.h"#if (defined(PORTABLE) || \     (CPU_FAMILY == SIMNT) || (CPU_FAMILY == SPARC) || (CPU_FAMILY == I960) || \     (CPU_FAMILY == SIMSPARCSUNOS) || (CPU_FAMILY == SIMHPPA) || \     (CPU_FAMILY == SIMSPARCSOLARIS) || ((CPU_FAMILY == ARM) && ARM_THUMB))#define qPriBMapLib_PORTABLE#endif#if     (CPU_FAMILY == PPC)#define qPriBMapLib_PORTABLE#endif  /* (CPU_FAMILY == PPC) */#if	defined(PORTABLE)#define qPriBMapLib_PORTABLE#endif	/* PORTABLE *//* forward static functions */static STATUS qPriBMapNullRtn (void);#ifdef qPriBMapLib_PORTABLEstatic void qPriBMapSet (BMAP_LIST *pBMapList, int priority);static void qPriBMapClear (BMAP_LIST *pBMapList, int priority);static int qPriBMapHigh (BMAP_LIST *pBMapList);#endif	/* qPriBMapLib_PORTABLE *//* locals */LOCAL Q_CLASS qPriBMapClass =    {    (FUNCPTR)qPriBMapCreate,    (FUNCPTR)qPriBMapInit,    (FUNCPTR)qPriBMapDelete,    (FUNCPTR)qPriBMapNullRtn,    (FUNCPTR)qPriBMapPut,    (FUNCPTR)qPriBMapGet,    (FUNCPTR)qPriBMapRemove,    (FUNCPTR)qPriBMapResort,    (FUNCPTR)qPriBMapNullRtn,    (FUNCPTR)qPriBMapNullRtn,    (FUNCPTR)qPriBMapKey,    (FUNCPTR)qPriBMapNullRtn,    (FUNCPTR)qPriBMapInfo,    (FUNCPTR)qPriBMapEach,    &qPriBMapClass    };/* globals */Q_CLASS_ID qPriBMapClassId = &qPriBMapClass;/******************************************************************************** qPriBMapListCreate - create and initialized a bit mapped priority queue** Create a bit mapped priority queue.  Initialize the specified queue header.** RETURNS: OK or ERROR if not enough memory to create queue.** SEE ALSO: qPriBMapInit().*/BMAP_LIST *qPriBMapListCreate     (    UINT nPriority	/* 1 priority to 256 priorities */    )    {    UINT size;    if ((nPriority < 1) || (nPriority > 256))	return (NULL);        size = sizeof (BMAP_LIST) - (sizeof (DL_LIST) * (256 - nPriority));    return ((BMAP_LIST *) malloc (size));    }/******************************************************************************** qPriBMapListDelete - deallocate a bit mapped list** This routine returns an allocated BMAP_LIST to the free memory pool.** RETURNS: OK, or ERROR if bit mapped list could not be deallocated.*/STATUS qPriBMapListDelete    (    BMAP_LIST *pBMapList    )    {    free ((char *)pBMapList);    return (OK);    }/******************************************************************************** qPriBMapCreate - create and initialized a bit mapped priority queue** Create a bit mapped priority queue.  Initialize the specified queue header.** RETURNS: OK, or ERROR if not enough memory to create queue.** SEE ALSO: qPriBMapInit()*/Q_PRI_BMAP_HEAD *qPriBMapCreate    (    BMAP_LIST *	pBMapList,    UINT	nPriority	/* 1 priority to 256 priorities */    )    {    Q_PRI_BMAP_HEAD *pQPriBMapHead;    if ((nPriority < 1) || (nPriority > 256))	return (NULL);    pQPriBMapHead = (Q_PRI_BMAP_HEAD *) malloc (sizeof (Q_PRI_BMAP_HEAD));    if (pQPriBMapHead == NULL)	return (NULL);    if (qPriBMapInit (pQPriBMapHead, pBMapList, nPriority) != OK)	{	free ((char *)pQPriBMapHead);	return (NULL);	}    return (pQPriBMapHead);    }/******************************************************************************** qPriBMapInit - initialize a bit mapped priority queue** Initialize the bit mapped priority queue pointed to by the specified queue* header.** RETURNS: OK or ERROR** ERRNO: S_qPriBMapLib_NULL_BMAP_LIST**/STATUS qPriBMapInit    (    Q_PRI_BMAP_HEAD *	pQPriBMapHead,    BMAP_LIST *		pBMapList,    UINT		nPriority	/* 1 priority to 256 priorities */    )    {    FAST int ix;    if ((nPriority < 1) || (nPriority > 256))	return (ERROR);    if (pBMapList == NULL)	{	errnoSet (S_qPriBMapLib_NULL_BMAP_LIST);	return (ERROR);	}    pQPriBMapHead->pBMapList = pBMapList;	/* store bmap list pointer */    /* initialize the q */    for (ix = 0; ix < nPriority; ++ix)	dllInit (&pBMapList->listArray[ix]);    pQPriBMapHead->highNode	= NULL;		/* zero the highest node */    pQPriBMapHead->nPriority	= nPriority;	/* higest legal priority */    /* zero the bit maps */    pBMapList->metaBMap = 0;    bzero ((char *) pBMapList->bMap, sizeof (pBMapList->bMap));    return (OK);    }/******************************************************************************** qPriBMapDelete - deallocate a bit mapped queue head** This routine deallocates a bit mapped queue head.  All queued nodes will* be lost.** RETURNS: OK, or ERROR in bit mapped queue head could not be deallocated.*/STATUS qPriBMapDelete    (    Q_PRI_BMAP_HEAD *pQPriBMapHead    )    {    free ((char *)pQPriBMapHead);    return (OK);    }#ifdef qPriBMapLib_PORTABLE/********************************************************************************* qPriBMapPut - insert a node into a priority bit mapped queue** This routine inserts a node into a priority bit mapped queue.  The insertion* is based on the specified priority key which is constrained to the range* 0 to 255.  The highest priority is zero.*/void qPriBMapPut    (    Q_PRI_BMAP_HEAD     *pQPriBMapHead,    Q_PRI_NODE          *pQPriNode,    ULONG                key    )    {    pQPriNode->key = key;    if ((pQPriBMapHead->highNode == NULL) ||        (key < pQPriBMapHead->highNode->key))	{	pQPriBMapHead->highNode = pQPriNode;	}    qPriBMapSet (pQPriBMapHead->pBMapList, key);    dllAdd (&pQPriBMapHead->pBMapList->listArray[key], &pQPriNode->node);    }/********************************************************************************* qPriBMapGet - remove and return first node in priority bit-mapped queue** This routine removes and returns the first node in a priority bit-mapped* queue.  If the queue is empty, NULL is returned.** RETURNS Pointer to first queue node in queue head, or NULL if queue is empty.*/Q_PRI_NODE *qPriBMapGet    (    Q_PRI_BMAP_HEAD *pQPriBMapHead    )    {    Q_PRI_NODE *pQPriNode = pQPriBMapHead->highNode;    if (pQPriNode != NULL)	qPriBMapRemove (pQPriBMapHead, pQPriNode);    return (pQPriNode);    }/********************************************************************************* qPriBMapRemove - remove a node from a priority bit mapped queue** This routine removes a node from the specified bit mapped queue.*/STATUS qPriBMapRemove    (    Q_PRI_BMAP_HEAD *pQPriBMapHead,    Q_PRI_NODE *pQPriNode    )    {    dllRemove (&pQPriBMapHead->pBMapList->listArray[pQPriNode->key],	       &pQPriNode->node);    if (DLL_EMPTY (&pQPriBMapHead->pBMapList->listArray[pQPriNode->key]))        {	qPriBMapClear (pQPriBMapHead->pBMapList, pQPriNode->key);	if (pQPriNode == pQPriBMapHead->highNode)	    pQPriBMapHead->highNode =	      (Q_PRI_NODE *) DLL_FIRST(&pQPriBMapHead->pBMapList->	      listArray[qPriBMapHigh(pQPriBMapHead->pBMapList)]);	}    else if (pQPriNode == pQPriBMapHead->highNode)	pQPriBMapHead->highNode =	  (Q_PRI_NODE *) DLL_FIRST (&pQPriBMapHead->pBMapList->	  listArray[pQPriBMapHead->highNode->key]);    return (OK);    }#endif	/* qPriBMapLib_PORTABLE *//********************************************************************************* qPriBMapResort - resort a node to a new position based on a new key** This routine resorts a node to a new position based on a new priority key.*/void qPriBMapResort    (    Q_PRI_BMAP_HEAD *pQPriBMapHead,    Q_PRI_NODE      *pQPriNode,    ULONG            newKey    )    {    if (pQPriNode->key != newKey)	{	qPriBMapRemove (pQPriBMapHead, pQPriNode);	qPriBMapPut (pQPriBMapHead, pQPriNode, newKey);	}    }/********************************************************************************* qPriBMapKey - return the key of a node** This routine returns the key of a node currently in a multi-way queue.  The* keyType is ignored.** RETURNS: Node's key.** ARGSUSED*/ULONG qPriBMapKey    (    Q_PRI_NODE  *pQPriNode      /* node to get key for */    )    {    return (pQPriNode->key);	/* return key */    }/********************************************************************************* qPriBMapInfo - gather information on a bit mapped queue** This routine fills up to maxNodes elements of a nodeArray with nodes* currently in a multi-way queue.  The actual number of nodes copied to the* array is returned.  If the nodeArray is NULL, then the number of nodes in* the multi-way queue is returned.** RETURNS: Number of node pointers copied into the nodeArray, or number of*	   nodes in bit mapped queue if nodeArray is NULL*/int qPriBMapInfo    (    Q_PRI_BMAP_HEAD *pQPriBMapHead,     /* bmap q to gather list for */    FAST int nodeArray[],               /* array of node pointers for filling */    FAST int maxNodes                   /* max node pointers for nodeArray */    )    {    FAST Q_PRI_NODE *pNode;    FAST int *pElement = nodeArray;    FAST int ix;    int count = 0;    if (nodeArray == NULL)	{	for (ix = 0; ix < pQPriBMapHead->nPriority; ++ix)	    count += dllCount (&pQPriBMapHead->pBMapList->listArray[ix]);	return (count);	}    for (ix = 0; ix < pQPriBMapHead->nPriority; ++ix) /* search the array */	{	pNode=(Q_PRI_NODE *)DLL_FIRST(&pQPriBMapHead->pBMapList->listArray[ix]);	while ((pNode != NULL) && (--maxNodes >= 0))	/* anybody left? */	    {	    *(pElement++) = (int)pNode;			/* fill in table */	    pNode = (Q_PRI_NODE *) DLL_NEXT (&pNode->node);  /* next node */	    }	if (maxNodes < 0)		/* out of room? */	    break;	}    return (pElement - nodeArray);	/* return count of active tasks */    }/********************************************************************************* qPriBMapEach - call a routine for each node in a queue** This routine calls a user-supplied routine once for each node in the* queue.  The routine should be declared as follows:* .CS*  BOOL routine (pQNode, arg)*      Q_PRI_NODE *pQNode;	/@ pointer to a queue node          @/*      int	   arg;		/@ arbitrary user-supplied argument @/* .CE* The user-supplied routine should return TRUE if qPriBMapEach() is to* continue calling it for each entry, or FALSE if it is done and* qPriBMapEach() can exit.** RETURNS: NULL if traversed whole queue, or pointer to Q_PRI_NODE that*          qPriBMapEach stopped on.*/Q_PRI_NODE *qPriBMapEach    (    Q_PRI_BMAP_HEAD *pQHead,     /* queue head of queue to call routine for */    FUNCPTR          routine,    /* the routine to call for each table entry */    int              routineArg  /* arbitrary user-supplied argument */    )    {    FAST int	     ix;    FAST Q_PRI_NODE *pNode = NULL;    for (ix = 0; ix < pQHead->nPriority; ++ix)	/* search array */	{	pNode = (Q_PRI_NODE *)		DLL_FIRST (&pQHead->pBMapList->listArray[ix]);	while (pNode != NULL)	    {	    if (!((* routine) (pNode, routineArg)))		goto done;				/* bail out */	    pNode = (Q_PRI_NODE *) DLL_NEXT (&pNode->node);	    }	}done:    return (pNode);			/* return node we ended with */    }/********************************************************************************* qPriBMapNullRtn - null routine returns OK** This routine does nothing and returns OK.  It is used by the queue class* structure for operations not supported by this queue type.*/LOCAL STATUS qPriBMapNullRtn (void)    {    return (OK);    }#ifdef qPriBMapLib_PORTABLE/********************************************************************************* qPriBMapSet - set the bits in the bit map for the specified priority** This routine sets the bits in the bit map to reflect the addition of a node* of the specified priority.*/LOCAL void qPriBMapSet    (    BMAP_LIST *pBMapList,    int priority    )    {    priority = 255 - priority;    pBMapList->metaBMap			|= (1 << (priority >> 3));    pBMapList->bMap [priority >> 3]	|= (1 << (priority & 0x7));    }/********************************************************************************* qPriBMapClear - clear the bits in the bit map for the specified priority** This routine clears the bits in the bit map to reflect the removal of a node* of the specified priority.*/LOCAL void qPriBMapClear    (    BMAP_LIST *pBMapList,    int priority    )    {    priority = 255 - priority;    pBMapList->bMap [priority >> 3] &= ~(1 << (priority & 0x7));    if (pBMapList->bMap [priority >> 3] == 0)	pBMapList->metaBMap &= ~(1 << (priority >> 3));    }/********************************************************************************* qPriBMapHigh - return highest priority in ready queue** This routine utilizes the bit map structure to determine the highest active* priority group.** RETURNS: Priority of highest active priority group.*/LOCAL int qPriBMapHigh    (    BMAP_LIST *pBMapList    )	{	UINT8 highBits = (UINT8) ffsMsb ((int)pBMapList->metaBMap) - 1;	UINT8 lowBits  = (UINT8) ffsMsb ((int)pBMapList->bMap[highBits]) - 1;	return (255 - (((highBits << 3) | lowBits) & 0xff));	}#endif	/* qPriBMapLib_PORTABLE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频免费观看| 欧美日韩在线精品一区二区三区激情 | 国产精品三级在线观看| 国产精品中文字幕欧美| 国产人伦精品一区二区| 成人美女在线观看| 最好看的中文字幕久久| 日本电影欧美片| 亚洲成人第一页| 欧美日本一区二区| 久久国产三级精品| 久久久久久久久久久久久女国产乱 | 国产日本亚洲高清| www.亚洲色图.com| 亚洲午夜久久久久中文字幕久| 91极品美女在线| 美日韩一区二区| 久久伊99综合婷婷久久伊| 成人美女视频在线观看18| 亚洲色图.com| 欧美日韩三级在线| 精品一区二区三区久久久| 日本一区二区免费在线| 色噜噜狠狠色综合中国| 日韩精品1区2区3区| 久久久精品免费观看| 91视频xxxx| 蜜臀av亚洲一区中文字幕| 中文字幕电影一区| 欧美理论在线播放| 不卡电影一区二区三区| 午夜视频一区二区三区| 久久久精品综合| 欧美色视频在线观看| 国产精品综合视频| 亚洲国产一二三| 中文字幕欧美区| 91精品欧美福利在线观看| 成人激情开心网| 久久精品国产亚洲a| 一区二区三区在线观看欧美| 26uuu亚洲| 欧美日韩亚洲另类| 成人激情免费网站| 开心九九激情九九欧美日韩精美视频电影 | 国产精品电影一区二区三区| 在线不卡一区二区| 99精品视频一区二区三区| 蜜臀av一级做a爰片久久| 一区二区成人在线| 国产欧美一区二区精品仙草咪 | 国产成人在线影院| 天天影视色香欲综合网老头| 国产精品久久99| 精品成人私密视频| 69堂亚洲精品首页| 欧美综合一区二区| av在线免费不卡| 国产一区视频网站| 免费在线视频一区| 三级在线观看一区二区| 亚洲精品成人精品456| 欧美精彩视频一区二区三区| 日韩欧美在线影院| 欧美男人的天堂一二区| 91麻豆免费看| 不卡的av网站| 国产 欧美在线| 国产精品自拍一区| 久久国产精品99久久久久久老狼| 亚洲电影中文字幕在线观看| 自拍偷拍亚洲欧美日韩| 国产精品国产自产拍在线| 久久久久久97三级| 精品区一区二区| 精品成人a区在线观看| 日韩一区二区免费电影| 69堂成人精品免费视频| 91精品免费在线| 欧美一级久久久| 欧美一级搡bbbb搡bbbb| 51精品视频一区二区三区| 91精品在线一区二区| 欧美区视频在线观看| 欧美一区二区国产| 日韩欧美在线综合网| 亚洲精品在线免费观看视频| 精品久久久久久亚洲综合网| 久久综合色之久久综合| 国产欧美一区二区精品忘忧草| 国产人久久人人人人爽| 国产精品色呦呦| 成人欧美一区二区三区小说 | 精品sm捆绑视频| xnxx国产精品| 国产精品久久久久精k8 | 日韩你懂的在线观看| 日韩精品专区在线影院重磅| 久久综合视频网| 中文字幕日韩av资源站| 亚洲影院免费观看| 奇米影视7777精品一区二区| 国产伦精品一区二区三区视频青涩 | 91免费观看在线| 欧美又粗又大又爽| 6080午夜不卡| 国产亚洲精品7777| 一区二区三区自拍| 美女被吸乳得到大胸91| 丁香另类激情小说| 91国在线观看| 精品国产凹凸成av人导航| 国产精品视频免费| 亚洲成人高清在线| 国内精品久久久久影院色| 不卡一区在线观看| 欧美精品在线观看一区二区| 久久综合资源网| 亚洲影视在线播放| 国精产品一区一区三区mba桃花| 成人高清在线视频| 在线播放中文字幕一区| 国产女人水真多18毛片18精品视频 | 国产精品中文字幕欧美| 色狠狠桃花综合| 精品卡一卡二卡三卡四在线| 日韩毛片视频在线看| 奇米影视一区二区三区小说| av中文字幕一区| 精品免费一区二区三区| 日韩理论电影院| 国产永久精品大片wwwapp| 欧美三级中文字幕在线观看| 中文字幕第一区综合| 日韩激情中文字幕| 99久久婷婷国产| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲在线一区二区三区| 粉嫩一区二区三区在线看| 日韩午夜精品电影| 亚洲一区二区三区在线看| 成人黄色在线看| 久久综合九色综合97婷婷| 亚洲成人一区二区| 不卡大黄网站免费看| 久久人人爽人人爽| 毛片av中文字幕一区二区| 欧美自拍偷拍午夜视频| 国产精品乱码人人做人人爱 | 国产尤物一区二区| 91精品国产欧美一区二区18 | 国产精品88av| 日韩精品专区在线| 五月综合激情婷婷六月色窝| 99久久综合精品| 国产色婷婷亚洲99精品小说| 日本成人超碰在线观看| 欧美日韩久久不卡| 亚洲免费高清视频在线| 国产成人午夜精品影院观看视频 | 精品国产99国产精品| 日本欧美大码aⅴ在线播放| 欧美亚洲丝袜传媒另类| 亚洲天堂中文字幕| 成人av一区二区三区| 久久精品免视看| 国产在线视频不卡二| 欧美精品一区二| 国产综合久久久久影院| 欧美成人福利视频| 日韩高清不卡一区| 制服丝袜亚洲播放| 日本色综合中文字幕| 日韩欧美一二三四区| 久久成人综合网| 26uuu久久天堂性欧美| 国产在线不卡一区| 久久嫩草精品久久久精品| 国产a久久麻豆| 国产精品狼人久久影院观看方式| 成人教育av在线| 亚洲欧美成人一区二区三区| 在线观看日韩毛片| 亚洲福利一二三区| 日韩一级片网站| 国产综合一区二区| 欧美国产激情一区二区三区蜜月| 成人动漫精品一区二区| 亚洲欧美偷拍三级| 欧美日韩免费观看一区二区三区 | 五月天一区二区三区| 69堂成人精品免费视频| 精品在线播放免费| 国产日韩欧美综合一区| 色综合久久久久综合体| 天天色天天操综合| 久久看人人爽人人| 色狠狠色噜噜噜综合网| 日韩国产欧美三级| 久久精品一区二区三区不卡牛牛 |