annotate TaskManager/Fifo/MailManager.cc @ 20:31a7ff27ee20

*** empty log message ***
author gongo
date Sun, 10 Feb 2008 13:46:26 +0900
parents 98bb1b2bb71e
children b86782f881de
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
19
98bb1b2bb71e *** empty log message ***
gongo
parents: 6
diff changeset
5 MailManager::MailManager(void)
98bb1b2bb71e *** empty log message ***
gongo
parents: 6
diff changeset
6 {
98bb1b2bb71e *** empty log message ***
gongo
parents: 6
diff changeset
7 mailQueuePool = NULL;
98bb1b2bb71e *** empty log message ***
gongo
parents: 6
diff changeset
8 freeMailQueue = NULL;
98bb1b2bb71e *** empty log message ***
gongo
parents: 6
diff changeset
9 }
98bb1b2bb71e *** empty log message ***
gongo
parents: 6
diff changeset
10
20
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
11 MailManager::~MailManager(void)
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
12 {
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
13 destroy_mailQueue();
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
14 }
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
15
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
16 int
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
17 MailManager::init_pool_mailQueue(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
18 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
19 if (!mailQueuePool) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
20 return extend_pool_mailQueue(num);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
21 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
22 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
23 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
24
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
25 int
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
26 MailManager::extend_pool_mailQueue(int num)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
27 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
28 MailQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
29
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
30 q = (MailQueuePtr)malloc(sizeof(MailQueue)*(num+1));
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
31
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
32 if (q == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
33 return -1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
34 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
35 q->next = mailQueuePool;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
36 mailQueuePool = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
37
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
38 /* Connect all free queue in the pool */
6
39ce245235d4 *** empty log message ***
gongo
parents: 5
diff changeset
39 for (q = mailQueuePool + 1; --num > 0; q++) {
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
40 q->next = q + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
41 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
42 q->next = freeMailQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
43 freeMailQueue = mailQueuePool + 1;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
44
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
45 return 0;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
46 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
47
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
48 MailQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
49 MailManager::create_mail(unsigned int data)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
50 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
51 return get_free_mailQueue(data);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
52 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
53
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
54 MailQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
55 MailManager::get_free_mailQueue(unsigned int data)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
56 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
57 MailQueuePtr q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
58
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
59 if (!freeMailQueue) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
60 extend_pool_mailQueue(30);
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
61 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
62 q = freeMailQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
63 freeMailQueue = freeMailQueue->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
64
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
65 q->data = data;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
66 q->next = NULL;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
67
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
68 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
69 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
70
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
71 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
72 MailManager::free_mailQueue(MailQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
73 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
74 q->next = freeMailQueue;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
75 freeMailQueue = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
76 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
77
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
78
20
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
79 void
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
80 MailManager::destroy_mailQueue(void)
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
81 {
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
82 MailQueuePtr q;
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
83
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
84 for (q = mailQueuePool; q; q = q->next) {
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
85 free(q);
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
86 }
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
87 freeMailQueue = mailQueuePool = NULL;
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
88 }
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
89
31a7ff27ee20 *** empty log message ***
gongo
parents: 19
diff changeset
90
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
91 MailQueuePtr
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
92 append_mailQueue(MailQueuePtr list, MailQueuePtr q)
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
93 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
94 MailQueuePtr p = list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
95
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
96 if (p == NULL) {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
97 return q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
98 } else {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
99 while(p->next) p = p->next;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
100 p->next = q;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
101 return list;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
102 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
103 }