#include "stringops.h"
#include "move.h"
#include <stdio.h>

void room_queue_add (room_queue *rq, room *r, int size)
{
	room_queue_elt *new, *dead;

	#ifdef FUNCTIONS
	puts ("**room_queue_add");
	#endif

	new = allocate (room_queue_elt);
	new->room = r;
	new->number = rq->number_at;
	(rq->number_at)++;
	new->next = NULL;

	if (rq->tail != NULL) rq->tail->next = new;
	else rq->head = new;
	rq->tail = new;

	(rq->size)++;

	while (rq->size > size)
	{
		dead = rq->head;
		rq->head = rq->head->next;
		free (dead);
		(rq->size)--;
	}
}

static void room_queue_elt_burn (room_queue_elt *rqe)
{
	#ifdef FUNCTIONS
	puts ("<room_queue_elt_burn>");
	#endif

	if (rqe != NULL)
	{
		room_queue_elt_burn (rqe->next);
		free (rqe);
	}
}

void room_queue_burn (room_queue *rq)
{
	#ifdef FUNCTIONS
	puts ("**room_queue_burn");
	#endif

	room_queue_elt_burn (rq->head);
	free (rq);
}

int room_queue_test (room_queue *rq, room *r)
{
	room_queue_elt *scan;

	#ifdef FUNCTIONS
	puts ("**room_queue_test");
	#endif

	for (scan = rq->head; scan != NULL; scan = scan->next)
	{
		if (scan->room == r) return 1;
	}
	return 0;
}

int room_queue_num (room_queue *rq, room *r)
{
	room_queue_elt *scan;

	#ifdef FUNCTIONS
	puts ("**room_queue_num");
	#endif

	for (scan = rq->head; scan != NULL; scan = scan->next)
	{
		if (scan->room == r) return scan->number;
	}
	return 0;
}