⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strcast.h

📁 方便的utf8
💻 H
📖 第 1 页 / 共 2 页
字号:
		}
        //uchar* to char*
		explicit string_cast(custr psz,size_t count = -1)  :
			m_psz( m_szBuffer ),
			m_isSameType(false)
		{
			init((const char*)psz,count == -1 ?
                 strlen((const char*)(psz)) : count);
		}
		explicit string_cast(ustr psz,size_t count = -1)  :
			m_psz( m_szBuffer ),
			m_isSameType(false)
		{
			init((const char*)psz,count == -1 ?
                 strlen((const char*)(psz)) : count);
		}
        explicit string_cast(const dnc::utf8_const_iterator &it ,size_t count = -1) :
			m_psz(m_szBuffer),
			m_isSameType(false)
		{
			init((const char*)it,count == -1 ? strlen(it) : count);
		}
		//char* to char*
		explicit string_cast(const char* psz )  :
			m_psz((DescType*)psz),
			m_isSameType(true),
			m_length(-1)
		{
		}
		explicit string_cast(char* psz )  :
			m_psz((DescType*)psz),
			m_isSameType(true),
			m_length(-1)
		{
		}
		////int to char*
		//explicit string_cast(NullType val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	strcpy(m_psz,"null");
		//}
		//explicit string_cast(bool val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(char val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(unsigned char val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(short val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(unsigned short val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(long val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(unsigned long val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(int val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(unsigned int val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(long long val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		//explicit string_cast(unsigned long long val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%i",val);
		//}
		////double to char*
		//explicit string_cast(double val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%f",val);
		//}
		////float to char*
		//explicit string_cast(float val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	sprintf(m_psz,t_nBufferLength,"%f",val);
		//}
		////Variant to wchar_t*
		//explicit string_cast(const Variant &val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	const dlc_variant& v=(const dlc_variant&)val;
		//	switch(getVariantTypeId(v)){
		//		case vt_string:
		//			m_psz = v.strval;
		//			m_isSameType = true;
		//			break;
		//		default:
		//			std::string str(val);
		//			m_length = str.size();
		//			size_t len = m_length+1;
		//			if(len > t_nBufferLength){
		//				m_psz = new char[len];
		//			}
		//			strcpy(m_psz,str.c_str());
		//	}
		//}
		//template<class TSrc>
		//explicit string_cast(const TSrc &val)  :
		//	m_psz( m_szBuffer ),
		//	m_isSameType(false),
		//	m_length(-1)
		//{
		//	std::string str;
		//	val.toString(str);
		//	if(str.size() >= t_nBufferLength){
		//		m_psz = new DescType[str.size()+1];
		//	}
		//	m_length = str.size();
		//	memcpy(m_psz,str.c_str(),m_length+1);
		//}
		~string_cast() throw(){
			if( m_psz != m_szBuffer && !m_isSameType){
				delete [] m_psz;
			}
		}
		inline operator DescType* () const throw(){
			return const_cast<DescType*>(m_psz);
		}
		inline DescType* c_str() const throw(){
			return const_cast<DescType*>(m_psz);
		}
		inline size_t size() const{
			if(m_length == -1){
				const_cast<string_cast*>(this)->m_length = (size_t)strlen(m_psz);
			}
			return m_length;
		}
	private:
		size_t	m_length;
		DescType*	m_psz;
		bool		m_isSameType;
		DescType	m_szBuffer[t_nBufferLength];
	private:

		void init(cwstr str,size_t count) {
			if (str == NULL){
				m_psz = NULL;
				return;
			}
			if( count*3 >= t_nBufferLength ){
				m_psz = new char[count*3+1];
			}
			m_length = UNICODEToANSI(str,count,m_psz,count*3);
			m_psz[m_length] = 0;
		}

		void init(const char* str,size_t count) {
			if (str == NULL){
				m_psz = NULL;
				return;
			}
			if( count >=t_nBufferLength ){
				m_psz = new char[count+1];
			}
			m_length = UTF8ToANSI((uchar*)str,count,m_psz,count);
			m_psz[m_length] = 0;
		}

		
		
		explicit string_cast( const string_cast& ) throw();
		string_cast& operator=( const string_cast& ) throw();
	};


