| // Copyright 2015 The Weave Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LIBWEAVE_SRC_STRING_UTILS_H_ | |
| #define LIBWEAVE_SRC_STRING_UTILS_H_ | |
| #include <string> | |
| #include <utility> | |
| #include <vector> | |
| namespace weave { | |
| // Treats the string as a delimited list of substrings and returns the array | |
| // of original elements of the list. | |
| // |trim_whitespaces| causes each element to have all whitespaces trimmed off. | |
| // |purge_empty_strings| specifies whether empty elements from the original | |
| // string should be omitted. | |
| std::vector<std::string> Split(const std::string& str, | |
| const std::string& delimiter, | |
| bool trim_whitespaces, | |
| bool purge_empty_strings); | |
| // Splits the string into two pieces at the first position of the specified | |
| // delimiter. | |
| std::pair<std::string, std::string> SplitAtFirst(const std::string& str, | |
| const std::string& delimiter, | |
| bool trim_whitespaces); | |
| // Joins strings into a single string separated by |delimiter|. | |
| template <class InputIterator> | |
| std::string JoinRange(const std::string& delimiter, | |
| InputIterator first, | |
| InputIterator last) { | |
| std::string result; | |
| if (first == last) | |
| return result; | |
| result = *first; | |
| for (++first; first != last; ++first) { | |
| result += delimiter; | |
| result += *first; | |
| } | |
| return result; | |
| } | |
| template <class Container> | |
| std::string Join(const std::string& delimiter, const Container& strings) { | |
| using std::begin; | |
| using std::end; | |
| return JoinRange(delimiter, begin(strings), end(strings)); | |
| } | |
| inline std::string Join(const std::string& delimiter, | |
| const std::string& str1, | |
| const std::string& str2) { | |
| return str1 + delimiter + str2; | |
| } | |
| } // namespace weave | |
| #endif // LIBWEAVE_SRC_STRING_UTILS_H_ |