Add compare() member to string_base
This commit is contained in:
parent
8703d0089f
commit
05e2fa2406
@ -80,30 +80,21 @@ namespace rexy::cx{
|
||||
{
|
||||
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;
|
||||
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<class T>
|
||||
constexpr int strcmp(const T* l, const T* r)noexcept{
|
||||
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){
|
||||
char* ld = static_cast<char*>(l);
|
||||
|
||||
@ -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];}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user