aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/case_insensitive_string/case_insensitive_char_traits.h
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-17 12:04:09 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-17 12:04:09 +0300
commit2c8e314f8fff8633fe2cf026badfbf6180845ae0 (patch)
treec3b650d13934ec1315e3660d60fd2275f09b03a7 /library/cpp/case_insensitive_string/case_insensitive_char_traits.h
parenta49ae9d891c35087b242c854f69880fd9fecbddd (diff)
downloadydb-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.h30
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);
+ }
+};