Mercurial > hg > Members > kono > Cerium
annotate TaskManager/kernel/ppe/TaskListInfo.cc @ 514:2659376067e8
old ball_bound fix...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 20 Oct 2009 21:18:28 +0900 |
parents | eacbcdb23986 |
children | 974cd68383b3 |
rev | line source |
---|---|
46 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include "TaskListInfo.h" | |
4 | |
5 TaskListInfo::TaskListInfo(void) | |
6 :taskListPool(NULL), freeTaskList(NULL) {} | |
7 | |
8 TaskListInfo::~TaskListInfo(void) { destroy(); } | |
9 | |
10 int | |
11 TaskListInfo::init(int num) | |
12 { | |
13 if (taskListPool == NULL) { | |
14 return extend_pool(num); | |
15 } | |
16 return 0; | |
17 } | |
18 | |
19 int | |
20 TaskListInfo::extend_pool(int num) | |
21 { | |
22 TaskListPtr q = NULL; | |
23 | |
24 q = (TaskListPtr)malloc(sizeof(TaskList)*(num+1)); | |
25 | |
26 if (q == NULL) { | |
27 return -1; | |
28 } | |
29 | |
30 q->next = taskListPool; | |
31 taskListPool = q; | |
32 | |
33 /* Connect all free pack_list in the pool */ | |
34 for (q = taskListPool + 1; --num > 0; q++) { | |
35 q->next = q + 1; | |
36 } | |
37 q->next = freeTaskList; | |
38 freeTaskList = taskListPool + 1; | |
39 | |
40 return 0; | |
41 } | |
42 | |
43 TaskListPtr | |
44 TaskListInfo::create(void) | |
45 { | |
46 TaskListPtr q; | |
47 | |
48 if (freeTaskList == NULL) { | |
49 extend_pool(10); | |
50 } | |
51 q = freeTaskList; | |
52 freeTaskList = freeTaskList->next; | |
53 | |
54 q->length = 0; | |
55 q->next = 0; | |
56 | |
57 return q; | |
58 } | |
59 | |
60 void | |
61 TaskListInfo::free(TaskListPtr q) | |
62 { | |
63 q->next = freeTaskList; | |
64 freeTaskList = q; | |
65 } | |
66 | |
67 void | |
68 TaskListInfo::destroy(void) | |
69 { | |
109 | 70 TaskListPtr q, tmp; |
46 | 71 |
109 | 72 //for (q = taskListPool; q; q = q->next) { |
73 q = taskListPool; | |
74 while (q) { | |
75 tmp = q->next; | |
46 | 76 free(q); |
109 | 77 q = tmp; |
46 | 78 } |
79 freeTaskList = taskListPool = NULL; | |
80 } | |
81 | |
82 TaskListPtr | |
83 TaskListInfo::append(TaskListPtr list, TaskListPtr q) | |
84 { | |
85 TaskListPtr p = list; | |
86 | |
87 if (!p) { | |
88 return q; | |
89 } else { | |
90 while (p->next) p = p->next; | |
91 p->next = q; | |
92 return list; | |
93 } | |
94 } | |
475
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
95 |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
96 |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
97 TaskListPtr |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
98 TaskListInfo::clear_taskList(TaskListPtr list) |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
99 { |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
100 TaskListPtr p, p1; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
101 |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
102 list->length = 0; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
103 |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
104 p = list->next; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
105 while (p) { |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
106 p1 = p; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
107 p = p->next; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
108 this->free(p1); |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
109 } |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
110 |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
111 list->next = NULL; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
112 return list; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
113 } |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
109
diff
changeset
|
114 |
499 | 115 int |
116 TaskListInfo::length(TaskListPtr list) | |
117 { | |
118 int i = 0; | |
119 if (!list) return i; | |
120 while((list=list->next)) i++; | |
121 return i; | |
122 } | |
123 |