131 lines
1.9 KiB
C++
131 lines
1.9 KiB
C++
#include "StdAfx.h"
|
|
#include "WCStringList.h"
|
|
|
|
static wchar_t * WStrNew(const wchar_t *src)
|
|
{
|
|
if (src == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
int len = wcslen(src)+1;
|
|
wchar_t *res = new wchar_t[len];
|
|
memcpy(res, src, len*sizeof(wchar_t));
|
|
return res;
|
|
}
|
|
|
|
WCStringList::WCStringList()
|
|
{
|
|
|
|
}
|
|
|
|
WCStringList::WCStringList(WCStringList &szSrc)
|
|
{
|
|
*this = szSrc;
|
|
}
|
|
|
|
WCStringList::WCStringList(const wchar_t **pBeg, int nCount)
|
|
{
|
|
m_nDelFlag = 1;
|
|
const wchar_t **p = pBeg;
|
|
for ( int i = 0; i < nCount; i++)
|
|
{
|
|
Append(WStrNew(*p));
|
|
p++;
|
|
}
|
|
}
|
|
|
|
WCStringList::~WCStringList()
|
|
{
|
|
|
|
}
|
|
|
|
// 返回符号表的序号: -1表示符号不在列表里
|
|
// 不分大小写
|
|
int WCStringList::Index(const wchar_t *pBeg, int nCaseSense)
|
|
{
|
|
if (!pBeg)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int nLen = Length();
|
|
if (!nCaseSense)
|
|
{
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
if (_wcsicmp((*this)[i], pBeg) == 0)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
if (wcscmp((*this)[i], pBeg) == 0)
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
WCStringList & WCStringList::operator =(WCStringList &szSrc)
|
|
{
|
|
Reset();
|
|
int nLen = szSrc.Length();
|
|
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
Append(WStrNew(szSrc[i]));
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
typedef int (* WStrCompFun)(const wchar_t *, const wchar_t *);
|
|
|
|
wchar_t * WCStringList::MaxValue(int nCaseSence)
|
|
{
|
|
WStrCompFun cmp = nCaseSence ? wcscmp : _wcsicmp;
|
|
int nLen = Length();
|
|
wchar_t *pszRes = NULL;
|
|
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
if (!pszRes)
|
|
{
|
|
pszRes = (*this)[i];
|
|
}
|
|
else
|
|
{
|
|
pszRes = cmp(pszRes,(*this)[i]) >= 0 ? pszRes : (*this)[i];
|
|
}
|
|
}
|
|
|
|
return pszRes;
|
|
}
|
|
|
|
wchar_t * WCStringList::MinValue(int nCaseSence)
|
|
{
|
|
WStrCompFun cmp = nCaseSence ? wcscmp : _wcsicmp;
|
|
int nLen = Length();
|
|
wchar_t *pszRes = NULL;
|
|
|
|
for (int i = 0; i < nLen; i++)
|
|
{
|
|
if (!pszRes)
|
|
{
|
|
pszRes = (*this)[i];
|
|
}
|
|
else
|
|
{
|
|
pszRes= cmp(pszRes,(*this)[i]) <= 0 ? pszRes : (*this)[i];
|
|
}
|
|
}
|
|
return pszRes;
|
|
} |