view TaskManager/Test/test_render/SceneGraphIterator.cpp @ 201:b257e27d995c

add SceneGraphIterator
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Mon, 26 Jan 2009 16:46:59 +0900
parents
children 3f4c6a75d7e0
line wrap: on
line source

#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 name 検索したい SceneGraph の名前
 * @retval 1 next がある
 * @retval 0 next がない
 */
int
SceneGraphIterator::hasNext(const char *name)
{
    SceneGraphPtr p;

    for (p = cur->next; p; p = p->next) {
	if (strcmp(p->name, name) == 0) {
	    return 1;
	}
    }

    return 0;
}

/**
 * iterator を次に進める
 */
void
SceneGraphIterator::next(void)
{
    cur = cur->next;
}

/**
 * iterator を指定した名前を持つ SceneGraph まで進める
 * SceneGraph が無い場合、NULL にする
 */
void
SceneGraphIterator::next(const char *name)
{
    SceneGraphPtr p;

    for (p = cur->next; p; p = p->next) {
	if (strcmp(p->name, name) == 0) {
	    break;
	}
    }

    cur = p;
}

/**
 * 参照中の SceneGraph を削除する
 */
void
SceneGraphIterator::remove(void)
{
    cur->remove();
}

/**
 * 参照中の SceneGraph を返す
 *
 * @return current SceneGraph
 */
SceneGraphPtr
SceneGraphIterator::get(void)
{
    return cur;
}