annotate TaskManager/Fifo/MailManager.cc @ 6:39ce245235d4

*** empty log message ***
author gongo
date Wed, 06 Feb 2008 11:41:08 +0900
parents 75f184d16fa5
children 98bb1b2bb71e
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 = (MailQueuePtr)malloc(sizeof(MailQueue)*(num+1));
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
20
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
21 if (q == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
22 return -1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
23 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
24 q->next = mailQueuePool;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
25 mailQueuePool = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
26
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
27 /* Connect all free queue in the pool */
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
28 for (q = mailQueuePool + 1; --num > 0; q++) {
3
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 }