blob: e29675b4730064969943d3633bbe03032c2f21c4 [file] [log] [blame]
// Copyright 2014 The Chromium OS 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 BUFFET_STRING_UTILS_H_
#define BUFFET_STRING_UTILS_H_
#include <string>
#include <utility>
#include <vector>
namespace buffet {
namespace string_utils {
// Treats the string as a delimited list of substrings and returns the array
// of original elements of the list.
// By default, empty elements from the original string are omitted and
// each element has all whitespaces trimmed off.
std::vector<std::string> Split(const std::string& str,
char delimiter,
bool trim_whitespaces = true,
bool purge_empty_strings = true);
// Splits the string into two pieces at the first position of the specified
// delimiter. By default, each part has all whitespaces trimmed off.
std::pair<std::string, std::string> SplitAtFirst(const std::string& str,
char delimiter,
bool trim_whitespaces = true);
// Joins an array of strings into a single string separated by |delimiter|.
std::string Join(char delimiter, const std::vector<std::string>& strings);
std::string Join(const std::string& delimiter,
const std::vector<std::string>& strings);
std::string Join(char delimiter,
const std::string& str1, const std::string& str2);
std::string Join(const std::string& delimiter,
const std::string& str1, const std::string& str2);
// string_utils::ToString() is a helper function to convert any scalar type
// to a string. In most cases, it redirects the call to std::to_string with
// two exceptions: for std::string itself and for double and bool.
template<typename T>
inline std::string ToString(T value) { return std::to_string(value); }
// Having the following overload is handy for templates where the type
// of template parameter isn't known and could be a string itself.
inline std::string ToString(std::string value) { return value; }
// We overload this for double because std::to_string(double) uses %f to
// format the value and I would like to use a shorter %g format instead.
std::string ToString(double value);
// And the bool to be converted as true/false instead of 1/0.
std::string ToString(bool value);
} // namespace string_utils
} // namespace buffet
#endif // BUFFET_STRING_UTILS_H_