From 178d3b45f745e50fa70c735703bfe7c4dba9ace5 Mon Sep 17 00:00:00 2001 From: Yedidya Feldblum Date: Tue, 22 Sep 2015 22:06:25 -0700 Subject: [PATCH] Use constexpr for folly::dynamic::TypeInfo static fields MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Summary: [Folly] Use constexpr for folly::dynamic::TypeInfo static fields These things are compile-time values. So yeah. Reviewed By: @​@​JoelMarcey Differential Revision: D2466270 --- folly/dynamic-inl.h | 34 ++++++++++++++++------------------ folly/dynamic.cpp | 27 ++++++++++++++------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/folly/dynamic-inl.h b/folly/dynamic-inl.h index ff503c4a..8924fb3d 100644 --- a/folly/dynamic-inl.h +++ b/folly/dynamic-inl.h @@ -612,24 +612,22 @@ inline void dynamic::pop_back() { ////////////////////////////////////////////////////////////////////// -template struct dynamic::TypeInfo { - static char const name[]; - static Type const type; -}; - -#define FB_DEC_TYPE(T) \ - template<> char const dynamic::TypeInfo::name[]; \ - template<> dynamic::Type const dynamic::TypeInfo::type - -FB_DEC_TYPE(void*); -FB_DEC_TYPE(bool); -FB_DEC_TYPE(fbstring); -FB_DEC_TYPE(dynamic::Array); -FB_DEC_TYPE(double); -FB_DEC_TYPE(int64_t); -FB_DEC_TYPE(dynamic::ObjectImpl); - -#undef FB_DEC_TYPE +#define FOLLY_DYNAMIC_DEC_TYPEINFO(T, str, val) \ + template <> struct dynamic::TypeInfo { \ + static constexpr const char* name = str; \ + static constexpr dynamic::Type type = val; \ + }; \ + // + +FOLLY_DYNAMIC_DEC_TYPEINFO(void*, "null", dynamic::NULLT) +FOLLY_DYNAMIC_DEC_TYPEINFO(bool, "boolean", dynamic::BOOL) +FOLLY_DYNAMIC_DEC_TYPEINFO(fbstring, "string", dynamic::STRING) +FOLLY_DYNAMIC_DEC_TYPEINFO(dynamic::Array, "array", dynamic::ARRAY) +FOLLY_DYNAMIC_DEC_TYPEINFO(double, "double", dynamic::DOUBLE) +FOLLY_DYNAMIC_DEC_TYPEINFO(int64_t, "int64", dynamic::INT64) +FOLLY_DYNAMIC_DEC_TYPEINFO(dynamic::ObjectImpl, "object", dynamic::OBJECT) + +#undef FOLLY_DYNAMIC_DEC_TYPEINFO template T dynamic::asImpl() const { diff --git a/folly/dynamic.cpp b/folly/dynamic.cpp index d743bb22..725cf56a 100644 --- a/folly/dynamic.cpp +++ b/folly/dynamic.cpp @@ -20,19 +20,20 @@ namespace folly { ////////////////////////////////////////////////////////////////////// -#define DEF_TYPE(T, str, typen) \ - template<> char const dynamic::TypeInfo::name[] = str; \ - template<> dynamic::Type const dynamic::TypeInfo::type = typen - -DEF_TYPE(void*, "null", dynamic::NULLT); -DEF_TYPE(bool, "boolean", dynamic::BOOL); -DEF_TYPE(fbstring, "string", dynamic::STRING); -DEF_TYPE(dynamic::Array, "array", dynamic::ARRAY); -DEF_TYPE(double, "double", dynamic::DOUBLE); -DEF_TYPE(int64_t, "int64", dynamic::INT64); -DEF_TYPE(dynamic::ObjectImpl, "object", dynamic::OBJECT); - -#undef DEF_TYPE +#define FOLLY_DYNAMIC_DEF_TYPEINFO(T) \ + constexpr const char* dynamic::TypeInfo::name; \ + constexpr dynamic::Type dynamic::TypeInfo::type; \ + // + +FOLLY_DYNAMIC_DEF_TYPEINFO(void*) +FOLLY_DYNAMIC_DEF_TYPEINFO(bool) +FOLLY_DYNAMIC_DEF_TYPEINFO(fbstring) +FOLLY_DYNAMIC_DEF_TYPEINFO(dynamic::Array) +FOLLY_DYNAMIC_DEF_TYPEINFO(double) +FOLLY_DYNAMIC_DEF_TYPEINFO(int64_t) +FOLLY_DYNAMIC_DEF_TYPEINFO(dynamic::ObjectImpl) + +#undef FOLLY_DYNAMIC_DEF_TYPEINFO const char* dynamic::typeName() const { return typeName(type_); -- 2.34.1