//------------------------------------------------------------------------------
//to uchar*
//------------------------------------------------------------------------------
#ifdef DNC_OLDVC
	template<>
	class string_cast<uchar>{
		enum{t_nBufferLength =  128};
#else
	template<int t_nBufferLength>
	class string_cast<uchar,t_nBufferLength>{
#endif
	public:
		typedef wchar SrcType;
		typedef uchar DescType;
	public:
		//wchar_t* to uchar*
		explicit string_cast(cwstr str,size_t count = -1)  :
			m_psz( m_szBuffer ),
			m_isSameType(false)
		{
			init(str,count == -1 ? wcslen(str) : count);
		}
		explicit string_cast(wstr str,size_t count = -1)  :
			m_psz( m_szBuffer ),
			m_isSameType(false)
		{
			init(str,count == -1 ? wcslen(str) : count);
		}
        template<class Char,class Traits,class Allocator>
        explicit string_cast(const std::basic_string<Char,Traits,Allocator> &str,size_t count = -1)  :
			m_psz( m_szBuffer ),
			m_isSameType(false)
		{
			init(str.data(),count == -1 ? str.size() : count);
		}
        //uchar* to uchar*
        template<class Traits,class Allocator>
        explicit string_cast(const std::basic_string<char,Traits,Allocator> &sz ,size_t count = -1) :
			m_psz((uchar*)sz.c_str()),
			m_isSameType(true),
			m_length(sz.size())
		{
		}
		explicit string_cast(custr str ,size_t count = -1)  :
			m_psz((uchar*)str),
			m_isSameType(true),
			m_length(-1)
		{
		}
		explicit string_cast(ustr str,size_t count = -1 )  :
			m_psz(str),
			m_isSameType(true),
			m_length(-1)
		{
		}
        explicit string_cast(const dnc::utf8_const_iterator &it ,size_t count = -1) :
			m_psz((uchar*)(const char*)it),
			m_isSameType(true),
			m_length(-1)
		{
		}
		//char* to uchar*
        explicit string_cast(castr str ,size_t count = -1)  :
			m_psz(m_szBuffer),
			m_isSameType(false)
		{
			init(str,count == -1 ? strlen(str): count);
		}
		explicit string_cast(astr str,size_t count = -1 )  :
			m_psz(m_szBuffer),
			m_isSameType(false)
		{
			init(str,count == -1 ? strlen(str): count);
		}
		
		
		
		template<class TSrc>
		explicit string_cast(const TSrc &val)  :
			m_psz( m_szBuffer ),
			m_isSameType(false),
			m_length(-1)
		{
			std::string str;
			val.toString(str);
			if(str.size() >= t_nBufferLength){
				m_psz = new DescType[str.size()+1];
			}
			m_length = str.size();
			memcpy(m_psz,str.c_str(),m_length+1);
		}
		~string_cast() throw(){
			if( m_psz != m_szBuffer && !m_isSameType){
				delete [] m_psz;
			}
		}
		inline operator char* () const throw(){
			return (char*)m_psz;
		}
		inline char* c_str() const throw(){
			return (char*)(m_psz);
		}
        inline std::string str() const{
            return std::string((char*)m_psz,size());
        }
		inline size_t size() const{
			if(m_length == -1){
				const_cast<string_cast*>(this)->m_length = strlen((char*)m_psz);
			}
			return m_length;
		}
	private:
		size_t		m_length;
		ustr		m_psz;
		bool		m_isSameType;
		uchar		m_szBuffer[t_nBufferLength];
	private:
		void init(cwstr psz,size_t count) {
			if (psz == NULL){
				m_psz = NULL;
				return;
			}
			if( count*3 >= t_nBufferLength ){
				m_psz = new uchar[count*3+1];
			}

			m_length = UNICODEToUTF8(psz,count,m_psz,count*3);
			m_psz[m_length] = 0;
		}
		void init(castr psz,size_t count) {
			if (psz == NULL){
				m_psz = NULL;
				return;
			}
			if( count*3 >= t_nBufferLength ){
				m_psz = new uchar[count*3];
			}
			m_length = ANSIToUTF8((char*)psz,count,m_psz,count*3);
			m_psz[m_length] = 0;
		}
		explicit string_cast( const string_cast& ) throw();
		string_cast& operator=( const string_cast& ) throw();
	};
}
#endif //__DNC_STRCAST_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -