summaryrefslogtreecommitdiff
path: root/src/string.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-02-10 23:09:30 +0000
committerMaxime Coste <frrrwww@gmail.com>2015-02-10 23:09:30 +0000
commit790e671f6cd34fc955dfc458b0a26a20a3fd8089 (patch)
tree2674a97bfc583fc39a4b19e8ed8da928bd8d27ce /src/string.hh
parent8714c414033cee64c6993305b0862ae9f3e88d31 (diff)
Replace some <cstring> function usage with c++ algorithms
Diffstat (limited to 'src/string.hh')
-rw-r--r--src/string.hh11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/string.hh b/src/string.hh
index 62cbe5cc..7166c8b3 100644
--- a/src/string.hh
+++ b/src/string.hh
@@ -8,7 +8,6 @@
#include <string>
#include <climits>
-#include <cstring>
namespace Kakoune
{
@@ -18,6 +17,11 @@ class StringView;
using StringBase = std::basic_string<char, std::char_traits<char>,
Allocator<char, MemoryDomain::String>>;
+constexpr ByteCount strlen(const char* s)
+{
+ return *s == 0 ? 0 : strlen(s+1) + 1;
+}
+
class String : public StringBase
{
public:
@@ -65,7 +69,7 @@ public:
constexpr StringView() : m_data{nullptr}, m_length{0} {}
constexpr StringView(const char* data, ByteCount length)
: m_data{data}, m_length{length} {}
- StringView(const char* data) : m_data{data}, m_length{(int)strlen(data)} {}
+ constexpr StringView(const char* data) : m_data{data}, m_length{strlen(data)} {}
constexpr StringView(const char* begin, const char* end) : m_data{begin}, m_length{(int)(end - begin)} {}
template<typename Char, typename Traits, typename Alloc>
StringView(const std::basic_string<Char, Traits, Alloc>& str) : m_data{str.data()}, m_length{(int)str.length()} {}
@@ -136,7 +140,8 @@ private:
inline bool operator==(StringView lhs, StringView rhs)
{
- return lhs.m_length == rhs.m_length and memcmp(lhs.m_data, rhs.m_data, (int)lhs.m_length) == 0;
+ return lhs.m_length == rhs.m_length and
+ std::equal(lhs.begin(), lhs.end(), rhs.begin());
}
inline bool operator!=(StringView lhs, StringView rhs)