#include"CTrace.h"
#include"../Thread/CThreadMutex.h"
#include<stdio.h>


namespace Maid
{
static 	CThreadMutex	s_Section;

	/*!
	 	@class	CTrace CTrace.h
	 	@brief	Win32 用トレース関数
	 */
	CTrace::CTrace( const char* szFile, int Line ) : m_StreamBuf(szFile,Line), MySTL::ostream(&m_StreamBuf)
	{
	}

	CTrace::StreamBuf::StreamBuf(const char* szFile, int Line)
		: m_FileName(szFile), m_Line(Line)
	{
	}

	CTrace::StreamBuf::~StreamBuf()
	{
		CThreadMutexLocker Lock(s_Section);

		MySTL::string text;

		{
			int len = (int)m_Message.length();
			//	末尾に \n がついてたらはずす
			if( m_Message[len-1]=='\n' ) { --len; }

			text = m_Message.substr(0,len);
		}

		FILE* hFile = ::fopen( "TraceLog.txt", "a" );

//		::fprintf( hFile, "%s %d行目 %s\n",text.c_str(), m_Line, m_FileName.c_str() );
		::fprintf( hFile, "%s\n",text.c_str() );
		::fclose( hFile );
	}

	MySTL::streambuf::int_type CTrace::StreamBuf::overflow(MySTL::streambuf::int_type iChar) {
		if (iChar != EOF) {
			m_Message += iChar;
		}
		return iChar;   // 出力が成功したことを示す eof 以外を返す。
	}




}