X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Futils.cpp;h=244055b232cb81df6347f9200d315683d372aff3;hp=1feb08659bff1a54d0360ca196287af04919821b;hb=43a991406be78b2905ef1f13f4e7589f6f6c1ba3;hpb=f3afcce30a6213fedba4330a5c0b1edc5b528b70 diff --git a/source/utils.cpp b/source/utils.cpp index 1feb086..244055b 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -10,6 +10,42 @@ Distributed under the LGPL using namespace std; +namespace { + +template +vector do_split(const string &str, const string &sep, int max_split) +{ + vector result; + + unsigned start=0; + while(start=0 && result.size()==static_cast(max_split)) + { + result.push_back(str.substr(start)); + break; + } + else + result.push_back(str.substr(start, end-start)); + } + + if(end>str.size()) + break; + + start=end+(long_sep ? sep.size() : 1); + + if(allow_empty && start==str.size()) + result.push_back(string()); + } + + return result; +} + +} + namespace Msp { /** @@ -55,6 +91,31 @@ string toupper(const string &str) return result; } +vector split_fields(const string &str, const string &sep, int max_split) +{ + return do_split(str, sep, max_split); +} + +vector split_fields(const string &str, char sep, int max_split) +{ + return split_fields(str, string(1, sep), max_split); +} + +vector split_long(const string &str, const string &sep, int max_split) +{ + return do_split(str, sep, max_split); +} + +vector split(const string &str, const string &sep, int max_split) +{ + return do_split(str, sep, max_split); +} + +vector split(const string &str, char sep, int max_split) +{ + return split(str, string(1, sep), max_split); +} + /** Splits a string to parts. @@ -127,8 +188,8 @@ removed. string strip(const string &s) { string result=s; - if(!result.erase(0, result.find_first_not_of(" \t\n")).empty()) - result.erase(result.find_last_not_of(" \t\n")+1); + if(!result.erase(0, result.find_first_not_of(" \t\r\n")).empty()) + result.erase(result.find_last_not_of(" \t\r\n")+1); return result; }