statemap.cpp

来自「一个模拟动作源码」· C++ 代码 · 共 104 行

CPP
104
字号
#include "StdAfx.h"
#include "StateMap.h"

CStateMap::CStateMap(void)
{
}

CStateMap::~CStateMap(void)
{
	RemoveAll();
}

void CStateMap::RemoveAll()
{
	for( T_MAP_STATE::iterator it = m_mapStates.begin(); it != m_mapStates.end(); ++it )
	{
		CStateObject* pStateObject = (*it).second;

		if (pStateObject)
		{
			delete pStateObject;
		}
	}

	m_mapStates.clear();
}

CStateObject* CStateMap::GetStart()
{
	CStateObject* pStateObject = NULL;

	if (!m_mapStates.empty())
	{
		m_Iterator = m_mapStates.begin();
		pStateObject = (*m_Iterator).second;

		if (!pStateObject)
		{
			CDoctrineLog::Instance().WriteLog(LOG_ERROR, "CStateMap", "GetStart", "pStateObject");
		}
	}

	return pStateObject;
}

CStateObject* CStateMap::GetNext()
{
	CStateObject* pStateObject = NULL;

	++m_Iterator;
	if (m_Iterator != m_mapStates.end())
	{
		pStateObject = (*m_Iterator).second;

		if (!pStateObject)
		{
			CDoctrineLog::Instance().WriteLog(LOG_ERROR, "CStateMap", "GetNext", "pStateObject");
		}
	}

	return pStateObject;
}

void CStateMap::Add(CStateObject* pStateObject)
{
	if ( !pStateObject )
	{
		CDoctrineLog::Instance().WriteLog(LOG_WARNING, "CStateMap", "Add", "pStateObject");
		return;
	}

	T_MAP_STATE::iterator it = m_mapStates.find(pStateObject->GetName());
	if (m_mapStates.end() == it)
	{
		m_mapStates.insert(T_MAP_STATE::value_type(pStateObject->GetName(), pStateObject));
	}
	else
	{
		CDoctrineLog::Instance().WriteLog(LOG_WARNING, "CStateMap", "Add", "Already added a state with this name: " + pStateObject->GetName());
	}
}

CStateObject* CStateMap::LookUp(string strName)
{
	CStateObject* pStateObject = NULL;

	T_MAP_STATE::iterator it = m_mapStates.find(strName);
	if (it != m_mapStates.end())
	{
		pStateObject = (*it).second;
	}
	else
	{
		CDoctrineLog::Instance().WriteLog(LOG_WARNING, "CStateMap", "LookUp", "State name not mapped: " + strName);
	}

	if (!pStateObject)
	{
		CDoctrineLog::Instance().WriteLog(LOG_ERROR, "CStateMap", "LookUp", "pStateObject");
	}

	return pStateObject;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?