From 05e2fa2406a6ce819ffc493753e4a11daa9358ce Mon Sep 17 00:00:00 2001 From: rexy712 Date: Thu, 6 Aug 2020 15:27:56 -0700 Subject: [PATCH] Add compare() member to string_base --- include/rexy/cx/utility.hpp | 29 ++++++++++------------------- include/rexy/string_base.hpp | 3 +++ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/include/rexy/cx/utility.hpp b/include/rexy/cx/utility.hpp index 4dcaa97..ac366da 100644 --- a/include/rexy/cx/utility.hpp +++ b/include/rexy/cx/utility.hpp @@ -80,30 +80,21 @@ namespace rexy::cx{ { return cmp(l, r) ? l : r; } - constexpr size_t strlen(const char* c)noexcept{ + template + constexpr size_t strlen(const T* c)noexcept{ size_t i = 0; for(;c[i];++i); return i; } - constexpr size_t strlen(const wchar_t* c)noexcept{ - size_t i = 0; - for(;c[i];++i); - return i; - } - constexpr size_t strlen(const char16_t* c)noexcept{ - size_t i = 0; - for(;c[i];++i); - return i; - } - constexpr size_t strlen(const char32_t* c)noexcept{ - size_t i = 0; - for(;c[i];++i); - return i; - } - constexpr int strcmp(const char* l, const char* r)noexcept{ - using uchar = unsigned char; + template + constexpr int strcmp(const T* l, const T* r)noexcept{ for(;*l == *r && *l;++l, ++r); - return (static_cast(*l)) - (static_cast(*r)); + return *l - *r; + } + template + constexpr int strcmp(const T* l, const T* r, Compare cmp)noexcept{ + for(;cmp(*l, *r) && *l;++l, ++r); + return *l - *r; } constexpr void memcpy(void* l, const void* r, size_t n){ char* ld = static_cast(l); diff --git a/include/rexy/string_base.hpp b/include/rexy/string_base.hpp index 0343edd..514de8f 100644 --- a/include/rexy/string_base.hpp +++ b/include/rexy/string_base.hpp @@ -213,6 +213,9 @@ namespace rexy{ //true if m_data is not empty constexpr bool valid(void)const noexcept{return length() > 0;} + constexpr int compare(const string_base& s)const{return cx::strcmp(get(), s.get());} + constexpr int compare(const_pointer s)const{return cx::strcmp(get(), s);} + constexpr reference operator[](size_type i)noexcept{return get_pointer()[i];} constexpr const_reference operator[](size_type i)const noexcept{return get_pointer()[i];}