diff options
Diffstat (limited to 'src/Core/String.h')
-rw-r--r-- | src/Core/String.h | 62 |
1 files changed, 43 insertions, 19 deletions
diff --git a/src/Core/String.h b/src/Core/String.h index 1c93902..4694812 100644 --- a/src/Core/String.h +++ b/src/Core/String.h @@ -22,7 +22,7 @@ #include "export.h" -#include <ostream> +#include <iostream> #include <string> #include <boost/cstdint.hpp> #include <boost/scoped_array.hpp> @@ -35,25 +35,18 @@ namespace Core { class MAD_CORE_EXPORT String : public icu::UnicodeString { private: - std::string extractCodepage(const char *codepage) const { - boost::uint32_t len = static_cast<boost::uint32_t>(icu::UnicodeString::extract(0, length(), 0, codepage)); - - boost::scoped_array<char> buf(new char[len]); - icu::UnicodeString::extract(0, length(), buf.get(), len, codepage); - - return std::string(buf.get(), len); - } + std::string toCodepage(const char *codepage) const; public: String() {} - String(const icu::UnicodeString &str) : icu::UnicodeString(str) {} - String(const char *str) : icu::UnicodeString(str, -1, US_INV) {} + String(const icu::UnicodeString &str) : UnicodeString(str) {} + String(const char *str) : UnicodeString(str, "") {} String substr(boost::int32_t start, boost::int32_t length = -1) const { if(length < 0) - return icu::UnicodeString(*this, start); + return UnicodeString(*this, start); else - return icu::UnicodeString(*this, start, length); + return UnicodeString(*this, start, length); } bool matches(const String &str) const { @@ -63,22 +56,53 @@ class MAD_CORE_EXPORT String : public icu::UnicodeString { boost::int32_t findFirstOf(const String &chars, boost::int32_t start = 0) const; boost::int32_t findFirstNotOf(const String &chars, boost::int32_t start = 0) const; - std::string extract() const { - return extractCodepage(0); + std::string toString() const { + return toCodepage(""); + } + + std::string toLocale() const { + return toCodepage(0); + } + + std::string toUTF8() const { + return toCodepage("UTF-8"); + } + + static String fromString(const char *str) { + return UnicodeString(str, ""); } - std::string extractUTF8() const { - return extractCodepage("UTF-8"); + static String fromString(const std::string &str) { + return fromString(str.c_str()); + } + + static String fromLocale(const char *str) { + return UnicodeString(str, static_cast<char*>(0)); + } + + static String fromLocale(const std::string &str) { + return fromLocale(str.c_str()); } static String fromUTF8(const char *str) { - return icu::UnicodeString(str, "UTF-8"); + return UnicodeString(str, "UTF-8"); + } + + static String fromUTF8(const std::string &str) { + return fromUTF8(str.c_str()); + } + + template<typename ElemType, typename Traits> + static String getline(std::basic_istream<ElemType, Traits> &stream) { + std::string input; + std::getline(stream, input); + return fromLocale(input); } }; template<typename ElemType, typename Traits> std::basic_ostream<ElemType, Traits>& operator<<(std::basic_ostream<ElemType, Traits> &stream, const String &string) { - stream << string.extract(); + stream << string.toLocale(); return stream; } |