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

Unified Diff: third_party/protobuf/src/google/protobuf/metadata.h

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/src/google/protobuf/metadata.h
diff --git a/third_party/protobuf/src/google/protobuf/metadata.h b/third_party/protobuf/src/google/protobuf/metadata.h
index f9257534eecf4f5589dceb39b308f3779f64ef57..fdee150b44f5c7d92ba1ccf0fc062c4887e65b8c 100644
--- a/third_party/protobuf/src/google/protobuf/metadata.h
+++ b/third_party/protobuf/src/google/protobuf/metadata.h
@@ -40,8 +40,6 @@
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/arena.h>
-#include <google/protobuf/arenastring.h>
-#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/unknown_field_set.h>
namespace google {
@@ -58,30 +56,30 @@ namespace internal {
// The tagged pointer uses the LSB to disambiguate cases, and uses bit 0 == 0 to
// indicate an arena pointer and bit 0 == 1 to indicate a UFS+Arena-container
// pointer.
-template <class T, class Derived>
-class InternalMetadataWithArenaBase {
+class LIBPROTOBUF_EXPORT InternalMetadataWithArena {
public:
- InternalMetadataWithArenaBase() : ptr_(NULL) {}
- explicit InternalMetadataWithArenaBase(Arena* arena) : ptr_(arena) {}
+ InternalMetadataWithArena() : ptr_(NULL) {}
+ explicit InternalMetadataWithArena(Arena* arena)
+ : ptr_ (arena) {}
- ~InternalMetadataWithArenaBase() {
+ ~InternalMetadataWithArena() {
if (have_unknown_fields() && arena() == NULL) {
delete PtrValue<Container>();
}
ptr_ = NULL;
}
- GOOGLE_ATTRIBUTE_ALWAYS_INLINE const T& unknown_fields() const {
+ GOOGLE_ATTRIBUTE_ALWAYS_INLINE const UnknownFieldSet& unknown_fields() const {
if (GOOGLE_PREDICT_FALSE(have_unknown_fields())) {
- return PtrValue<Container>()->unknown_fields;
+ return PtrValue<Container>()->unknown_fields_;
} else {
- return Derived::default_instance();
+ return *UnknownFieldSet::default_instance();
}
}
- GOOGLE_ATTRIBUTE_ALWAYS_INLINE T* mutable_unknown_fields() {
+ GOOGLE_ATTRIBUTE_ALWAYS_INLINE UnknownFieldSet* mutable_unknown_fields() {
if (GOOGLE_PREDICT_TRUE(have_unknown_fields())) {
- return &PtrValue<Container>()->unknown_fields;
+ return &PtrValue<Container>()->unknown_fields_;
} else {
return mutable_unknown_fields_slow();
}
@@ -89,7 +87,7 @@ class InternalMetadataWithArenaBase {
GOOGLE_ATTRIBUTE_ALWAYS_INLINE Arena* arena() const {
if (GOOGLE_PREDICT_FALSE(have_unknown_fields())) {
- return PtrValue<Container>()->arena;
+ return PtrValue<Container>()->arena_;
} else {
return PtrValue<Arena>();
}
@@ -99,7 +97,7 @@ class InternalMetadataWithArenaBase {
return PtrTag() == kTagContainer;
}
- GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Swap(Derived* other) {
+ GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Swap(InternalMetadataWithArena* other) {
// Semantics here are that we swap only the unknown fields, not the arena
// pointer. We cannot simply swap ptr_ with other->ptr_ because we need to
// maintain our own arena ptr. Also, our ptr_ and other's ptr_ may be in
@@ -107,19 +105,7 @@ class InternalMetadataWithArenaBase {
// cannot simply swap ptr_ and then restore the arena pointers. We reuse
// UFS's swap implementation instead.
if (have_unknown_fields() || other->have_unknown_fields()) {
- static_cast<Derived*>(this)->DoSwap(other->mutable_unknown_fields());
- }
- }
-
- GOOGLE_ATTRIBUTE_ALWAYS_INLINE void MergeFrom(const Derived& other) {
- if (other.have_unknown_fields()) {
- static_cast<Derived*>(this)->DoMergeFrom(other.unknown_fields());
- }
- }
-
- GOOGLE_ATTRIBUTE_ALWAYS_INLINE void Clear() {
- if (have_unknown_fields()) {
- static_cast<Derived*>(this)->DoClear();
+ mutable_unknown_fields()->Swap(other->mutable_unknown_fields());
}
}
@@ -145,80 +131,30 @@ class InternalMetadataWithArenaBase {
return reinterpret_cast<intptr_t>(ptr_) & kPtrTagMask;
}
- template<typename U> U* PtrValue() const {
- return reinterpret_cast<U*>(
+ template<typename T> T* PtrValue() const {
+ return reinterpret_cast<T*>(
reinterpret_cast<intptr_t>(ptr_) & kPtrValueMask);
}
// If ptr_'s tag is kTagContainer, it points to an instance of this struct.
struct Container {
- T unknown_fields;
- Arena* arena;
+ UnknownFieldSet unknown_fields_;
+ Arena* arena_;
};
- GOOGLE_ATTRIBUTE_NOINLINE T* mutable_unknown_fields_slow() {
+ GOOGLE_ATTRIBUTE_NOINLINE UnknownFieldSet* mutable_unknown_fields_slow() {
Arena* my_arena = arena();
Container* container = Arena::Create<Container>(my_arena);
ptr_ = reinterpret_cast<void*>(
reinterpret_cast<intptr_t>(container) | kTagContainer);
- container->arena = my_arena;
- return &(container->unknown_fields);
- }
-};
-
-class InternalMetadataWithArena
- : public InternalMetadataWithArenaBase<UnknownFieldSet,
- InternalMetadataWithArena> {
- public:
- InternalMetadataWithArena() {}
- explicit InternalMetadataWithArena(Arena* arena)
- : InternalMetadataWithArenaBase(arena) {}
-
- void DoSwap(UnknownFieldSet* other) {
- mutable_unknown_fields()->Swap(other);
- }
-
- void DoMergeFrom(const UnknownFieldSet& other) {
- mutable_unknown_fields()->MergeFrom(other);
- }
-
- void DoClear() {
- mutable_unknown_fields()->Clear();
- }
-
- static const UnknownFieldSet& default_instance() {
- return *UnknownFieldSet::default_instance();
+ container->arena_ = my_arena;
+ return &(container->unknown_fields_);
}
};
-// We store unknown fields as a string right now, because there is currently no
-// good interface for reading unknown fields into an ArenaString. We may want
-// to revisit this to allow unknown fields to be parsed onto the Arena.
-class InternalMetadataWithArenaLite
- : public InternalMetadataWithArenaBase<string,
- InternalMetadataWithArenaLite> {
- public:
- InternalMetadataWithArenaLite() {}
-
- explicit InternalMetadataWithArenaLite(Arena* arena)
- : InternalMetadataWithArenaBase(arena) {}
-
- void DoSwap(string* other) {
- mutable_unknown_fields()->swap(*other);
- }
-
- void DoMergeFrom(const string& other) {
- mutable_unknown_fields()->append(other);
- }
-
- void DoClear() {
- mutable_unknown_fields()->clear();
- }
-
- static const string& default_instance() {
- return GetEmptyStringAlreadyInited();
- }
-};
+// Temporary compatibility typedef. Remove once this is released in components
+// and upb CL is submitted.
+typedef InternalMetadataWithArena InternalMetadata;
} // namespace internal
} // namespace protobuf
« no previous file with comments | « third_party/protobuf/src/google/protobuf/message_unittest.cc ('k') | third_party/protobuf/src/google/protobuf/reflection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698