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