1/*
2 * SPDX-License-Identifier: Apache-2.0
3 */
4
5#pragma once
6
7#include <sstream>
8#include <string>
9
10namespace ONNX_NAMESPACE {
11
12#if defined(__ANDROID__)
13template <typename T>
14std::string to_string(T value) {
15 std::ostringstream os;
16 os << value;
17 return os.str();
18}
19
20inline int stoi(const std::string& str) {
21 std::stringstream ss;
22 int n = 0;
23 ss << str;
24 ss >> n;
25 return n;
26}
27
28#else
29using std::stoi;
30using std::to_string;
31#endif // defined(__ANDROID__)
32
33inline void MakeStringInternal(std::stringstream& /*ss*/) {}
34
35template <typename T>
36inline void MakeStringInternal(std::stringstream& ss, const T& t) {
37 ss << t;
38}
39
40template <typename T, typename... Args>
41inline void MakeStringInternal(std::stringstream& ss, const T& t, const Args&... args) {
42 MakeStringInternal(ss, t);
43 MakeStringInternal(ss, args...);
44}
45
46template <typename... Args>
47std::string MakeString(const Args&... args) {
48 std::stringstream ss;
49 MakeStringInternal(ss, args...);
50 return std::string(ss.str());
51}
52
53// Specializations for already-a-string types.
54template <>
55inline std::string MakeString(const std::string& str) {
56 return str;
57}
58inline std::string MakeString(const char* c_str) {
59 return std::string(c_str);
60}
61} // namespace ONNX_NAMESPACE
62