Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: third_party/protobuf/src/google/protobuf/extension_set.cc

Issue 2885223002: Protobuf: Remove protobuf globals patch (Closed)
Patch Set: typo Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 28 matching lines...) Expand all
39 #include <google/protobuf/message_lite.h> 39 #include <google/protobuf/message_lite.h>
40 #include <google/protobuf/io/coded_stream.h> 40 #include <google/protobuf/io/coded_stream.h>
41 #include <google/protobuf/wire_format_lite_inl.h> 41 #include <google/protobuf/wire_format_lite_inl.h>
42 #include <google/protobuf/repeated_field.h> 42 #include <google/protobuf/repeated_field.h>
43 #include <google/protobuf/stubs/map_util.h> 43 #include <google/protobuf/stubs/map_util.h>
44 44
45 namespace google { 45 namespace google {
46 namespace protobuf { 46 namespace protobuf {
47 namespace internal { 47 namespace internal {
48 48
49 // Registry stuff.
50 typedef hash_map<pair<const MessageLite*, int>, ExtensionInfo>
51 ExtensionRegistry;
52 extern ExtensionRegistry* cr_registry_;
53 extern ProtobufOnceType cr_registry_init_;
54
55 namespace { 49 namespace {
56 50
57 inline WireFormatLite::FieldType real_type(FieldType type) { 51 inline WireFormatLite::FieldType real_type(FieldType type) {
58 GOOGLE_DCHECK(type > 0 && type <= WireFormatLite::MAX_FIELD_TYPE); 52 GOOGLE_DCHECK(type > 0 && type <= WireFormatLite::MAX_FIELD_TYPE);
59 return static_cast<WireFormatLite::FieldType>(type); 53 return static_cast<WireFormatLite::FieldType>(type);
60 } 54 }
61 55
62 inline WireFormatLite::CppType cpp_type(FieldType type) { 56 inline WireFormatLite::CppType cpp_type(FieldType type) {
63 return WireFormatLite::FieldTypeToCppType(real_type(type)); 57 return WireFormatLite::FieldTypeToCppType(real_type(type));
64 } 58 }
65 59
66 inline bool is_packable(WireFormatLite::WireType type) { 60 inline bool is_packable(WireFormatLite::WireType type) {
67 switch (type) { 61 switch (type) {
68 case WireFormatLite::WIRETYPE_VARINT: 62 case WireFormatLite::WIRETYPE_VARINT:
69 case WireFormatLite::WIRETYPE_FIXED64: 63 case WireFormatLite::WIRETYPE_FIXED64:
70 case WireFormatLite::WIRETYPE_FIXED32: 64 case WireFormatLite::WIRETYPE_FIXED32:
71 return true; 65 return true;
72 case WireFormatLite::WIRETYPE_LENGTH_DELIMITED: 66 case WireFormatLite::WIRETYPE_LENGTH_DELIMITED:
73 case WireFormatLite::WIRETYPE_START_GROUP: 67 case WireFormatLite::WIRETYPE_START_GROUP:
74 case WireFormatLite::WIRETYPE_END_GROUP: 68 case WireFormatLite::WIRETYPE_END_GROUP:
75 return false; 69 return false;
76 70
77 // Do not add a default statement. Let the compiler complain when someone 71 // Do not add a default statement. Let the compiler complain when someone
78 // adds a new wire type. 72 // adds a new wire type.
79 } 73 }
80 GOOGLE_LOG(FATAL) << "can't reach here."; 74 GOOGLE_LOG(FATAL) << "can't reach here.";
81 return false; 75 return false;
82 } 76 }
83 77
78 // Registry stuff.
79 typedef hash_map<pair<const MessageLite*, int>,
80 ExtensionInfo> ExtensionRegistry;
81 ExtensionRegistry* registry_ = NULL;
82 GOOGLE_PROTOBUF_DECLARE_ONCE(registry_init_);
83
84 void DeleteRegistry() { 84 void DeleteRegistry() {
85 delete cr_registry_; 85 delete registry_;
86 cr_registry_ = NULL; 86 registry_ = NULL;
87 } 87 }
88 88
89 void InitRegistry() { 89 void InitRegistry() {
90 cr_registry_ = new ExtensionRegistry; 90 registry_ = new ExtensionRegistry;
91 OnShutdown(&DeleteRegistry); 91 OnShutdown(&DeleteRegistry);
92 } 92 }
93 93
94 // This function is only called at startup, so there is no need for thread- 94 // This function is only called at startup, so there is no need for thread-
95 // safety. 95 // safety.
96 void Register(const MessageLite* containing_type, 96 void Register(const MessageLite* containing_type,
97 int number, ExtensionInfo info) { 97 int number, ExtensionInfo info) {
98 ::google::protobuf::GoogleOnceInit(&cr_registry_init_, &InitRegistry); 98 ::google::protobuf::GoogleOnceInit(&registry_init_, &InitRegistry);
99 99
100 if (!InsertIfNotPresent(cr_registry_, std::make_pair(containing_type, number), 100 if (!InsertIfNotPresent(registry_, std::make_pair(containing_type, number),
101 info)) { 101 info)) {
102 GOOGLE_LOG(FATAL) << "Multiple extension registrations for type \"" 102 GOOGLE_LOG(FATAL) << "Multiple extension registrations for type \""
103 << containing_type->GetTypeName() 103 << containing_type->GetTypeName()
104 << "\", field number " << number << "."; 104 << "\", field number " << number << ".";
105 } 105 }
106 } 106 }
107 107
108 const ExtensionInfo* FindRegisteredExtension( 108 const ExtensionInfo* FindRegisteredExtension(
109 const MessageLite* containing_type, int number) { 109 const MessageLite* containing_type, int number) {
110 return (cr_registry_ == NULL) 110 return (registry_ == NULL)
111 ? NULL 111 ? NULL
112 : FindOrNull(*cr_registry_, 112 : FindOrNull(*registry_, std::make_pair(containing_type, number));
113 std::make_pair(containing_type, number));
114 } 113 }
115 114
116 } // namespace 115 } // namespace
117 116
118 ExtensionFinder::~ExtensionFinder() {} 117 ExtensionFinder::~ExtensionFinder() {}
119 118
120 bool GeneratedExtensionFinder::Find(int number, ExtensionInfo* output) { 119 bool GeneratedExtensionFinder::Find(int number, ExtensionInfo* output) {
121 const ExtensionInfo* extension = 120 const ExtensionInfo* extension =
122 FindRegisteredExtension(containing_type_, number); 121 FindRegisteredExtension(containing_type_, number);
123 if (extension == NULL) { 122 if (extension == NULL) {
(...skipping 1618 matching lines...) Expand 10 before | Expand all | Expand 10 after
1742 } 1741 }
1743 } 1742 }
1744 } 1743 }
1745 1744
1746 // Defined in extension_set_heavy.cc. 1745 // Defined in extension_set_heavy.cc.
1747 // int ExtensionSet::Extension::SpaceUsedExcludingSelf() const 1746 // int ExtensionSet::Extension::SpaceUsedExcludingSelf() const
1748 1747
1749 // ================================================================== 1748 // ==================================================================
1750 // Default repeated field instances for iterator-compatible accessors 1749 // Default repeated field instances for iterator-compatible accessors
1751 1750
1751 GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_primitive_generic_type_traits_once_init_);
1752 GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_string_type_traits_once_init_);
1753 GOOGLE_PROTOBUF_DECLARE_ONCE(repeated_message_generic_type_traits_once_init_);
1754
1752 void RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields() { 1755 void RepeatedPrimitiveGenericTypeTraits::InitializeDefaultRepeatedFields() {
1753 cr_default_repeated_field_int32_ = new RepeatedField<int32>; 1756 default_repeated_field_int32_ = new RepeatedField<int32>;
1754 cr_default_repeated_field_int64_ = new RepeatedField<int64>; 1757 default_repeated_field_int64_ = new RepeatedField<int64>;
1755 cr_default_repeated_field_uint32_ = new RepeatedField<uint32>; 1758 default_repeated_field_uint32_ = new RepeatedField<uint32>;
1756 cr_default_repeated_field_uint64_ = new RepeatedField<uint64>; 1759 default_repeated_field_uint64_ = new RepeatedField<uint64>;
1757 cr_default_repeated_field_double_ = new RepeatedField<double>; 1760 default_repeated_field_double_ = new RepeatedField<double>;
1758 cr_default_repeated_field_float_ = new RepeatedField<float>; 1761 default_repeated_field_float_ = new RepeatedField<float>;
1759 cr_default_repeated_field_bool_ = new RepeatedField<bool>; 1762 default_repeated_field_bool_ = new RepeatedField<bool>;
1760 OnShutdown(&DestroyDefaultRepeatedFields); 1763 OnShutdown(&DestroyDefaultRepeatedFields);
1761 } 1764 }
1762 1765
1763 void RepeatedPrimitiveGenericTypeTraits::DestroyDefaultRepeatedFields() { 1766 void RepeatedPrimitiveGenericTypeTraits::DestroyDefaultRepeatedFields() {
1764 delete cr_default_repeated_field_int32_; 1767 delete default_repeated_field_int32_;
1765 delete cr_default_repeated_field_int64_; 1768 delete default_repeated_field_int64_;
1766 delete cr_default_repeated_field_uint32_; 1769 delete default_repeated_field_uint32_;
1767 delete cr_default_repeated_field_uint64_; 1770 delete default_repeated_field_uint64_;
1768 delete cr_default_repeated_field_double_; 1771 delete default_repeated_field_double_;
1769 delete cr_default_repeated_field_float_; 1772 delete default_repeated_field_float_;
1770 delete cr_default_repeated_field_bool_; 1773 delete default_repeated_field_bool_;
1771 } 1774 }
1772 1775
1773 void RepeatedStringTypeTraits::InitializeDefaultRepeatedFields() { 1776 void RepeatedStringTypeTraits::InitializeDefaultRepeatedFields() {
1774 cr_default_repeated_field_ = new RepeatedFieldType; 1777 default_repeated_field_ = new RepeatedFieldType;
1775 OnShutdown(&DestroyDefaultRepeatedFields); 1778 OnShutdown(&DestroyDefaultRepeatedFields);
1776 } 1779 }
1777 1780
1778 void RepeatedStringTypeTraits::DestroyDefaultRepeatedFields() { 1781 void RepeatedStringTypeTraits::DestroyDefaultRepeatedFields() {
1779 delete cr_default_repeated_field_; 1782 delete default_repeated_field_;
1780 } 1783 }
1781 1784
1782 void RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields() { 1785 void RepeatedMessageGenericTypeTraits::InitializeDefaultRepeatedFields() {
1783 cr_default_repeated_field_ = new RepeatedFieldType; 1786 default_repeated_field_ = new RepeatedFieldType;
1784 OnShutdown(&DestroyDefaultRepeatedFields); 1787 OnShutdown(&DestroyDefaultRepeatedFields);
1785 } 1788 }
1786 1789
1787 void RepeatedMessageGenericTypeTraits::DestroyDefaultRepeatedFields() { 1790 void RepeatedMessageGenericTypeTraits::DestroyDefaultRepeatedFields() {
1788 delete cr_default_repeated_field_; 1791 delete default_repeated_field_;
1789 } 1792 }
1790 1793
1794 const RepeatedField<int32>*
1795 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int32_ = NULL;
1796 const RepeatedField<int64>*
1797 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_int64_ = NULL;
1798 const RepeatedField<uint32>*
1799 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint32_ = NULL;
1800 const RepeatedField<uint64>*
1801 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_uint64_ = NULL;
1802 const RepeatedField<double>*
1803 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_double_ = NULL;
1804 const RepeatedField<float>*
1805 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_float_ = NULL;
1806 const RepeatedField<bool>*
1807 RepeatedPrimitiveGenericTypeTraits::default_repeated_field_bool_ = NULL;
1808 const RepeatedStringTypeTraits::RepeatedFieldType*
1809 RepeatedStringTypeTraits::default_repeated_field_ = NULL;
1810 const RepeatedMessageGenericTypeTraits::RepeatedFieldType*
1811 RepeatedMessageGenericTypeTraits::default_repeated_field_ = NULL;
1812
1791 } // namespace internal 1813 } // namespace internal
1792 } // namespace protobuf 1814 } // namespace protobuf
1793 } // namespace google 1815 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698