#pragma once #include #include #include #include namespace tt::string { /** * Given a filesystem path as input, try and get the parent path. * @param[in] path input path * @param[out] output an output buffer that is allocated to at least the size of "current" * @return true when successful */ bool getPathParent(const std::string& path, std::string& output); /** * Given a filesystem path as input, get the last segment of a path * @param[in] path input path */ std::string getLastPathSegment(const std::string& path); /** * Splits the provided input into separate pieces with delimiter as separator text. * When the input string is empty, the output list will be empty too. * * @param input the input to split up * @param delimiter a non-empty string to recognize as separator */ std::vector split(const std::string& input, const std::string& delimiter); /** * Join a set of tokens into a single string, given a delimiter (separator). * If the input is an empty list, the result will be an empty string. * The delimeter is only placed inbetween tokens and not appended at the end of the resulting string. * * @param input the tokens to join together * @param delimiter the separator to join with */ std::string join(const std::vector& input, const std::string& delimiter); /** * Returns the lowercase value of a string. * @param[in] the string with lower and/or uppercase characters * @return a string with only lowercase characters */ template std::basic_string lowercase(const std::basic_string& input) { std::basic_string output = input; std::transform( output.begin(), output.end(), output.begin(), [](const T character) { return static_cast(std::tolower(character)); } ); return std::move(output); } /** * @return the first part of a file name right up (and excluding) the first period character. */ std::string removeFileExtension(const std::string& input); } // namespace