// 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_
