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

📄 utf8string.h

📁 The library provides supports for run-time loaded plugin classes in C++
💻 H
字号:
#ifndef UTF8STRING_H_#define UTF8STRING_H_// Want 8-bit string#define scChar char#define SC_FORCE_ANSI	// We want Ansi version of sc.h regardles of Unicode build or not#ifdef SC_H	#undef SC_H // Make fresh include#endif#include "utils/ExpArr.hpp"#include "utils/scString.hpp"int utf8stricmp( const char *s1, const char *s2 );int utf8strnicmp( const char *s1, const char *s2, int n );// UTF8 strcmp works as ordinary strcmp//int utf8strcmp( const char *s1, const char *s2 );//int utf8strncmp( const char *s1, const char *s2, int n );// This is a string class that works with UTF8 encoded strings.// class u8Str : public scString {	public:		u8Str( const char *ps=NULL ) : scString(ps) { }		u8Str( const scString &s ) : scString(s) { }		u8Str( const char *ps, int byte_len ) : scString(ps,byte_len) { }		u8Str( const wchar_t *pws, int wcs_len=-1 );			u8Str& Assign(const wchar_t *s, int l);				// Compiler cannot see it		u8Str& Assign(const char *s, int l){ scString::Assign(s,l); return *this; }				u8Str& Assign(const char *s, const char* pe){ scString::Assign(s,pe); return *this; }						// Note: have to step from the beginning at each call		// Return Unicode character at Unicode offset ix		int operator [] (int ix) const ;		// Assign Unicode character at position ix value ch		bool SetUniChar( int ix, int ch );				u8Str& operator += (const wchar_t *pws);		u8Str& operator = (const wchar_t *pws){ return Assign(pws,-1); }		u8Str& operator += (const char *ps);	// # Need this? Yes, compiler does not see base case		// Insert/append/prepend Unicode character		bool Insert(int at, int ch);		bool Append(int ch);		bool Prepend(int ch);			// Compiler cannot see base cases any more		u8Str& Insert(int at, const char *str, int len=-1){ 			scString::Insert(at,str,len); 			return *this;		} 		u8Str& Append(const char *str, int len=-1){ 			scString::Append(str,len); 			return *this;		} 		u8Str& Prepend(const char *str, int len=-1){ 			scString::Prepend(str,len); 			return *this;		} 				int Length() const;			// Note: have to step from the beginning		u8Str &Trunc(int pos);		// We cannot reserve requested length with Utf8		// (we can still use base class MinTotalSize to reserve buffer size though)		u8Str &SetLength( int len ){ EA_THROW_RV("u8Str::SetLength - Not available for UTF8 encoding",*this); }		const scChar *Right( int from_pos ) const;		// This functions returns Unicode position.		// # Better to return Byte position and provide function to 		// convert between Unicode and Byte index.		int Find( const char *ps ) const;		// Returns position of found instance		bool FindAt( const scChar *str, int pos=0/*STR_AT_END for find at end*/ ) const;					int Subst( int ch_find, int ch_repl );		int Subst( const char *find, const char *repl ){ return scString::Subst(find,repl); }				u8Str Slice( int from, int to=0 ) const;};class u8Iter{	public:		u8Iter( const char *scp=NULL, const char *scp_end=NULL, const char *scp_start=NULL ) : 			m_scp(scp), m_end(scp_end), m_start(scp_start), m_pos(0) { }				// Initialize both ends, and step to offset (positive or negative)		// STR_AT_END means to put the iterator pointing at scp_end (usually terminating NUL)		u8Iter( const char *scp_start, const char *scp_end, int goto_pos );				void Init( const char *scp, const char *scp_end=NULL, const char *scp_start=NULL ){			m_scp=scp; m_end=scp_end; m_start=scp_start; m_pos=0; 			if( !m_scp ) EA_THROW("u8Iter::Init - Invalid starting point (m_scp)");		}		void operator ++ (int);	// Step forwards, postfix: it++		void operator -- (int); // Step backwards, postfix: it--		int operator () ();		// Return current character, -1 if none		int Pos( ){ return m_pos; }	// Return position (distance to 0) in string (not offset)		const char *Base( ){ return m_scp; }		operator const char *(){ return m_end && m_scp>=m_end ? NULL : m_scp; }		operator char *(){ return m_end && m_scp>=m_end ? NULL : (char*)m_scp; }  						const char *m_scp, *m_start, *m_end;		int m_pos;	// A negative value when stepping backwards};#endif /*UTF8STRING_H_*/

⌨️ 快捷键说明

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