view TaskManager/Fifo/MailManager.cc @ 3:2356238ebea7

*** empty log message ***
author gongo
date Tue, 05 Feb 2008 20:22:50 +0900
parents
children 75f184d16fa5
line wrap: on
line source

#include <stdio.h>
#include "MailManager.h"

int
MailManager::init_pool_mailQueue(int num)
{
    if (!mailQueuePool) {
	return extend_pool_mailQueue(num);
    }
    return 0;
}

int
MailManager::extend_pool_mailQueue(int num)
{
    MailQueuePtr q;
	
    q = new MailQueue[num+1];
	
    if (q == NULL) {
	return -1;
    }
    q->next = mailQueuePool;
    mailQueuePool = q;
	
    /* Connect all free queue in the pool */
    q = mailQueuePool + 1;
    for (q = mailQueuePool + 1; num-- > 0; q++) {
	q->next = q + 1;
    }
    q->next = freeMailQueue;
    freeMailQueue = mailQueuePool + 1;
	
    return 0;
}

MailQueuePtr
MailManager::create_mail(unsigned int data)
{
    return get_free_mailQueue(data);
}

MailQueuePtr
MailManager::get_free_mailQueue(unsigned int data)
{
    MailQueuePtr q;
	
    if (!freeMailQueue) {
	extend_pool_mailQueue(30);
    }
    q = freeMailQueue;
    freeMailQueue = freeMailQueue->next;
	
    q->data = data;
    q->next = NULL;
	
    return q;
}

void
MailManager::free_mailQueue(MailQueuePtr q)
{
    q->next = freeMailQueue;
    freeMailQueue = q;
}


MailQueuePtr
append_mailQueue(MailQueuePtr list, MailQueuePtr q)
{
    MailQueuePtr p = list;
	
    if (p == NULL) {
	return q;
    } else {
	while(p->next) p = p->next;
	p->next = q;
	return list;
    }
}