From 91d7f8da33f62e2886e369f790a2d103d5392156 Mon Sep 17 00:00:00 2001 From: Leonetienne Date: Sat, 12 Feb 2022 18:19:05 +0100 Subject: Added CharTools functionality --- Src/CharTools.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Src/CharTools.cpp (limited to 'Src/CharTools.cpp') diff --git a/Src/CharTools.cpp b/Src/CharTools.cpp new file mode 100644 index 0000000..79cc679 --- /dev/null +++ b/Src/CharTools.cpp @@ -0,0 +1,64 @@ +#include "CharTools.h" +#include + +bool CharTools::IsVowel(const char c, const std::string &vowels) { + return std::any_of( + vowels.cbegin(), + vowels.cend(), + [c](const char vowel) { + return c == vowel; + } + ); +} + +bool CharTools::IsLetter(const char c) { + // Re-implementing IsUpper and MakeLower to prevent stack-overflow by endless recursion + const char lowercase_c = !(c & (1<<5)) ? (c | (1<<5)) : c; + + return (lowercase_c >= 'a') && (lowercase_c <= 'z'); +} + +bool CharTools::IsGeneric(const char c) { + return (c == UPPERCASE) || (c == LOWERCASE); +} + +bool CharTools::IsUpper(const char c) { + if ((!IsLetter(c)) && (!IsGeneric(c))) + return false; + else + return !(c & (1<<5)); +} + +char CharTools::MakeUpper(char c) { + if ((!IsLetter(c)) && (!IsGeneric(c))) + return c; + else if (IsUpper(c)) + return c; + else + return c & ~(1<<5); +} + +char CharTools::MakeLower(char c) { + if ((!IsLetter(c)) && (!IsGeneric(c))) + return c; + else if (!IsUpper(c)) + return c; + else + return c | (1<<5); +} + +char CharTools::GetSign(char c) { + if (IsUpper(c)) + return UPPERCASE; + else + return LOWERCASE; +} + +char CharTools::CopySign(char sign, char c) { + if ((!IsLetter(c)) && (!IsGeneric(c))) + return c; + if (IsUpper(sign)) + return MakeUpper(c); + else + return MakeLower(c); +} -- cgit v1.2.3