mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
445 lines
11 KiB
445 lines
11 KiB
/*--------------------------------------------------------------------------*
|
|
*
|
|
* Microsoft Windows
|
|
* Copyright (C) Microsoft Corporation, 1992 - 1999
|
|
*
|
|
* File: tstring.inl
|
|
*
|
|
* Contents: Inline implementation file for tstring
|
|
*
|
|
* History: 04-Oct-99 jeffro Created
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
#ifndef TSTRING_INL
|
|
#define TSTRING_INL
|
|
#pragma once
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::tstring
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring::tstring (const allocator_type& al) :
|
|
BaseClass (al)
|
|
{}
|
|
|
|
inline tstring::tstring (const tstring& other) :
|
|
BaseClass (other)
|
|
{}
|
|
|
|
inline tstring::tstring (const BaseClass& other) :
|
|
BaseClass (other)
|
|
{}
|
|
|
|
inline tstring::tstring (const tstring& other, size_type pos, size_type n) :
|
|
BaseClass (other, pos, n)
|
|
{}
|
|
|
|
inline tstring::tstring (const BaseClass& other, size_type pos, size_type n) :
|
|
BaseClass (other, pos, n)
|
|
{}
|
|
|
|
inline tstring::tstring (const TCHAR* psz) :
|
|
BaseClass (psz)
|
|
{}
|
|
|
|
inline tstring::tstring (const TCHAR* psz, size_type n) :
|
|
BaseClass (psz, n)
|
|
{}
|
|
|
|
inline tstring::tstring (size_type n, TCHAR ch) :
|
|
BaseClass (n, ch)
|
|
{}
|
|
|
|
inline tstring::tstring (const_iterator first, const_iterator last) :
|
|
BaseClass (first, last)
|
|
{}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::operator=
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::operator= (const tstring& other)
|
|
{
|
|
if (this != &other)
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::operator= (other);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::operator= (const BaseClass& other)
|
|
{
|
|
if (data() != other.data())
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::operator= (other);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::operator= (TCHAR ch)
|
|
{
|
|
erase(); // see KB Q172398
|
|
BaseClass::operator= (ch);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::operator= (const TCHAR* psz)
|
|
{
|
|
if (!IsPartOfString (*this, psz))
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::operator= (psz);
|
|
return (*this);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::operator+=
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::operator+= (const tstring& strToAppend)
|
|
{
|
|
BaseClass::operator+= (strToAppend);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::operator+= (const BaseClass& strToAppend)
|
|
{
|
|
BaseClass::operator+= (strToAppend);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::operator+= (TCHAR chToAppend)
|
|
{
|
|
BaseClass::operator+= (chToAppend);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::operator+= (const TCHAR* pszToAppend)
|
|
{
|
|
BaseClass::operator+= (pszToAppend);
|
|
return (*this);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::append
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::append (const tstring& str)
|
|
{
|
|
BaseClass::append (str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (const BaseClass& str)
|
|
{
|
|
BaseClass::append (str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (const tstring& str, size_type pos, size_type n)
|
|
{
|
|
BaseClass::append (str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (const BaseClass& str, size_type pos, size_type n)
|
|
{
|
|
BaseClass::append (str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (const TCHAR* psz)
|
|
{
|
|
BaseClass::append (psz);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (const TCHAR* psz, size_type n)
|
|
{
|
|
BaseClass::append (psz, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (size_type n, TCHAR ch)
|
|
{
|
|
BaseClass::append (n, ch);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::append (const_iterator first, const_iterator last)
|
|
{
|
|
BaseClass::append (first, last);
|
|
return (*this);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::assign
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::assign (const tstring& str)
|
|
{
|
|
if (this != &str)
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (const BaseClass& str)
|
|
{
|
|
if (data() != str.data())
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (const tstring& str, size_type pos, size_type n)
|
|
{
|
|
if (this != &str)
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (const BaseClass& str, size_type pos, size_type n)
|
|
{
|
|
if (data() != str.data())
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (const TCHAR* psz)
|
|
{
|
|
if (!IsPartOfString (*this, psz))
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (psz);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (const TCHAR* psz, size_type n)
|
|
{
|
|
if (!IsPartOfString (*this, psz))
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (psz, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (size_type n, TCHAR ch)
|
|
{
|
|
erase(); // see KB Q172398
|
|
BaseClass::assign (n, ch);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::assign (const_iterator first, const_iterator last)
|
|
{
|
|
if (!IsPartOfString (*this, first))
|
|
erase(); // see KB Q172398
|
|
|
|
BaseClass::assign (first, last);
|
|
return (*this);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::insert
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::insert (size_type p0, const tstring& str)
|
|
{
|
|
BaseClass::insert (p0, str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::insert (size_type p0, const BaseClass& str)
|
|
{
|
|
BaseClass::insert (p0, str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::insert (size_type p0, const tstring& str, size_type pos, size_type n)
|
|
{
|
|
BaseClass::insert (p0, str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::insert (size_type p0, const BaseClass& str, size_type pos, size_type n)
|
|
{
|
|
BaseClass::insert (p0, str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::insert (size_type p0, const TCHAR* psz, size_type n)
|
|
{
|
|
BaseClass::insert (p0, psz, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::insert (size_type p0, const TCHAR* psz)
|
|
{
|
|
BaseClass::insert (p0, psz);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::insert (size_type p0, size_type n, TCHAR ch)
|
|
{
|
|
BaseClass::insert (p0, n, ch);
|
|
return (*this);
|
|
}
|
|
|
|
inline void tstring::insert (iterator it, size_type n, TCHAR ch)
|
|
{
|
|
BaseClass::insert (it, n, ch);
|
|
}
|
|
|
|
inline void tstring::insert (iterator it, const_iterator first, const_iterator last)
|
|
{
|
|
BaseClass::insert (it, first, last);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::erase
|
|
*
|
|
* Simple wrapper that forwards the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::erase (size_type p0, size_type n)
|
|
{
|
|
BaseClass::erase (p0, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring::iterator tstring::erase (iterator it)
|
|
{
|
|
return (BaseClass::erase (it));
|
|
}
|
|
|
|
inline tstring::iterator tstring::erase (iterator first, iterator last)
|
|
{
|
|
return (BaseClass::erase (first, last));
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::replace
|
|
*
|
|
* Simple wrappers that forward the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, const tstring& str)
|
|
{
|
|
BaseClass::replace (p0, n0, str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, const BaseClass& str)
|
|
{
|
|
BaseClass::replace (p0, n0, str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, const tstring& str, size_type pos, size_type n)
|
|
{
|
|
BaseClass::replace (p0, n0, str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, const BaseClass& str, size_type pos, size_type n)
|
|
{
|
|
BaseClass::replace (p0, n0, str, pos, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, const TCHAR* psz, size_type n)
|
|
{
|
|
BaseClass::replace (p0, n0, psz, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, const TCHAR* psz)
|
|
{
|
|
BaseClass::replace (p0, n0, psz);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (size_type p0, size_type n0, size_type n, TCHAR ch)
|
|
{
|
|
BaseClass::replace (p0, n0, n, ch);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (iterator first0, iterator last0, const tstring& str)
|
|
{
|
|
BaseClass::replace (first0, last0, str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (iterator first0, iterator last0, const BaseClass& str)
|
|
{
|
|
BaseClass::replace (first0, last0, str);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (iterator first0, iterator last0, const TCHAR* psz, size_type n)
|
|
{
|
|
BaseClass::replace (first0, last0, psz, n);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (iterator first0, iterator last0, const TCHAR* psz)
|
|
{
|
|
BaseClass::replace (first0, last0, psz);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (iterator first0, iterator last0, size_type n, TCHAR ch)
|
|
{
|
|
BaseClass::replace (first0, last0, n, ch);
|
|
return (*this);
|
|
}
|
|
|
|
inline tstring& tstring::replace (iterator first0, iterator last0, const_iterator first, const_iterator last)
|
|
{
|
|
BaseClass::replace (first0, last0, first, last);
|
|
return (*this);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* tstring::substr
|
|
*
|
|
* Simple wrapper that forwards the heavy lifting to the base class.
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
inline tstring tstring::substr (size_type pos, size_type n) const
|
|
{
|
|
return (tstring (BaseClass::substr (pos, n)));
|
|
}
|
|
|
|
|
|
#endif /* TSTRING_INL */
|