view TaskManager/Test/test_render/SceneGraphIterator.cpp @ 228:c254a2bd1b34

remove SceneGraph::data, add SceneGraph::coord_xyz, coord_tex, normal
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Thu, 12 Feb 2009 16:31:38 +0900
parents 3f4c6a75d7e0
children 2a0fad8a817d
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 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;
}

/**
 * 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;
}

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

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