From 3bf42c6ff3805a0d42bbc661794a95ff31bedc26 Mon Sep 17 00:00:00 2001 From: untodesu Date: Sat, 15 Mar 2025 16:22:09 +0500 Subject: Add whatever I was working on for the last month --- core/strtools.cc | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 core/strtools.cc (limited to 'core/strtools.cc') diff --git a/core/strtools.cc b/core/strtools.cc new file mode 100644 index 0000000..ebb8f73 --- /dev/null +++ b/core/strtools.cc @@ -0,0 +1,47 @@ +#include "core/pch.hh" +#include "core/strtools.hh" + +constexpr static const char *WHITESPACE_CHARS = " \t\r\n"; + +bool strtools::is_whitespace(const std::string &string) +{ + if(string.find_first_not_of(WHITESPACE_CHARS) == std::string::npos) + return true; + if((string.size() == 1) && string[0] == 0x00) + return true; + return string.empty(); +} + +std::string strtools::join(const std::vector &strings, const std::string &separator) +{ + std::ostringstream stream; + for(const std::string &str : strings) + stream << str << separator; + return stream.str(); +} + +std::vector strtools::split(const std::string &string, const std::string &separator) +{ + std::size_t pos = 0; + std::size_t prev = 0; + std::vector result; + + while((pos = string.find(separator, prev)) != std::string::npos) { + result.push_back(string.substr(prev, pos - prev)); + prev = pos + separator.length(); + } + + if(prev <= string.length()) + result.push_back(string.substr(prev, string.length() - prev)); + return result; +} + +std::string strtools::trim_whitespace(const std::string &string) +{ + auto su = string.find_first_not_of(WHITESPACE_CHARS); + auto sv = string.find_last_not_of(WHITESPACE_CHARS); + + if(su == std::string::npos) + return std::string(); + return string.substr(su, sv - su + 1); +} -- cgit