This commit is contained in:
aixianling
2025-01-09 17:45:40 +08:00
commit 5c9f1dae4a
3482 changed files with 1146531 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
#ifndef _LIB_ANSISTRING_H_
#define _LIB_ANSISTRING_H_
/******************************************************************
*
*
* $ UCS2<53>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> $
*
* - <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> -
*
* ʵ<><CAB5>UCS<43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCS2<53>ַ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BBA5><EFBFBD><EFBFBD>
*
*****************************************************************/
#include <stdlib.h>
#include <string.h>
namespace string
{
class AnsiString
{
public:
typedef char CharType;
typedef char* RawStrType;
private:
char* m_sStr;
private:
static const char* EMPTY_STR;
protected:
/*
realloc <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ͷź<CDB7><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ̳д˺<D0B4><CBBA><EFBFBD>
ptr: <20><><EFBFBD><EFBFBD>ͷŵ<CDB7>ָ<EFBFBD><D6B8>
newsize: <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD>ͷ<EFBFBD>ptrָ<72><D6B8>
<09><>ptr<74><72>newsize<7A><65><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ptr<74>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
*/
virtual void* alloc(void* ptr, size_t newsize)
{
if ( newsize == 0 )
{
if ( ptr ) free( ptr );
return NULL;
}
return realloc( ptr, newsize );
}
/*
setData <09><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data: ָ<><D6B8>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
*/
inline void setData(const char* data)
{
if ( data )
{
size_t size = strlen(data) + 1;
size *= sizeof(*data);
m_sStr = (char*)alloc( m_sStr, size );
memcpy( m_sStr, data, size );
}
else m_sStr = (char*)alloc( m_sStr, 0 );
}
/*
catData <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
data: ָ<><D6B8>ԭʼ<D4AD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻᱻ<DDBB><E1B1BB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>֮<EFBFBD><D6AE>
*/
inline void catData(const char* data)
{
if ( data )
{
size_t cat_size = strlen(data);
size_t cur_size = length();
m_sStr = (char*)alloc( m_sStr, (cat_size + cur_size + 1) * sizeof(*data) );
memcpy( &m_sStr[cur_size], data, (cat_size + 1) * sizeof(*data) );
}
}
public:
/*
?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
AnsiString()
{
m_sStr = NULL;
}
AnsiString(const char* data)
{
m_sStr = NULL;
setData( data );
}
AnsiString(const AnsiString &str)
{
m_sStr = NULL;
setData( str.m_sStr );
}
virtual ~AnsiString()
{
setData( NULL );
}
public:
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ(const char*)<29><>
ע<><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7B5>""<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
*/
inline operator const char*() const
{
return m_sStr ? m_sStr : EMPTY_STR;
}
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ(const char*)<29><>
ע<><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7B5>""<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C>
*/
inline operator char*()
{
return m_sStr ? m_sStr : NULL;
}
/* <09><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(const char*)<29><><EFBFBD>͵<EFBFBD>ֵ */
inline void operator = (const char* data)
{
if ( data != m_sStr )
{
setData( data );
}
}
/* <09><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>͵<EFBFBD>ֵ */
inline void operator = (const AnsiString& str)
{
if ( &str != this )
{
setData( str.m_sStr );
}
}
/* <09><>(const char*)<29><><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
inline void operator += (const char* data)
{
if ( data != m_sStr )
{
catData( data );
}
else
{
AnsiString wstr(m_sStr);
catData(wstr.m_sStr);
}
}
/* <09><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
inline void operator += (const AnsiString& str)
{
if ( &str != this )
{
catData( str.m_sStr );
}
else
{
AnsiString wstr(m_sStr);
catData(wstr.m_sStr);
}
}
/* <09><>(const char*)<29><><EFBFBD>ͽ<EFBFBD><CDBD>мӷ<D0BC><D3B7><EFBFBD><EFBFBD><EFBFBD><E3B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>CAnsiString<6E><67> */
inline const AnsiString operator + (const char* data)
{
AnsiString str( m_sStr );
str.catData( data );
return str;
}
/* <09><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>мӷ<D0BC><D3B7><EFBFBD><EFBFBD><EFBFBD><E3B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>CAnsiString<6E><67> */
inline const AnsiString operator + (const AnsiString& str)
{
AnsiString _str( m_sStr );
_str.catData( str.m_sStr );
return _str;
}
/* <20>ж<EFBFBD><D0B6><EFBFBD>(const char*)<29><><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
inline bool operator == (const char* data) const
{
return compare( data ) == 0;
}
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
inline bool operator == (const AnsiString& str) const
{
return compare( str.m_sStr ) == 0;
}
/* <20>ж<EFBFBD><D0B6><EFBFBD>(const char*)<29><><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
inline bool operator != (const char* data) const
{
return compare( data ) != 0;
}
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
inline bool operator != (const AnsiString& str) const
{
return compare( str.m_sStr ) != 0;
}
/* <09>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ǿ<EFBFBD> */
inline bool operator ! () const
{
return !m_sStr || !m_sStr[0];
}
public:
/* ȡ<><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8> */
inline const char* rawStr() const
{
return m_sStr;
}
/* ȡ<><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8> */
inline char* rawStr()
{
return m_sStr;
}
/* ȡ<><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
inline size_t length() const
{
return m_sStr ? strlen(m_sStr) : 0;
}
/* <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>) */
inline void setLength(const size_t len)
{
if ( len > 0 )
{
m_sStr = (char*)alloc( m_sStr, sizeof(m_sStr[0]) * (len + 1) );
if ( m_sStr ) m_sStr[len] = 0;
}
else m_sStr = (char*)alloc( m_sStr, 0 );
}
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ա<EFBFBD> */
inline int compare(const char* data) const
{
if ( !m_sStr || !m_sStr[0] )
{
if ( !data || !data[0] )
return 0;
else return 1;
}
return strcmp( m_sStr, data );
}
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жԱ<D0B6> */
inline int compare(const AnsiString& str) const
{
if ( !m_sStr || !m_sStr[0] )
{
if ( !str.m_sStr || !str.m_sStr[0] )
return 0;
else return 1;
}
return strcmp( m_sStr, str.m_sStr );
}
/* <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> */
inline bool isEmpty() const
{
return !m_sStr || !m_sStr[0];
}
/* ת<><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪUCS-2LE<4C><45>ʽ<EFBFBD><CABD>
<09><><EFBFBD><EFBFBD>sOutput<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ұ<EFBFBD><D2B1><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>sOutput<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sOutput<75><74>
<09><>ת<EFBFBD><D7AA>ʧ<EFBFBD><CAA7><EFBFBD>򷵻<EFBFBD>null<6C><6C>sOutput<75><74><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>ı
<09><><EFBFBD><EFBFBD>sOutput<75><74><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Һ<EFBFBD><D2BA><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9>򷵻<EFBFBD><F2B7B5BB>µ<EFBFBD>CWideString<6E><67><EFBFBD>󣬴<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ٺ<EFBFBD><D9BA>ʵ<EFBFBD>ʱ<EFBFBD><CAB1>delete<74><65><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
ת<><D7AA>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
*/
//WideString* toWStr(WideString* sOutput = NULL) const;
/* <20><>ʽ<EFBFBD><CABD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> */
size_t format(const char* fmt, ...);
size_t format_args(const char* fmt, va_list _Args);
};
};
#endif