All pastes #452357 Raw Edit

Untitled

public text v1 · immutable
·published 2007-04-22 06:28 UTC
rendered paste body
#include "queue.h"

/*
enqueue
puts pointer into readyQueue based on priority 
"higher" priority is numerically larger...
have to think about what this does 
since -1 is the initial priority of the mainProc
*/
int enqueue(PROC* ptr)
{
	PROC *curr, *nxt;
	/*
	insert if nothing in readyQueue or if the first thing
	in the readyQueue has a lower priority than the 
	new thing
	*/
	if(0 == readyQueue || (readyQueue->priority < ptr->priority))
	{
		ptr->next = readyQueue;
		readyQueue = ptr;
		return 0;
	}/*end if null or this has better priority*/
	
	curr = readyQueue;
	nxt = readyQueue;
	
	/*loop until nxt points to first new proc
	whose priority is < the new one's priority*/
	while( (nxt) && (nxt->priority >= ptr->priority) )
	{
		curr = nxt;
		nxt = nxt->next;
	}/*end while still have a current and it's pri >= new one*/
	/*make order curr->ptr->nxt*/
	ptr->next = nxt;
	curr->next = ptr;
	return 0;	
}/*end enqueue*/


/*
dequeue
get first thing of highest priority
don't call on empty readyQueue
*/
PROC* dequeue()
{
	PROC* ptr;
	ptr = readyQueue;
	readyQueue = readyQueue->next;
	return ptr;
}/*end PROC* dequeue*/


/*print contents of the readyQueue*/
int printReadyQueue()
{
	PROC* ptr = readyQueue;
	myprintf("readyQueue: ");
	if(0==ptr)
	{
		myprintf("<empty>\n\r");
		return 0;
	}/*end if empty*/
	while(ptr)
	{
		myprintf(" -> (proc [%d], pri [%d])", ptr->pid, ptr->priority);
		ptr = ptr->next;
	}/*end while ptr not null*/
	myprintf("\n\r");
	return 0;
}/*end printQueue*/


int readyQueueNumItems()
{
	int ret = 0;
	PROC* ptr = readyQueue;
	while(ptr)
	{
		ret++;
		ptr = ptr->next;
	}/*end while ptr not null*/
	myprintf("\n\rreadyQueue has %d items\n\r",ret);

	return ret;
}/*end readyQueueNumItems*/

int hasPid(int pidToFind)
{
	PROC* ptr = readyQueue;
	while(ptr)
	{
		if(pidToFind == ptr->pid)
		{
			return 1;
		}/*end if*/
		ptr = ptr->next;
	}/*end for*/
	return 0;
}/*end hasPid(int pidToFind)*/