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

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