2025-11-27 16:46:48 +09:00

303 lines
9.7 KiB
C++
Raw Blame History

// QuickString.h: interface for the COXQuickString class.
//
// This is a very simple CString replacement class. Limited heap
// reuse is offered to improve performance.
//
//////////////////////////////////////////////////////////////////////
// Version: 9.3
#if !defined(AFX_QUICKSTRING_H__61FEC104_12FC_11D3_AA06_A8978A000000__INCLUDED_)
#define AFX_QUICKSTRING_H__61FEC104_12FC_11D3_AA06_A8978A000000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "oxdllext.h"
#include <tchar.h>
#ifndef ASSERT
#ifdef _DEBUG
#include <assert.h>
#define ASSERT(expr) assert(expr)
#else
#define ASSERT(expr)
#endif
#endif
// Some ATL A2T and T2A replacement plugins. These are defined as inlines
// (instead of static QS member functions) so QuickString can be used inside
// a DLL, and the A2T helpers used without the need for a _declspec(dllexport)
#ifndef USES_CONVERSION
#ifdef _UNICODE
#include <malloc.h>
// Converts a TCHAR string to a CHAR string
inline LPSTR QuickString_T2Ahelper(LPSTR szAscii, LPCWSTR szWide, int nBufferLength)
{
ASSERT(szWide && szAscii);
::WideCharToMultiByte(0,0, szWide,-1, szAscii, nBufferLength, NULL, NULL);
return szAscii;
}
// Converts a CHAR string to a TCHAR string
inline LPCWSTR COXQuickString_A2Thelper(LPWSTR szWide, LPCSTR szAscii, int nBufferLength)
{
ASSERT(szWide && szAscii);
::MultiByteToWideChar(0,0, szAscii,-1, szWide, nBufferLength);
return szWide;
}
#define USES_CONVERSION int _nConvertSize=0; _nConvertSize;
# define T2A(szWide) \
(!szWide? NULL : _nConvertSize = (lstrlenW(szWide)+1)*2, \
QuickString_T2Ahelper((LPSTR) _alloca(_nConvertSize), szWide, _nConvertSize))
# define A2T(szAscii) \
(!szAscii? NULL : _nConvertSize = (lstrlenA(szAscii)+1)*2, \
COXQuickString_A2Thelper((LPTSTR)_alloca(_nConvertSize), szAscii, _nConvertSize))
#else // No UNICODE, so no need for conversions
# define USES_CONVERSION
# define T2A(szWide) szWide
# define A2T(szAscii) szAscii
#endif
#endif // USES_CONVERSION
class OX_CLASS_DECL COXQuickString
{
// Construction/Destruction
public:
COXQuickString();
COXQuickString::COXQuickString(LPCTSTR szText);
COXQuickString::COXQuickString(const COXQuickString& str);
virtual ~COXQuickString();
// Operations
public:
// --- In<49> : szText - the new string to be copied
// --- Out :
// --- Returns : TRUE on success
// --- Effect : Allocates memory for a new string and copies over the contents of
// szValue
BOOL SetString(LPCTSTR szText);
// --- In<49> : szText - the new string to be copied
// nCount - the maximum number of characters to copy over
// --- Out :
// --- Returns : TRUE on success
// --- Effect : Allocates memory for a new string and copies over the contents of
// szValue
BOOL SetString(LPCTSTR szText, int nCount);
// --- In<49> : ch - the character to be added to the current string
// --- Out :
// --- Returns : TRUE on success
// --- Effect : Appends a character onto the end of the string
// m_szText may be changed to point to new memory
BOOL Append(TCHAR ch);
// --- In<49> : szText - the string to be added to the current string
// --- Out :
// --- Returns : TRUE on success
// --- Effect : Concatenates the contents of szText onto the end of the string
// m_szText may be changed to point to new memory
BOOL AddString(LPCTSTR szText);
// --- In<49> : szText - the string to be added to the current string
// nCount - the maximum number of characters to add
// --- Out :
// --- Returns : TRUE on success
// --- Effect : Concatenates the contents of szText onto the end of the string
// m_szText may be changed to point to new memory. Only up to nCount
// characters will be added
BOOL AddString(LPCTSTR szText, int nCount);
// --- In<49> :
// --- Out :
// --- Returns : A pointer to the string buffer
// --- Effect :
LPCTSTR GetString() const;
// --- In<49> :
// --- Out :
// --- Returns :
// --- Effect : Releases alll memory associated with this object
void Empty();
// --- In<49> :
// --- Out :
// --- Returns : TRUE on success, FALSE otherwise
// --- Effect : Strips out multiple spaces and end of line\tab characters.
// m_szText may be changed due to reallocation of memory
BOOL Strip();
// --- In<49> :
// --- Out :
// --- Returns : TRUE on success, FALSE otherwise
// --- Effect : Trims excess whitespace off the end of the string
BOOL TrimRight();
// --- In<49> :
// --- Out :
// --- Returns : TRUE on success, FALSE otherwise
// --- Effect : Trims excess whitespace from the beginning and end of the string
BOOL Trim();
// --- In<49> :
// --- Out :
// --- Returns : TRUE on success, FALSE otherwise
// --- Effect : Trims excess whitespace from the beginning of the string
BOOL TrimLeft();
// --- In<49> : ch - token delimiter
// --- Out :
// --- Returns : The number of tokens in this string
// --- Effect : Returns the number of tokens in the string. The token separator
// is given by chDelimiter.
UINT NumTokens(TCHAR chDelimiter);
// --- In<49> : nIndex - Token index to return
// chDelimiter - Token delimiter
// --- Out :
// --- Returns : Returns a pointer to the required Token, or NULL if none found
// --- Effect : Returns the indicated Token from the string
const COXQuickString GetToken(int nIndex, TCHAR chDelimiter) const;
// Attributes
public:
// --- In<49> :
// --- Out :
// --- Returns : TRUE if string is empty
// --- Effect :
BOOL IsEmpty() const;
// --- In<49> :
// --- Out :
// --- Returns : The length of the string
// --- Effect :
UINT GetLength() const;
// --- In<49> : nLength - the new length of the string
// --- Out :
// --- Returns : TRUE if successful
// --- Effect : Sets the minimum length of the string to nLength. If the current
// length is greater than nLength, then a NULL char is inserted to
// chop off the end of the string, but no memory is free'd. If nLength
// is greater, then the memory is reallocated.
BOOL SetLength(UINT nLength);
// --- In<49> : nGrowBy - the amount to grow the buffer on each overflow
// --- Out :
// --- Returns : TRUE if the strings are equal
// --- Effect : Sets the amount to grow the buffer on each overflow. This is only used in the
// Append() function.
void SetGrowBy(UINT nGrowBy);
// --- In<49> :
// --- Out :
// --- Returns : The amount that the buffer will be grown each time it overflows (Append() only)
// --- Effect :
UINT GetGrowBy() const;
// --- In<49> : szText - the string to compare this string with
// bCaseSensitive - whether or not the comparison is case sensitive
// --- Out :
// --- Returns : TRUE if the strings are equal
// --- Effect : Compares this string with the supplied string
BOOL Compare(LPCTSTR szText, BOOL bCaseSensitive = TRUE);
// Operators
public:
// --- In<49> : szText - the new string to be copied
// --- Out :
// --- Returns :
// --- Effect : Concatenates the contents of szText onto the end of the string
// m_szText may be changed to point to new memory
void operator+=(LPCTSTR szText);
// --- In<49> : str - the new string to be copied
// --- Out :
// --- Returns :
// --- Effect : Concatenates the contents of str onto the end of the string
// m_szText may be changed to point to new memory
void operator+=(COXQuickString& str);
// --- In<49> : szValue - the new string to be copied
// --- Out :
// --- Returns :
// --- Effect : Allocates memory for a new string and copies over the contents of
// szValue
void operator=(LPCTSTR szText);
// --- In<49> : str - the new string to be copied
// --- Out :
// --- Returns :
// --- Effect : Allocates memory for a new string and copies over the contents of
// str
void operator=(COXQuickString& str);
// --- In<49> : szText - the string to compare this string with
// --- Out :
// --- Returns : TRUE if the strings are equal. The comparison is case sensitive
// --- Effect : Compares this string with the supplied string
BOOL operator==(LPCTSTR szText);
// --- In<49> : str - the string to compare this string with
// --- Out :
// --- Returns : TRUE if the strings are equal. The comparison is case sensitive
// --- Effect : Compares this string with the supplied string
BOOL operator==(COXQuickString& str);
// --- In<49> : szText - the string to compare this string with
// --- Out :
// --- Returns : TRUE if the strings are equal. The comparison is case sensitive
// --- Effect : Compares this string with the supplied string
BOOL operator!=(LPCTSTR szText);
// --- In<49> : str - the string to compare this string with
// --- Out :
// --- Returns : TRUE if the strings are equal. The comparison is case sensitive
// --- Effect : Compares this string with the supplied string
BOOL operator!=(COXQuickString& str);
// --- In<49> :
// --- Out :
// --- Returns : A pointer to the string buffer
// --- Effect :
operator LPCTSTR() const;
protected:
// --- In<49> : nBufferSize - size of the buffer to allocate.
// --- Out :
// --- Returns : A TCHAR pointer to the allocated memory block
// --- Effect : Allocates memory
LPTSTR AllocBuffer(UINT nBufferSize);
// --- In<49> :
// --- Out :
// --- Returns :
// --- Effect : Initialises member variables to a known state
void Init();
protected:
LPTSTR m_szText; // Pointer to text buffer
UINT m_nBufferSize; // Size of this text buffer
UINT m_nLength; // Length of string in buffer
UINT m_nGrowBy; // Amount to grow buffer each step (only used by Append)
};
#endif // !defined(AFX_QUICKSTRING_H__61FEC104_12FC_11D3_AA06_A8978A000000__INCLUDED_)