diff options
author | Adam Cozzette <acozzette@gmail.com> | 2018-07-09 09:35:48 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-09 09:35:48 -0700 |
commit | e1845779ed1115dd61eb2a3b8f0a78c252ca5b2b (patch) | |
tree | fdb892e4e34269f6b3bbb6f629a912d4c63c2d70 /src/google/protobuf/extension_set.h | |
parent | f7ada1280fac4af717d478e6a9765d3f02b418b3 (diff) | |
parent | a9abc7831e45257d334cfa682746b6cadf9e95d9 (diff) | |
download | protobuf-e1845779ed1115dd61eb2a3b8f0a78c252ca5b2b.tar.gz protobuf-e1845779ed1115dd61eb2a3b8f0a78c252ca5b2b.tar.bz2 protobuf-e1845779ed1115dd61eb2a3b8f0a78c252ca5b2b.zip |
Merge pull request #4878 from acozzette/fix-msvc-initialization
Fix initialization with Visual Studio
Diffstat (limited to 'src/google/protobuf/extension_set.h')
-rw-r--r-- | src/google/protobuf/extension_set.h | 56 |
1 files changed, 14 insertions, 42 deletions
diff --git a/src/google/protobuf/extension_set.h b/src/google/protobuf/extension_set.h index c4796629..a1535baa 100644 --- a/src/google/protobuf/extension_set.h +++ b/src/google/protobuf/extension_set.h @@ -880,18 +880,17 @@ class RepeatedPrimitiveTypeTraits { LIBPROTOBUF_EXPORT extern ProtobufOnceType repeated_primitive_generic_type_traits_once_init_; -class LIBPROTOBUF_EXPORT RepeatedPrimitiveGenericTypeTraits { +class LIBPROTOBUF_EXPORT RepeatedPrimitiveDefaults { private: template<typename Type> friend class RepeatedPrimitiveTypeTraits; - static void InitializeDefaultRepeatedFields(); - static void DestroyDefaultRepeatedFields(); - static const RepeatedField<int32>* default_repeated_field_int32_; - static const RepeatedField<int64>* default_repeated_field_int64_; - static const RepeatedField<uint32>* default_repeated_field_uint32_; - static const RepeatedField<uint64>* default_repeated_field_uint64_; - static const RepeatedField<double>* default_repeated_field_double_; - static const RepeatedField<float>* default_repeated_field_float_; - static const RepeatedField<bool>* default_repeated_field_bool_; + static const RepeatedPrimitiveDefaults* default_instance(); + RepeatedField<int32> default_repeated_field_int32_; + RepeatedField<int64> default_repeated_field_int64_; + RepeatedField<uint32> default_repeated_field_uint32_; + RepeatedField<uint64> default_repeated_field_uint64_; + RepeatedField<double> default_repeated_field_double_; + RepeatedField<float> default_repeated_field_float_; + RepeatedField<bool> default_repeated_field_bool_; }; #define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD) \ @@ -919,11 +918,8 @@ template<> inline void RepeatedPrimitiveTypeTraits<TYPE>::Add( \ } \ template<> inline const RepeatedField<TYPE>* \ RepeatedPrimitiveTypeTraits<TYPE>::GetDefaultRepeatedField() { \ - ::google::protobuf::GoogleOnceInit( \ - &repeated_primitive_generic_type_traits_once_init_, \ - &RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields); \ - return RepeatedPrimitiveGenericTypeTraits:: \ - default_repeated_field_##TYPE##_; \ + return &RepeatedPrimitiveDefaults::default_instance() \ + ->default_repeated_field_##TYPE##_; \ } \ template<> inline const RepeatedField<TYPE>& \ RepeatedPrimitiveTypeTraits<TYPE>::GetRepeated(int number, \ @@ -980,8 +976,6 @@ class LIBPROTOBUF_EXPORT StringTypeTraits { } }; -LIBPROTOBUF_EXPORT extern ProtobufOnceType repeated_string_type_traits_once_init_; - class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits { public: typedef const string& ConstType; @@ -1024,11 +1018,7 @@ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits { is_packed, NULL)); } - static const RepeatedFieldType* GetDefaultRepeatedField() { - ::google::protobuf::GoogleOnceInit(&repeated_string_type_traits_once_init_, - &InitializeDefaultRepeatedFields); - return default_repeated_field_; - } + static const RepeatedFieldType* GetDefaultRepeatedField(); template <typename ExtendeeT> static void Register(int number, FieldType type, bool is_packed) { @@ -1039,7 +1029,6 @@ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits { private: static void InitializeDefaultRepeatedFields(); static void DestroyDefaultRepeatedFields(); - static const RepeatedFieldType *default_repeated_field_; }; // ------------------------------------------------------------------- @@ -1230,28 +1219,11 @@ class RepeatedMessageTypeTraits { } }; -LIBPROTOBUF_EXPORT extern ProtobufOnceType repeated_message_generic_type_traits_once_init_; - -// This class exists only to hold a generic default empty repeated field for all -// message-type repeated field extensions. -class LIBPROTOBUF_EXPORT RepeatedMessageGenericTypeTraits { - public: - typedef RepeatedPtrField<::google::protobuf::MessageLite*> RepeatedFieldType; - private: - template<typename Type> friend class RepeatedMessageTypeTraits; - static void InitializeDefaultRepeatedFields(); - static void DestroyDefaultRepeatedFields(); - static const RepeatedFieldType* default_repeated_field_; -}; - template<typename Type> inline const typename RepeatedMessageTypeTraits<Type>::RepeatedFieldType* RepeatedMessageTypeTraits<Type>::GetDefaultRepeatedField() { - ::google::protobuf::GoogleOnceInit( - &repeated_message_generic_type_traits_once_init_, - &RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields); - return reinterpret_cast<const RepeatedFieldType*>( - RepeatedMessageGenericTypeTraits::default_repeated_field_); + static auto instance = OnShutdownDelete(new RepeatedFieldType); + return instance; } // ------------------------------------------------------------------- |