141 lines
2.3 KiB
C++
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;
|
|
} |