init
This commit is contained in:
265
Gateway/srvlib/include/ansi_string.hpp
Normal file
265
Gateway/srvlib/include/ansi_string.hpp
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user