From 6e8230e1fb3e66505f8bb5f5629b770d321040b3 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sun, 16 Mar 2014 15:01:43 -0700 Subject: [PATCH] Add ci_char_traits --- Builds/VisualStudio2013/beast.vcxproj | 1 + Builds/VisualStudio2013/beast.vcxproj.filters | 3 + beast/utility/ci_char_traits.h | 86 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 beast/utility/ci_char_traits.h diff --git a/Builds/VisualStudio2013/beast.vcxproj b/Builds/VisualStudio2013/beast.vcxproj index 11786b4c9..5879276db 100644 --- a/Builds/VisualStudio2013/beast.vcxproj +++ b/Builds/VisualStudio2013/beast.vcxproj @@ -241,6 +241,7 @@ + diff --git a/Builds/VisualStudio2013/beast.vcxproj.filters b/Builds/VisualStudio2013/beast.vcxproj.filters index d58e51fc0..5d38dd3c2 100644 --- a/Builds/VisualStudio2013/beast.vcxproj.filters +++ b/Builds/VisualStudio2013/beast.vcxproj.filters @@ -1207,6 +1207,9 @@ beast\utility + + beast\utility + diff --git a/beast/utility/ci_char_traits.h b/beast/utility/ci_char_traits.h new file mode 100644 index 000000000..d319fe059 --- /dev/null +++ b/beast/utility/ci_char_traits.h @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +/* + This file is part of Beast: https://github.com/vinniefalco/Beast + Copyright 2013, Vinnie Falco + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +//============================================================================== + +#ifndef BEAST_UTILITY_CI_CHAR_TRAITS_H_INCLUDED +#define BEAST_UTILITY_CI_CHAR_TRAITS_H_INCLUDED + +#include +#include + +namespace beast { + +struct ci_char_traits : std::char_traits +{ + static + bool + eq (char c1, char c2) + { + return ::toupper(c1) == + ::toupper(c2); + } + + static + bool + ne (char c1, char c2) + { + return ::toupper(c1) != + ::toupper(c2); + } + + static + bool + lt (char c1, char c2) + { + return ::toupper(c1) < + ::toupper(c2); + } + + static + int + compare (char const* s1, char const* s2, std::size_t n) + { + while (n-- > 0) + { + auto const comp ( + int(::toupper(*s1++)) - + int(::toupper(*s2++))); + if (comp != 0) + return comp; + } + return 0; + } + + static + char const* + find (char const* s, int n, char a) + { + auto const ua (::toupper(a)); + for (;n--;) + { + if (::toupper(*s) == ua) + return s; + s++; + } + return nullptr; + } +}; + +} + +#endif