⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cprofile.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
		if( strWork != _T("0") )	EntryValue = true;
		else						EntryValue = false;
		return true;
	}
	else
	{
		std::basic_string< TCHAR > strNewEntryValue;
		if( EntryValue == true )	strNewEntryValue = _T("1");
		else						strNewEntryValue = _T("0");
		return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
	}
}

/*! エントリ値(int型)をProfileから読み込む,又はProfileへ書き込む
	
	@param bRead [in] モード(true=読み込み, false=書き込み)
	@param pszSectionName [in] セクション名
	@param pszEntryKey [in] エントリ名
	@param EntryValue [i/o] エントリ値

	@retval true  成功
	@retval false 失敗

	@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
	@date 2004-02-14 MIK _tstoi→_ttoi
*/
bool CProfile::IOProfileData(
	const bool&		bRead,
	const TCHAR*	pszSectionName,
	const TCHAR*	pszEntryKey,
	int&			EntryValue
)
{
	// 「読み込み」か「書き込み」か
	if( bRead )
	{
		std::basic_string< TCHAR > strWork;
		if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
		EntryValue = _ttoi( strWork.c_str() );
		//std::basic_stringstream< TCHAR > stream;
		//stream << strWork;
		//stream >> EntryValue;
		return true;
	}
	else
	{
		TCHAR szWork[32];
		_itot( EntryValue, szWork, 10 );
		std::basic_string< TCHAR > strNewEntryValue( szWork );
		//std::basic_string< TCHAR > strNewEntryValue;
		//std::basic_stringstream< TCHAR > stream;
		//stream << EntryValue;
		//stream >> strNewEntryValue;
		return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
	}
}

/*! エントリ値(WORD型)をProfileから読み込む,又はProfileへ書き込む
	
	@param bRead [in] モード(true=読み込み, false=書き込み)
	@param pszSectionName [in] セクション名
	@param pszEntryKey [in] エントリ名
	@param EntryValue [i/o] エントリ値

	@retval true  成功
	@retval false 失敗

	@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
*/
bool CProfile::IOProfileData(
	const bool&		bRead,
	const TCHAR*	pszSectionName,
	const TCHAR*	pszEntryKey,
	WORD&			EntryValue
)
{
	// 「読み込み」か「書き込み」か
	if( bRead )
	{
		std::basic_string< TCHAR > strWork;
		if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
		EntryValue = _ttoi( strWork.c_str() );
		//std::basic_stringstream< TCHAR > stream;
		//stream << strWork;
		//stream >> EntryValue;
		return true;
	}
	else
	{
		TCHAR szWork[32];
		_itot( EntryValue, szWork, 10 );
		std::basic_string< TCHAR > strNewEntryValue( szWork );
		//std::basic_string< TCHAR > strNewEntryValue;
		//std::basic_stringstream< TCHAR > stream;
		//stream << EntryValue;
		//stream >> strNewEntryValue;
		return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
	}
}

/*! エントリ値(TCHAR型)をProfileから読み込む,又はProfileへ書き込む
	
	@param bRead [in] モード(true=読み込み, false=書き込み)
	@param pszSectionName [in] セクション名
	@param pszEntryKey [in] エントリ名
	@param EntryValue [i/o] エントリ値

	@retval true  成功
	@retval false 失敗

	@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
*/
bool CProfile::IOProfileData(
	const bool&		bRead,
	const TCHAR*	pszSectionName,
	const TCHAR*	pszEntryKey,
	TCHAR&			EntryValue
)
{
	// 「読み込み」か「書き込み」か
	if( bRead )
	{
		std::basic_string< TCHAR > strWork;
		if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
		if( 0 == strWork.length() )	EntryValue = _T('\0');
		else						EntryValue = strWork.at(0);
		return true;
	}
	else
	{
		std::basic_string< TCHAR > strNewEntryValue;
		if( _T('\0') == EntryValue )	strNewEntryValue = _T("");
		else							strNewEntryValue = EntryValue;
		return SetProfileData( pszSectionName, pszEntryKey, strNewEntryValue );
	}
}

/*! エントリ値(NULL文字終端の文字列)をProfileから読み込む,又はProfileへ書き込む
	
	@param bRead [in] モード(true=読み込み, false=書き込み)
	@param pszSectionName [in] セクション名
	@param pszEntryKey [in] エントリ名
	@param pEntryValue [i/o] エントリ値
	@param nEntryValueSize [in] pEntryValueの確保メモリサイズ(読み込み時サイズが十分であることが明確なら 0 指定可。書き込み時は使用しない)

	@retval true  成功
	@retval false 失敗

	@date 2004-01-10 D.S.Koba エントリの型別に関数を分離
*/
bool CProfile::IOProfileData(
	const bool&		bRead,
	const TCHAR*	pszSectionName,
	const TCHAR*	pszEntryKey,
	TCHAR*			pEntryValue,
	const int&		nEntryValueSize
)
{
	// 「読み込み」か「書き込み」か
	if( bRead )
	{
		std::basic_string< TCHAR > strWork;
		if( false == GetProfileData( pszSectionName, pszEntryKey, strWork ) ) return false;
		if( nEntryValueSize > static_cast<int>(strWork.length())
			|| nEntryValueSize ==0 )
		{
			strWork.copy( pEntryValue, strWork.length() );
			//copy()はNULL文字終端しないのでNULL文字追加
			pEntryValue[strWork.length()] = _T('\0');
		}
		else
		{
			strWork.copy( pEntryValue, nEntryValueSize-1 );
			//copy()はNULL文字終端しないのでNULL文字追加
			pEntryValue[nEntryValueSize-1] = _T('\0');
		}
		return true;
	}
	else
	{
		return SetProfileData( pszSectionName, pszEntryKey, pEntryValue );
	}
}

