Mercurial > hg > Game > Cerium
diff TaskManager/kernel/memory/MemList.cc @ 368:1a80a2aa696c draft
change TaskManager
author | aaa |
---|---|
date | Mon, 27 Jul 2009 18:26:50 +0900 |
parents | TaskManager/kernel/memory/MemList.cpp@b96f80683af6 |
children | 93b33cecba37 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/kernel/memory/MemList.cc Mon Jul 27 18:26:50 2009 +0900 @@ -0,0 +1,59 @@ +/*! + MemList は空にならない。最低1個は要素が入っていて + 1個目は特別扱いする。getFirst すると first->next を返す + */ + +#include "MemorySegment.h" + +/*! + 最初の1個は特別扱いなので、それの後に追加していく + */ +void +addFirst(MemorySegment* e) +{ + e->prev = first; + e->next = first->next; + first->next->prev = e; + first->next = e; +} + +void +addLast(MemorySegment* e) +{ + e->next = first; + e->prev = last; + last->next = e; + last = e; +} + +MemorySegment +getFirst() +{ + return first->next; +} + +MemorySegment +getLast() +{ + return last; +} + +int +remove(MemorySegment* e) +{ + e->prev->next = e->next; + if (e->next != NULL) { + e->next->prev = e->prev; + } + e->prev = NULL; + e->next = NULL; + + return 1; +} + +void +moveToFirst(MemorySegment* e) +{ + remove(e); + addFirst(e); +}