From 001edb9a7a78bc6430251cf0d6371e48db248577 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Mon, 16 Nov 2020 17:44:08 -0600 Subject: [PATCH] feat(string): add SStrStr --- storm/String.cpp | 21 +++++++++++++++++++++ storm/String.hpp | 2 ++ test/String.cpp | 23 +++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/storm/String.cpp b/storm/String.cpp index f99c39e..459ac52 100644 --- a/storm/String.cpp +++ b/storm/String.cpp @@ -219,3 +219,24 @@ size_t SStrLen(const char* string) { ; return c - string; } + +const char* SStrStr(const char* string, const char* search) { + STORM_ASSERT(string); + STORM_ASSERT(search); + + const char* i; + for (i = search; *i; ++i); + size_t length = i - search; + + const char* substring = string; + + if (!*substring) { + return nullptr; + } + + while (*substring && SStrCmp(substring, search, length)) { + substring++; + } + + return substring; +} diff --git a/storm/String.hpp b/storm/String.hpp index aa9b1cc..fa4fb25 100644 --- a/storm/String.hpp +++ b/storm/String.hpp @@ -19,4 +19,6 @@ uint32_t SStrHashHT(const char* string); size_t SStrLen(const char* string); +const char* SStrStr(const char* string, const char* search); + #endif diff --git a/test/String.cpp b/test/String.cpp index 70ce93c..dd823b1 100644 --- a/test/String.cpp +++ b/test/String.cpp @@ -75,3 +75,26 @@ TEST_CASE("SStrLen", "[string]") { REQUIRE(length == 3); } } + +TEST_CASE("SStrStr", "[string]") { + SECTION("finds substring when it exists at end of string") { + auto string = "foobar"; + auto search = "bar"; + auto substring = SStrStr(string, search); + REQUIRE(!SStrCmp(search, substring, SStrLen(search))); + } + + SECTION("finds substring when it exists at start of string") { + auto string = "foobar"; + auto search = "foo"; + auto substring = SStrStr(string, search); + REQUIRE(!SStrCmp(search, substring, SStrLen(search))); + } + + SECTION("returns nullptr when given empty string") { + auto string = ""; + auto search = "bar"; + auto substring = SStrStr(string, search); + REQUIRE(substring == nullptr); + } +}