Mercurial > hg > Members > kono > Cerium
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Fifo/MailManager.cc Tue Feb 05 20:22:50 2008 +0900 @@ -0,0 +1,80 @@ +#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; + } +}