annotate TaskManager/Fifo/MailManager.cc @ 19:98bb1b2bb71e

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