亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲国产欧美另类丝袜| 最新国产精品久久精品| 日本一二三不卡| 中文字幕一区二区三区四区不卡 | 美女视频黄 久久| 国内一区二区在线| 色综合久久中文字幕综合网| 欧美一级久久久| 国产a级毛片一区| 日本不卡的三区四区五区| 久久国产日韩欧美精品| 不卡影院免费观看| 91精品欧美久久久久久动漫| 国产欧美精品在线观看| 亚洲地区一二三色| 国产精品一线二线三线| 欧美巨大另类极品videosbest| 精品国产乱码久久久久久蜜臀| 亚洲精品免费在线观看| 国产在线精品视频| 欧美日本一区二区在线观看| 国产欧美精品一区二区色综合| 天堂在线亚洲视频| 99精品欧美一区二区蜜桃免费| 日韩免费看的电影| 亚洲一区中文在线| 不卡av免费在线观看| 国产欧美日韩麻豆91| 国产99久久久精品| 欧美日韩国产另类一区| 亚洲美腿欧美偷拍| 播五月开心婷婷综合| 欧美videossexotv100| 亚洲午夜激情av| 91在线视频免费91| 欧美高清一级片在线观看| 韩国v欧美v日本v亚洲v| 日韩一区二区三区精品视频| 一区二区三区四区不卡在线 | 亚洲欧美偷拍三级| 成人综合在线观看| 国产午夜久久久久| 国产一区 二区| 2020国产精品| 九九视频精品免费| 欧美tk丨vk视频| 九九**精品视频免费播放| 日韩视频中午一区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美日本精品一区二区三区| 亚洲一区在线视频| 欧美日韩激情一区二区三区| 亚洲成国产人片在线观看| 色网站国产精品| 亚洲一区二区在线免费看| 欧美在线观看一区| 午夜不卡av免费| 日韩欧美在线1卡| 精品一区二区三区香蕉蜜桃 | 欧美午夜片在线看| 日韩电影免费一区| 日韩久久免费av| 国产美女一区二区| 日本一区二区视频在线| 91色婷婷久久久久合中文| 樱花影视一区二区| 这里是久久伊人| 成人免费电影视频| 亚洲成av人片一区二区三区| 91精品国产一区二区人妖| 国产一区二区成人久久免费影院| 国产精品久久久久四虎| 在线观看不卡视频| 另类小说图片综合网| 欧美国产一区二区| 欧美性猛交xxxxxx富婆| 日韩成人免费在线| 国产婷婷一区二区| 91久久精品一区二区三| 亚洲一区在线视频| 久久免费午夜影院| 在线视频综合导航| 国产综合久久久久久久久久久久| 国产精品婷婷午夜在线观看| 日本道在线观看一区二区| 美女网站色91| 最新不卡av在线| 欧美一区二区三区免费观看视频| 国产激情91久久精品导航| 亚洲欧美一区二区不卡| 日韩三级在线观看| 91浏览器在线视频| 国内精品嫩模私拍在线| 一区二区三区在线视频观看58 | 亚州成人在线电影| 国产欧美日韩精品a在线观看| 欧洲av在线精品| 国产精品538一区二区在线| 亚洲一区二区三区四区在线免费观看 | 国产一本一道久久香蕉| 亚洲图片欧美综合| 中文一区一区三区高中清不卡| 欧美在线视频全部完| 国产成人精品免费视频网站| 视频一区视频二区中文字幕| 中文字幕亚洲区| 精品sm捆绑视频| 在线精品视频免费播放| 国产99精品在线观看| 久久99久久久久久久久久久| 一区二区日韩av| 欧美mv日韩mv| 欧美色男人天堂| jvid福利写真一区二区三区| 国产酒店精品激情| 九九视频精品免费| 日韩av一级电影| 亚欧色一区w666天堂| 综合久久综合久久| 成人欧美一区二区三区视频网页 | 精品久久久久99| 911精品国产一区二区在线| 日本乱码高清不卡字幕| av中文一区二区三区| 国产成人av在线影院| 韩国在线一区二区| 精品一区二区三区蜜桃| 日韩电影一二三区| 国产乱妇无码大片在线观看| 懂色av噜噜一区二区三区av| av成人免费在线| 99精品久久99久久久久| 色综合久久久久综合体桃花网| 成人动漫中文字幕| 99久久国产综合精品女不卡| 成人激情文学综合网| 成人激情图片网| a级精品国产片在线观看| 成人av网在线| 91蝌蚪porny| 欧洲另类一二三四区| 欧美另类videos死尸| 欧美一区二区观看视频| 欧美va亚洲va香蕉在线| 久久久久久久综合狠狠综合| 欧美电视剧免费观看| 国产亚洲精品bt天堂精选| 日本一区二区动态图| 亚洲欧洲www| 亚洲午夜久久久久久久久电影网 | 亚洲va国产va欧美va观看| 午夜精品久久久久久久久| 国产一区二区三区免费| 色偷偷88欧美精品久久久| 日韩一区二区在线观看| 国产欧美一区二区精品性| 亚洲欧美电影一区二区| 午夜亚洲福利老司机| 黄色精品一二区| 国产成人精品免费视频网站| 国产精品1区2区3区| 色综合天天在线| 欧美一区二区日韩| 欧美国产丝袜视频| 亚洲电影一级黄| 国产福利一区二区三区| 色综合久久88色综合天天6 | 国产日韩成人精品| 一区二区三区四区不卡在线| 亚洲精品国产精品乱码不99 | 国产一区不卡在线| 91啪亚洲精品| 欧美一区二区精品在线| 国产精品丝袜一区| 天堂蜜桃一区二区三区| 色综合婷婷久久| 久久午夜老司机| 亚洲精品一卡二卡| 国产精选一区二区三区| 欧美日韩和欧美的一区二区| 久久久天堂av| 奇米影视一区二区三区| 91亚洲国产成人精品一区二区三| 欧美一区午夜精品| 亚洲综合久久av| 久久精品国产一区二区三区免费看| 色综合久久88色综合天天| 国产色综合一区| 免费xxxx性欧美18vr| 91毛片在线观看| 国产拍揄自揄精品视频麻豆| 青娱乐精品在线视频| 日本丶国产丶欧美色综合| 国产日韩亚洲欧美综合| 免播放器亚洲一区| 欧美亚洲精品一区| 欧美韩国日本不卡| 另类专区欧美蜜桃臀第一页| 欧美三级三级三级爽爽爽| 亚洲情趣在线观看|