annotate misc/join.hpp @ 570:dcef88285f8c

Misc: add join function
author David Demelier <markand@malikania.fr>
date Wed, 29 Jun 2016 19:12:10 +0200
parents
children c79a501782b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
570
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * join.hpp -- join lists into a string
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 /**
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 * Join values by a separator and return a string.
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 *
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 * \param first the first iterator
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \param last the last iterator
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \param delim the optional delimiter
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 * \return the string
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 */
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 template <typename InputIt, typename DelimType = char>
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 std::string join(InputIt first, InputIt last, DelimType delim = ':')
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 {
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 std::ostringstream oss;
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 if (first != last) {
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 oss << *first;
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 while (++first != last)
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 oss << delim << *first;
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 }
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 return oss.str();
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 }
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 /**
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 * Convenient overload.
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 *
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 * \param list the initializer list
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 * \param delim the delimiter
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 * \return the string
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 */
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 template <typename T, typename DelimType = char>
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 inline std::string join(std::initializer_list<T> list, DelimType delim = ':')
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 {
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 return join(list.begin(), list.end(), delim);
dcef88285f8c Misc: add join function
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 }