summaryrefslogtreecommitdiffstats
path: root/src/Core/String.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Core/String.h')
-rw-r--r--src/Core/String.h62
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;
}