Files
envi-code/SourceCode/Code2026/Dimension/WCStringList.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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;
}