1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7
8 #include "google/protobuf/generated_message_bases.h"
9
10 #include <cstddef>
11
12 #include "google/protobuf/generated_message_reflection.h"
13 #include "google/protobuf/io/coded_stream.h"
14 #include "google/protobuf/io/zero_copy_stream_impl.h"
15 #include "google/protobuf/message_lite.h"
16 #include "google/protobuf/parse_context.h"
17 #include "google/protobuf/unknown_field_set.h"
18 #include "google/protobuf/wire_format.h"
19 #include "google/protobuf/wire_format_lite.h"
20
21 // Must be last:
22 #include "google/protobuf/port_def.inc"
23
24 namespace google {
25 namespace protobuf {
26 namespace internal {
27
28 // =============================================================================
29 // ZeroFieldsBase
30
Clear(MessageLite & msg)31 void ZeroFieldsBase::Clear(MessageLite& msg) {
32 static_cast<ZeroFieldsBase&>(msg)
33 ._internal_metadata_.Clear<UnknownFieldSet>();
34 }
35
~ZeroFieldsBase()36 ZeroFieldsBase::~ZeroFieldsBase() {
37 _internal_metadata_.Delete<UnknownFieldSet>();
38 }
39
SharedDtor(MessageLite & msg)40 void ZeroFieldsBase::SharedDtor(MessageLite& msg) {
41 static_cast<ZeroFieldsBase&>(msg)
42 ._internal_metadata_.Delete<UnknownFieldSet>();
43 }
44
ByteSizeLong(const MessageLite & base)45 size_t ZeroFieldsBase::ByteSizeLong(const MessageLite& base) {
46 auto& msg = static_cast<const ZeroFieldsBase&>(base);
47 return msg.MaybeComputeUnknownFieldsSize(0, &msg._impl_._cached_size_);
48 }
49
_InternalSerialize(const MessageLite & msg,::uint8_t * target,io::EpsCopyOutputStream * stream)50 ::uint8_t* ZeroFieldsBase::_InternalSerialize(const MessageLite& msg,
51 ::uint8_t* target,
52 io::EpsCopyOutputStream* stream) {
53 auto& this_ = static_cast<const ZeroFieldsBase&>(msg);
54 if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
55 target = internal::WireFormat::InternalSerializeUnknownFieldsToArray(
56 this_._internal_metadata_.unknown_fields<UnknownFieldSet>(
57 UnknownFieldSet::default_instance),
58 target, stream);
59 }
60 return target;
61 }
62
MergeImpl(MessageLite & to_param,const MessageLite & from_param)63 void ZeroFieldsBase::MergeImpl(MessageLite& to_param,
64 const MessageLite& from_param) {
65 auto* to = static_cast<ZeroFieldsBase*>(&to_param);
66 const auto* from = static_cast<const ZeroFieldsBase*>(&from_param);
67 ABSL_DCHECK_NE(from, to);
68 to->_internal_metadata_.MergeFrom<UnknownFieldSet>(from->_internal_metadata_);
69 }
70
CopyImpl(Message & to_param,const Message & from_param)71 void ZeroFieldsBase::CopyImpl(Message& to_param, const Message& from_param) {
72 auto* to = static_cast<ZeroFieldsBase*>(&to_param);
73 const auto* from = static_cast<const ZeroFieldsBase*>(&from_param);
74 if (from == to) return;
75 to->_internal_metadata_.Clear<UnknownFieldSet>();
76 to->_internal_metadata_.MergeFrom<UnknownFieldSet>(from->_internal_metadata_);
77 }
78
InternalSwap(ZeroFieldsBase * other)79 void ZeroFieldsBase::InternalSwap(ZeroFieldsBase* other) {
80 _internal_metadata_.Swap<UnknownFieldSet>(&other->_internal_metadata_);
81 }
82
83 } // namespace internal
84 } // namespace protobuf
85 } // namespace google
86
87 #include "google/protobuf/port_undef.inc"
88