/* * String.h * * Copyright (C) 2009 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this program. If not, see . */ #ifndef MAD_CORE_STRING_H_ #define MAD_CORE_STRING_H_ #include "export.h" #include #include #include #include #define U_USING_ICU_NAMESPACE 0 #include namespace Mad { namespace Core { class MAD_CORE_EXPORT String : public icu::UnicodeString { private: std::string toCodepage(const char *codepage) const; public: String() {} 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 UnicodeString(*this, start); else return UnicodeString(*this, start, length); } bool matches(const String &str) const { return (str.caseCompare(*this, 0) == 0); } 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 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, ""); } static String fromString(const std::string &str) { return fromString(str.c_str()); } static String fromLocale(const char *str) { return UnicodeString(str, static_cast(0)); } static String fromLocale(const std::string &str) { return fromLocale(str.c_str()); } static String fromUTF8(const char *str) { return UnicodeString(str, "UTF-8"); } static String fromUTF8(const std::string &str) { return fromUTF8(str.c_str()); } template static String getline(std::basic_istream &stream) { std::string input; std::getline(stream, input); return fromLocale(input); } }; template std::basic_ostream& operator<<(std::basic_ostream &stream, const String &string) { stream << string.toLocale(); return stream; } } } #endif /* MAD_CORE_STRING_H_ */