Mercurial > hg > Game > Cerium
view Renderer/Engine/SceneGraphList.cc @ 572:096a900bd9d3 draft
merge
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 23 Oct 2009 00:40:24 +0900 |
parents | |
children |
line wrap: on
line source
/*! MemList は空にならない。最低1個は要素が入っていて 1個目は特別扱いする。getFirst すると first->next を返す */ #include <stdio.h> #include "SceneGraphList.h" /*! 最初の1個は特別扱いなので、それの後に追加していく */ void SceneGraphList::addFirst(SgStruct* e) { e->prev = first; e->next = first->next; first->next->prev = e; first->next = e; } void SceneGraphList::addLast(SgStruct* e) { e->next = first; e->prev = last; last->next = e; last = e; } SgStruct* SceneGraphList::getFirst() { return first->next; } SgStruct* SceneGraphList::getLast() { return last; } int SceneGraphList::remove(SgStruct* e) { e->prev->next = e->next; e->next->prev = e->prev; if (first->next == e) { first->next = e->next; } if (last == e) { last = e->prev; } e->prev = NULL; e->next = NULL; return 1; } /*! リストの先頭を取得および削除する。リストが空の場合は NULL を返す。 */ SgStruct* SceneGraphList::poll() { SgStruct* e = first->next; if (e == this) { return NULL; } remove(e); return e; } /*! リスト内の指定された name を持つオブジェクトを返す。 見つからなかった場合 NULL を返す。 */ SgStruct* SceneGraphList::get(const char *obj_name) { SgStruct* e = first->next; while (e) { if (strcmp(e->name, obj_name) == 0) return e; e = e->next; } return NULL; }