Mercurial > hg > Game > Cerium
annotate TaskManager/kernel/memory/MemList.cc @ 2069:26aa08c9a1de draft default tip
cuda example fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 12 Feb 2017 10:04:55 +0900 |
parents | 801d57ae1e29 |
children |
rev | line source |
---|---|
368 | 1 /*! |
2 MemList は空にならない。最低1個は要素が入っていて | |
3 1個目は特別扱いする。getFirst すると first->next を返す | |
4 */ | |
1142
801d57ae1e29
cut compile CreatePolygonTask on spe side because not enough spe memory. We have to use code loading.
yutaka@localhost.localdomain
parents:
370
diff
changeset
|
5 |
369 | 6 #include "MemList.h" |
368 | 7 |
8 /*! | |
9 最初の1個は特別扱いなので、それの後に追加していく | |
10 */ | |
366 | 11 void |
369 | 12 MemList::addFirst(MemorySegment* e) |
366 | 13 { |
368 | 14 e->prev = first; |
15 e->next = first->next; | |
16 first->next->prev = e; | |
17 first->next = e; | |
366 | 18 } |
19 | |
20 void | |
369 | 21 MemList::addLast(MemorySegment* e) |
366 | 22 { |
368 | 23 e->next = first; |
24 e->prev = last; | |
25 last->next = e; | |
366 | 26 last = e; |
27 } | |
28 | |
369 | 29 MemorySegment* |
30 MemList::getFirst() | |
366 | 31 { |
368 | 32 return first->next; |
366 | 33 } |
34 | |
369 | 35 MemorySegment* |
36 MemList::getLast() | |
366 | 37 { |
368 | 38 return last; |
366 | 39 } |
40 | |
368 | 41 int |
369 | 42 MemList::remove(MemorySegment* e) |
366 | 43 { |
368 | 44 e->prev->next = e->next; |
370 | 45 e->next->prev = e->prev; |
46 | |
47 if (first->next == e) { | |
48 first->next = e->next; | |
368 | 49 } |
370 | 50 if (last == e) { |
51 last = e->prev; | |
52 } | |
53 | |
368 | 54 e->prev = NULL; |
55 e->next = NULL; | |
56 | |
57 return 1; | |
366 | 58 } |
59 | |
370 | 60 /*! |
61 リストの先頭を取得および削除する。リストが空の場合は NULL を返す。 | |
62 */ | |
63 | |
64 MemorySegment* | |
65 MemList::poll() | |
66 { | |
67 MemorySegment* e = first->next; | |
68 if (e == this) { | |
69 return NULL; | |
70 } | |
71 remove(e); | |
72 return e; | |
73 } | |
74 | |
366 | 75 void |
369 | 76 MemList::moveToFirst(MemorySegment* e) |
366 | 77 { |
78 remove(e); | |
79 addFirst(e); | |
80 } | |
370 | 81 |
82 /*! | |
83 リスト内の指定された位置にある要素を返す。 | |
84 要素数を超えた位置を指定した場合 NULL を返す。 | |
85 */ | |
86 | |
87 MemorySegment* | |
88 MemList::get(int index) | |
89 { | |
90 MemorySegment* e = first->next; | |
91 for (int i = 0; i < index; i++) { | |
92 if (e == this) return NULL; | |
93 e = e->next; | |
94 } | |
95 return e; | |
96 } |