/src/thrift/lib/cpp/src/thrift/TToString.h
Line | Count | Source |
1 | | /* |
2 | | * Licensed to the Apache Software Foundation (ASF) under one |
3 | | * or more contributor license agreements. See the NOTICE file |
4 | | * distributed with this work for additional information |
5 | | * regarding copyright ownership. The ASF licenses this file |
6 | | * to you under the Apache License, Version 2.0 (the |
7 | | * "License"); you may not use this file except in compliance |
8 | | * with the License. You may obtain a copy of the License at |
9 | | * |
10 | | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | | * |
12 | | * Unless required by applicable law or agreed to in writing, |
13 | | * software distributed under the License is distributed on an |
14 | | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
15 | | * KIND, either express or implied. See the License for the |
16 | | * specific language governing permissions and limitations |
17 | | * under the License. |
18 | | */ |
19 | | |
20 | | #ifndef _THRIFT_TOSTRING_H_ |
21 | | #define _THRIFT_TOSTRING_H_ 1 |
22 | | |
23 | | #include <cmath> |
24 | | #include <limits> |
25 | | #include <locale> |
26 | | #include <map> |
27 | | #include <set> |
28 | | #include <sstream> |
29 | | #include <string> |
30 | | #include <vector> |
31 | | |
32 | | namespace apache { |
33 | | namespace thrift { |
34 | | |
35 | | // unnamed namespace to enforce internal linkage - could be done with 'inline' when once have C++17 |
36 | | namespace { |
37 | | const auto default_locale = std::locale("C"); |
38 | | } |
39 | | |
40 | | template <typename T> |
41 | 13 | std::string to_string(const T& t) { |
42 | 13 | std::ostringstream o; |
43 | 13 | o.imbue(default_locale); |
44 | 13 | o << t; |
45 | 13 | return o.str(); |
46 | 13 | } Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<bool>(bool const&) std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<short>(short const&) Line | Count | Source | 41 | 13 | std::string to_string(const T& t) { | 42 | 13 | std::ostringstream o; | 43 | 13 | o.imbue(default_locale); | 44 | 13 | o << t; | 45 | 13 | return o.str(); | 46 | 13 | } |
Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<int>(int const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<long>(long const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::BasicTypes>(fuzz::BasicTypes const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::shared_ptr<fuzz::RecursiveStruct> >(std::__1::shared_ptr<fuzz::RecursiveStruct> const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::Requiredness>(fuzz::Requiredness const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::Containers>(fuzz::Containers const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::TestUnion>(fuzz::TestUnion const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::RecursiveStruct>(fuzz::RecursiveStruct const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::EmptyStruct>(fuzz::EmptyStruct const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::FieldIDTest>(fuzz::FieldIDTest const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<unsigned int>(unsigned int const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<apache::thrift::protocol::TMessageType>(apache::thrift::protocol::TMessageType const&) |
47 | | |
48 | | // special handling of i8 datatypes (THRIFT-5272) |
49 | 0 | inline std::string to_string(const int8_t& t) { |
50 | 0 | std::ostringstream o; |
51 | 0 | o.imbue(default_locale); |
52 | 0 | o << static_cast<int>(t); |
53 | 0 | return o.str(); |
54 | 0 | } |
55 | | |
56 | | // TODO: replace the computations below with std::numeric_limits::max_digits10 once C++11 |
57 | | // is enabled. |
58 | 0 | inline std::string to_string(const float& t) { |
59 | 0 | std::ostringstream o; |
60 | 0 | o.imbue(default_locale); |
61 | 0 | o.precision(static_cast<std::streamsize>(std::ceil(static_cast<double>(std::numeric_limits<float>::digits * std::log10(2.0f) + 1)))); |
62 | 0 | o << t; |
63 | 0 | return o.str(); |
64 | 0 | } |
65 | | |
66 | 0 | inline std::string to_string(const double& t) { |
67 | 0 | std::ostringstream o; |
68 | 0 | o.imbue(default_locale); |
69 | 0 | o.precision(static_cast<std::streamsize>(std::ceil(static_cast<double>(std::numeric_limits<double>::digits * std::log10(2.0f) + 1)))); |
70 | 0 | o << t; |
71 | 0 | return o.str(); |
72 | 0 | } |
73 | | |
74 | 0 | inline std::string to_string(const long double& t) { |
75 | 0 | std::ostringstream o; |
76 | 0 | o.imbue(default_locale); |
77 | 0 | o.precision(static_cast<std::streamsize>(std::ceil(static_cast<double>(std::numeric_limits<long double>::digits * std::log10(2.0f) + 1)))); |
78 | 0 | o << t; |
79 | 0 | return o.str(); |
80 | 0 | } |
81 | | |
82 | | template <typename K, typename V> |
83 | | std::string to_string(const std::map<K, V>& m); |
84 | | |
85 | | template <typename T> |
86 | | std::string to_string(const std::set<T>& s); |
87 | | |
88 | | template <typename T> |
89 | | std::string to_string(const std::vector<T>& t); |
90 | | |
91 | | template <typename K, typename V> |
92 | 0 | std::string to_string(const typename std::pair<K, V>& v) { |
93 | 0 | std::ostringstream o; |
94 | 0 | o << to_string(v.first) << ": " << to_string(v.second); |
95 | 0 | return o.str(); |
96 | 0 | } Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<int const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::pair<int const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::vector<int, std::__1::allocator<int> > >(std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::vector<int, std::__1::allocator<int> > > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::TestEnum::type const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::pair<fuzz::TestEnum::type const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&) |
97 | | |
98 | | template <typename T> |
99 | 0 | std::string to_string(const T& beg, const T& end) { |
100 | 0 | std::ostringstream o; |
101 | 0 | for (T it = beg; it != end; ++it) { |
102 | 0 | if (it != beg) |
103 | 0 | o << ", "; |
104 | 0 | o << to_string(*it); |
105 | 0 | } |
106 | 0 | return o.str(); |
107 | 0 | } Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__wrap_iter<int const*> >(std::__1::__wrap_iter<int const*> const&, std::__1::__wrap_iter<int const*> const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__tree_const_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long> >(std::__1::__tree_const_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long> const&, std::__1::__tree_const_iterator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__tree_node<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void*>*, long> const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> > >(std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> > const&, std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__wrap_iter<fuzz::BasicTypes const*> >(std::__1::__wrap_iter<fuzz::BasicTypes const*> const&, std::__1::__wrap_iter<fuzz::BasicTypes const*> const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >, void*>*, long> > >(std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >, void*>*, long> > const&, std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >, void*>*, long> > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__tree_const_iterator<long, std::__1::__tree_node<long, void*>*, long> >(std::__1::__tree_const_iterator<long, std::__1::__tree_node<long, void*>*, long> const&, std::__1::__tree_const_iterator<long, std::__1::__tree_node<long, void*>*, long> const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__wrap_iter<fuzz::RecursiveStruct const*> >(std::__1::__wrap_iter<fuzz::RecursiveStruct const*> const&, std::__1::__wrap_iter<fuzz::RecursiveStruct const*> const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> > >(std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> > const&, std::__1::__map_const_iterator<std::__1::__tree_const_iterator<std::__1::__value_type<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> > const&) |
108 | | |
109 | | template <typename T> |
110 | 0 | std::string to_string(const std::vector<T>& t) { |
111 | 0 | std::ostringstream o; |
112 | 0 | o << "[" << to_string(t.begin(), t.end()) << "]"; |
113 | 0 | return o.str(); |
114 | 0 | } Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<int>(std::__1::vector<int, std::__1::allocator<int> > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::BasicTypes>(std::__1::vector<fuzz::BasicTypes, std::__1::allocator<fuzz::BasicTypes> > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::RecursiveStruct>(std::__1::vector<fuzz::RecursiveStruct, std::__1::allocator<fuzz::RecursiveStruct> > const&) |
115 | | |
116 | | template <typename K, typename V> |
117 | 0 | std::string to_string(const std::map<K, V>& m) { |
118 | 0 | std::ostringstream o; |
119 | 0 | o << "{" << to_string(m.begin(), m.end()) << "}"; |
120 | 0 | return o.str(); |
121 | 0 | } Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::map<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<int>, std::__1::allocator<std::__1::pair<int const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> > >(std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<int, std::__1::allocator<int> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::vector<int, std::__1::allocator<int> > > > > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::map<fuzz::TestEnum::type, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<fuzz::TestEnum::type>, std::__1::allocator<std::__1::pair<fuzz::TestEnum::type const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > const&) |
122 | | |
123 | | template <typename T> |
124 | 0 | std::string to_string(const std::set<T>& s) { |
125 | 0 | std::ostringstream o; |
126 | 0 | o << "{" << to_string(s.begin(), s.end()) << "}"; |
127 | 0 | return o.str(); |
128 | 0 | } Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) Unexecuted instantiation: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > apache::thrift::to_string<long>(std::__1::set<long, std::__1::less<long>, std::__1::allocator<long> > const&) |
129 | | } |
130 | | } // apache::thrift |
131 | | |
132 | | #endif // _THRIFT_TOSTRING_H_ |