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;
+    }
+}