| #ifndef C10_UTIL_STRINGUTIL_H_ |
| #define C10_UTIL_STRINGUTIL_H_ |
| |
| #include <c10/macros/Macros.h> |
| #include <c10/util/string_utils.h> |
| |
| #include <cstddef> |
| #include <ostream> |
| #include <sstream> |
| #include <string> |
| #include <vector> |
| |
| namespace c10 { |
| |
| namespace detail { |
| |
| // Obtains the base name from a full path. |
| C10_API std::string StripBasename(const std::string& full_path); |
| |
| inline std::ostream& _str(std::ostream& ss) { |
| return ss; |
| } |
| |
| template <typename T> |
| inline std::ostream& _str(std::ostream& ss, const T& t) { |
| ss << t; |
| return ss; |
| } |
| |
| template <typename T, typename... Args> |
| inline std::ostream& _str(std::ostream& ss, const T& t, const Args&... args) { |
| return _str(_str(ss, t), args...); |
| } |
| |
| } // namespace detail |
| |
| // Convert a list of string-like arguments into a single string. |
| template <typename... Args> |
| inline std::string str(const Args&... args) { |
| std::ostringstream ss; |
| detail::_str(ss, args...); |
| return ss.str(); |
| } |
| |
| // Specializations for already-a-string types. |
| template <> |
| inline std::string str(const std::string& str) { |
| return str; |
| } |
| inline std::string str(const char* c_str) { |
| return c_str; |
| } |
| |
| template <class Container> |
| inline std::string Join(const std::string& delimiter, const Container& v) { |
| std::stringstream s; |
| int cnt = static_cast<int64_t>(v.size()) - 1; |
| for (auto i = v.begin(); i != v.end(); ++i, --cnt) { |
| s << (*i) << (cnt ? delimiter : ""); |
| } |
| return s.str(); |
| } |
| |
| // Replace all occurrences of "from" substring to "to" string. |
| // Returns number of replacements |
| size_t C10_API ReplaceAll(std::string& s, const char* from, const char* to); |
| |
| /// Represents a location in source code (for debugging). |
| struct C10_API SourceLocation { |
| const char* function; |
| const char* file; |
| uint32_t line; |
| }; |
| |
| std::ostream& operator<<(std::ostream& out, const SourceLocation& loc); |
| |
| } // namespace c10 |
| |
| #endif // C10_UTIL_STRINGUTIL_H_ |