Commit 178d3b45 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by facebook-github-bot-4

Use constexpr for folly::dynamic::TypeInfo static fields

Summary: [Folly] Use constexpr for folly::dynamic::TypeInfo static fields

These things are compile-time values. So yeah.

Reviewed By: @​@​JoelMarcey

Differential Revision: D2466270
parent 4bfa1a41
...@@ -612,24 +612,22 @@ inline void dynamic::pop_back() { ...@@ -612,24 +612,22 @@ inline void dynamic::pop_back() {
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
template<class T> struct dynamic::TypeInfo { #define FOLLY_DYNAMIC_DEC_TYPEINFO(T, str, val) \
static char const name[]; template <> struct dynamic::TypeInfo<T> { \
static Type const type; static constexpr const char* name = str; \
}; static constexpr dynamic::Type type = val; \
}; \
#define FB_DEC_TYPE(T) \ //
template<> char const dynamic::TypeInfo<T>::name[]; \
template<> dynamic::Type const dynamic::TypeInfo<T>::type FOLLY_DYNAMIC_DEC_TYPEINFO(void*, "null", dynamic::NULLT)
FOLLY_DYNAMIC_DEC_TYPEINFO(bool, "boolean", dynamic::BOOL)
FB_DEC_TYPE(void*); FOLLY_DYNAMIC_DEC_TYPEINFO(fbstring, "string", dynamic::STRING)
FB_DEC_TYPE(bool); FOLLY_DYNAMIC_DEC_TYPEINFO(dynamic::Array, "array", dynamic::ARRAY)
FB_DEC_TYPE(fbstring); FOLLY_DYNAMIC_DEC_TYPEINFO(double, "double", dynamic::DOUBLE)
FB_DEC_TYPE(dynamic::Array); FOLLY_DYNAMIC_DEC_TYPEINFO(int64_t, "int64", dynamic::INT64)
FB_DEC_TYPE(double); FOLLY_DYNAMIC_DEC_TYPEINFO(dynamic::ObjectImpl, "object", dynamic::OBJECT)
FB_DEC_TYPE(int64_t);
FB_DEC_TYPE(dynamic::ObjectImpl); #undef FOLLY_DYNAMIC_DEC_TYPEINFO
#undef FB_DEC_TYPE
template<class T> template<class T>
T dynamic::asImpl() const { T dynamic::asImpl() const {
......
...@@ -20,19 +20,20 @@ namespace folly { ...@@ -20,19 +20,20 @@ namespace folly {
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
#define DEF_TYPE(T, str, typen) \ #define FOLLY_DYNAMIC_DEF_TYPEINFO(T) \
template<> char const dynamic::TypeInfo<T>::name[] = str; \ constexpr const char* dynamic::TypeInfo<T>::name; \
template<> dynamic::Type const dynamic::TypeInfo<T>::type = typen constexpr dynamic::Type dynamic::TypeInfo<T>::type; \
//
DEF_TYPE(void*, "null", dynamic::NULLT);
DEF_TYPE(bool, "boolean", dynamic::BOOL); FOLLY_DYNAMIC_DEF_TYPEINFO(void*)
DEF_TYPE(fbstring, "string", dynamic::STRING); FOLLY_DYNAMIC_DEF_TYPEINFO(bool)
DEF_TYPE(dynamic::Array, "array", dynamic::ARRAY); FOLLY_DYNAMIC_DEF_TYPEINFO(fbstring)
DEF_TYPE(double, "double", dynamic::DOUBLE); FOLLY_DYNAMIC_DEF_TYPEINFO(dynamic::Array)
DEF_TYPE(int64_t, "int64", dynamic::INT64); FOLLY_DYNAMIC_DEF_TYPEINFO(double)
DEF_TYPE(dynamic::ObjectImpl, "object", dynamic::OBJECT); FOLLY_DYNAMIC_DEF_TYPEINFO(int64_t)
FOLLY_DYNAMIC_DEF_TYPEINFO(dynamic::ObjectImpl)
#undef DEF_TYPE
#undef FOLLY_DYNAMIC_DEF_TYPEINFO
const char* dynamic::typeName() const { const char* dynamic::typeName() const {
return typeName(type_); return typeName(type_);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment