X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Futils.h;h=6e145916f5cd1bbe0685525c5d3646668670a703;hp=39b330bc9eaed20915de6cc70f8d2fdd52bc0fc5;hb=5b1368cb791cab043f0435628cacbaff36e39b7b;hpb=9da6abdcabec59f4845da256a8ad75a810ed1589 diff --git a/source/utils.h b/source/utils.h index 39b330b..6e14591 100644 --- a/source/utils.h +++ b/source/utils.h @@ -1,7 +1,7 @@ /* $Id$ This file is part of libmspstrings -Copyright © 2006-2007 Mikko Rasa +Copyright © 2006-2008 Mikko Rasa Distributed under the LGPL */ @@ -13,15 +13,81 @@ Distributed under the LGPL namespace Msp { -int strcasecmp(const std::string &, const std::string &); +/** Compares two strings, ignoring upper/lower case. Returns an integer less +than, equal to or greater than zero depending on whether the first string +lexicographically precedes, is equal to or follows the second one, +respectively. */ +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. Default +is to split at whitespace. Two or more consecutive separator characters will +be treated as a single separator. + +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. */ +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. */ +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. +Optionally, any characters with the high bit set can be escaped as well. */ +std::string c_escape(const std::string &str, bool escape_8bit = true); + } // namespace Msp #endif