diff options
author | Feng Xiao <xfxyjwf@gmail.com> | 2015-08-29 16:42:55 -0700 |
---|---|---|
committer | Feng Xiao <xfxyjwf@gmail.com> | 2015-08-29 16:42:55 -0700 |
commit | 0087da9d4775f79c67362cc89c653f3a33a9bae2 (patch) | |
tree | 7206d741b7a4d9d256410e76c932dfa60790bf91 /src | |
parent | cee703d736fb7e6e001ac22476390b5ccc0d794a (diff) | |
parent | f0640b5a046522d7ffbab02b87a8ce9a654f79d1 (diff) | |
download | protobuf-0087da9d4775f79c67362cc89c653f3a33a9bae2.tar.gz protobuf-0087da9d4775f79c67362cc89c653f3a33a9bae2.tar.bz2 protobuf-0087da9d4775f79c67362cc89c653f3a33a9bae2.zip |
Merge remote-tracking branch 'origin/master' into beta-1
Conflicts:
src/google/protobuf/extension_set.h
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/extension_set.cc | 109 | ||||
-rw-r--r-- | src/google/protobuf/extension_set.h | 32 | ||||
-rw-r--r-- | src/google/protobuf/generated_message_reflection.cc | 12 | ||||
-rw-r--r-- | src/google/protobuf/generated_message_util.cc | 12 | ||||
-rw-r--r-- | src/google/protobuf/generated_message_util.h | 6 | ||||
-rw-r--r-- | src/google/protobuf/repeated_field.h | 3 | ||||
-rw-r--r-- | src/google/protobuf/stubs/atomicops.h | 10 | ||||
-rw-r--r-- | src/google/protobuf/stubs/port.h | 20 | ||||
-rw-r--r-- | src/google/protobuf/stubs/time.cc | 1 |
9 files changed, 109 insertions, 96 deletions
diff --git a/src/google/protobuf/extension_set.cc b/src/google/protobuf/extension_set.cc index 649ae184..919bd83b 100644 --- a/src/google/protobuf/extension_set.cc +++ b/src/google/protobuf/extension_set.cc @@ -34,7 +34,6 @@ #include <google/protobuf/stubs/hash.h> #include <google/protobuf/stubs/common.h> -#include <google/protobuf/stubs/once.h> #include <google/protobuf/extension_set.h> #include <google/protobuf/message_lite.h> #include <google/protobuf/io/coded_stream.h> @@ -1747,66 +1746,68 @@ void ExtensionSet::Extension::Free() { // ================================================================== // Default repeated field instances for iterator-compatible accessors -const RepeatedStringTypeTraits::RepeatedFieldType* -RepeatedStringTypeTraits::default_repeated_field_ = NULL; +GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_primitive_generic_type_traits_once_init_); +GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_string_type_traits_once_init_); +GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_message_generic_type_traits_once_init_); -const RepeatedMessageGenericTypeTraits::RepeatedFieldType* -RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL; +void RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields() { + default_repeated_field_int32_ = new RepeatedField<int32>; + default_repeated_field_int64_ = new RepeatedField<int64>; + default_repeated_field_uint32_ = new RepeatedField<uint32>; + default_repeated_field_uint64_ = new RepeatedField<uint64>; + default_repeated_field_double_ = new RepeatedField<double>; + default_repeated_field_float_ = new RepeatedField<float>; + default_repeated_field_bool_ = new RepeatedField<bool>; + OnShutdown(&DestroyDefaultRepeatedFields); +} + +void RepeatedPrimitiveGenericTypeTraits::DestroyDefaultRepeatedFields() { + delete default_repeated_field_int32_; + delete default_repeated_field_int64_; + delete default_repeated_field_uint32_; + delete default_repeated_field_uint64_; + delete default_repeated_field_double_; + delete default_repeated_field_float_; + delete default_repeated_field_bool_; +} -#define PROTOBUF_DEFINE_DEFAULT_REPEATED(TYPE) \ - const RepeatedField<TYPE>* \ - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_##TYPE##_ = NULL; +void RepeatedStringTypeTraits::InitializeDefaultRepeatedFields() { + default_repeated_field_ = new RepeatedFieldType; + OnShutdown(&DestroyDefaultRepeatedFields); +} -PROTOBUF_DEFINE_DEFAULT_REPEATED(int32) -PROTOBUF_DEFINE_DEFAULT_REPEATED(int64) -PROTOBUF_DEFINE_DEFAULT_REPEATED(uint32) -PROTOBUF_DEFINE_DEFAULT_REPEATED(uint64) -PROTOBUF_DEFINE_DEFAULT_REPEATED(double) -PROTOBUF_DEFINE_DEFAULT_REPEATED(float) -PROTOBUF_DEFINE_DEFAULT_REPEATED(bool) +void RepeatedStringTypeTraits::DestroyDefaultRepeatedFields() { + delete default_repeated_field_; +} -#undef PROTOBUF_DEFINE_DEFAULT_REPEATED +void RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields() { + default_repeated_field_ = new RepeatedFieldType; + OnShutdown(&DestroyDefaultRepeatedFields); +} -struct StaticDefaultRepeatedFieldsInitializer { - StaticDefaultRepeatedFieldsInitializer() { - InitializeDefaultRepeatedFields(); - OnShutdown(&DestroyDefaultRepeatedFields); - } -} static_repeated_fields_initializer; - -void InitializeDefaultRepeatedFields() { - RepeatedStringTypeTraits::default_repeated_field_ = - new RepeatedStringTypeTraits::RepeatedFieldType; - RepeatedMessageGenericTypeTraits::default_repeated_field_ = - new RepeatedMessageGenericTypeTraits::RepeatedFieldType; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_ = - new RepeatedField<int32>; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_ = - new RepeatedField<int64>; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_ = - new RepeatedField<uint32>; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_ = - new RepeatedField<uint64>; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_ = - new RepeatedField<double>; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_ = - new RepeatedField<float>; - RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = - new RepeatedField<bool>; -} - -void DestroyDefaultRepeatedFields() { - delete RepeatedStringTypeTraits::default_repeated_field_; - delete RepeatedMessageGenericTypeTraits::default_repeated_field_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_; - delete RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_; +void RepeatedMessageGenericTypeTraits::DestroyDefaultRepeatedFields() { + delete default_repeated_field_; } +const RepeatedField<int32>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_ = NULL; +const RepeatedField<int64>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_ = NULL; +const RepeatedField<uint32>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_ = NULL; +const RepeatedField<uint64>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_ = NULL; +const RepeatedField<double>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_ = NULL; +const RepeatedField<float>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_ = NULL; +const RepeatedField<bool>* +RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = NULL; +const RepeatedStringTypeTraits::RepeatedFieldType* +RepeatedStringTypeTraits::default_repeated_field_ = NULL; +const RepeatedMessageGenericTypeTraits::RepeatedFieldType* +RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL; + } // namespace internal } // namespace protobuf } // namespace google diff --git a/src/google/protobuf/extension_set.h b/src/google/protobuf/extension_set.h index 9ef4e27d..09681259 100644 --- a/src/google/protobuf/extension_set.h +++ b/src/google/protobuf/extension_set.h @@ -46,6 +46,7 @@ #include <google/protobuf/stubs/common.h> #include <google/protobuf/stubs/logging.h> +#include <google/protobuf/stubs/once.h> #include <google/protobuf/repeated_field.h> @@ -723,15 +724,14 @@ class RepeatedPrimitiveTypeTraits { static const RepeatedFieldType* GetDefaultRepeatedField(); }; -// Declared here so that this can be friended below. -void InitializeDefaultRepeatedFields(); -void DestroyDefaultRepeatedFields(); +LIBPROTOBUF_EXPORT extern ProtobufOnceType +repeated_primitive_generic_type_traits_once_init_; class LIBPROTOBUF_EXPORT RepeatedPrimitiveGenericTypeTraits { private: template<typename Type> friend class RepeatedPrimitiveTypeTraits; - friend void InitializeDefaultRepeatedFields(); - friend void DestroyDefaultRepeatedFields(); + 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_; @@ -766,6 +766,9 @@ template<> inline void RepeatedPrimitiveTypeTraits<TYPE>::Add( \ } \ template<> inline const RepeatedField<TYPE>* \ RepeatedPrimitiveTypeTraits<TYPE>::GetDefaultRepeatedField() { \ + GoogleOnceInit( \ + &repeated_primitive_generic_type_traits_once_init_, \ + &RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields); \ return RepeatedPrimitiveGenericTypeTraits:: \ default_repeated_field_##TYPE##_; \ } \ @@ -819,6 +822,9 @@ class LIBPROTOBUF_EXPORT StringTypeTraits { } }; +LIBPROTOBUF_EXPORT extern ProtobufOnceType +repeated_string_type_traits_once_init_; + class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits { public: typedef const string& ConstType; @@ -862,12 +868,14 @@ class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits { } static const RepeatedFieldType* GetDefaultRepeatedField() { + GoogleOnceInit(&repeated_string_type_traits_once_init_, + &InitializeDefaultRepeatedFields); return default_repeated_field_; } private: - friend void InitializeDefaultRepeatedFields(); - friend void DestroyDefaultRepeatedFields(); + static void InitializeDefaultRepeatedFields(); + static void DestroyDefaultRepeatedFields(); static const RepeatedFieldType *default_repeated_field_; }; @@ -1026,6 +1034,9 @@ class RepeatedMessageTypeTraits { static const RepeatedFieldType* GetDefaultRepeatedField(); }; +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 { @@ -1033,14 +1044,17 @@ class LIBPROTOBUF_EXPORT RepeatedMessageGenericTypeTraits { typedef RepeatedPtrField< ::google::protobuf::MessageLite*> RepeatedFieldType; private: template<typename Type> friend class RepeatedMessageTypeTraits; - friend void InitializeDefaultRepeatedFields(); - friend void DestroyDefaultRepeatedFields(); + static void InitializeDefaultRepeatedFields(); + static void DestroyDefaultRepeatedFields(); static const RepeatedFieldType* default_repeated_field_; }; template<typename Type> inline const typename RepeatedMessageTypeTraits<Type>::RepeatedFieldType* RepeatedMessageTypeTraits<Type>::GetDefaultRepeatedField() { + GoogleOnceInit( + &repeated_message_generic_type_traits_once_init_, + &RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields); return reinterpret_cast<const RepeatedFieldType*>( RepeatedMessageGenericTypeTraits::default_repeated_field_); } diff --git a/src/google/protobuf/generated_message_reflection.cc b/src/google/protobuf/generated_message_reflection.cc index b9957e75..eee024ee 100644 --- a/src/google/protobuf/generated_message_reflection.cc +++ b/src/google/protobuf/generated_message_reflection.cc @@ -58,18 +58,6 @@ bool IsMapFieldInApi(const FieldDescriptor* field) { } } // anonymous namespace -int StringSpaceUsedExcludingSelf(const string& str) { - const void* start = &str; - const void* end = &str + 1; - - if (start <= str.data() && str.data() < end) { - // The string's data is stored inside the string object itself. - return 0; - } else { - return str.capacity(); - } -} - bool ParseNamedEnum(const EnumDescriptor* descriptor, const string& name, int* value) { diff --git a/src/google/protobuf/generated_message_util.cc b/src/google/protobuf/generated_message_util.cc index 53cae8b5..afaca2ee 100644 --- a/src/google/protobuf/generated_message_util.cc +++ b/src/google/protobuf/generated_message_util.cc @@ -60,6 +60,18 @@ void InitEmptyString() { OnShutdown(&DeleteEmptyString); } +int StringSpaceUsedExcludingSelf(const string& str) { + const void* start = &str; + const void* end = &str + 1; + + if (start <= str.data() && str.data() < end) { + // The string's data is stored inside the string object itself. + return 0; + } else { + return str.capacity(); + } +} + } // namespace internal } // namespace protobuf diff --git a/src/google/protobuf/generated_message_util.h b/src/google/protobuf/generated_message_util.h index 6357e27d..78c8d7ff 100644 --- a/src/google/protobuf/generated_message_util.h +++ b/src/google/protobuf/generated_message_util.h @@ -89,12 +89,6 @@ LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyString() { return GetEmptyStringAlreadyInited(); } -// Defined in generated_message_reflection.cc -- not actually part of the lite -// library. -// -// TODO(jasonh): The various callers get this declaration from a variety of -// places: probably in most cases repeated_field.h. Clean these up so they all -// get the declaration from this file. LIBPROTOBUF_EXPORT int StringSpaceUsedExcludingSelf(const string& str); diff --git a/src/google/protobuf/repeated_field.h b/src/google/protobuf/repeated_field.h index 137b29be..b10e7a95 100644 --- a/src/google/protobuf/repeated_field.h +++ b/src/google/protobuf/repeated_field.h @@ -649,7 +649,8 @@ inline const Message& GenericTypeHandler<Message>::default_instance() { // StringTypeHandler is exported. So, we factor out StringTypeHandlerBase, // export that, then make StringTypeHandler be a subclass which is NOT // exported. -// TODO(kenton): There has to be a better way. +// TODO(kenton): Now that StringSpaceUsedExcludingSelf() is in the lite
+// library, this can be cleaned up. class LIBPROTOBUF_EXPORT StringTypeHandlerBase { public: typedef string Type; diff --git a/src/google/protobuf/stubs/atomicops.h b/src/google/protobuf/stubs/atomicops.h index cd20caac..5fa31b0a 100644 --- a/src/google/protobuf/stubs/atomicops.h +++ b/src/google/protobuf/stubs/atomicops.h @@ -173,7 +173,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr); // Include our platform specific implementation. #define GOOGLE_PROTOBUF_ATOMICOPS_ERROR \ -#error "Atomic operations are not supported on your platform" +"Atomic operations are not supported on your platform" // ThreadSanitizer, http://clang.llvm.org/docs/ThreadSanitizer.html. #if defined(THREAD_SANITIZER) @@ -183,7 +183,7 @@ Atomic64 Release_Load(volatile const Atomic64* ptr); #if defined(GOOGLE_PROTOBUF_ARCH_IA32) || defined(GOOGLE_PROTOBUF_ARCH_X64) #include <google/protobuf/stubs/atomicops_internals_x86_msvc.h> #else -GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR #endif // Solaris @@ -218,15 +218,15 @@ GOOGLE_PROTOBUF_ATOMICOPS_ERROR #if __has_extension(c_atomic) #include <google/protobuf/stubs/atomicops_internals_generic_gcc.h> #else -GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR #endif #else -GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR #endif // Unknown. #else -GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#error GOOGLE_PROTOBUF_ATOMICOPS_ERROR #endif // On some platforms we need additional declarations to make AtomicWord diff --git a/src/google/protobuf/stubs/port.h b/src/google/protobuf/stubs/port.h index 9ea34cde..b35a3afe 100644 --- a/src/google/protobuf/stubs/port.h +++ b/src/google/protobuf/stubs/port.h @@ -82,6 +82,15 @@ #define LIBPROTOC_EXPORT #endif +// These #includes are for the byte swap functions declared later on. +#ifdef _MSC_VER +#include <stdlib.h> // NOLINT(build/include) +#elif defined(__APPLE__) +#include <libkern/OSByteOrder.h> +#elif defined(__GLIBC__) || defined(__CYGWIN__) +#include <byteswap.h> // IWYU pragma: export +#endif + // =================================================================== // from google3/base/port.h namespace google { @@ -179,7 +188,7 @@ static const uint64 kuint64max = GOOGLE_ULONGLONG(0xFFFFFFFFFFFFFFFF); // Provided at least since GCC 3.0. #define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) #else -#define GOOGLE_PREDICT_TRUE +#define GOOGLE_PREDICT_TRUE(x) (x) #endif #endif @@ -188,7 +197,7 @@ static const uint64 kuint64max = GOOGLE_ULONGLONG(0xFFFFFFFFFFFFFFFF); // Provided at least since GCC 3.0. #define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0)) #else -#define GOOGLE_PREDICT_FALSE +#define GOOGLE_PREDICT_FALSE(x) (x) #endif #endif @@ -270,7 +279,6 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) { // The following guarantees declaration of the byte swap functions, and // defines __BYTE_ORDER for MSVC #ifdef _MSC_VER -#include <stdlib.h> // NOLINT(build/include) #define __BYTE_ORDER __LITTLE_ENDIAN #define bswap_16(x) _byteswap_ushort(x) #define bswap_32(x) _byteswap_ulong(x) @@ -278,15 +286,11 @@ inline void GOOGLE_UNALIGNED_STORE64(void *p, uint64 v) { #elif defined(__APPLE__) // Mac OS X / Darwin features -#include <libkern/OSByteOrder.h> #define bswap_16(x) OSSwapInt16(x) #define bswap_32(x) OSSwapInt32(x) #define bswap_64(x) OSSwapInt64(x) -#elif defined(__GLIBC__) || defined(__CYGWIN__) -#include <byteswap.h> // IWYU pragma: export - -#else +#elif !defined(__GLIBC__) && !defined(__CYGWIN__) static inline uint16 bswap_16(uint16 x) { return static_cast<uint16>(((x & 0xFF) << 8) | ((x & 0xFF00) >> 8)); diff --git a/src/google/protobuf/stubs/time.cc b/src/google/protobuf/stubs/time.cc index 3319a244..49c0412c 100644 --- a/src/google/protobuf/stubs/time.cc +++ b/src/google/protobuf/stubs/time.cc @@ -21,7 +21,6 @@ static const int64 kSecondsFromEraToEpoch = 62135596800LL; static const int64 kMinTime = -62135596800LL; // 0001-01-01T00:00:00 static const int64 kMaxTime = 253402300799LL; // 9999-12-31T23:59:59 -static const int kNanosPerSecond = 1000000000; static const int kNanosPerMillisecond = 1000000; static const int kNanosPerMicrosecond = 1000; |