#include "StdAfx.h"
#include "WorkspaceNodeWalker.h"

CWorkspaceNodeWalker::CWorkspaceNodeWalker(void)
{
	m_currentNode = NULL;
	m_nextNode = NULL;
}

CWorkspaceNodeWalker::~CWorkspaceNodeWalker(void)
{
}

/*!
	パスをセットする
*/
void CWorkspaceNodeWalker::SetPath(LPCU8STR path)
{
	m_nextNode = NULL;

	//	コピー
	m_pathBuf = path;
	m_currentNode = const_cast<LPU8STR>(m_pathBuf.GetString());

	//	最初のノードを初期化
	SetupCurrentNode();
}

/*!
	現在のノードを取得
*/
LPCU8STR CWorkspaceNodeWalker::GetCurrentNode()
{
	return(m_currentNode);
}

/*!
	現在が最後のノードか？
*/
int CWorkspaceNodeWalker::CurrentIsLastNode()
{
	if(m_nextNode == NULL)
		return(TRUE);
	return(FALSE);
}

/*!
	次のノードへ移動

	TRUE->現在最終ノード or 最終ノードへ移動した
*/
int CWorkspaceNodeWalker::WalkToNextNode()
{
	if(CurrentIsLastNode())
		return(TRUE);

	//	次へ
	m_currentNode = m_nextNode;
	SetupCurrentNode();

	//	最終ノードか？
	if(CurrentIsLastNode())
		return(TRUE);
	return(FALSE);
}

////////////////////////////////////////////////////////////////////////////
//	補助
////////////////////////////////////////////////////////////////////////////
/*!
	ノードのセットアップ
*/
void CWorkspaceNodeWalker::SetupCurrentNode()
{
	LPU8STR	str = m_currentNode;
	m_nextNode = NULL;

	for(;;)
	{
		if(*str == 0)
		{
			return;
		}
		else if(*str == ':' && *(str + 1) == ':')
		{
			//	次のノード
			m_nextNode = str + 2;
			*str = 0;
			return;
		}
		str++;	
	}
}

