#ifndef UNICODE	//FIXME Build without UNICODE flag
#define _AtlGetConversionACP() CP_THREAD_ACP
#endif

#include "MString.h"

#ifdef UNICODE
typedef CMStringA astring;
typedef CMStringW wstring;

class mbstring : public astring
{
	// It is prohibited to initialize by char* outside, use L"xxx"
private:
	mbstring( const char * pChar )		: astring( pChar ) {};
	mbstring& operator=( const char * pChar  )	{ this->operator =( pChar ); return *this; }

public:
	mbstring()							: astring() {};
	mbstring( const mbstring& uStr )	: astring( uStr ) {};

		
	mbstring( const wstring&  tStr )	{ *this = tStr.c_str(); }
	mbstring& operator=( const wstring&  tStr  )	{ this->operator =( tStr.c_str() ); return *this; }

	mbstring( const wchar_t * wChar );
	mbstring& operator=( const astring&  aStr  );
	mbstring& operator=( const wchar_t * wChar );
	operator wstring();
	operator astring();
};


class tstring : public wstring
{
public:
	tstring()							: wstring() {};
	tstring(const wchar_t * pwChar)		: wstring( pwChar ) {};
	
	
	tstring(const astring& aStr)		{	*this = aStr.c_str(); }
	tstring(const mbstring& utfStr)		{	*this = utfStr; }

	tstring(const char * pChar);
	tstring& operator=( const char * pChar );
	tstring& operator=( const astring& aStr );
	tstring& operator=( const mbstring& uStr );
	operator astring();
	operator mbstring()					{  return mbstring( this->c_str() ); }
};

#else
typedef CMStringA		astring;
typedef CMStringA		wstring;
typedef CMStringA		tstring;
typedef CMStringA		mbstring;

#endif
