annotate TaskManager/Fifo/MailManager.cc @ 5:75f184d16fa5

*** empty log message ***
author gongo
date Tue, 05 Feb 2008 23:32:43 +0900
parents 2356238ebea7
children 39ce245235d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
1 #include <stdio.h>
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
2 #include <stdlib.h>
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
3 #include "MailManager.h"
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
4
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
5 int
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
6 MailManager::init_pool_mailQueue(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
7 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
8 if (!mailQueuePool) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
9 return extend_pool_mailQueue(num);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
10 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
11 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
12 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
13
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
14 int
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
15 MailManager::extend_pool_mailQueue(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
16 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
17 MailQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
18
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
19 //q = new MailQueue[num+1];
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
20 q = (MailQueuePtr)malloc(sizeof(MailQueue)*(num+1));
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
21
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
22 if (q == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
23 return -1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
24 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
25 q->next = mailQueuePool;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
26 mailQueuePool = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
27
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
28 /* Connect all free queue in the pool */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
29 q = mailQueuePool + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
30 for (q = mailQueuePool + 1; num-- > 0; q++) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
31 q->next = q + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
32 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
33 q->next = freeMailQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
34 freeMailQueue = mailQueuePool + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
35
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
36 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
37 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
38
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
39 MailQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
40 MailManager::create_mail(unsigned int data)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
41 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
42 return get_free_mailQueue(data);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
43 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
44
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
45 MailQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
46 MailManager::get_free_mailQueue(unsigned int data)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
47 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
48 MailQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
49
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
50 if (!freeMailQueue) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
51 extend_pool_mailQueue(30);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
52 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
53 q = freeMailQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
54 freeMailQueue = freeMailQueue->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
55
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
56 q->data = data;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
57 q->next = NULL;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
58
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
59 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
60 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
61
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
62 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
63 MailManager::free_mailQueue(MailQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
64 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
65 q->next = freeMailQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
66 freeMailQueue = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
67 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
68
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
69
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
70 MailQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
71 append_mailQueue(MailQueuePtr list, MailQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
72 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
73 MailQueuePtr p = list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
74
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
75 if (p == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
76 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
77 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
78 while(p->next) p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
79 p->next = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
80 return list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
81 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
82 }