summaryrefslogtreecommitdiff
path: root/src/string.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-02-04 23:52:06 +0000
committerMaxime Coste <frrrwww@gmail.com>2016-02-04 23:54:22 +0000
commita8eddd03f0e328b08d23ec9f83c5c61e9a9b202a (patch)
tree785b26eafd774e82a24ffca1c3b5cf9534e2a2b3 /src/string.hh
parent80f7a350e41bdf9c3011bb1e5ce0cf23bd405b5e (diff)
String usage cleanups
Diffstat (limited to 'src/string.hh')
-rw-r--r--src/string.hh20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/string.hh b/src/string.hh
index a5fb8ab3..5b62bf12 100644
--- a/src/string.hh
+++ b/src/string.hh
@@ -85,6 +85,12 @@ private:
const Type& type() const { return *static_cast<const Type*>(this); }
};
+[[gnu::optimize(3)]] // this is recursive for constexpr reason
+constexpr ByteCount strlen(const char* s)
+{
+ return *s == 0 ? 0 : strlen(s+1) + 1;
+}
+
class String : public StringOps<String, char>
{
public:
@@ -92,16 +98,14 @@ public:
Allocator<char, MemoryDomain::String>>;
String() {}
- String(const char* content) : m_data(content) {}
+ String(const char* content) : m_data(content, (size_t)(int)strlen(content)) {}
String(const char* content, ByteCount len) : m_data(content, (size_t)(int)len) {}
- explicit String(char content, CharCount count = 1) : m_data((size_t)(int)count, content) {}
explicit String(Codepoint cp, CharCount count = 1)
{
while (count-- > 0)
utf8::dump(std::back_inserter(*this), cp);
}
- template<typename Iterator>
- String(Iterator begin, Iterator end) : m_data(begin, end) {}
+ String(const char* begin, const char* end) : m_data(begin, end-begin) {}
[[gnu::always_inline]]
char* data() { return &m_data[0]; }
@@ -148,7 +152,7 @@ public:
[[gnu::always_inline]]
constexpr ByteCount length() const { return m_length; }
- String str() const { return {begin(), end()}; }
+ String str() const { return {m_data, m_length}; }
struct ZeroTerminatedString
{
@@ -168,12 +172,6 @@ public:
};
ZeroTerminatedString zstr() const { return {begin(), end()}; }
- [[gnu::optimize(3)]] // this is recursive for constexpr reason
- static constexpr ByteCount strlen(const char* s)
- {
- return *s == 0 ? 0 : strlen(s+1) + 1;
- }
-
private:
const char* m_data = nullptr;
ByteCount m_length = 0;