aboutsummaryrefslogtreecommitdiff
path: root/stats
diff options
context:
space:
mode:
authorMirko Bonadei <mbonadei@webrtc.org>2019-11-04 16:31:08 +0100
committerCommit Bot <commit-bot@chromium.org>2019-11-04 16:24:37 +0000
commit054f18513e9d0d64d53b972a1a00abc5ebc39b2d (patch)
tree3b113992cba1869076081a4dc84c8764411bdf50 /stats
parentbb56d4b0e20db884b8393d34e55bb3ca257b6970 (diff)
downloadwebrtc-054f18513e9d0d64d53b972a1a00abc5ebc39b2d.tar.gz
Use template instantiation declaration/definition for RTCStatsMember<T>.
This CL works around an "Explicit specialization after instantiation error" when building with clang-cl and is_component_build=true (see crbug.com/1018579). On top of that it uses "template instantiation declarations/declarations" in order to avoid to instantiate the template in clients code. TBR: hbos@webrtc.org Bug: webrtc:9419, chromium:1018579 Change-Id: I1b2862de678586afc81e8f7a407947322f8a06c4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158795 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Yves Gerey <yvesg@google.com> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29683}
Diffstat (limited to 'stats')
-rw-r--r--stats/rtc_stats.cc36
1 files changed, 19 insertions, 17 deletions
diff --git a/stats/rtc_stats.cc b/stats/rtc_stats.cc
index f5139a7dbb..92f64e4654 100644
--- a/stats/rtc_stats.cc
+++ b/stats/rtc_stats.cc
@@ -128,8 +128,9 @@ RTCStats::MembersOfThisObjectAndAncestors(size_t additional_capacity) const {
#define WEBRTC_DEFINE_RTCSTATSMEMBER(T, type, is_seq, is_str, to_str, to_json) \
template <> \
- const RTCStatsMemberInterface::Type RTCStatsMember<T>::kType = \
- RTCStatsMemberInterface::type; \
+ RTCStatsMemberInterface::Type RTCStatsMember<T>::StaticType() { \
+ return type; \
+ } \
template <> \
bool RTCStatsMember<T>::is_sequence() const { \
return is_seq; \
@@ -147,86 +148,87 @@ RTCStats::MembersOfThisObjectAndAncestors(size_t additional_capacity) const {
std::string RTCStatsMember<T>::ValueToJson() const { \
RTC_DCHECK(is_defined_); \
return to_json; \
- }
+ } \
+ template class RTC_EXPORT_TEMPLATE_DEFINE(RTC_EXPORT) RTCStatsMember<T>
WEBRTC_DEFINE_RTCSTATSMEMBER(bool,
kBool,
false,
false,
rtc::ToString(value_),
- rtc::ToString(value_))
+ rtc::ToString(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(int32_t,
kInt32,
false,
false,
rtc::ToString(value_),
- rtc::ToString(value_))
+ rtc::ToString(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(uint32_t,
kUint32,
false,
false,
rtc::ToString(value_),
- rtc::ToString(value_))
+ rtc::ToString(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(int64_t,
kInt64,
false,
false,
rtc::ToString(value_),
- ToStringAsDouble(value_))
+ ToStringAsDouble(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(uint64_t,
kUint64,
false,
false,
rtc::ToString(value_),
- ToStringAsDouble(value_))
+ ToStringAsDouble(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(double,
kDouble,
false,
false,
rtc::ToString(value_),
- ToStringAsDouble(value_))
-WEBRTC_DEFINE_RTCSTATSMEMBER(std::string, kString, false, true, value_, value_)
+ ToStringAsDouble(value_));
+WEBRTC_DEFINE_RTCSTATSMEMBER(std::string, kString, false, true, value_, value_);
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<bool>,
kSequenceBool,
true,
false,
VectorToString(value_),
- VectorToString(value_))
+ VectorToString(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<int32_t>,
kSequenceInt32,
true,
false,
VectorToString(value_),
- VectorToString(value_))
+ VectorToString(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<uint32_t>,
kSequenceUint32,
true,
false,
VectorToString(value_),
- VectorToString(value_))
+ VectorToString(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<int64_t>,
kSequenceInt64,
true,
false,
VectorToString(value_),
- VectorToStringAsDouble(value_))
+ VectorToStringAsDouble(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<uint64_t>,
kSequenceUint64,
true,
false,
VectorToString(value_),
- VectorToStringAsDouble(value_))
+ VectorToStringAsDouble(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<double>,
kSequenceDouble,
true,
false,
VectorToString(value_),
- VectorToStringAsDouble(value_))
+ VectorToStringAsDouble(value_));
WEBRTC_DEFINE_RTCSTATSMEMBER(std::vector<std::string>,
kSequenceString,
true,
false,
VectorOfStringsToString(value_),
- VectorOfStringsToString(value_))
+ VectorOfStringsToString(value_));
} // namespace webrtc