X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Futils.h;h=44c2edb86c19abcaa003498e7385f31a911b3822;hp=1823f667c7914e863b7c08426fa572ec884bee2d;hb=9573cffd8df40a81cd7c338d63d07e4965eb3854;hpb=4ec2cf9b91a9918f02990c40145bb39a87b0e2bb diff --git a/source/utils.h b/source/utils.h index 1823f66..44c2edb 100644 --- a/source/utils.h +++ b/source/utils.h @@ -1,3 +1,10 @@ +/* $Id$ + +This file is part of libmspstrings +Copyright © 2006-2008 Mikko Rasa +Distributed under the LGPL +*/ + #ifndef MSP_STRINGS_UTILS_H_ #define MSP_STRINGS_UTILS_H_ @@ -6,15 +13,124 @@ namespace Msp { -int strcasecmp(const std::string &, const std::string &); +/** +Compares two strings, ignoring upper/lower case. + +@param s1 First string +@param s2 Second string + +@return -1 if s1s2 +*/ +int strcasecmp(const std::string &s1, const std::string &s2); + +/** +Converts a string to lower case. +*/ std::string tolower(const std::string &); + +/** +Converts a string to upper case. +*/ std::string toupper(const std::string &); -std::vector split(const std::string &, const std::string & =" \t\r\n", bool =false); -std::vector split(const std::string &, char, bool =false); -template -std::string join(const T &, const std::string & =" "); + +/** +Checks whether a string consists of digits only. +*/ +bool isnumrc(const std::string &); + +/** +Checks whether a string consists of alphabetic characters only. +*/ +bool isalpha(const std::string &); + +/** +Checks whether a string consists of alphanumeric characters only. +*/ +bool isalnum(const std::string &); + +/* These are required to make the standard version work from inside the Msp +namespace */ +using std::tolower; +using std::toupper; +using std::isalpha; +using std::isalnum; + +/** +Splits a string at occurrences of any of the characters in sep. If max_split +is non-negative, at most that many split will be performed, i.e. the resulting +vector will contain at most max_split+1 elements. Two or more consecutive +separator characters will be treated as a single separator. + +@param str A string +@param sep Separator characters +@param max_split Maximum number of splits to perform +*/ +std::vector split(const std::string &str, const std::string &sep=" \t\r\n", int max_split=-1); + +/** +Splits a string on occurrences of a single character. +*/ +std::vector split(const std::string &str, char sep, int max_split=-1); + +/** +Splits a string on occurrences of another string. +*/ +std::vector split_long(const std::string &str, const std::string &sep, int max_split=-1); + +/** +Splits a string on occurrences of another string. Two consecutive separators +will cause an empty string to be placed in the result. +*/ +std::vector split_fields(const std::string &str, const std::string &sep, int max_split=-1); + +/** +Splits a string on occurrences of a single character. Two consecutive +separators will cause an empty string to be placed in the result. +*/ +std::vector split_fields(const std::string &str, char sep, int max_split=-1); + +/** +Concatenates strings from an iterator range. + +@param begin First iterator +@param end Last iterator +@param sep Separator to be inserted between strings +*/ +template +std::string join(Iter begin, Iter end, const std::string &sep=" ") +{ + std::string result; + for(Iter i=begin; i!=end; ++i) + { + if(i!=begin) + result+=sep; + result+=*i; + } + + return result; +} + +/** +Strips leading and trailing whitespace from a string. +*/ std::string strip(const std::string &); +/** +Unescapes a string with C escape sequences. +*/ +std::string c_unescape(const std::string &str); + +/** +Escapes any non-printable characters in a string with C escape sequences. + +@param str A string +@param escape_8bit If true, consider characters with high bit set as + non-printable + +@return An escaped version of the string +*/ +std::string c_escape(const std::string &str, bool escape_8bit=true); + } // namespace Msp #endif