windows-nt/Source/XPSP1/NT/base/win32/fusion/installer/includes/cstrings.h
2020-09-26 16:20:57 +08:00

99 lines
2 KiB
C++

#pragma once
#define CRT_ALLOC 0
#define COM_ALLOC 1
//-----------------------------------------------------------------------------
// Minimal string class
//-----------------------------------------------------------------------------
class CString
{
public:
enum AllocFlags
{
COM_Allocator = 0,
CRT_Allocator
};
enum HashFlags
{
CaseInsensitive = 0,
CaseSensitive
};
DWORD _dwSig;
HRESULT _hr;
LPWSTR _pwz; // Str ptr.
DWORD _cc; // String length
DWORD _ccBuf; // Buffer length
AllocFlags _eAlloc; // Allocator
// ctor
CString();
// ctor w/ allocator
CString(AllocFlags eAlloc);
// dtor
~CString();
// Allocations
HRESULT ResizeBuffer(DWORD ccNew);
// Deallocations
VOID FreeBuffer();
// Assume control for a buffer.
HRESULT TakeOwnership(WCHAR* pwz, DWORD cc);
HRESULT TakeOwnership(LPWSTR pwz);
// Release control.
HRESULT ReleaseOwnership();
// Direct copy assign from string.
HRESULT Assign(LPWSTR pwzSource);
// Direct copy assign from CString
HRESULT Assign(CString& sSource);
// Append given wchar string.
HRESULT Append(LPWSTR pwzSource);
// Append given CString
HRESULT Append(CString& sSource);
// Return ith element.
WCHAR& operator [] (DWORD i);
HRESULT LastElement(CString &sSource);
HRESULT RemoveLastElement();
HRESULT Combine(LPWSTR pwzSource, BOOL fUrl);
HRESULT PathCombine(LPWSTR pwzSource);
HRESULT PathCombine(CString &sSource);
HRESULT UrlCombine(LPWSTR pwzSource);
HRESULT UrlCombine(CString &sSource);
HRESULT PathFindFileName(LPWSTR *ppwz);
HRESULT PathFindFileName(CString &sPath);
HRESULT PathPrefixMatch(LPWSTR pwzPrefix);
// / -> \ in string
VOID PathNormalize();\
VOID Get65599Hash(LPDWORD pdwHash, DWORD dwFlags);
};