Files
envi-code/SourceCode/Code2026/tg_shs/shs_geLib/TWCStringList.cpp
T
2026-09-28 15:28:50 +08:00

141 lines
2.3 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TWCStringList.cpp
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: 类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TWCStringList.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;
}
TWCStringList::TWCStringList()
{
}
TWCStringList::TWCStringList(TWCStringList &szSrc)
{
*this = szSrc;
}
TWCStringList::TWCStringList(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++;
}
}
TWCStringList::~TWCStringList()
{
}
// 返回符号表的序号: -1表示符号不在列表里
// 不分大小写
int TWCStringList::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;
}
TWCStringList & TWCStringList::operator =(TWCStringList &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 * TWCStringList::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 * TWCStringList::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;
}