windows-nt/Source/XPSP1/NT/multimedia/directx/dmusic/dmstyle/str.h
2020-09-26 16:20:57 +08:00

237 lines
4.8 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (c) 1998-1998 Microsoft Corporation
//
// File: str.h
//
//--------------------------------------------------------------------------
//
// string.h
//
#include <objbase.h>
#ifndef __BRSTRING_H__
#define __BRSTRING_H__
class Archive;
class String
{
friend String operator+( const String& str1, const String& str2 );
friend String operator+( const String& str1, LPCSTR lpszStr );
friend String operator+( LPCSTR lpszStr, const String& str1 );
friend String operator+( const String& str1, char ch );
friend String operator+( char ch, const String& str1 );
public:
String();
String( LPCSTR lpszStr );
String( const String& str );
String( LPCWSTR pszWstr );
~String();
//BOOL LoadString( UINT nID, HINSTANCE hInstance );
BOOL IsEmpty() const
{
return ( m_wLength == 0 );
};
WORD GetLength() const
{
return m_wLength;
};
int Compare( const String& str ) const
{
if (m_pBuf && str.m_pBuf)
{
return _wcsicmp( m_pBuf, str.m_pBuf );
}
else if (!m_pBuf && !str.m_pBuf)
{
return 0;
}
else if (!m_pBuf)
{
return -1;
}
else
{
return 1;
}
};
int Compare( LPCWSTR lpwzStr ) const
{
if (m_pBuf && lpwzStr)
{
return _wcsicmp( m_pBuf, lpwzStr );
}
else if (!m_pBuf && !lpwzStr)
{
return 0;
}
else if (!m_pBuf)
{
return -1;
}
else
{
return 1;
}
};
void Concat( const String& str );
void Concat( LPCWSTR lpwzStr );
void Concat( WCHAR wch );
void TrimTrailingSpaces();
WCHAR GetAt( UINT nIndex ) const
{
if( nIndex >= m_wLength )
{
return L'\0';
}
return m_pBuf[nIndex];
};
void SetAt( UINT nIndex, char ch )
{
if( nIndex < m_wLength )
{
m_pBuf[nIndex] = ch;
}
};
HRESULT ReadWCS( LPSTREAM pStream, DWORD cSize );
//HRESULT WriteWCS( LPSTREAM pStream );
// operators
const String& operator+=( const String& str ) // concatenation
{
Concat( str );
return *this;
};
const String& operator+=( LPCSTR lpszStr ) // concatenation
{
Concat( lpszStr );
return *this;
};
const String& operator+=( char ch ) // concatenation
{
Concat( ch );
return *this;
};
String& operator=( const String& str );
String& operator=( LPCSTR pszStr );
String& operator=( LPCWSTR pszWstr );
operator const WCHAR*() const
{
return m_pBuf;
}
private:
WORD figureblocksize( WORD slen )
{
++slen; // for '\0'
slen = static_cast<WORD>( slen / sm_wBlockSize );
return static_cast<WORD>( ( slen + 1 ) * sm_wBlockSize );
};
private:
WORD m_wLength;
WORD m_wAllocated;
WCHAR* m_pBuf;
static WORD sm_wBlockSize; // size blocks are allocated in for strings
};
inline BOOL operator==( const String& s1, const String& s2 )
{
return ( s1.Compare( s2 ) == 0 );
}
inline BOOL operator==( const WCHAR* s1, const String& s2 )
{
return ( s2.Compare( s1 ) == 0 );
}
inline BOOL operator==( const String& s1, const WCHAR* s2 )
{
return ( s1.Compare( s2 ) == 0 );
}
inline BOOL operator!=( const String& s1, const String& s2 )
{
return ( s1.Compare( s2 ) != 0 );
}
inline BOOL operator!=( const WCHAR* s1, const String& s2 )
{
return ( s2.Compare( s1 ) != 0 );
}
inline BOOL operator!=( const String& s1, const WCHAR* s2 )
{
return ( s1.Compare( s2 ) != 0 );
}
inline BOOL operator<( const String& s1, const String& s2 )
{
return ( s1.Compare( s2 ) < 0 );
}
inline BOOL operator<( const WCHAR* s1, const String& s2 )
{
return ( s2.Compare( s1 ) > 0 );
}
inline BOOL operator<( const String& s1, const WCHAR* s2 )
{
return ( s1.Compare( s2 ) < 0 );
}
inline BOOL operator>( const String& s1, const String& s2 )
{
return ( s1.Compare( s2 ) > 0 );
}
inline BOOL operator>( const WCHAR* s1, const String& s2 )
{
return ( s2.Compare( s1 ) < 0 );
}
inline BOOL operator>( const String& s1, const WCHAR* s2 )
{
return ( s1.Compare( s2 ) > 0 );
}
inline BOOL operator<=( const String& s1, const String& s2 )
{
return ( s1.Compare( s2 ) <= 0 );
}
inline BOOL operator<=( const WCHAR* s1, const String& s2 )
{
return ( s2.Compare( s1 ) >= 0 );
}
inline BOOL operator<=( const String& s1, const WCHAR* s2 )
{
return ( s1.Compare( s2 ) <= 0 );
}
inline BOOL operator>=( const String& s1, const String& s2 )
{
return ( s1.Compare( s2 ) >= 0 );
}
inline BOOL operator>=( const WCHAR* s1, const String& s2 )
{
return ( s2.Compare( s1 ) <= 0 );
}
inline BOOL operator>=( const String& s1, const WCHAR* s2 )
{
return ( s1.Compare( s2 ) >= 0 );
}
#endif // __BRSTRING_H__