//********************************************************************************************
/**
 * @file		boost.cpp
 * @brief		boost関連ソース
 *
 *	このソースを有効にする場合は main.h の #define	USE_BOOST が有効になっている必要があります
 *
 * @author		N.Takeda
 * @date		2010/03/24(水) 10:57:47
 */
//********************************************************************************************

#include "main.h"

#include <string.h>
#include <stdlib.h>		// for mbstowcs(), wcstombs()
#include <locale.h>		// for setlocale()


#define	STRINGS_MAX			256			//	変換元、先の最大文字数

struct	REP_LIST
{
	TCHAR	di[ STRINGS_MAX ];
	TCHAR	si[ STRINGS_MAX ];
};


#ifdef	USE_BOOST

#include <iostream>
#include <strstream>    // をインクルードしてください。
#include <string>
#include <boost/regex.hpp>

using namespace std;

//********************************************************************************************
/**
 * @brief		正規表現置換(boost使用)
 * @author		N.Takeda
 * @date		2010/09/01(水) 16:03:08
 *
 * @param[in,out]	LPTSTR		_pOut	
 * @param[in,out]	REP_LIST*	_pRep	
 * @param[in]		int			_iEntry	数
 *
 * @return		int	
 */
//********************************************************************************************
int		regex( LPTSTR _pOut, REP_LIST *_pRep, int _iEntry )
{
	xstring			str1;
	xstring			str2;
//	boost::smatch	mm;
	int				ii, iLen;
	
	
	for(ii=0 ; ii<_iEntry ; ii++)
	{
		boost::regex	r( _pRep[ii].si );
		
	//	str2 = (char*)CUnicodeF::sjis_to_utf16be((char*)_pOut, &iLen);
		str2 = _pOut;
		str1 = boost::regex_replace(str2, r, _pRep[ii].di, boost::format_all );
		iLen = str1.length();
	/*	
		std::strstream	cStrStrm( _pOut, iLen, std::ios::_pOut );		// 文字配列へのポインタ,書き込める範囲,書き込み専用
	    cStrStrm << str1 << std::ends;
	*/	
	}
	
	return iLen;
}

#else
/**
 * Boost 無効時.
 */

int		regex( LPTSTR _pOut, REP_LIST *_pRep, int _iEntry ){return -1;}

#endif

