1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
3 // Copyright (c) 2001 - 2003 Jason 'vanRijn' Kasper <vR at movingparts dot net>
5 // Permission is hereby granted, free of charge, to any person obtaining a
6 // copy of this software and associated documentation files (the "Software"),
7 // to deal in the Software without restriction, including without limitation
8 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 // and/or sell copies of the Software, and to permit persons to whom the
10 // Software is furnished to do so, subject to the following conditions:
12 // The above copyright notice and this permission notice shall be included in
13 // all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 // DEALINGS IN THE SOFTWARE.
38 // trim_right() family.
39 static inline std::string
trim_right ( const std::string
& source
,
40 const std::string
& t
= " " )
42 std::string str
= source
;
43 return str
.erase ( str
.find_last_not_of ( t
) + 1 ) ;
46 // trim_left() family.
47 static inline std::string
trim_left ( const std::string
& source
,
48 const std::string
& t
= " " )
50 std::string str
= source
;
51 return str
.erase ( 0 , source
.find_first_not_of ( t
) ) ;
55 static inline std::string
trim ( const std::string
& source
,
56 const std::string
& t
= " " )
58 std::string str
= source
;
59 return trim_left ( trim_right ( str
, t
) , t
) ;
62 static unsigned int splitString(const std::string
& _input
, const std::string
& _delim
,
63 std::vector
<string
>& results
) {
64 const std::string::size_type sizeS1
= _input
.size(),sizeS2
= _delim
.size();
65 std::string::size_type iPos
= 0, newPos
= iPos
;
68 newPos
= _input
.find(_delim
, iPos
);
73 if (newPos
== std::string::npos
) {
74 results
.push_back(_input
.substr(iPos
, sizeS1
- iPos
));
75 iPos
= sizeS1
; // iPos points to end of string
77 results
.push_back(_input
.substr(iPos
, newPos
- iPos
));
78 iPos
= newPos
+ sizeS2
;
80 } while (iPos
< sizeS1
);
82 return results
.size();