| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | #include "..\ecommon.h"
 | 
					
						
							|  |  |  |  | #include <iomanip>
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | #include <comutil.h>
 | 
					
						
							|  |  |  |  | #pragma comment(lib, "comsuppw.lib")
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><> Unicode <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ ANSI <20>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							|  |  |  |  | static std::string ConvertWide2Ansi(const wchar_t* wstr) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	std::string str = static_cast<char*>(_bstr_t(wstr)); | 
					
						
							|  |  |  |  | 	return std::move(str); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // <20><> ANSI <20>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ Unicode <20>ַ<EFBFBD><D6B7><EFBFBD>
 | 
					
						
							|  |  |  |  | static std::wstring ConvertAnsi2Wide(const char* cstr) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	std::wstring str = static_cast<wchar_t*>(_bstr_t(cstr)); | 
					
						
							|  |  |  |  | 	return std::move(str); | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::String() | 
					
						
							|  |  |  |  | 	: m_str(L"") | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::String(const wchar_t *str) | 
					
						
							|  |  |  |  | 	: m_str(str) | 
					
						
							| 
									
										
										
										
											2017-12-12 12:18:28 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String::String(const char *cstr) | 
					
						
							|  |  |  |  | 	: m_str(ConvertAnsi2Wide(cstr)) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::String::String(const std::string &str) | 
					
						
							|  |  |  |  | 	: m_str(ConvertAnsi2Wide(str.c_str())) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::String(e2d::String && str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str = std::move(str.m_str); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::String(const e2d::String &str) | 
					
						
							|  |  |  |  | 	: m_str(str.m_str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | e2d::String::String(const std::wstring &str) | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	: m_str(str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::~String() | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str.clear(); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String &e2d::String::operator=(const wchar_t *str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str = str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	return *this; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::operator=(const char *cstr) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_str = ConvertAnsi2Wide(cstr); | 
					
						
							|  |  |  |  | 	return *this; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String & e2d::String::operator=(const String &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str = str.m_str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	return *this; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String & e2d::String::operator=(const std::wstring &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str = str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	return *this; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::operator=(const std::string &str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_str = ConvertAnsi2Wide(str.c_str()); | 
					
						
							|  |  |  |  | 	return *this; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | bool e2d::String::operator==(const wchar_t *str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	if (str) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 		return (m_str.compare(str) == 0); | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return false; | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | bool e2d::String::operator==(const char *str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if (str) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		String temp(str); | 
					
						
							|  |  |  |  | 		return (m_str == temp.m_str); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return false; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | bool e2d::String::operator ==(const e2d::String &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str == str.m_str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | bool e2d::String::operator==(const std::wstring &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str == str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | bool e2d::String::operator!=(const wchar_t *str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	if (str) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return (m_str.compare(str) != 0); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return true; | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | bool e2d::String::operator!=(const char *str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if (str) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		String temp(str); | 
					
						
							|  |  |  |  | 		return (m_str != temp.m_str); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return true; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | bool e2d::String::operator!=(const e2d::String &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str != str.m_str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | bool e2d::String::operator!=(const std::wstring &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str != str; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | wchar_t &e2d::String::operator[](int index) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str[static_cast<size_t>(index)]; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::String::operator+(const wchar_t *str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String temp; | 
					
						
							|  |  |  |  | 	temp.m_str = m_str + str; | 
					
						
							|  |  |  |  | 	return std::move(temp); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String e2d::String::operator+(const char *str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	String temp(str); | 
					
						
							|  |  |  |  | 	temp.m_str += m_str; | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return std::move(temp); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::String::operator+(const e2d::String &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String temp; | 
					
						
							|  |  |  |  | 	temp.m_str = m_str + str.m_str; | 
					
						
							|  |  |  |  | 	return std::move(temp); | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::String::operator+(const std::wstring &str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	String temp; | 
					
						
							|  |  |  |  | 	temp.m_str = m_str + str; | 
					
						
							|  |  |  |  | 	return std::move(temp); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String e2d::operator+(const wchar_t *str1, const e2d::String &str2) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String temp; | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	temp.m_str = str1 + str2.m_str; | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return std::move(temp); | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String e2d::operator+(const char *str1, const String &str2) | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	String temp(str1); | 
					
						
							|  |  |  |  | 	temp.m_str += str2.m_str; | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return std::move(temp); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::operator+(const std::wstring &str1, const e2d::String &str2) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String temp; | 
					
						
							|  |  |  |  | 	temp.m_str = str1 + str2.m_str; | 
					
						
							|  |  |  |  | 	return std::move(temp); | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::operator+=(const wchar_t *str) | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	m_str += str; | 
					
						
							|  |  |  |  | 	return (*this); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::operator+=(const char *str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	m_str += ::ConvertAnsi2Wide(str); | 
					
						
							|  |  |  |  | 	return (*this); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::operator+=(const String &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str += str.m_str; | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	return (*this); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String & e2d::String::operator+=(const std::wstring &str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	m_str += str; | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	return (*this); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool e2d::String::operator>(const String &str) const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_str > str.m_str; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool e2d::String::operator>=(const String &str) const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_str >= str.m_str; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool e2d::String::operator<(const String &str) const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_str < str.m_str; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool e2d::String::operator<=(const String &str) const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return m_str <= str.m_str; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::String & e2d::String::operator<<(const char * value) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return this->append(value); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::String & e2d::String::operator<<(char * value) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return this->append(value); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::operator const wchar_t*() const | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str.c_str(); | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String::operator wchar_t*() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return const_cast<wchar_t*>(m_str.c_str()); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::String::operator const char*() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	return ::ConvertWide2Ansi(m_str.c_str()).c_str(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String::operator bool() const | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return getLength() != 0; | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | bool e2d::String::isEmpty() const | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return m_str.empty(); | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | int e2d::String::getLength() const | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return static_cast<int>(m_str.size()); | 
					
						
							| 
									
										
										
										
											2017-12-12 11:28:12 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | unsigned int e2d::String::getHash() const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	unsigned int hash = 0; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	for (int i = 0; i < getLength(); i++) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		hash *= 16777619; | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 		hash ^= (unsigned int)towupper(m_str[i]); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return hash; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::String::toUpper() const | 
					
						
							| 
									
										
										
										
											2017-12-12 12:18:28 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String str(*this); | 
					
						
							| 
									
										
										
										
											2017-12-12 12:18:28 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	for (int i = 0; i < getLength(); i++) | 
					
						
							|  |  |  |  | 		str[i] = towupper(str[i]); | 
					
						
							| 
									
										
										
										
											2017-12-12 12:18:28 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return std::move(str); | 
					
						
							| 
									
										
										
										
											2017-12-12 12:18:28 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::String::toLower() const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	e2d::String str(*this); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	for (int i = 0; i < getLength(); i++) | 
					
						
							|  |  |  |  | 		str[i] = towlower(str[i]); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	return std::move(str); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | int e2d::String::toInt() const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	if (getLength() == 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return 0; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return _wtoi(m_str.c_str()); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | double e2d::String::toDouble() const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	if (getLength() == 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return 0.0; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return _wtof(m_str.c_str()); | 
					
						
							|  |  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | bool e2d::String::toBool() const | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if (getLength() == 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return false; | 
					
						
							|  |  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	if (m_str.compare(L"0") == 0 || m_str.compare(L"false") == 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return false; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return true; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String e2d::String::subtract(int offset, int count) const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	String temp; | 
					
						
							|  |  |  |  | 	int length = getLength(); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	if (length == 0 || offset >= length) | 
					
						
							|  |  |  |  | 		return std::move(temp); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	offset = offset >= 0 ? offset : 0; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	if (count < 0 || (offset + count) > length) | 
					
						
							|  |  |  |  | 		count = length - offset; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	temp.m_str = m_str.substr(offset, count); | 
					
						
							|  |  |  |  | 	return std::move(temp); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | int e2d::String::findFirstOf(const wchar_t ch) const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	for (int i = 0; i < getLength(); i++) | 
					
						
							|  |  |  |  | 		if (m_str[i] == ch) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 			return i; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	return -1; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-07 16:37:12 +08:00
										 |  |  |  | int e2d::String::findLastOf(const wchar_t ch) const | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  | 	int index = -1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | 	for (int i = 0; i < getLength(); i++) | 
					
						
							|  |  |  |  | 		if (m_str[i] == ch) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | 			index = i; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	return index; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::append(const wchar_t * str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	m_str += str; | 
					
						
							|  |  |  |  | 	return *this; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | e2d::String & e2d::String::append(const char * str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	m_str += ::ConvertAnsi2Wide(str); | 
					
						
							|  |  |  |  | 	return *this; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | e2d::String & e2d::String::append(char * str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	m_str += ::ConvertAnsi2Wide(str); | 
					
						
							|  |  |  |  | 	return *this; | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 16:32:17 +08:00
										 |  |  |  | e2d::String & e2d::String::append(const e2d::String & str) | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 	m_str += str.m_str; | 
					
						
							|  |  |  |  | 	return (*this); | 
					
						
							| 
									
										
										
										
											2017-12-11 18:17:24 +08:00
										 |  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-02-28 19:17:15 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | std::wostream & e2d::operator<<(std::wostream &cout, String &str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	cout << str.m_str; | 
					
						
							|  |  |  |  | 	return cout; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | std::wistream & e2d::operator>>(std::wistream &cin, e2d::String &str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	cin >> str.m_str; | 
					
						
							|  |  |  |  | 	return cin; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | std::ostream & e2d::operator<<(std::ostream &cout, String &str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	cout << ::ConvertWide2Ansi(str.m_str.c_str()); | 
					
						
							|  |  |  |  | 	return cout; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | std::istream & e2d::operator>>(std::istream &cin, e2d::String &str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	std::string temp; | 
					
						
							|  |  |  |  | 	cin >> temp; | 
					
						
							|  |  |  |  | 	str.m_str = ::ConvertAnsi2Wide(temp.c_str()); | 
					
						
							|  |  |  |  | 	return cin; | 
					
						
							|  |  |  |  | } |