aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cru/common/String.hpp61
1 files changed, 32 insertions, 29 deletions
diff --git a/include/cru/common/String.hpp b/include/cru/common/String.hpp
index ed3deb4c..f407cb60 100644
--- a/include/cru/common/String.hpp
+++ b/include/cru/common/String.hpp
@@ -12,6 +12,7 @@
#include <limits>
#include <stdexcept>
#include <string>
+#include <string_view>
#include <system_error>
#include <type_traits>
#include <vector>
@@ -21,20 +22,36 @@ class StringView;
class CRU_BASE_API String {
public:
+ using value_type = std::uint16_t;
+ using size_type = Index;
+ using difference_type = Index;
+ using reference = std::uint16_t&;
+ using const_reference = const std::uint16_t&;
+ using pointer = std::uint16_t*;
+ using const_pointer = const std::uint16_t*;
+ using iterator = std::uint16_t*;
+ using const_iterator = const std::uint16_t*;
+ using reverse_iterator = std::reverse_iterator<iterator>;
+ using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
+ public:
+ static String FromUtf8(const char* str);
+ static String FromUtf8(const char* str, Index size);
static String FromUtf8(std::string_view str) {
return FromUtf8(str.data(), str.size());
}
- static String FromUtf8(const char* str, Index size);
- static String FromUtf16(const std::uint16_t* str) { return String(str); }
- static String FromUtf16(const std::uint16_t* str, Index size) {
- return String(str, size);
+ static String FromUtf16(const char16_t* str) {
+ return String(reinterpret_cast<const_pointer>(str));
}
-
- static String FromUtf16(const char16_t* str) { return String(str); }
static String FromUtf16(const char16_t* str, Index size) {
- return String(str, size);
+ return String(reinterpret_cast<const_pointer>(str), size);
}
+ static String FromUtf16(std::u16string_view str) {
+ return FromUtf16(str.data(), str.size());
+ }
+
+ static inline String From(StringView str);
// Never use this if you don't know what this mean!
static String FromBuffer(std::uint16_t* buffer, Index size, Index capacity) {
@@ -49,30 +66,14 @@ class CRU_BASE_API String {
#endif
public:
- using value_type = std::uint16_t;
- using size_type = Index;
- using difference_type = Index;
- using reference = std::uint16_t&;
- using const_reference = const std::uint16_t&;
- using pointer = std::uint16_t*;
- using const_pointer = const std::uint16_t*;
- using iterator = std::uint16_t*;
- using const_iterator = const std::uint16_t*;
- using reverse_iterator = std::reverse_iterator<iterator>;
- using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-
- public:
String() = default;
- explicit String(const std::uint16_t* str);
- String(const std::uint16_t* str, Index size);
-
- explicit String(const char16_t* str);
- String(const char16_t* str, Index size);
- String(const std::u16string_view& str) : String(str.data(), str.size()) {}
+ explicit String(const_pointer str);
+ String(const_pointer str, size_type size);
template <Index size>
- constexpr String(const char16_t (&str)[size]) : String(str, size) {}
+ String(const char16_t (&str)[size])
+ : String(reinterpret_cast<const_pointer>(str), size) {}
template <typename Iter>
String(Iter start, Iter end) {
@@ -81,8 +82,7 @@ class CRU_BASE_API String {
}
}
- String(const std::initializer_list<std::uint16_t>& l)
- : String(l.begin(), l.end()) {}
+ String(std::initializer_list<value_type> l) : String(l.begin(), l.end()) {}
#ifdef CRU_PLATFORM_WINDOWS
String(const wchar_t* str);
@@ -112,6 +112,7 @@ class CRU_BASE_API String {
void resize(Index new_size);
void reserve(Index new_capacity);
+ void shrink_to_fit();
std::uint16_t& front() { return this->operator[](0); }
const std::uint16_t& front() const { return this->operator[](0); }
@@ -369,6 +370,8 @@ inline String::iterator String::insert(const_iterator pos, StringView str) {
inline void String::append(StringView str) {
this->append(str.data(), str.size());
}
+
+inline String String::From(StringView str) { return str.ToString(); }
} // namespace cru
template <>