diff Renderer/Engine/SceneGraphIterator.cc @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Renderer/Engine/SceneGraphIterator.cc	Mon Nov 08 01:23:25 2010 +0900
@@ -0,0 +1,128 @@
+#include "SceneGraphIterator.h"
+
+void
+SceneGraphIterator::set(SceneGraphPtr _list)
+{
+    list = cur = _list;
+}
+
+/**
+ * 次の SceneGraph があるか返す
+ *
+ * @retval 1 next がある
+ * @retval 0 next がない
+ */
+int
+SceneGraphIterator::hasNext(void)
+{
+    return (cur->next) ? 1 : 0;
+}
+
+/**
+ * 指定した名前をもつ SceneGraph が以降存在するか
+ *
+ * @param id 検索したい SceneGraph の ID
+ * @retval 1 next がある
+ * @retval 0 next がない
+ */
+int
+SceneGraphIterator::hasNext(int id)
+{
+    SceneGraphPtr p;
+
+    for (p = cur->next; p; p = p->next) {
+	if (p->sgid == id) {
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+/*!
+  指定したグループが以降存在するか
+  
+  @param id 検索したい Group の ID
+  @retval 1 next がある
+  @retval 0 next がない
+ */
+int
+SceneGraphIterator::hasNextGroup(int id)
+{
+    SceneGraphPtr p;
+    for (p = cur->next; p; p = p->next) {
+	if (p->gid == id) {
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+/**
+ * iterator を次に進める
+ */
+void
+SceneGraphIterator::next(void)
+{
+    cur = cur->next;
+}
+
+/**
+ * iterator を指定した ID を持つ SceneGraph まで進める
+ * SceneGraph が無い場合、NULL にする
+ *
+ * @param id 検索したい SceneGraph の ID
+ */
+void
+SceneGraphIterator::next(int id)
+{
+    SceneGraphPtr p;
+
+    for (p = cur->next; p; p = p->next) {
+	if (p->sgid == id) {
+	    break;
+	}
+    }
+
+    cur = p;
+}
+
+/*!
+  iterator を指定した Group ID を持つ SceneGraph まで進める
+
+  @param id 検索したい SceneGraph の Group ID
+ */
+void
+SceneGraphIterator::nextGroup(int id)
+{
+    SceneGraphPtr p;
+
+    for (p = cur->next; p; p = p->next) {
+	if (p->gid == id) {
+	    break;
+	}
+    }
+
+    cur = p;
+}
+
+/**
+ * 参照中の SceneGraph を削除する
+ */
+void
+SceneGraphIterator::remove(void)
+{
+    cur->remove();
+}
+
+/**
+ * 参照中の SceneGraph を返す
+ *
+ * @return current SceneGraph
+ */
+SceneGraphPtr
+SceneGraphIterator::get(void)
+{
+    return cur;
+}