24 #ifndef _UTILS_MISC_STRING_SPLIT_H_
25 #define _UTILS_MISC_STRING_SPLIT_H_
40 static inline std::vector<std::string>
41 str_split(
const std::string &s,
char delim =
'/')
43 std::vector<std::string> elems;
44 std::stringstream ss(s);
46 while (std::getline(ss, item, delim)) {
48 elems.push_back(item);
58 static inline std::vector<std::string>
59 str_split(
const std::string &s, std::string delim)
61 std::vector<std::string> elems;
62 std::string::size_type pos = 0;
64 std::string::size_type dpos = s.find(delim, pos);
65 std::string sub = s.substr(pos, dpos);
67 if (dpos != std::string::npos)
68 pos = dpos + delim.length();
71 }
while (pos != std::string::npos);
80 static inline std::list<std::string>
83 std::list<std::string> elems;
84 std::stringstream ss(s);
86 while (std::getline(ss, item, delim)) {
88 elems.push_back(item);
98 static inline std::string
99 str_join(
const std::vector<std::string> &v,
char delim =
'/')
102 for (
size_t i = 0; i < v.size(); ++i) {
115 static inline std::string
116 str_join(
const std::list<std::string> &l,
char delim =
'/')
120 for (std::list<std::string>::const_iterator i = l.begin(); i != l.end(); ++i) {
137 template <
typename InputIterator>
139 str_join(
const InputIterator &first,
const InputIterator &last,
char delim =
'/')
142 bool is_first =
true;
143 for (InputIterator i = first; i != last; ++i) {
158 static inline std::string
159 str_join(
const std::list<std::string> &l, std::string delim)
163 for (std::list<std::string>::const_iterator i = l.begin(); i != l.end(); ++i) {
180 template <
typename InputIterator>
182 str_join(
const InputIterator &first,
const InputIterator &last, std::string delim)
185 bool is_first =
true;
186 for (InputIterator i = first; i != last; ++i) {
201 static inline std::queue<std::string>
204 std::queue<std::string> elems;
205 std::stringstream ss(s);
207 while (std::getline(ss, item, delim)) {