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