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);
+}