#ifndef _CUString_H_
#define _CUString_H_
#define TYPE_ANSI 0
#define TYPE_UNICODE 1
// How much extra do we allocate per buffer?
#define DEFAULT_BUFFER_OVERHEAD 0x10
#define DEFAULT_BUFFER_SIZE 0x80
class CUString
{
public:
CUString( DWORD dwLength = DEFAULT_BUFFER_SIZE );
CUString( LPSTR pszString );
CUString( LPWSTR pszString );
~CUString();
operator LPSTR ();
operator LPWSTR ();
operator LPCSTR ();
operator LPCWSTR ();
operator PVOID ();
operator = ( CUString &szuString );
operator = ( LPSTR pszaString );
operator = ( LPCSTR pszaString );
operator = ( LPWSTR pszwString );
operator = ( LPCWSTR pszwString );
protected:
static DWORD m_sdwInstance;
private:
void Init();
BOOL AllocBuffer( BOOL bAnsiOrUnicode, DWORD dwLength );
void UpdateAnsi( LPWSTR pszString );
void UpdateUnicode( LPSTR pszString );
void EmptyBuffers();
void DeleteBuffers( int iBufferType = -1 );
void DeleteBuffer( PVOID pBuffer );
#ifdef _DEBUG
void CUString::LOG_DEBUG( LPTSTR pszText );
#endif // _DEBUG
BOOL m_fDirtyAnsi;
BOOL m_fDirtyUnicode;
BOOL m_fIsNull;
DWORD m_dwLength;
DWORD m_dwLengthAllocated;
LPSTR m_pszaBuffer;
LPWSTR m_pszwBuffer;
};
////////////////////////////////////////////////////////
inline CUString::operator = ( LPWSTR pszString )
{
operator=( (LPCWSTR) pszString );
}
////////////////////////////////////////////////////////
inline CUString::operator = ( LPSTR pszString )
{
operator=( (LPCSTR) pszString );
}
////////////////////////////////////////////////////////
inline CUString::operator LPCSTR ()
{
return( (LPCSTR) operator LPSTR () );
}
////////////////////////////////////////////////////////
inline CUString::operator LPCWSTR ()
{
return( (LPCWSTR) operator LPWSTR () );
}
#endif // _CUString_H_