132 lines
2.5 KiB
C++
132 lines
2.5 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
// File: K K S T L . C P P
|
|
//
|
|
// Contents:
|
|
//
|
|
// Notes:
|
|
//
|
|
// Author: kumarp
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "kkstl.h"
|
|
|
|
void FormatTString(IN OUT tstring& str, IN PCWSTR pszFormat, va_list arglist)
|
|
{
|
|
const c_dwMaxFormatBufferLen = 511;
|
|
//since there is no way to determine the size of the string
|
|
//after applying the format, we must assume some arbitrary size
|
|
static WCHAR pszTemp[c_dwMaxFormatBufferLen+1];
|
|
_vsnwprintf(pszTemp, c_dwMaxFormatBufferLen, pszFormat, arglist);
|
|
|
|
str = pszTemp;
|
|
}
|
|
|
|
void FormatTString(IN OUT tstring& str, IN PCWSTR pszFormat, ...)
|
|
{
|
|
va_list arglist;
|
|
|
|
va_start (arglist, pszFormat);
|
|
FormatTString(str, pszFormat, arglist);
|
|
va_end(arglist);
|
|
}
|
|
|
|
|
|
BOOL FIsInStringList(IN const TStringList& sl, IN tstring& str,
|
|
OUT TStringListIter* pos)
|
|
{
|
|
return FIsInStringList(sl, str.c_str(), pos);
|
|
}
|
|
|
|
BOOL FIsInStringList(IN const TStringList& sl, IN PCWSTR psz,
|
|
OUT TStringListIter* pos)
|
|
{
|
|
TStringListIter i=sl.begin();
|
|
while (i != sl.end())
|
|
{
|
|
if (!_wcsicmp((*i)->c_str(), psz))
|
|
{
|
|
if (pos != NULL)
|
|
*pos = i;
|
|
return TRUE;
|
|
}
|
|
++i;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
tstring* GetNthItem(IN TStringList& sl, IN DWORD dwIndex)
|
|
{
|
|
TStringListIter sli=sl.begin();
|
|
DWORD i;
|
|
for (i=0; i<dwIndex; ++i, ++sli)
|
|
;
|
|
return *sli;
|
|
}
|
|
|
|
|
|
void EraseAndDeleteAll(IN TPtrList& ppl)
|
|
{
|
|
EraseAndDeleteAll(&ppl);
|
|
}
|
|
|
|
void EraseAndDeleteAll(IN TPtrList* ppl)
|
|
{
|
|
TPtrListIter i=ppl->begin();
|
|
while (i != ppl->end())
|
|
{
|
|
delete *i++;
|
|
}
|
|
|
|
ppl->erase(ppl->begin(), ppl->end());
|
|
}
|
|
|
|
|
|
void EraseAndDeleteAll(IN TStringList& ppl)
|
|
{
|
|
EraseAndDeleteAll(&ppl);
|
|
}
|
|
|
|
void EraseAndDeleteAll(IN TStringList* ppl)
|
|
{
|
|
TStringListIter i=ppl->begin();
|
|
while (i != ppl->end())
|
|
{
|
|
delete *i++;
|
|
}
|
|
|
|
ppl->erase(ppl->begin(), ppl->end());
|
|
}
|
|
|
|
|
|
void GetDataFromByteArray(IN const TByteArray& ba, OUT BYTE*& pb)
|
|
{
|
|
DWORD dwSize = ba.size();
|
|
|
|
if (dwSize == 0)
|
|
{
|
|
pb = NULL;
|
|
return;
|
|
}
|
|
|
|
if (pb == NULL)
|
|
{
|
|
pb = new BYTE[dwSize];
|
|
}
|
|
|
|
if(pb) {
|
|
for (DWORD i=0; i < dwSize; i++)
|
|
{
|
|
pb[i] = ba[i];
|
|
}
|
|
}
|
|
}
|
|
|