From 8f7504c1c89b00c9aa8eff624cfa39c6a0039924 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 17 Apr 2021 16:35:14 -0500 Subject: [PATCH] [ox/std] Add String::endsWith --- deps/ox/src/ox/std/string.cpp | 14 ++++++++++++++ deps/ox/src/ox/std/string.hpp | 14 ++++++++++++++ deps/ox/src/ox/std/test/tests.cpp | 4 ++++ 3 files changed, 32 insertions(+) diff --git a/deps/ox/src/ox/std/string.cpp b/deps/ox/src/ox/std/string.cpp index bbd566a5..681d126f 100644 --- a/deps/ox/src/ox/std/string.cpp +++ b/deps/ox/src/ox/std/string.cpp @@ -177,6 +177,20 @@ char &String::operator[](std::size_t i) noexcept { return m_buff[i]; } +String String::substr(std::size_t pos) const noexcept { + return m_buff.data() + pos; +} + +bool String::endsWith(const char *ending) const noexcept { + const auto endingLen = ox_strlen(ending); + return len() >= endingLen && ox_strcmp(data() + (len() - endingLen), ending) == 0; +} + +bool String::endsWith(const String &ending) const noexcept { + const auto endingLen = ending.len(); + return len() >= endingLen && ox_strcmp(data() + (len() - endingLen), ending.c_str()) == 0; +} + std::size_t String::len() const noexcept { std::size_t length = 0; for (std::size_t i = 0; i < m_buff.size(); i++) { diff --git a/deps/ox/src/ox/std/string.hpp b/deps/ox/src/ox/std/string.hpp index 8d883f88..d551bcf6 100644 --- a/deps/ox/src/ox/std/string.hpp +++ b/deps/ox/src/ox/std/string.hpp @@ -82,6 +82,20 @@ class String { char &operator[](std::size_t i) noexcept; + [[nodiscard]] + String substr(std::size_t pos) const noexcept; + + [[nodiscard]] + bool endsWith(const char *other) const noexcept; + + [[nodiscard]] + bool endsWith(const String &other) const noexcept; + + [[nodiscard]] + constexpr const char *data() const noexcept { + return m_buff.data(); + } + [[nodiscard]] constexpr char *data() noexcept { return m_buff.data(); diff --git a/deps/ox/src/ox/std/test/tests.cpp b/deps/ox/src/ox/std/test/tests.cpp index 04352902..40af256d 100644 --- a/deps/ox/src/ox/std/test/tests.cpp +++ b/deps/ox/src/ox/std/test/tests.cpp @@ -75,6 +75,10 @@ std::map> tests = { oxAssert(s == "asdf", "String assign broken"); s += "aoeu"; oxAssert(s == "asdfaoeu", "String append broken"); + ox::String ending = "asdf"; + oxAssert(ending.endsWith("df"), "String::endsWith is broken"); + oxAssert(!ending.endsWith("awefawe"), "String::endsWith is broken"); + oxAssert(!ending.endsWith("eu"), "String::endsWith is broken"); return OxError(0); } },