X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Futils.cpp;h=244055b232cb81df6347f9200d315683d372aff3;hb=43a991406be78b2905ef1f13f4e7589f6f6c1ba3;hp=0ed3fc11ef1e13c5a38fe180daf5306261b3bc46;hpb=dbda1bb7f44f289c9f1c5ba9741970ac264d8e5d;p=libs%2Fcore.git diff --git a/source/utils.cpp b/source/utils.cpp index 0ed3fc1..244055b 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -1,8 +1,51 @@ +/* $Id$ + +This file is part of libmspstrings +Copyright © 2006-2007 Mikko Rasa +Distributed under the LGPL +*/ + #include #include "utils.h" 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 { /** @@ -48,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. @@ -120,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; }