aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/case_insensitive_string/case_insensitive_char_traits.cpp
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.cpp
parenta49ae9d891c35087b242c854f69880fd9fecbddd (diff)
downloadydb-2c8e314f8fff8633fe2cf026badfbf6180845ae0.tar.gz
intermediate changes
ref:d5f945ecdc1f5af1ad57e12787c6b8ed1a9f0f12
Diffstat (limited to 'library/cpp/case_insensitive_string/case_insensitive_char_traits.cpp')
-rw-r--r--library/cpp/case_insensitive_string/case_insensitive_char_traits.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/library/cpp/case_insensitive_string/case_insensitive_char_traits.cpp b/library/cpp/case_insensitive_string/case_insensitive_char_traits.cpp
new file mode 100644
index 0000000000..14e6d1d51f
--- /dev/null
+++ b/library/cpp/case_insensitive_string/case_insensitive_char_traits.cpp
@@ -0,0 +1,34 @@
+#include "case_insensitive_char_traits.h"
+#include "case_insensitive_string.h"
+
+#include <util/string/escape.h>
+
+int TCaseInsensitiveCharTraits::compare(const char* s1, const char* s2, std::size_t n) {
+ while (n-- != 0) {
+ if (to_upper(*s1) < to_upper(*s2)) {
+ return -1;
+ }
+ if (to_upper(*s1) > to_upper(*s2)) {
+ return 1;
+ }
+ ++s1;
+ ++s2;
+ }
+ return 0;
+}
+
+const char* TCaseInsensitiveCharTraits::find(const char* s, std::size_t n, char a) {
+ auto const ua(to_upper(a));
+ while (n-- != 0) {
+ if (to_upper(*s) == ua)
+ return s;
+ s++;
+ }
+ return nullptr;
+}
+
+TCaseInsensitiveString EscapeC(const TCaseInsensitiveString& str) {
+ const auto result = EscapeC(str.data(), str.size());
+ return {result.data(), result.size()};
+}
+