Mercurial > hg > Members > kono > Cerium
view TaskManager/Fifo/MailManager.cc @ 20:31a7ff27ee20
*** empty log message ***
author | gongo |
---|---|
date | Sun, 10 Feb 2008 13:46:26 +0900 |
parents | 98bb1b2bb71e |
children | b86782f881de |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include "MailManager.h" MailManager::MailManager(void) { mailQueuePool = NULL; freeMailQueue = NULL; } MailManager::~MailManager(void) { destroy_mailQueue(); } 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 = (MailQueuePtr)malloc(sizeof(MailQueue)*(num+1)); if (q == NULL) { return -1; } q->next = mailQueuePool; mailQueuePool = q; /* Connect all free queue in the pool */ 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; } void MailManager::destroy_mailQueue(void) { MailQueuePtr q; for (q = mailQueuePool; q; q = q->next) { free(q); } freeMailQueue = mailQueuePool = NULL; } 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; } }