/*! エントリ値(std::basic_string<TCHAR>型)をProfileから読み込む,又はProfileへ書き込む
	
	@param bRead [in] モード(true=読み込み, false=書き込み)
	@param strSectionName [in] セクション名
	@param strEntryKey [in] エントリ名
	@param strEntryValue [i/o] エントリ値

	@retval true  成功
	@retval false 失敗

	@date 2003-10-22 D.S.Koba 作成
*/
bool CProfile::IOProfileData(
	const bool&							bRead,
	const std::basic_string< TCHAR >&	strSectionName,
	const std::basic_string< TCHAR >&	strEntryKey,
	std::basic_string< TCHAR >&			strEntryValue
)
{
	// 「読み込み」か「書き込み」か
	if( bRead ) return GetProfileData( strSectionName, strEntryKey, strEntryValue );
	else        return SetProfileData( strSectionName, strEntryKey, strEntryValue );
}

/*! エントリ値をProfileから読み込む
	
	@param strSectionName [in] セクション名
	@param strEntryKey [in] エントリ名
	@param strEntryValue [out] エントリ値

	@retval true 成功
	@retval false 失敗

	@date 2003-10-22 D.S.Koba 作成
*/
bool CProfile::GetProfileData(
	const std::basic_string< TCHAR >&	strSectionName,
	const std::basic_string< TCHAR >&	strEntryKey,
	std::basic_string< TCHAR >&			strEntryValue
)
{
	std::basic_string< TCHAR > strWork;
	std::vector< Section >::iterator iter;
	std::vector< Section >::iterator iterEnd = m_ProfileData.end();
	MAP_STR_STR_ITER mapiter;
	for( iter = m_ProfileData.begin(); iter != iterEnd; iter++ )
	{
		if( iter->strSectionName == strSectionName )
		{
			mapiter = iter->Data.find( strEntryKey );
			if( iter->Data.end() != mapiter )
			{
				strEntryValue = mapiter->second;
				return true;
			}
		}
	}
	return false;
}

/*! エントリをProfileへ書き込む
	
	@param strSectionName [in] セクション名
	@param strEntryKey [in] エントリ名
	@param strEntryValue [in] エントリ値

	@retval true  成功
	@retval false 失敗(処理を入れていないのでfalseは返らない)

	@date 2003-10-21 D.S.Koba 作成
*/
bool CProfile::SetProfileData(
	const std::basic_string< TCHAR >&	strSectionName,
	const std::basic_string< TCHAR >&	strEntryKey,
	const std::basic_string< TCHAR >&	strEntryValue
)
{
	std::vector< Section >::iterator iter;
	std::vector< Section >::iterator iterEnd = m_ProfileData.end();
	MAP_STR_STR_ITER mapiter;
	MAP_STR_STR_ITER mapiterEnd;
	for( iter = m_ProfileData.begin(); iter != iterEnd; iter++ )
	{
		if( iter->strSectionName == strSectionName )
		{
			//既存のセクションの場合
			mapiter = iter->Data.find( strEntryKey );
			if( iter->Data.end() != mapiter )
			{
				//既存のエントリの場合は値を上書き
				mapiter->second = strEntryValue;
				break;
			}
			else
			{
				//既存のエントリが見つからない場合は追加
				iter->Data.insert( PAIR_STR_STR( strEntryKey, strEntryValue ) );
				break;
			}
		}
	}
	//既存のセクションではない場合,セクション及びエントリを追加
	if( iterEnd == iter )
	{
		Section Buffer;
		Buffer.strSectionName = strSectionName;
		Buffer.Data.insert( PAIR_STR_STR( strEntryKey, strEntryValue ) );
		m_ProfileData.push_back( Buffer );
	}
	return true;
}



void CProfile::DUMP( void )
{
#ifdef _DEBUG
	std::vector< Section >::iterator iter;
	std::vector< Section >::iterator iterEnd = m_ProfileData.end();
	MAP_STR_STR_ITER mapiter;
	MAP_STR_STR_ITER mapiterEnd;
	MYTRACE( "\n\nCProfile::DUMP()======================" );
	for( iter = m_ProfileData.begin(); iter != iterEnd; iter++ )
	{
		MYTRACE( "\n■strSectionName=%s", iter->strSectionName.c_str() );
		mapiterEnd = iter->Data.end();
		for( mapiter = iter->Data.begin(); mapiter != mapiterEnd; mapiter++ )
		{
			MYTRACE( "\"%s\" = \"%s\"\n", mapiter->first.c_str(), mapiter->second.c_str() );
		}
	}
	MYTRACE( "========================================\n" );
#endif
	return;
}

/*[EOF]*/

⌨️ 快捷键说明

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