mirror of
				https://github.com/intel/intel-graphics-compiler.git
				synced 2025-11-04 08:21:06 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			1440 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			1440 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*========================== begin_copyright_notice ============================
 | 
						|
 | 
						|
Copyright (C) 2017-2021 Intel Corporation
 | 
						|
 | 
						|
SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
============================= end_copyright_notice ===========================*/
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#if defined _WIN32
 | 
						|
#   pragma warning( push )
 | 
						|
#   pragma warning( disable : 4996 )
 | 
						|
#endif
 | 
						|
 | 
						|
#include "utility.h"
 | 
						|
#include "Debug.h"
 | 
						|
#include "Object.h"
 | 
						|
#include "MemCopy.h"
 | 
						|
 | 
						|
#include <stdarg.h>
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
namespace iSTD
 | 
						|
{
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Class:
 | 
						|
    CString
 | 
						|
 | 
						|
Description:
 | 
						|
    Abstraction class for string manipulation
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
class CString : public CObject<CAllocatorType>
 | 
						|
{
 | 
						|
public:
 | 
						|
 | 
						|
    CString( void );
 | 
						|
    CString( size_t growSize );
 | 
						|
    CString( const CString& str );
 | 
						|
    CString( const char* str );
 | 
						|
    virtual ~CString( void );
 | 
						|
 | 
						|
    operator const char* () const;
 | 
						|
 | 
						|
    bool        operator == ( const CString& str );
 | 
						|
    bool        operator == ( const char* str );
 | 
						|
 | 
						|
    CString&    operator = ( const CString& str );
 | 
						|
    CString&    operator = ( const char* str );
 | 
						|
 | 
						|
    CString&    operator = ( const bool val );
 | 
						|
    CString&    operator = ( const char val );
 | 
						|
    CString&    operator = ( const short val );
 | 
						|
    CString&    operator = ( const int val );
 | 
						|
    CString&    operator = ( const long val );
 | 
						|
    CString&    operator = ( const float val );
 | 
						|
    CString&    operator = ( const unsigned char val );
 | 
						|
    CString&    operator = ( const unsigned short val );
 | 
						|
    CString&    operator = ( const unsigned int val );
 | 
						|
    CString&    operator = ( const unsigned long val );
 | 
						|
 | 
						|
    const CString    operator + ( const CString& str ) const;
 | 
						|
    const CString    operator + ( const char* str ) const;
 | 
						|
 | 
						|
    const CString    operator + ( const bool val ) const;
 | 
						|
    const CString    operator + ( const char val ) const;
 | 
						|
    const CString    operator + ( const short val ) const;
 | 
						|
    const CString    operator + ( const int val ) const;
 | 
						|
    const CString    operator + ( const long val ) const;
 | 
						|
    const CString    operator + ( const float val ) const;
 | 
						|
    const CString    operator + ( const unsigned char val ) const;
 | 
						|
    const CString    operator + ( const unsigned short val ) const;
 | 
						|
    const CString    operator + ( const unsigned int val ) const;
 | 
						|
    const CString    operator + ( const unsigned long val ) const;
 | 
						|
 | 
						|
    void        operator += ( const CString& str );
 | 
						|
    void        operator += ( const char* str );
 | 
						|
 | 
						|
    void        operator += ( const bool val );
 | 
						|
    void        operator += ( const char val );
 | 
						|
    void        operator += ( const short val );
 | 
						|
    void        operator += ( const int val );
 | 
						|
    void        operator += ( const long val );
 | 
						|
    void        operator += ( const float val );
 | 
						|
    void        operator += ( const unsigned char val );
 | 
						|
    void        operator += ( const unsigned short val );
 | 
						|
    void        operator += ( const unsigned int val );
 | 
						|
    void        operator += ( const unsigned long val );
 | 
						|
 | 
						|
    void        Set( const char* str );
 | 
						|
    void        SetFormatted( const char* str, ... );
 | 
						|
 | 
						|
    void        Append( const char* str );
 | 
						|
    void        AppendFormatted( const char* str, ... );
 | 
						|
 | 
						|
    size_t      Length( void ) const;
 | 
						|
    bool        IsEmpty( void ) const;
 | 
						|
 | 
						|
    void        DetachBuffer( void );
 | 
						|
 | 
						|
protected:
 | 
						|
 | 
						|
    char*       m_pString;
 | 
						|
    size_t      m_Length;
 | 
						|
    size_t      m_BufferSize;
 | 
						|
    size_t      m_GrowSize;
 | 
						|
 | 
						|
    static const size_t s_cStringGrowSize = 128;
 | 
						|
};
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString Constructor
 | 
						|
 | 
						|
Description:
 | 
						|
    Initializes internal data
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>::CString( void )
 | 
						|
    : CObject<CAllocatorType>()
 | 
						|
{
 | 
						|
    m_pString = NULL;
 | 
						|
    m_Length = 0;
 | 
						|
    m_BufferSize = 0;
 | 
						|
    m_GrowSize = s_cStringGrowSize;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString Constructor
 | 
						|
 | 
						|
Description:
 | 
						|
    Initializes internal data
 | 
						|
 | 
						|
Input:
 | 
						|
    size_t growSize
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>::CString( size_t growSize )
 | 
						|
    : CObject<CAllocatorType>()
 | 
						|
{
 | 
						|
    m_pString = NULL;
 | 
						|
    m_Length = 0;
 | 
						|
    m_BufferSize = 0;
 | 
						|
    m_GrowSize = growSize;
 | 
						|
}
 | 
						|
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>::CString( const CString<CAllocatorType>& str )
 | 
						|
    : CObject<CAllocatorType>()
 | 
						|
{
 | 
						|
    m_pString = NULL;
 | 
						|
    m_Length = 0;
 | 
						|
    m_GrowSize = str.m_GrowSize;
 | 
						|
    Set( str.m_pString );
 | 
						|
}
 | 
						|
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>::CString( const char* str )
 | 
						|
    : CObject<CAllocatorType>()
 | 
						|
{
 | 
						|
    m_pString = NULL;
 | 
						|
    m_Length = 0;
 | 
						|
    m_GrowSize = s_cStringGrowSize;
 | 
						|
    Set( str );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString Destructor
 | 
						|
 | 
						|
Description:
 | 
						|
    Deletes internal data
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>::~CString( void )
 | 
						|
{
 | 
						|
    CAllocatorType::Deallocate( m_pString );
 | 
						|
    m_pString = NULL;
 | 
						|
    m_BufferSize = 0;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator const char* ()
 | 
						|
 | 
						|
Description:
 | 
						|
    Casts CString object to const char*
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    const char*
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>::operator const char* () const
 | 
						|
{
 | 
						|
    return m_pString;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator ==
 | 
						|
 | 
						|
Description:
 | 
						|
    Compares a CString to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const CString& str
 | 
						|
 | 
						|
Output:
 | 
						|
    bool
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline bool CString<CAllocatorType>::operator == (
 | 
						|
    const CString<CAllocatorType>& str )
 | 
						|
{
 | 
						|
    if( str && m_pString )
 | 
						|
    {
 | 
						|
        return ( ::strcmp( m_pString, (const char*)str ) == 0 );
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator ==
 | 
						|
 | 
						|
Description:
 | 
						|
    Compares a char* to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
 | 
						|
Output:
 | 
						|
    bool
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline bool CString<CAllocatorType>::operator == (
 | 
						|
    const char* str )
 | 
						|
{
 | 
						|
    if( str && m_pString )
 | 
						|
    {
 | 
						|
        return ( ::strcmp( m_pString, str ) == 0 );
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a CString to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const CString& str
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const CString<CAllocatorType>& str )
 | 
						|
{
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        Set( (const char*)str );
 | 
						|
    }
 | 
						|
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a char* to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const char* str )
 | 
						|
{
 | 
						|
    Set( str );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a bool to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const bool val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const bool val )
 | 
						|
{
 | 
						|
    SetFormatted( "%d", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a char to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const char val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const char val )
 | 
						|
{
 | 
						|
    SetFormatted( "%d", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a short to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const short val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const short val )
 | 
						|
{
 | 
						|
    SetFormatted( "%d", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a int to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const int val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const int val )
 | 
						|
{
 | 
						|
    SetFormatted( "%d", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a long to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const long val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const long val )
 | 
						|
{
 | 
						|
    SetFormatted( "%d", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a float to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const float val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const float val )
 | 
						|
{
 | 
						|
    double  d = val;
 | 
						|
    SetFormatted( "%f", d );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a unsigned char to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned char val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const unsigned char val )
 | 
						|
{
 | 
						|
    SetFormatted( "%u", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a unsigned short to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned short val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const unsigned short val )
 | 
						|
{
 | 
						|
    SetFormatted( "%u", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a unsigned int to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned int val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const unsigned int val )
 | 
						|
{
 | 
						|
    SetFormatted( "%u", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator =
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets a unsigned long to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned long val
 | 
						|
 | 
						|
Output:
 | 
						|
    CString&
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline CString<CAllocatorType>& CString<CAllocatorType>::operator = (
 | 
						|
    const unsigned long val )
 | 
						|
{
 | 
						|
    SetFormatted( "%u", val );
 | 
						|
    return *this;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of two CStrings
 | 
						|
 | 
						|
Input:
 | 
						|
    const CString& str
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const CString<CAllocatorType>& str ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        res.Append( (const char*)str );
 | 
						|
    }
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and char*
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const char* str ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.Append( str );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and bool
 | 
						|
 | 
						|
Input:
 | 
						|
    const bool val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const bool val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%d", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and char
 | 
						|
 | 
						|
Input:
 | 
						|
    const char val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const char val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%d", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and short
 | 
						|
 | 
						|
Input:
 | 
						|
    const short val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const short val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%d", val );
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and int
 | 
						|
 | 
						|
Input:
 | 
						|
    const int val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const int val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%d", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and long
 | 
						|
 | 
						|
Input:
 | 
						|
    const long val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const long val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%d", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and float
 | 
						|
 | 
						|
Input:
 | 
						|
    const float val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const float val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    double  d = val;
 | 
						|
    res.AppendFormatted( "%f", d );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and unsigned char
 | 
						|
Input:
 | 
						|
    const unsigned char val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const unsigned char val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%u", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and unsigned short
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned short val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const unsigned short val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%u", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and unsigned int
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned int val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const unsigned int val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%u", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns concatenation of CString and unsigned long
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned long val
 | 
						|
 | 
						|
Output:
 | 
						|
    const CString
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline const CString<CAllocatorType> CString<CAllocatorType>::operator + (
 | 
						|
    const unsigned long val ) const
 | 
						|
{
 | 
						|
    CString<CAllocatorType> res( *this );
 | 
						|
 | 
						|
    res.AppendFormatted( "%u", val );
 | 
						|
 | 
						|
    return res;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a CString to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const CString& str
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const CString<CAllocatorType>& str )
 | 
						|
{
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        Append( (const char*)str );
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a char* to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const char* str )
 | 
						|
{
 | 
						|
    Append( str );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a bool to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const bool val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const bool val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%d", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a char to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const char val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const char val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%d", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a short to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const short val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const short val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%d", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a int to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const int val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const int val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%d", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a long to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const long val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const long val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%d", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a float to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const float val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const float val )
 | 
						|
{
 | 
						|
    double  d = val;
 | 
						|
    AppendFormatted( "%f", d );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a unsigned char to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned char val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const unsigned char val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%u", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a unsigned short to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned short val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const unsigned short val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%u", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a unsigned int to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned int val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const unsigned int val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%u", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::operator +=
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a unsigned long to this CString
 | 
						|
 | 
						|
Input:
 | 
						|
    const unsigned long val
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::operator += (
 | 
						|
    const unsigned long val )
 | 
						|
{
 | 
						|
    AppendFormatted( "%u", val );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::Set
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets the string to an unformatted string
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
void CString<CAllocatorType>::Set( const char* str )
 | 
						|
{
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        const size_t length = ::strlen( str ) + 1;
 | 
						|
 | 
						|
        CAllocatorType::Deallocate( m_pString );
 | 
						|
        m_pString = NULL;
 | 
						|
        m_BufferSize = 0;
 | 
						|
 | 
						|
        m_pString = (char*)CAllocatorType::Allocate( length );
 | 
						|
        ASSERT( m_pString );
 | 
						|
 | 
						|
        if( m_pString )
 | 
						|
        {
 | 
						|
            STRCPY( m_pString, length, str );
 | 
						|
            m_Length = ::strlen( m_pString );
 | 
						|
            m_BufferSize = length;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::SetFormatted
 | 
						|
 | 
						|
Description:
 | 
						|
    Sets the string to a formatted string
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
    ...
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
void CString<CAllocatorType>::SetFormatted( const char* str, ... )
 | 
						|
{
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        va_list args;
 | 
						|
        
 | 
						|
        va_start( args, str );
 | 
						|
        const size_t length = ::_vscprintf( str, args ) + 1;
 | 
						|
        va_end( args );
 | 
						|
        
 | 
						|
        CAllocatorType::Deallocate( m_pString );
 | 
						|
        m_pString = NULL;
 | 
						|
        m_BufferSize = 0;
 | 
						|
 | 
						|
        m_pString = (char*)CAllocatorType::Allocate( length );
 | 
						|
        ASSERT( m_pString );
 | 
						|
 | 
						|
        if( m_pString )
 | 
						|
        {
 | 
						|
            va_start( args, str );
 | 
						|
            VSNPRINTF( m_pString, length, length, str, args );
 | 
						|
            va_end( args );
 | 
						|
 | 
						|
            m_Length = ::strlen( m_pString );
 | 
						|
            m_BufferSize = length;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::Append
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends an unformatted string
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::Append( const char* str )
 | 
						|
{
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        if( m_pString )
 | 
						|
        {
 | 
						|
            size_t length = m_Length + ::strlen( str ) + 1;
 | 
						|
            if( length > m_BufferSize )
 | 
						|
            {
 | 
						|
                // Once appended, it is likely to be appended again
 | 
						|
                // so reserve m_GrowSize bytes extra
 | 
						|
                length += m_GrowSize;
 | 
						|
                char* temp = (char*)CAllocatorType::Allocate( length );
 | 
						|
                ASSERT( temp );
 | 
						|
 | 
						|
                if( temp )
 | 
						|
                {
 | 
						|
                    STRCPY( temp, length, m_pString );
 | 
						|
                    STRCAT( temp, length, str );
 | 
						|
                    CAllocatorType::Deallocate( m_pString );
 | 
						|
                    m_pString = temp;
 | 
						|
                    m_Length = ::strlen( m_pString );
 | 
						|
                    m_BufferSize = length;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                STRCAT( m_pString, m_BufferSize, str );
 | 
						|
                m_Length = ::strlen( m_pString );
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            Set( str );
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::AppendFormatted
 | 
						|
 | 
						|
Description:
 | 
						|
    Appends a formatted string
 | 
						|
 | 
						|
Input:
 | 
						|
    const char* str
 | 
						|
    ...
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
inline void CString<CAllocatorType>::AppendFormatted( const char* str, ... )
 | 
						|
{
 | 
						|
    if( str )
 | 
						|
    {
 | 
						|
        va_list args;
 | 
						|
        
 | 
						|
        va_start( args, str );
 | 
						|
        size_t length = ::_vscprintf( str, args ) + 1;
 | 
						|
        va_end( args );
 | 
						|
        
 | 
						|
 | 
						|
        if( m_pString != NULL )
 | 
						|
        {                      
 | 
						|
            if( (m_Length + length) > m_BufferSize )
 | 
						|
            {
 | 
						|
                // Once appended, it is likely to be appended again
 | 
						|
                // so reserve m_GrowSize bytes extra
 | 
						|
                length += m_GrowSize;
 | 
						|
 | 
						|
                char* temp = (char*)CAllocatorType::Allocate( m_Length + length );
 | 
						|
                ASSERT( temp );
 | 
						|
 | 
						|
                if( temp )
 | 
						|
                {
 | 
						|
                    MemCopy( temp, m_pString, m_Length );
 | 
						|
                    
 | 
						|
                    va_start( args, str );
 | 
						|
                    VSNPRINTF( temp + m_Length, length, length - m_GrowSize, str, args );
 | 
						|
                    va_end( args );
 | 
						|
                    
 | 
						|
                    char *oldStr = m_pString;
 | 
						|
                    m_pString = temp;
 | 
						|
                    m_BufferSize = m_Length + length;
 | 
						|
                    m_Length += ::strlen( m_pString + m_Length );
 | 
						|
 | 
						|
                    CAllocatorType::Deallocate( oldStr );
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                va_start( args, str );
 | 
						|
                VSNPRINTF( m_pString + m_Length, m_BufferSize - m_Length, length, str, args );
 | 
						|
                va_end( args );
 | 
						|
                
 | 
						|
                m_Length += ::strlen( m_pString + m_Length );
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else //if( m_pString != NULL )
 | 
						|
        {
 | 
						|
            m_BufferSize = 0;
 | 
						|
            m_pString = (char*)CAllocatorType::Allocate( length );
 | 
						|
            ASSERT( m_pString != NULL );
 | 
						|
 | 
						|
            if( m_pString )
 | 
						|
            {
 | 
						|
                va_start( args, str );
 | 
						|
                VSNPRINTF( m_pString, length, length, str, args );
 | 
						|
                va_end( args );
 | 
						|
                
 | 
						|
                m_Length = ::strlen( m_pString );
 | 
						|
                m_BufferSize = length;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::Length
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns the length of the string
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    size_t
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
size_t CString<CAllocatorType>::Length( void ) const
 | 
						|
{
 | 
						|
    return m_Length;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::IsEmpty
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns true if, and only if, m_Length is 0.
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    true if string's length is 0, false if string's length is greater than 0. 
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
bool CString<CAllocatorType>::IsEmpty( void ) const
 | 
						|
{
 | 
						|
    return ( m_Length == 0 );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CString::DetachBuffer
 | 
						|
 | 
						|
Description:
 | 
						|
    Enforces the CString to forget about its previous buffer and do not try 
 | 
						|
    to deallocate it. Use carefully and make sure that someone will deallocate
 | 
						|
    this buffer.
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    none
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<class CAllocatorType>
 | 
						|
void CString<CAllocatorType>::DetachBuffer( void )
 | 
						|
{
 | 
						|
    m_pString = NULL;
 | 
						|
}
 | 
						|
 | 
						|
} // iSTD
 | 
						|
#if defined _WIN32
 | 
						|
#   pragma warning ( pop )
 | 
						|
#endif
 |