//--------------------------
//   ログ出力サブルーチン
//--------------------------
#ifndef __LOGFILE_H__
#define __LOGFILE_H__

#include <windows.h>
#include <stdio.h>

#define	LOGFILE_NOTOUT		0
#define	LOGFILE_DEBUG		1
#define	LOGFILE_CHECK		2
#define	LOGFILE_TRACE		3


class CLogFile{
	// -----< 構築 >-----
	//
	public:
		CLogFile();									// コンストラクタ
		CLogFile( const char* pFileName , int iMode );	// ファイル名指定コンストラクタ
		CLogFile( CLogFile& rLogFile );				// コピーコンストラクタ
		virtual ~CLogFile();						// デストラクタ

	private:
		void	SetDefault();						// コンストラクタレベルでのデフォルト値を設定
		BOOL	CopyMembers( CLogFile& rLogFile );	// 複製を作る


	// -----< データメンバ >-----
	//
	private:
		char*	m_pFileName;						// ログファイルのファイル名
		FILE*	m_pStream;							// ログファイルのファイルストリーム
		int		m_iMode;							// 出力レベル


	// -----< メソッド >-----
	//
	public:
		BOOL	SetFileName( const char* pFileName );		// ファイル名を設定する
		void	SetMode( int iMode );				// 動作モード設定
		int		GetMode();							// 動作モード取得

		BOOL	Open( const char* pFileName , int iMode );	// ファイルを開く
		BOOL	Open( const char* pFileName );
		BOOL	Open();

		void	Log(const char* pMes , ... );		// ログの書き込み（無条件）
		void	DebugLog(const char* pMes , ... );		// デバッグメッセージ（レベル低）
		void	CheckLog(const char* pMes , ... );		// チェックメッセージ（レベル中）
		void	TraceLog(const char* pMes , ... );		// トレースメッセージ（レベル高）
		void	ErrorLog(const char* pMes , ... );		// エラーメッセージ（無条件）

		void	Log(const char* pMes , va_list marker );	// ログの書き込み（無条件）
		void	DebugLog(const char* pMes , va_list marker );	// デバッグメッセージ（レベル低）
		void	CheckLog(const char* pMes , va_list marker );	// チェックメッセージ（レベル中）
		void	TraceLog(const char* pMes , va_list marker );	// トレースメッセージ（レベル高）
		void	ErrorLog(const char* pMes , va_list marker );	// エラーメッセージ（無条件）

		void	Close();							// ログを閉じる


	// -----< 非公開メソッド >-----
	//
		void	OutputLog(const char* pMes,va_list marker );


	// -----< 演算子 >-----
	//
	public:
		CLogFile& operator=( CLogFile& rLogFile );	// 代入演算子
};

#endif
