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

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

?? qpribmaplib.c

?? VxWorks BSP框架源代碼包含頭文件和驅動
?? 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一区二区三区免费野_久草精品视频
99国产精品久| 夜夜嗨av一区二区三区| 欧美变态tickle挠乳网站| 欧美日韩精品专区| 欧美午夜精品理论片a级按摩| 99r国产精品| 色婷婷综合五月| 欧美日韩成人在线| 日韩一本二本av| 久久久国产午夜精品| 欧美国产一区二区| 亚洲精选视频在线| 午夜精品久久久久久久久久久| 日韩av成人高清| 精品无人码麻豆乱码1区2区| 国产精品中文字幕一区二区三区| 成人精品在线视频观看| 91视频国产观看| 欧美日韩午夜精品| 2020国产成人综合网| 亚洲国产精品成人综合色在线婷婷| 国产精品色眯眯| 午夜av一区二区| 国产美女在线观看一区| av在线不卡观看免费观看| 欧美日韩aaaaa| 欧美精品一区二区三区一线天视频| 国产日韩成人精品| 亚洲成人激情自拍| 国产成人亚洲精品狼色在线| 色综合久久综合| 久久综合久久综合亚洲| 亚洲精品国产视频| 国模冰冰炮一区二区| 91丨porny丨国产| 91精品国产91综合久久蜜臀| 久久久亚洲精华液精华液精华液 | 亚洲国产综合在线| 国产一区在线精品| 欧美视频日韩视频| 欧美精彩视频一区二区三区| 亚洲成va人在线观看| 成人在线一区二区三区| 欧美一二三四在线| 一区二区三区在线观看动漫 | 国模大尺度一区二区三区| 色94色欧美sute亚洲线路一久| 精品国产亚洲在线| 亚洲国产另类精品专区| 成人精品视频一区二区三区尤物| 91精品国产综合久久久久久久久久| 国产精品天干天干在线综合| 久久精品国产免费| 制服丝袜中文字幕一区| 亚洲女与黑人做爰| 成人在线综合网| 久久免费视频一区| 久久精品av麻豆的观看方式| 欧美久久久久免费| 一区2区3区在线看| 日本精品一级二级| 1024精品合集| 99久久综合精品| 国产精品国产三级国产aⅴ中文| 精品无人区卡一卡二卡三乱码免费卡| 欧美优质美女网站| 综合欧美一区二区三区| 成人av网站在线| 国产精品久久久久久久久免费丝袜 | 欧美中文字幕亚洲一区二区va在线| 国产欧美日韩精品一区| 国产精品99久久不卡二区| www激情久久| 国产成人免费在线观看| 国产免费观看久久| 波多野结衣在线aⅴ中文字幕不卡| 久久久蜜桃精品| 国产宾馆实践打屁股91| 久久久久成人黄色影片| 国产91对白在线观看九色| 欧美国产1区2区| av午夜一区麻豆| 一区二区三区四区激情| 精品视频一区二区不卡| 日韩av中文字幕一区二区三区| 91精品国产一区二区三区香蕉| 青娱乐精品视频| 久久久精品免费免费| 99热国产精品| 亚洲一区二区在线视频| 欧美精品777| 激情综合五月天| 日本一区二区视频在线观看| 99久久精品国产毛片| 亚洲久草在线视频| 欧美一区二区三区人| 国产乱码字幕精品高清av | 久久精品国内一区二区三区| 久久久久久久久久看片| 91在线视频官网| 亚洲成人av一区| 欧美激情在线一区二区| 91久久精品一区二区三| 久久99久久久欧美国产| 中文字幕+乱码+中文字幕一区| 色婷婷激情一区二区三区| 蜜臀va亚洲va欧美va天堂| 久久久久久99精品| 欧美亚洲国产一区二区三区 | 99久久久久久| 日本不卡高清视频| 亚洲视频在线观看三级| 精品日产卡一卡二卡麻豆| 91免费国产在线| 美女看a上一区| 夜夜操天天操亚洲| 国产视频911| 91精品国产乱码久久蜜臀| 91麻豆精品视频| 久久99在线观看| 五月天国产精品| 国产精品久久精品日日| 欧美成人福利视频| 欧美中文字幕亚洲一区二区va在线 | 欧美日韩高清一区二区| 国产黄人亚洲片| 日韩电影在线免费观看| 亚洲欧美日韩国产中文在线| 久久综合色之久久综合| 91精品国产综合久久久久久久| 99re热这里只有精品免费视频| 美女视频免费一区| 日日骚欧美日韩| 亚洲欧美乱综合| 国产精品美女视频| 久久亚洲一区二区三区明星换脸| 欧美人妇做爰xxxⅹ性高电影| av成人免费在线观看| 国产成人精品影视| 国产露脸91国语对白| 麻豆精品在线观看| 日本伊人色综合网| 日韩极品在线观看| 婷婷成人综合网| 亚洲成人动漫一区| 亚洲成人av一区二区三区| 亚洲一卡二卡三卡四卡五卡| 亚洲精品网站在线观看| 亚洲色图.com| 亚洲黄一区二区三区| 夜夜嗨av一区二区三区网页| 一区二区高清在线| 亚洲一区二区三区四区五区黄| 一区二区三区日韩| 亚洲高清三级视频| 三级成人在线视频| 日韩中文欧美在线| 激情综合色综合久久综合| 国模无码大尺度一区二区三区 | 久久男人中文字幕资源站| 26uuuu精品一区二区| 久久精品视频在线免费观看| 久久免费视频一区| 国产精品久久久久aaaa| 亚洲综合在线视频| 天天影视色香欲综合网老头| 日韩av电影天堂| 国产精品18久久久久久久久| av电影在线观看完整版一区二区| 91视频你懂的| 91精品在线麻豆| 精品对白一区国产伦| 国产精品不卡视频| 亚洲综合久久av| 久久99热这里只有精品| 成人短视频下载| 欧美日韩三级视频| 欧美一级爆毛片| 国产精品黄色在线观看| 午夜视频在线观看一区二区三区| 免费成人在线影院| 成人免费av网站| 91精品国产综合久久久久久久久久 | 韩国欧美国产一区| 99久久婷婷国产| 欧美一级高清片在线观看| 国产女人aaa级久久久级| 亚洲一级二级在线| 国产精品99久久久久久久vr| 在线免费观看不卡av| 精品日韩一区二区三区免费视频| 亚洲视频在线一区观看| 精品一区二区综合| 91福利在线播放| 中文字幕电影一区| 日韩和欧美一区二区| 99精品视频免费在线观看| 精品久久一区二区三区| 亚洲综合自拍偷拍| 成人手机电影网|