diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-17 12:04:09 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-17 12:04:09 +0300 |
commit | 2c8e314f8fff8633fe2cf026badfbf6180845ae0 (patch) | |
tree | c3b650d13934ec1315e3660d60fd2275f09b03a7 /library/cpp/case_insensitive_string/case_insensitive_char_traits.h | |
parent | a49ae9d891c35087b242c854f69880fd9fecbddd (diff) | |
download | ydb-2c8e314f8fff8633fe2cf026badfbf6180845ae0.tar.gz |
intermediate changes
ref:d5f945ecdc1f5af1ad57e12787c6b8ed1a9f0f12
Diffstat (limited to 'library/cpp/case_insensitive_string/case_insensitive_char_traits.h')
-rw-r--r-- | library/cpp/case_insensitive_string/case_insensitive_char_traits.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/library/cpp/case_insensitive_string/case_insensitive_char_traits.h b/library/cpp/case_insensitive_string/case_insensitive_char_traits.h new file mode 100644 index 0000000000..2717893c10 --- /dev/null +++ b/library/cpp/case_insensitive_string/case_insensitive_char_traits.h @@ -0,0 +1,30 @@ +#pragma once + +#include <contrib/libs/libc_compat/string.h> + +#include <string> + +struct TCaseInsensitiveCharTraits : private std::char_traits<char> { + static bool eq(char c1, char c2) { + return to_upper(c1) == to_upper(c2); + } + + static bool lt(char c1, char c2) { + return to_upper(c1) < to_upper(c2); + } + + static int compare(const char* s1, const char* s2, std::size_t n); + + static const char* find(const char* s, std::size_t n, char a); + + using std::char_traits<char>::assign; + using std::char_traits<char>::char_type; + using std::char_traits<char>::copy; + using std::char_traits<char>::length; + using std::char_traits<char>::move; + +private: + static char to_upper(char ch) { + return std::toupper((unsigned char)ch); + } +}; |