Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

58 lines
1.4 KiB

//
// SortString.h
//
#pragma once
typedef int (WINAPI* SORTSTRING_COMPARE_PROC)(LPCTSTR, LPCTSTR);
// A custom compare routine that will put strings like "100+" after "9"
int WINAPI CompareStringsWithNumbers(LPCTSTR psz1, LPCTSTR psz2);
class CSortedStringArray
{
public:
CSortedStringArray(SORTSTRING_COMPARE_PROC pfnCustomCompare = NULL);
~CSortedStringArray();
int Add(LPCTSTR psz, DWORD dwData);
int GetSize() const;
LPCTSTR GetAt(int iItem) const;
LPCTSTR operator[](int iItem) const;
DWORD GetItemData(int iItem) const;
int Find(LPCTSTR pszString) const;
protected:
LPTSTR* m_prgStrings; // points to string data, which is preceded by 4-byte item data
int m_cStrings;
int m_maxStrings;
SORTSTRING_COMPARE_PROC m_pfnCompare;
static int __cdecl _crtCompareHelper(const void* elem1, const void* elem2);
static SORTSTRING_COMPARE_PROC _pfnCompare;
};
inline int CSortedStringArray::GetSize() const
{
return m_cStrings;
}
inline LPCTSTR CSortedStringArray::GetAt(int iItem) const
{
ASSERT(iItem >= 0 && iItem < m_cStrings);
return m_prgStrings[iItem];
}
inline LPCTSTR CSortedStringArray::operator[](int iItem) const
{
return GetAt(iItem);
}
inline DWORD CSortedStringArray::GetItemData(int iItem) const
{
ASSERT(iItem >= 0 && iItem < m_cStrings);
return *((DWORD*)m_prgStrings[iItem] - 1);
}