|
@@ -55,12 +55,31 @@ void SetStringVariables(const FieldDescriptor* descriptor,
|
|
StrCat(descriptor->default_value_string().length());
|
|
StrCat(descriptor->default_value_string().length());
|
|
std::string default_variable_string = MakeDefaultName(descriptor);
|
|
std::string default_variable_string = MakeDefaultName(descriptor);
|
|
(*variables)["default_variable_name"] = default_variable_string;
|
|
(*variables)["default_variable_name"] = default_variable_string;
|
|
- (*variables)["default_variable"] =
|
|
|
|
|
|
+
|
|
|
|
+ if (!descriptor->default_value_string().empty()) {
|
|
|
|
+ (*variables)["lazy_variable"] =
|
|
|
|
+ QualifiedClassName(descriptor->containing_type(), options) +
|
|
|
|
+ "::" + default_variable_string;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ (*variables)["default_string"] =
|
|
|
|
+ descriptor->default_value_string().empty()
|
|
|
|
+ ? "::" + (*variables)["proto_ns"] +
|
|
|
|
+ "::internal::GetEmptyStringAlreadyInited()"
|
|
|
|
+ : (*variables)["lazy_variable"] + ".get()";
|
|
|
|
+ (*variables)["init_value"] =
|
|
descriptor->default_value_string().empty()
|
|
descriptor->default_value_string().empty()
|
|
? "&::" + (*variables)["proto_ns"] +
|
|
? "&::" + (*variables)["proto_ns"] +
|
|
"::internal::GetEmptyStringAlreadyInited()"
|
|
"::internal::GetEmptyStringAlreadyInited()"
|
|
- : "&" + QualifiedClassName(descriptor->containing_type(), options) +
|
|
|
|
- "::" + default_variable_string + ".get()";
|
|
|
|
|
|
+ : "nullptr";
|
|
|
|
+ (*variables)["default_value_tag"] =
|
|
|
|
+ "::" + (*variables)["proto_ns"] + "::internal::ArenaStringPtr::" +
|
|
|
|
+ (descriptor->default_value_string().empty() ? "Empty" : "NonEmpty") +
|
|
|
|
+ "Default{}";
|
|
|
|
+ (*variables)["default_variable_or_tag"] =
|
|
|
|
+ (*variables)[descriptor->default_value_string().empty()
|
|
|
|
+ ? "default_value_tag"
|
|
|
|
+ : "lazy_variable"];
|
|
(*variables)["pointer_type"] =
|
|
(*variables)["pointer_type"] =
|
|
descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char";
|
|
descriptor->type() == FieldDescriptor::TYPE_BYTES ? "void" : "char";
|
|
(*variables)["null_check"] = (*variables)["DCHK"] + "(value != nullptr);\n";
|
|
(*variables)["null_check"] = (*variables)["DCHK"] + "(value != nullptr);\n";
|
|
@@ -75,9 +94,6 @@ void SetStringVariables(const FieldDescriptor* descriptor,
|
|
} else {
|
|
} else {
|
|
(*variables)["string_piece"] = "::StringPiece";
|
|
(*variables)["string_piece"] = "::StringPiece";
|
|
}
|
|
}
|
|
-
|
|
|
|
- (*variables)["lite"] =
|
|
|
|
- HasDescriptorMethods(descriptor->file(), options) ? "" : "Lite";
|
|
|
|
}
|
|
}
|
|
|
|
|
|
} // namespace
|
|
} // namespace
|
|
@@ -86,9 +102,7 @@ void SetStringVariables(const FieldDescriptor* descriptor,
|
|
|
|
|
|
StringFieldGenerator::StringFieldGenerator(const FieldDescriptor* descriptor,
|
|
StringFieldGenerator::StringFieldGenerator(const FieldDescriptor* descriptor,
|
|
const Options& options)
|
|
const Options& options)
|
|
- : FieldGenerator(descriptor, options),
|
|
|
|
- lite_(!HasDescriptorMethods(descriptor->file(), options)),
|
|
|
|
- inlined_(IsStringInlined(descriptor, options)) {
|
|
|
|
|
|
+ : FieldGenerator(descriptor, options) {
|
|
SetStringVariables(descriptor, &variables_, options);
|
|
SetStringVariables(descriptor, &variables_, options);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -96,23 +110,15 @@ StringFieldGenerator::~StringFieldGenerator() {}
|
|
|
|
|
|
void StringFieldGenerator::GeneratePrivateMembers(io::Printer* printer) const {
|
|
void StringFieldGenerator::GeneratePrivateMembers(io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
- if (inlined_) {
|
|
|
|
- format("::$proto_ns$::internal::InlinedStringField $name$_;\n");
|
|
|
|
- } else {
|
|
|
|
- format("::$proto_ns$::internal::ArenaStringPtr $name$_;\n");
|
|
|
|
- }
|
|
|
|
|
|
+ format("::$proto_ns$::internal::ArenaStringPtr $name$_;\n");
|
|
}
|
|
}
|
|
|
|
|
|
void StringFieldGenerator::GenerateStaticMembers(io::Printer* printer) const {
|
|
void StringFieldGenerator::GenerateStaticMembers(io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
if (!descriptor_->default_value_string().empty()) {
|
|
if (!descriptor_->default_value_string().empty()) {
|
|
- // We make the default instance public, so it can be initialized by
|
|
|
|
- // non-friend code.
|
|
|
|
format(
|
|
format(
|
|
- "public:\n"
|
|
|
|
- "static ::$proto_ns$::internal::ExplicitlyConstructed<std::string>"
|
|
|
|
- " $default_variable_name$;\n"
|
|
|
|
- "private:\n");
|
|
|
|
|
|
+ "static const ::$proto_ns$::internal::LazyString"
|
|
|
|
+ " $default_variable_name$;\n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -187,7 +193,13 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
format(
|
|
format(
|
|
"inline const std::string& $classname$::$name$() const {\n"
|
|
"inline const std::string& $classname$::$name$() const {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
- " // @@protoc_insertion_point(field_get:$full_name$)\n"
|
|
|
|
|
|
+ " // @@protoc_insertion_point(field_get:$full_name$)\n");
|
|
|
|
+ if (!descriptor_->default_value_string().empty()) {
|
|
|
|
+ format(
|
|
|
|
+ " if ($name$_.IsDefault(nullptr)) return "
|
|
|
|
+ "$default_variable_name$.get();\n");
|
|
|
|
+ }
|
|
|
|
+ format(
|
|
" return _internal_$name$();\n"
|
|
" return _internal_$name$();\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline void $classname$::set_$name$(const std::string& value) {\n"
|
|
"inline void $classname$::set_$name$(const std::string& value) {\n"
|
|
@@ -206,21 +218,20 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
"inline void $classname$::_internal_set_$name$(const std::string& "
|
|
"inline void $classname$::_internal_set_$name$(const std::string& "
|
|
"value) {\n"
|
|
"value) {\n"
|
|
" $set_hasbit$\n"
|
|
" $set_hasbit$\n"
|
|
- " $name$_.Set$lite$($default_variable$, value, GetArena());\n"
|
|
|
|
|
|
+ " $name$_.Set($default_value_tag$, value, GetArena());\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline void $classname$::set_$name$(std::string&& value) {\n"
|
|
"inline void $classname$::set_$name$(std::string&& value) {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
" $set_hasbit$\n"
|
|
" $set_hasbit$\n"
|
|
- " $name$_.Set$lite$(\n"
|
|
|
|
- " $default_variable$, ::std::move(value), GetArena());\n"
|
|
|
|
|
|
+ " $name$_.Set(\n"
|
|
|
|
+ " $default_value_tag$, ::std::move(value), GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_rvalue:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_rvalue:$full_name$)\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline void $classname$::set_$name$(const char* value) {\n"
|
|
"inline void $classname$::set_$name$(const char* value) {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
" $null_check$"
|
|
" $null_check$"
|
|
" $set_hasbit$\n"
|
|
" $set_hasbit$\n"
|
|
- " $name$_.Set$lite$($default_variable$, $string_piece$(value),\n"
|
|
|
|
- " GetArena());\n"
|
|
|
|
|
|
+ " $name$_.Set($default_value_tag$, $string_piece$(value), GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_char:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_char:$full_name$)\n"
|
|
"}\n");
|
|
"}\n");
|
|
if (!options_.opensource_runtime) {
|
|
if (!options_.opensource_runtime) {
|
|
@@ -228,7 +239,7 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
"inline void $classname$::set_$name$(::StringPiece value) {\n"
|
|
"inline void $classname$::set_$name$(::StringPiece value) {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
" $set_hasbit$\n"
|
|
" $set_hasbit$\n"
|
|
- " $name$_.Set$lite$($default_variable$, value,GetArena());\n"
|
|
|
|
|
|
+ " $name$_.Set($default_value_tag$, value,GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_string_piece:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_string_piece:$full_name$)\n"
|
|
"}\n");
|
|
"}\n");
|
|
}
|
|
}
|
|
@@ -238,13 +249,13 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" size_t size) {\n"
|
|
" size_t size) {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
" $set_hasbit$\n"
|
|
" $set_hasbit$\n"
|
|
- " $name$_.Set$lite$($default_variable$, $string_piece$(\n"
|
|
|
|
|
|
+ " $name$_.Set($default_value_tag$, $string_piece$(\n"
|
|
" reinterpret_cast<const char*>(value), size), GetArena());\n"
|
|
" reinterpret_cast<const char*>(value), size), GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline std::string* $classname$::_internal_mutable_$name$() {\n"
|
|
"inline std::string* $classname$::_internal_mutable_$name$() {\n"
|
|
" $set_hasbit$\n"
|
|
" $set_hasbit$\n"
|
|
- " return $name$_.Mutable($default_variable$, GetArena());\n"
|
|
|
|
|
|
+ " return $name$_.Mutable($default_variable_or_tag$, GetArena());\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline std::string* $classname$::$release_name$() {\n"
|
|
"inline std::string* $classname$::$release_name$() {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
@@ -256,10 +267,9 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" return nullptr;\n"
|
|
" return nullptr;\n"
|
|
" }\n"
|
|
" }\n"
|
|
" $clear_hasbit$\n"
|
|
" $clear_hasbit$\n"
|
|
- " return $name$_.ReleaseNonDefault("
|
|
|
|
- "$default_variable$, GetArena());\n");
|
|
|
|
|
|
+ " return $name$_.ReleaseNonDefault($init_value$, GetArena());\n");
|
|
} else {
|
|
} else {
|
|
- format(" return $name$_.Release($default_variable$, GetArena());\n");
|
|
|
|
|
|
+ format(" return $name$_.Release($init_value$, GetArena());\n");
|
|
}
|
|
}
|
|
|
|
|
|
format(
|
|
format(
|
|
@@ -271,7 +281,7 @@ void StringFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" } else {\n"
|
|
" } else {\n"
|
|
" $clear_hasbit$\n"
|
|
" $clear_hasbit$\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " $name$_.SetAllocated($default_variable$, $name$,\n"
|
|
|
|
|
|
+ " $name$_.SetAllocated($init_value$, $name$,\n"
|
|
" GetArena());\n"
|
|
" GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_allocated:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_allocated:$full_name$)\n"
|
|
"}\n");
|
|
"}\n");
|
|
@@ -281,23 +291,19 @@ void StringFieldGenerator::GenerateNonInlineAccessorDefinitions(
|
|
io::Printer* printer) const {
|
|
io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
if (!descriptor_->default_value_string().empty()) {
|
|
if (!descriptor_->default_value_string().empty()) {
|
|
- // Initialized in GenerateDefaultInstanceAllocator.
|
|
|
|
format(
|
|
format(
|
|
- "::$proto_ns$::internal::ExplicitlyConstructed<std::string> "
|
|
|
|
- "$classname$::$default_variable_name$;\n");
|
|
|
|
|
|
+ "const ::$proto_ns$::internal::LazyString "
|
|
|
|
+ "$classname$::$default_variable_name$"
|
|
|
|
+ "{{{$default$, $default_length$}}, {nullptr}};\n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void StringFieldGenerator::GenerateClearingCode(io::Printer* printer) const {
|
|
void StringFieldGenerator::GenerateClearingCode(io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
- // Two-dimension specialization here: supporting arenas or not, and default
|
|
|
|
- // value is the empty string or not. Complexity here ensures the minimal
|
|
|
|
- // number of branches / amount of extraneous code at runtime (given that the
|
|
|
|
- // below methods are inlined one-liners)!
|
|
|
|
if (descriptor_->default_value_string().empty()) {
|
|
if (descriptor_->default_value_string().empty()) {
|
|
- format("$name$_.ClearToEmpty($default_variable$, GetArena());\n");
|
|
|
|
|
|
+ format("$name$_.ClearToEmpty();\n");
|
|
} else {
|
|
} else {
|
|
- format("$name$_.ClearToDefault($default_variable$, GetArena());\n");
|
|
|
|
|
|
+ format("$name$_.ClearToDefault($lazy_variable$, GetArena());\n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -311,31 +317,19 @@ void StringFieldGenerator::GenerateMessageClearingCode(
|
|
|
|
|
|
// If we have a hasbit, then the Clear() method of the protocol buffer
|
|
// If we have a hasbit, then the Clear() method of the protocol buffer
|
|
// will have checked that this field is set. If so, we can avoid redundant
|
|
// will have checked that this field is set. If so, we can avoid redundant
|
|
- // checks against default_variable.
|
|
|
|
|
|
+ // checks against the default variable.
|
|
const bool must_be_present = HasHasbit(descriptor_);
|
|
const bool must_be_present = HasHasbit(descriptor_);
|
|
|
|
|
|
- if (inlined_ && must_be_present) {
|
|
|
|
- // Calling mutable_$name$() gives us a string reference and sets the has bit
|
|
|
|
- // for $name$ (in proto2). We may get here when the string field is inlined
|
|
|
|
- // but the string's contents have not been changed by the user, so we cannot
|
|
|
|
- // make an assertion about the contents of the string and could never make
|
|
|
|
- // an assertion about the string instance.
|
|
|
|
- //
|
|
|
|
- // For non-inlined strings, we distinguish from non-default by comparing
|
|
|
|
- // instances, rather than contents.
|
|
|
|
- format("$DCHK$(!$name$_.IsDefault($default_variable$));\n");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (descriptor_->default_value_string().empty()) {
|
|
if (descriptor_->default_value_string().empty()) {
|
|
if (must_be_present) {
|
|
if (must_be_present) {
|
|
format("$name$_.ClearNonDefaultToEmpty();\n");
|
|
format("$name$_.ClearNonDefaultToEmpty();\n");
|
|
} else {
|
|
} else {
|
|
- format("$name$_.ClearToEmpty($default_variable$, GetArena());\n");
|
|
|
|
|
|
+ format("$name$_.ClearToEmpty();\n");
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
// Clear to a non-empty default is more involved, as we try to use the
|
|
// Clear to a non-empty default is more involved, as we try to use the
|
|
// Arena if one is present and may need to reallocate the string.
|
|
// Arena if one is present and may need to reallocate the string.
|
|
- format("$name$_.ClearToDefault($default_variable$, GetArena());\n");
|
|
|
|
|
|
+ format("$name$_.ClearToDefault($lazy_variable$, GetArena());\n ");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -347,23 +341,12 @@ void StringFieldGenerator::GenerateMergingCode(io::Printer* printer) const {
|
|
|
|
|
|
void StringFieldGenerator::GenerateSwappingCode(io::Printer* printer) const {
|
|
void StringFieldGenerator::GenerateSwappingCode(io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
- if (inlined_) {
|
|
|
|
- format("$name$_.Swap(&other->$name$_);\n");
|
|
|
|
- } else {
|
|
|
|
- format("$name$_.Swap(&other->$name$_, $default_variable$, GetArena());\n");
|
|
|
|
- }
|
|
|
|
|
|
+ format("$name$_.Swap(&other->$name$_, $init_value$, GetArena());\n");
|
|
}
|
|
}
|
|
|
|
|
|
void StringFieldGenerator::GenerateConstructorCode(io::Printer* printer) const {
|
|
void StringFieldGenerator::GenerateConstructorCode(io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
- // TODO(ckennelly): Construct non-empty strings as part of the initializer
|
|
|
|
- // list.
|
|
|
|
- if (inlined_ && descriptor_->default_value_string().empty()) {
|
|
|
|
- // Automatic initialization will construct the string.
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- format("$name$_.UnsafeSetDefault($default_variable$);\n");
|
|
|
|
|
|
+ format("$name$_.UnsafeSetDefault($init_value$);\n");
|
|
}
|
|
}
|
|
|
|
|
|
void StringFieldGenerator::GenerateCopyConstructorCode(
|
|
void StringFieldGenerator::GenerateCopyConstructorCode(
|
|
@@ -381,7 +364,7 @@ void StringFieldGenerator::GenerateCopyConstructorCode(
|
|
|
|
|
|
// TODO(gpike): improve this
|
|
// TODO(gpike): improve this
|
|
format(
|
|
format(
|
|
- "$name$_.Set$lite$($default_variable$, from._internal_$name$(),\n"
|
|
|
|
|
|
+ "$name$_.Set($default_value_tag$, from._internal_$name$(), \n"
|
|
" GetArena());\n");
|
|
" GetArena());\n");
|
|
|
|
|
|
format.Outdent();
|
|
format.Outdent();
|
|
@@ -390,40 +373,7 @@ void StringFieldGenerator::GenerateCopyConstructorCode(
|
|
|
|
|
|
void StringFieldGenerator::GenerateDestructorCode(io::Printer* printer) const {
|
|
void StringFieldGenerator::GenerateDestructorCode(io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
- if (inlined_) {
|
|
|
|
- // The destructor is automatically invoked.
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- format("$name$_.DestroyNoArena($default_variable$);\n");
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool StringFieldGenerator::GenerateArenaDestructorCode(
|
|
|
|
- io::Printer* printer) const {
|
|
|
|
- Formatter format(printer, variables_);
|
|
|
|
- if (!inlined_) {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- format("_this->$name$_.DestroyNoArena($default_variable$);\n");
|
|
|
|
- return true;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void StringFieldGenerator::GenerateDefaultInstanceAllocator(
|
|
|
|
- io::Printer* printer) const {
|
|
|
|
- Formatter format(printer, variables_);
|
|
|
|
- if (!descriptor_->default_value_string().empty()) {
|
|
|
|
- format(
|
|
|
|
- "$ns$::$classname$::$default_variable_name$.DefaultConstruct();\n"
|
|
|
|
- "*$ns$::$classname$::$default_variable_name$.get_mutable() = "
|
|
|
|
- "std::string($default$, $default_length$);\n"
|
|
|
|
- "::$proto_ns$::internal::OnShutdownDestroyString(\n"
|
|
|
|
- " $ns$::$classname$::$default_variable_name$.get_mutable());\n");
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool StringFieldGenerator::MergeFromCodedStreamNeedsArena() const {
|
|
|
|
- return !lite_ && !inlined_ && !options_.opensource_runtime;
|
|
|
|
|
|
+ format("$name$_.DestroyNoArena($init_value$);\n");
|
|
}
|
|
}
|
|
|
|
|
|
void StringFieldGenerator::GenerateSerializeWithCachedSizesToArray(
|
|
void StringFieldGenerator::GenerateSerializeWithCachedSizesToArray(
|
|
@@ -449,17 +399,11 @@ void StringFieldGenerator::GenerateByteSize(io::Printer* printer) const {
|
|
" this->_internal_$name$());\n");
|
|
" this->_internal_$name$());\n");
|
|
}
|
|
}
|
|
|
|
|
|
-uint32 StringFieldGenerator::CalculateFieldTag() const {
|
|
|
|
- return inlined_ ? 1 : 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// ===================================================================
|
|
// ===================================================================
|
|
|
|
|
|
StringOneofFieldGenerator::StringOneofFieldGenerator(
|
|
StringOneofFieldGenerator::StringOneofFieldGenerator(
|
|
const FieldDescriptor* descriptor, const Options& options)
|
|
const FieldDescriptor* descriptor, const Options& options)
|
|
: StringFieldGenerator(descriptor, options) {
|
|
: StringFieldGenerator(descriptor, options) {
|
|
- inlined_ = false;
|
|
|
|
-
|
|
|
|
SetCommonOneofFieldVariables(descriptor, &variables_);
|
|
SetCommonOneofFieldVariables(descriptor, &variables_);
|
|
variables_["field_name"] = UnderscoresToCamelCase(descriptor->name(), true);
|
|
variables_["field_name"] = UnderscoresToCamelCase(descriptor->name(), true);
|
|
variables_["oneof_index"] =
|
|
variables_["oneof_index"] =
|
|
@@ -491,16 +435,16 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" if (_internal_has_$name$()) {\n"
|
|
" if (_internal_has_$name$()) {\n"
|
|
" return $field_member$.Get();\n"
|
|
" return $field_member$.Get();\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " return *$default_variable$;\n"
|
|
|
|
|
|
+ " return $default_string$;\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline void $classname$::_internal_set_$name$(const std::string& "
|
|
"inline void $classname$::_internal_set_$name$(const std::string& "
|
|
"value) {\n"
|
|
"value) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" clear_$oneof_name$();\n"
|
|
" clear_$oneof_name$();\n"
|
|
" set_has_$name$();\n"
|
|
" set_has_$name$();\n"
|
|
- " $field_member$.UnsafeSetDefault($default_variable$);\n"
|
|
|
|
|
|
+ " $field_member$.UnsafeSetDefault($init_value$);\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " $field_member$.Set$lite$($default_variable$, value, GetArena());\n"
|
|
|
|
|
|
+ " $field_member$.Set($default_value_tag$, value, GetArena());\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline void $classname$::set_$name$(std::string&& value) {\n"
|
|
"inline void $classname$::set_$name$(std::string&& value) {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
@@ -508,10 +452,10 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" clear_$oneof_name$();\n"
|
|
" clear_$oneof_name$();\n"
|
|
" set_has_$name$();\n"
|
|
" set_has_$name$();\n"
|
|
- " $field_member$.UnsafeSetDefault($default_variable$);\n"
|
|
|
|
|
|
+ " $field_member$.UnsafeSetDefault($init_value$);\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " $field_member$.Set$lite$(\n"
|
|
|
|
- " $default_variable$, ::std::move(value), GetArena());\n"
|
|
|
|
|
|
+ " $field_member$.Set(\n"
|
|
|
|
+ " $default_value_tag$, ::std::move(value), GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_rvalue:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_rvalue:$full_name$)\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline void $classname$::set_$name$(const char* value) {\n"
|
|
"inline void $classname$::set_$name$(const char* value) {\n"
|
|
@@ -520,9 +464,9 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" clear_$oneof_name$();\n"
|
|
" clear_$oneof_name$();\n"
|
|
" set_has_$name$();\n"
|
|
" set_has_$name$();\n"
|
|
- " $field_member$.UnsafeSetDefault($default_variable$);\n"
|
|
|
|
|
|
+ " $field_member$.UnsafeSetDefault($init_value$);\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " $field_member$.Set$lite$($default_variable$,\n"
|
|
|
|
|
|
+ " $field_member$.Set($default_value_tag$,\n"
|
|
" $string_piece$(value), GetArena());\n"
|
|
" $string_piece$(value), GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_char:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_char:$full_name$)\n"
|
|
"}\n");
|
|
"}\n");
|
|
@@ -533,10 +477,9 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" clear_$oneof_name$();\n"
|
|
" clear_$oneof_name$();\n"
|
|
" set_has_$name$();\n"
|
|
" set_has_$name$();\n"
|
|
- " $field_member$.UnsafeSetDefault($default_variable$);\n"
|
|
|
|
|
|
+ " $field_member$.UnsafeSetDefault($init_value$);\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " $field_member$.Set$lite$($default_variable$, value,\n"
|
|
|
|
- " GetArena());\n"
|
|
|
|
|
|
+ " $field_member$.Set($default_value_tag$, value, GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_string_piece:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_string_piece:$full_name$)\n"
|
|
"}\n");
|
|
"}\n");
|
|
}
|
|
}
|
|
@@ -548,10 +491,10 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" clear_$oneof_name$();\n"
|
|
" clear_$oneof_name$();\n"
|
|
" set_has_$name$();\n"
|
|
" set_has_$name$();\n"
|
|
- " $field_member$.UnsafeSetDefault($default_variable$);\n"
|
|
|
|
|
|
+ " $field_member$.UnsafeSetDefault($init_value$);\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " $field_member$.Set$lite$(\n"
|
|
|
|
- " $default_variable$, $string_piece$(\n"
|
|
|
|
|
|
+ " $field_member$.Set(\n"
|
|
|
|
+ " $default_value_tag$, $string_piece$(\n"
|
|
" reinterpret_cast<const char*>(value), size),\n"
|
|
" reinterpret_cast<const char*>(value), size),\n"
|
|
" GetArena());\n"
|
|
" GetArena());\n"
|
|
" // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_set_pointer:$full_name$)\n"
|
|
@@ -560,16 +503,17 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" if (!_internal_has_$name$()) {\n"
|
|
" clear_$oneof_name$();\n"
|
|
" clear_$oneof_name$();\n"
|
|
" set_has_$name$();\n"
|
|
" set_has_$name$();\n"
|
|
- " $field_member$.UnsafeSetDefault($default_variable$);\n"
|
|
|
|
|
|
+ " $field_member$.UnsafeSetDefault($init_value$);\n"
|
|
" }\n"
|
|
" }\n"
|
|
- " return $field_member$.Mutable($default_variable$, GetArena());\n"
|
|
|
|
|
|
+ " return $field_member$.Mutable(\n"
|
|
|
|
+ " $default_variable_or_tag$, GetArena());\n"
|
|
"}\n"
|
|
"}\n"
|
|
"inline std::string* $classname$::$release_name$() {\n"
|
|
"inline std::string* $classname$::$release_name$() {\n"
|
|
"$annotate_accessor$"
|
|
"$annotate_accessor$"
|
|
" // @@protoc_insertion_point(field_release:$full_name$)\n"
|
|
" // @@protoc_insertion_point(field_release:$full_name$)\n"
|
|
" if (_internal_has_$name$()) {\n"
|
|
" if (_internal_has_$name$()) {\n"
|
|
" clear_has_$oneof_name$();\n"
|
|
" clear_has_$oneof_name$();\n"
|
|
- " return $field_member$.Release($default_variable$, GetArena());\n"
|
|
|
|
|
|
+ " return $field_member$.ReleaseNonDefault($init_value$, GetArena());\n"
|
|
" } else {\n"
|
|
" } else {\n"
|
|
" return nullptr;\n"
|
|
" return nullptr;\n"
|
|
" }\n"
|
|
" }\n"
|
|
@@ -594,7 +538,7 @@ void StringOneofFieldGenerator::GenerateInlineAccessorDefinitions(
|
|
void StringOneofFieldGenerator::GenerateClearingCode(
|
|
void StringOneofFieldGenerator::GenerateClearingCode(
|
|
io::Printer* printer) const {
|
|
io::Printer* printer) const {
|
|
Formatter format(printer, variables_);
|
|
Formatter format(printer, variables_);
|
|
- format("$field_member$.Destroy($default_variable$, GetArena());\n");
|
|
|
|
|
|
+ format("$field_member$.Destroy($default_value_tag$, GetArena());\n");
|
|
}
|
|
}
|
|
|
|
|
|
void StringOneofFieldGenerator::GenerateMessageClearingCode(
|
|
void StringOneofFieldGenerator::GenerateMessageClearingCode(
|
|
@@ -609,10 +553,7 @@ void StringOneofFieldGenerator::GenerateSwappingCode(
|
|
|
|
|
|
void StringOneofFieldGenerator::GenerateConstructorCode(
|
|
void StringOneofFieldGenerator::GenerateConstructorCode(
|
|
io::Printer* printer) const {
|
|
io::Printer* printer) const {
|
|
- Formatter format(printer, variables_);
|
|
|
|
- format(
|
|
|
|
- "$ns$::_$classname$_default_instance_.$name$_.UnsafeSetDefault(\n"
|
|
|
|
- " $default_variable$);\n");
|
|
|
|
|
|
+ // Nothing required here.
|
|
}
|
|
}
|
|
|
|
|
|
// ===================================================================
|
|
// ===================================================================
|