Coverage Report

Created: 2026-06-09 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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_