annotate TaskManager/kernel/ppe/HTaskInfo.cc @ 649:55f898a58748

MailManager Fifo fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 22 Nov 2009 18:53:05 +0900
parents f1e10ba45d28
children 61b59376aec5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
1 #include <stdio.h>
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
2 #include <stdlib.h>
63
54355e641172 *** empty log message ***
gongo
parents: 54
diff changeset
3 #include "TaskManagerImpl.h"
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
4 #include "HTaskInfo.h"
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
5 #include "TaskQueueInfo.h"
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
6
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
7 // Singleton HTask Pool
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
8 HTaskInfo HTaskInfo::taskQueuePool;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
9
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
10 HTaskInfo::HTaskInfo() {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
11 // 最初の一つは自分
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
12 first = last = this;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
13 next = prev = this;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
14 waiter = NULL;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
15 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
16
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
17 void
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
18 HTaskInfo::freePool() {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
19 for(HTaskPtr p = taskQueuePool.waiter; p; ) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
20 HTaskPtr next = p->waiter;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
21 p->waiter = NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
22 delete p->wait_me;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
23 delete p->wait_i;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
24 free(p);
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
25 p = next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
26 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
27 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
28
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
29 int
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
30 HTaskInfo::extend_pool(int num)
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
31 {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
32 HTaskPtr q = (HTaskPtr)malloc(sizeof(HTask)*(num+1));
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
33
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
34 // First Queue is previous pool
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
35 q->waiter = waiter; waiter = q;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
36 q++;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
37
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
38 /* Connect all free queue in the pool */
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
39 HTaskPtr p = q;
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
40 for (; num-- > 0; p++) {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
41 p->waiter = NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
42 p->wait_me = new TaskQueueInfo();
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
43 p->wait_i = new TaskQueueInfo();
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
44 taskQueuePool.addLast(p);
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
45 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
47 return 0;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
48 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
49
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
50 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
51 * Task をプールから取って来て返す
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
52 *
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
53 * @param [cmd] タスクコマンド
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
54 */
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
55 HTaskPtr
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
56 HTaskInfo::create(int cmd)
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
57 {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
58 HTaskPtr q = taskQueuePool.poll();
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
59 if (! q) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
60 taskQueuePool.extend_pool(64);
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
61 q = taskQueuePool.poll();
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
62 }
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
63 q->next = q->prev = NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
64 q->waiter = NULL;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
65
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
66 q->command = cmd;
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
67 #ifndef SIMPLE_TASK
567
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 519
diff changeset
68 q->inData.clear();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 519
diff changeset
69 q->outData.clear();
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
70 q->param_size = 0;
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
71 #endif
603
42c94f85c779 long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 602
diff changeset
72 q->self = (memaddr) q;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
73
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
74 q->post_func = NULL;
567
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 519
diff changeset
75 q->mimpl = NULL;
65
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
76 q->cpu_type = CPU_PPE;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
77
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
78 // q->wait_me.clear();
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
79 // q->wait_i.clear();
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
80
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
81 return q;
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
82 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
83
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
84 HTaskPtr
636
d433fc37587d Cell Simple Task compiled. but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
85 HTaskInfo::create(int cmd, memaddr rbuf, int rs, memaddr wbuf, int ws)
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
86 {
643
bffdede05f1e minor fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 641
diff changeset
87 #ifdef SIMPLE_TASK
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
88 HTaskPtr task = create(cmd);
636
d433fc37587d Cell Simple Task compiled. but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
89 task->set_input(rbuf, rs);
d433fc37587d Cell Simple Task compiled. but not worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
90 task->set_output(wbuf, ws);
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
91 return task;
641
0692b08f1cd6 Regression on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 636
diff changeset
92 #else
649
55f898a58748 MailManager Fifo fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 648
diff changeset
93 fprintf(stderr, "TaskManager is not SIMPLE_TASK mode\n");
641
0692b08f1cd6 Regression on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 636
diff changeset
94 return 0;
0692b08f1cd6 Regression on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 636
diff changeset
95 #endif
634
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
96 }
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
97
0558abba673c SimpleTask start
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
98
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
99 void
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
100 HTaskInfo::free_(HTaskPtr q)
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
101 {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
102 q->waiter = NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
103 taskQueuePool.addLast(q);
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
104 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
105
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
106
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
107 /*!
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
108 HTaskInfo は空にならない。最低1個は要素が入っていて
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
109 1個目は特別扱いする。getFirst すると first->next を返す
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
110 */
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
111
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
112 /*!
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
113 最初の1個は特別扱いなので、それの後に追加していく
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
114 */
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
115 void
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
116 HTaskInfo::addFirst(HTask* e)
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
117 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
118 e->prev = first;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
119 e->next = first->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
120 first->next->prev = e;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
121 first->next = e;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
122 }
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
123
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
124 void
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
125 HTaskInfo::addLast(HTask* e)
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
126 {
505
22e8eba8ad5e remove check in double linked list
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 499
diff changeset
127 #ifdef CHECK
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
128 if (find(e)) {
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
129 fprintf(stderr,"Add duplicate task %0x\n",(int)e);
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
130 return;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
131 // ...
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
132 }
505
22e8eba8ad5e remove check in double linked list
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 499
diff changeset
133 #endif
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
134 e->next = first;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
135 e->prev = last;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
136 last->next = e;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
137 last = e;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
138 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
139
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
140 HTask*
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
141 HTaskInfo::getFirst()
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
142 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
143 if (empty()) return NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
144 return first->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
145 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
146
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
147 HTask*
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
148 HTaskInfo::getLast()
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
149 {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
150 if (empty()) return NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
151 return last;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
152 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
153
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
154 int
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
155 HTaskInfo::remove(HTask* e)
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
156 {
505
22e8eba8ad5e remove check in double linked list
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 499
diff changeset
157 #ifdef CHECK
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
158 if (!find(e)) {
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
159 fprintf(stderr,"Remove non existing task %0x\n",(int)e);
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
160 return 0;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
161 // ...
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
162 }
505
22e8eba8ad5e remove check in double linked list
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 499
diff changeset
163 #endif
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
164 e->prev->next = e->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
165 e->next->prev = e->prev;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
166
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
167 if (first->next == e) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
168 first->next = e->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
169 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
170 if (last == e) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
171 last = e->prev;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
172 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
173
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
174 e->prev = NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
175 e->next = NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
176
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
177 return 1;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
178 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
179
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
180 /*!
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
181 リストの先頭を取得および削除する。リストが空の場合は NULL を返す。
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
182 */
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
183
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
184 HTask*
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
185 HTaskInfo::poll()
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
186 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
187 HTask* e = first->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
188 if (e == this) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
189 return NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
190 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
191 remove(e);
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
192 return e;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
193 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
194
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
195 void
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
196 HTaskInfo::moveToFirst(HTask* e)
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
197 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
198 remove(e);
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
199 addFirst(e);
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
200 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
201
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
202 /*!
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
203 リスト内の指定された位置にある要素を返す。
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
204 要素数を超えた位置を指定した場合 NULL を返す。
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
205 */
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
206
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
207 HTask*
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
208 HTaskInfo::get(int index)
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
209 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
210 HTask* e = first->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
211 for (int i = 0; i < index; i++) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
212 if (e == this) return NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
213 e = e->next;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
214 }
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
215 return e;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
216 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
217
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
218 HTask*
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
219 HTaskInfo::find(HTask* task)
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
220 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
221 HTask* e = first->next;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
222 for(;;) {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
223 if (e == this) return NULL;
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
224 if (e == task) break;
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
225 e = e->next;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
226 }
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
227 return e;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
228 }
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
229
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
230 int
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
231 HTaskInfo::empty()
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
232 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
233 return next == this;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
234 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
235
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
236 HTask*
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
237 HTaskInfo::getNext(HTask* q)
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
238 {
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
239 if (q->next==this) return NULL;
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
240 return q->next;
46
f154d9d07a42 *** empty log message ***
gongo
parents:
diff changeset
241 }
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
242
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
243 int
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
244 HTaskInfo::length()
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
245 {
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
246 int i = 1;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
247 if (empty()) return 0;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
248 HTask* e = first;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
249 while((e = e->next) != this ) i++;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
250 return i;
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
251 }
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
252
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
253
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
254
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
255
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
256 /* end */
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
257
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
258