// StringCompare.cpp: CStringCompare クラスのインプリメンテーション
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "StringCompare.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////

CStringCompare::CStringCompare()
{

}

CStringCompare::~CStringCompare()
{

}

//////////////////////////////////////////////////////////////////////
// ワイルドカード展開を含む、文字列比較
//////////////////////////////////////////////////////////////////////
/*!
	ワイルドカード展開を含む、文字列比較

	\return	一致すればTRUE
*/
int CStringCompare::WildCompare(CString wild, CString str)
{
	//	前処理
	wild.MakeLower();
	str.MakeLower();

	return(StrMatch(wild.GetBuffer(0),str.GetBuffer(0)));

}

int CStringCompare::StrMatch( const char *Ptn, const char *Str )
{
	switch( *Ptn )
	{
		case '\0':
			return (*Str=='\0');
		case '*':
			return StrMatch( Ptn+1, Str ) || (*Str!='\0') && StrMatch( Ptn, Str+1 );
		case '?':
			return (*Str!='\0') && StrMatch( Ptn+1, Str+1 );
		default:
			return ((unsigned char)*Ptn==(unsigned char)*Str) && StrMatch( Ptn+1, Str+1 );
	}
}
