Add compare() member to string_base

This commit is contained in:
rexy712 2020-08-06 15:27:56 -07:00
parent 8703d0089f
commit 05e2fa2406
2 changed files with 13 additions and 19 deletions

View File

@ -80,30 +80,21 @@ namespace rexy::cx{
{ {
return cmp(l, r) ? l : r; return cmp(l, r) ? l : r;
} }
constexpr size_t strlen(const char* c)noexcept{ template<class T>
constexpr size_t strlen(const T* c)noexcept{
size_t i = 0; size_t i = 0;
for(;c[i];++i); for(;c[i];++i);
return i; return i;
} }
constexpr size_t strlen(const wchar_t* c)noexcept{ template<class T>
size_t i = 0; constexpr int strcmp(const T* l, const T* r)noexcept{
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;
for(;*l == *r && *l;++l, ++r); for(;*l == *r && *l;++l, ++r);
return (static_cast<uchar>(*l)) - (static_cast<uchar>(*r)); return *l - *r;
}
template<class T, class Compare>
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){ constexpr void memcpy(void* l, const void* r, size_t n){
char* ld = static_cast<char*>(l); char* ld = static_cast<char*>(l);

View File

@ -213,6 +213,9 @@ namespace rexy{
//true if m_data is not empty //true if m_data is not empty
constexpr bool valid(void)const noexcept{return length() > 0;} 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 reference operator[](size_type i)noexcept{return get_pointer()[i];}
constexpr const_reference operator[](size_type i)const noexcept{return get_pointer()[i];} constexpr const_reference operator[](size_type i)const noexcept{return get_pointer()[i];}