From 6d53ff9c7619c6a6c5e87b9c2bd48d011bbf2c80 Mon Sep 17 00:00:00 2001 From: Metehan Tuncbilek Date: Wed, 16 Oct 2024 14:02:10 +0300 Subject: [PATCH] couple new features for string wrapper --- openVulkanoCpp/Data/Containers/String.hpp | 53 ++++++++++++++++++++++- tests/StringTest.cpp | 43 ++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/openVulkanoCpp/Data/Containers/String.hpp b/openVulkanoCpp/Data/Containers/String.hpp index 1440915..1f73185 100644 --- a/openVulkanoCpp/Data/Containers/String.hpp +++ b/openVulkanoCpp/Data/Containers/String.hpp @@ -7,6 +7,11 @@ #pragma once #include +#include +#include +#include +#include +#include namespace OpenVulkano { @@ -43,7 +48,9 @@ namespace OpenVulkano template bool operator!=(const T& other) const { return m_string != other; } operator std::string() const { return m_string; } - const char* CStr() const { return m_string.c_str(); } + explicit operator std::string_view() const { return m_string; } + + const char* CharString() const { return m_string.c_str(); } const char* Data() { return m_string.data(); } size_t Length() const { return m_string.length(); } size_t Size() const { return m_string.size(); } @@ -52,6 +59,8 @@ namespace OpenVulkano char& Back() { return m_string.back(); } void PopBack() { m_string.pop_back(); } void Clear() { m_string.clear(); } + void Shrink() { m_string.shrink_to_fit(); } + String Substring(size_t start, size_t end) const { return m_string.substr(start, end); } size_t FindStartIndexOf(const String& str) const { return m_string.find(str); } @@ -63,6 +72,48 @@ namespace OpenVulkano return *this; } + void ToUpper() noexcept + { + for (char& c: m_string) + { + if (c >= 'a' && c <= 'z') + { + c -= 32; + } + } + } + + void ToLower() noexcept + { + for (char& c: m_string) + { + if (c >= 'A' && c <= 'Z') + { + c += 32; + } + } + } + + // Makes "i am a string" to "I Am A String" also need a better name for the function + void ToUpperStarters() + { + for (size_t i = 0; i < m_string.size(); ++i) + { + if (m_string[i] == ' ') + { + m_string[i + 1] -= 32; + } + } + } + + template>> T FromString() const + { + T value; + c4::csubstr str = c4::to_csubstr(m_string.c_str()); + c4::from_chars(str, &value); + return value; + } + private: std::string m_string; }; diff --git a/tests/StringTest.cpp b/tests/StringTest.cpp index 717ff4c..44a2d57 100644 --- a/tests/StringTest.cpp +++ b/tests/StringTest.cpp @@ -86,4 +86,47 @@ TEST_CASE("String") REQUIRE(str2 == "World"); REQUIRE(str2 != "Hello"); } + + SECTION("Trim") + { + String str1(" Hello World "); + REQUIRE(str1.Trim() == "Hello World"); + } + + SECTION("FindIndex") + { + String str1("Georg will save us all from our doom"); + REQUIRE(str1.FindStartIndexOf("save") == 11); + } + + SECTION("Upper/Lower") + { + String str1("Hello World"); + str1.ToUpper(); + REQUIRE(str1 == "HELLO WORLD"); + + String str2("Hello World"); + str2.ToLower(); + REQUIRE(str2 == "hello world"); + + String str3("Georg will save us all from our doom"); + str3.ToUpperStarters(); + REQUIRE(str3 == "Georg Will Save Us All From Our Doom"); + } + + SECTION("Substring") + { + String str1("Hello World"); + REQUIRE(str1.Substring(0, 5) == "Hello"); + REQUIRE(str1.Substring(6, 11) == "World"); + } + + SECTION("FromString") + { + String str1("42"); + REQUIRE(str1.FromString() == 42); + + String str2("42.42"); + REQUIRE(str2.FromString() == 42.42f); + } } \ No newline at end of file