// 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 #include #include 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 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 SplitAtFirst(const std::string& str, const std::string& delimiter, bool trim_whitespaces); // Joins strings into a single string separated by |delimiter|. template 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 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_