fold Ptr into hpb namespace

PiperOrigin-RevId: 654835437
pull/17486/head
Hong Shin 8 months ago committed by Copybara-Service
parent 9d2dafe1e5
commit 9e38dce616
  1. 34
      hpb/hpb.h
  2. 12
      hpb/repeated_field.h
  3. 24
      hpb_generator/gen_messages.cc
  4. 12
      hpb_generator/gen_repeated_fields.cc
  5. 5
      hpb_generator/names.cc
  6. 55
      hpb_generator/tests/test_generated.cc

@ -24,11 +24,6 @@
namespace hpb {
using Arena = ::upb::Arena;
}
namespace protos {
using hpb::Arena;
class ExtensionRegistry;
template <typename T>
using Proxy = std::conditional_t<std::is_const<T>::value,
@ -87,6 +82,13 @@ class Ptr final {
template <typename T>
Ptr(T* m) -> Ptr<T>;
} // namespace hpb
namespace protos {
using hpb::Arena;
using hpb::Ptr;
class ExtensionRegistry;
inline absl::string_view UpbStrToStringView(upb_StringView str) {
return absl::string_view(str.data, str.size);
}
@ -101,7 +103,7 @@ inline upb_StringView UpbStrFromStringView(absl::string_view str,
}
template <typename T>
typename T::Proxy CreateMessage(::protos::Arena& arena) {
typename T::Proxy CreateMessage(::hpb::Arena& arena) {
return typename T::Proxy(upb_Message_New(T::minitable(), arena.ptr()),
arena.ptr());
}
@ -310,19 +312,19 @@ typename T::Proxy CloneMessage(Ptr<T> message, upb_Arena* arena) {
template <typename T>
void DeepCopy(Ptr<const T> source_message, T* target_message) {
static_assert(!std::is_const_v<T>);
DeepCopy(source_message, protos::Ptr(target_message));
DeepCopy(source_message, Ptr(target_message));
}
template <typename T>
void DeepCopy(const T* source_message, Ptr<T> target_message) {
static_assert(!std::is_const_v<T>);
DeepCopy(protos::Ptr(source_message), target_message);
DeepCopy(Ptr(source_message), target_message);
}
template <typename T>
void DeepCopy(const T* source_message, T* target_message) {
static_assert(!std::is_const_v<T>);
DeepCopy(protos::Ptr(source_message), protos::Ptr(target_message));
DeepCopy(Ptr(source_message), Ptr(target_message));
}
template <typename T>
@ -371,7 +373,7 @@ template <typename T, typename Extendee, typename Extension,
ABSL_MUST_USE_RESULT bool HasExtension(
const T* message,
const ::protos::internal::ExtensionIdentifier<Extendee, Extension>& id) {
return HasExtension(protos::Ptr(message), id);
return HasExtension(Ptr(message), id);
}
template <typename T, typename Extension,
@ -390,7 +392,7 @@ template <typename T, typename Extension,
void ClearExtension(
T* message,
const ::protos::internal::ExtensionIdentifier<T, Extension>& id) {
ClearExtension(::protos::Ptr(message), id);
ClearExtension(Ptr(message), id);
}
template <typename T, typename Extension,
@ -442,7 +444,7 @@ template <typename T, typename Extension,
absl::Status SetExtension(
T* message, const ::protos::internal::ExtensionIdentifier<T, Extension>& id,
const Extension& value) {
return ::protos::SetExtension(::protos::Ptr(message), id, value);
return ::protos::SetExtension(Ptr(message), id, value);
}
template <typename T, typename Extension,
@ -450,7 +452,7 @@ template <typename T, typename Extension,
absl::Status SetExtension(
T* message, const ::protos::internal::ExtensionIdentifier<T, Extension>& id,
Extension&& value) {
return ::protos::SetExtension(::protos::Ptr(message), id,
return ::protos::SetExtension(Ptr(message), id,
std::forward<Extension>(value));
}
@ -459,7 +461,7 @@ template <typename T, typename Extension,
absl::Status SetExtension(
T* message, const ::protos::internal::ExtensionIdentifier<T, Extension>& id,
Ptr<Extension> value) {
return ::protos::SetExtension(::protos::Ptr(message), id, value);
return ::protos::SetExtension(Ptr(message), id, value);
}
template <typename T, typename Extendee, typename Extension,
@ -485,7 +487,7 @@ template <typename T, typename Extendee, typename Extension,
absl::StatusOr<Ptr<const Extension>> GetExtension(
const T* message,
const ::protos::internal::ExtensionIdentifier<Extendee, Extension>& id) {
return GetExtension(protos::Ptr(message), id);
return GetExtension(Ptr(message), id);
}
template <typename T>
@ -522,7 +524,7 @@ ABSL_MUST_USE_RESULT bool Parse(
T* message, absl::string_view bytes,
const ::protos::ExtensionRegistry& extension_registry) {
static_assert(!std::is_const_v<T>);
return Parse(protos::Ptr(message, bytes, extension_registry));
return Parse(Ptr(message, bytes, extension_registry));
}
template <typename T>

@ -94,7 +94,7 @@ class RepeatedFieldProxy
: RepeatedFieldProxyBase<T>(arr, arena) {}
RepeatedFieldProxy(upb_Array* arr, upb_Arena* arena)
: RepeatedFieldProxyMutableBase<T>(arr, arena) {}
// Constructor used by ::protos::Ptr.
// Constructor used by ::hpb::Ptr.
RepeatedFieldProxy(const RepeatedFieldProxy&) = default;
// T::CProxy [] operator specialization.
@ -147,7 +147,7 @@ class RepeatedFieldProxy
reverse_iterator rend() const { return reverse_iterator(begin()); }
private:
friend class ::protos::Ptr<T>;
friend class ::hpb::Ptr<T>;
};
// RepeatedField proxy for repeated strings.
@ -175,7 +175,7 @@ class RepeatedFieldStringProxy
// Mutable constructor.
RepeatedFieldStringProxy(upb_Array* arr, upb_Arena* arena)
: RepeatedFieldProxyMutableBase<T>(arr, arena) {}
// Constructor used by ::protos::Ptr.
// Constructor used by ::hpb::Ptr.
RepeatedFieldStringProxy(const RepeatedFieldStringProxy&) = default;
reference operator[](size_t n) const { return begin()[n]; }
@ -222,7 +222,7 @@ class RepeatedFieldScalarProxy
: RepeatedFieldProxyBase<T>(arr, arena) {}
RepeatedFieldScalarProxy(upb_Array* arr, upb_Arena* arena)
: RepeatedFieldProxyMutableBase<T>(arr, arena) {}
// Constructor used by ::protos::Ptr.
// Constructor used by ::hpb::Ptr.
RepeatedFieldScalarProxy(const RepeatedFieldScalarProxy&) = default;
T operator[](size_t n) const {
@ -285,10 +285,10 @@ class RepeatedField {
// We would like to reference T::CProxy. Validate forwarding header design.
using ValueProxy = std::conditional_t<
kIsScalar, T,
std::conditional_t<kIsString, absl::string_view, ::protos::Ptr<T>>>;
std::conditional_t<kIsString, absl::string_view, ::hpb::Ptr<T>>>;
using ValueCProxy = std::conditional_t<
kIsScalar, const T,
std::conditional_t<kIsString, absl::string_view, ::protos::Ptr<const T>>>;
std::conditional_t<kIsString, absl::string_view, ::hpb::Ptr<const T>>>;
using Access = std::conditional_t<
kIsScalar, internal::RepeatedFieldScalarProxy<T>,
std::conditional_t<kIsString, internal::RepeatedFieldStringProxy<T>,

@ -237,7 +237,7 @@ void WriteModelPublicDeclaration(
arena_ = owned_arena_.ptr();
upb_Arena_Fuse(arena_, arena);
}
::protos::Arena owned_arena_;
::hpb::Arena owned_arena_;
friend struct ::protos::internal::PrivateAccess;
friend Proxy;
friend CProxy;
@ -248,7 +248,7 @@ void WriteModelPublicDeclaration(
const ::protos::ExtensionRegistry& extension_registry,
int options));
friend upb_Arena* ::protos::internal::GetArena<$0>($0* message);
friend upb_Arena* ::protos::internal::GetArena<$0>(::protos::Ptr<$0> message);
friend upb_Arena* ::protos::internal::GetArena<$0>(::hpb::Ptr<$0> message);
friend $0(::hpb::internal::MoveMessage<$0>(upb_Message* msg, upb_Arena* arena));
)cc",
ClassName(descriptor), MessageName(descriptor),
@ -293,22 +293,22 @@ void WriteModelProxyDeclaration(const protobuf::Descriptor* descriptor,
$0Proxy(upb_Message* msg, upb_Arena* arena)
: internal::$0Access(($1*)msg, arena) {}
friend $0::Proxy(::protos::CreateMessage<$0>(::protos::Arena& arena));
friend $0::Proxy(::protos::CreateMessage<$0>(::hpb::Arena& arena));
friend $0::Proxy(::protos::internal::CreateMessageProxy<$0>(
upb_Message*, upb_Arena*));
friend struct ::protos::internal::PrivateAccess;
friend class RepeatedFieldProxy;
friend class $0CProxy;
friend class $0Access;
friend class ::protos::Ptr<$0>;
friend class ::protos::Ptr<const $0>;
friend class ::hpb::Ptr<$0>;
friend class ::hpb::Ptr<const $0>;
static const upb_MiniTable* minitable() { return $0::minitable(); }
friend const upb_MiniTable* ::protos::internal::GetMiniTable<$0Proxy>(
const $0Proxy* message);
friend const upb_MiniTable* ::protos::internal::GetMiniTable<$0Proxy>(
::protos::Ptr<$0Proxy> message);
::hpb::Ptr<$0Proxy> message);
friend upb_Arena* ::protos::internal::GetArena<$2>($2* message);
friend upb_Arena* ::protos::internal::GetArena<$2>(::protos::Ptr<$2> message);
friend upb_Arena* ::protos::internal::GetArena<$2>(::hpb::Ptr<$2> message);
static void Rebind($0Proxy& lhs, const $0Proxy& rhs) {
lhs.msg_ = rhs.msg_;
lhs.arena_ = rhs.arena_;
@ -349,13 +349,13 @@ void WriteModelCProxyDeclaration(const protobuf::Descriptor* descriptor,
: internal::$0Access(($1*)msg, arena){};
friend struct ::protos::internal::PrivateAccess;
friend class RepeatedFieldProxy;
friend class ::protos::Ptr<$0>;
friend class ::protos::Ptr<const $0>;
friend class ::hpb::Ptr<$0>;
friend class ::hpb::Ptr<const $0>;
static const upb_MiniTable* minitable() { return $0::minitable(); }
friend const upb_MiniTable* ::protos::internal::GetMiniTable<$0CProxy>(
const $0CProxy* message);
friend const upb_MiniTable* ::protos::internal::GetMiniTable<$0CProxy>(
::protos::Ptr<$0CProxy> message);
::hpb::Ptr<$0CProxy> message);
static void Rebind($0CProxy& lhs, const $0CProxy& rhs) {
lhs.msg_ = rhs.msg_;
@ -369,7 +369,7 @@ void WriteModelCProxyDeclaration(const protobuf::Descriptor* descriptor,
void WriteDefaultInstanceHeader(const protobuf::Descriptor* message,
Output& output) {
output(" static ::protos::Ptr<const $0> default_instance();\n",
output(" static ::hpb::Ptr<const $0> default_instance();\n",
ClassName(message));
}
@ -445,7 +445,7 @@ void WriteMessageImplementation(
output(
R"cc(
::protos::Ptr<const $0> $0::default_instance() {
::hpb::Ptr<const $0> $0::default_instance() {
return ::protos::internal::CreateMessage<$0>(
(upb_Message *)_$0_default_instance_.msg,
_$0_default_instance_.arena);

@ -87,7 +87,7 @@ void WriteRepeatedFieldsInMessageHeader(const protobuf::Descriptor* desc,
R"cc(
$1 $2(size_t index) const;
const ::protos::RepeatedField<const $4>::CProxy $2() const;
::protos::Ptr<::protos::RepeatedField<$4>> mutable_$2();
::hpb::Ptr<::protos::RepeatedField<$4>> mutable_$2();
absl::StatusOr<$0> add_$2();
$0 mutable_$2(size_t index) const;
)cc",
@ -102,7 +102,7 @@ void WriteRepeatedFieldsInMessageHeader(const protobuf::Descriptor* desc,
R"cc(
$0 $1(size_t index) const;
const ::protos::RepeatedField<$0>::CProxy $1() const;
::protos::Ptr<::protos::RepeatedField<$0>> mutable_$1();
::hpb::Ptr<::protos::RepeatedField<$0>> mutable_$1();
bool add_$1($0 val);
void set_$1(size_t index, $0 val);
bool resize_$1(size_t len);
@ -113,7 +113,7 @@ void WriteRepeatedFieldsInMessageHeader(const protobuf::Descriptor* desc,
R"cc(
$0 $1(size_t index) const;
const ::protos::RepeatedField<$0>::CProxy $1() const;
::protos::Ptr<::protos::RepeatedField<$0>> mutable_$1();
::hpb::Ptr<::protos::RepeatedField<$0>> mutable_$1();
bool add_$1($0 val);
void set_$1(size_t index, $0 val);
bool resize_$1(size_t len);
@ -177,7 +177,7 @@ void WriteRepeatedMessageAccessor(const protobuf::Descriptor* message,
const upb_Array* arr = _$3_$4_$5(msg_, &size);
return ::protos::RepeatedField<const $1>::CProxy(arr, arena_);
};
::protos::Ptr<::protos::RepeatedField<$1>> $0::mutable_$2() {
::hpb::Ptr<::protos::RepeatedField<$1>> $0::mutable_$2() {
size_t size;
upb_Array* arr = _$3_$4_$6(msg_, &size, arena_);
return ::protos::RepeatedField<$1>::Proxy(arr, arena_);
@ -243,7 +243,7 @@ void WriteRepeatedStringAccessor(const protobuf::Descriptor* message,
const upb_Array* arr = _$3_$4_$5(msg_, &size);
return ::protos::RepeatedField<$1>::CProxy(arr, arena_);
};
::protos::Ptr<::protos::RepeatedField<$1>> $0::mutable_$2() {
::hpb::Ptr<::protos::RepeatedField<$1>> $0::mutable_$2() {
size_t size;
upb_Array* arr = _$3_$4_$6(msg_, &size, arena_);
return ::protos::RepeatedField<$1>::Proxy(arr, arena_);
@ -307,7 +307,7 @@ void WriteRepeatedScalarAccessor(const protobuf::Descriptor* message,
const upb_Array* arr = _$3_$4_$5(msg_, &size);
return ::protos::RepeatedField<$1>::CProxy(arr, arena_);
};
::protos::Ptr<::protos::RepeatedField<$1>> $0::mutable_$2() {
::hpb::Ptr<::protos::RepeatedField<$1>> $0::mutable_$2() {
size_t size;
upb_Array* arr = _$3_$4_$6(msg_, &size, arena_);
return ::protos::RepeatedField<$1>::Proxy(arr, arena_);

@ -17,6 +17,7 @@ namespace protobuf = ::proto2;
namespace {
// TODO: b/346865271 append ::hpb instead of ::protos after namespace swap
std::string NamespaceFromPackageName(absl::string_view package_name) {
return absl::StrCat(absl::StrReplaceAll(package_name, {{".", "::"}}),
"::protos");
@ -82,7 +83,7 @@ std::string ClassName(const protobuf::Descriptor* descriptor) {
const protobuf::Descriptor* parent = descriptor->containing_type();
std::string res;
// Classes in global namespace without package names are prefixed
// by protos_ to avoid collision with C compiler structs defined in
// by hpb_ to avoid collision with C compiler structs defined in
// proto.upb.h.
if ((parent && parent->file()->package().empty()) ||
descriptor->file()->package().empty()) {
@ -155,7 +156,7 @@ std::string MessagePtrConstType(const protobuf::FieldDescriptor* field,
bool is_const) {
ABSL_DCHECK(field->cpp_type() == protobuf::FieldDescriptor::CPPTYPE_MESSAGE);
std::string maybe_const = is_const ? "const " : "";
return "::protos::Ptr<" + maybe_const +
return "::hpb::Ptr<" + maybe_const +
QualifiedClassName(field->message_type()) + ">";
}

@ -700,7 +700,7 @@ TEST(CppGeneratedCode, ClearExtensionWithEmptyExtension) {
TEST(CppGeneratedCode, ClearExtensionWithEmptyExtensionPtr) {
TestModel model;
::protos::Ptr<TestModel> recursive_child = model.mutable_recursive_child();
::hpb::Ptr<TestModel> recursive_child = model.mutable_recursive_child();
::protos::ClearExtension(recursive_child, theme);
EXPECT_EQ(false, ::protos::HasExtension(recursive_child, theme));
}
@ -726,13 +726,12 @@ TEST(CppGeneratedCode, SetExtension) {
TEST(CppGeneratedCode, SetExtensionWithPtr) {
::hpb::Arena arena_model;
::protos::Ptr<TestModel> model =
::protos::CreateMessage<TestModel>(arena_model);
::hpb::Ptr<TestModel> model = ::protos::CreateMessage<TestModel>(arena_model);
void* prior_message;
{
// Use a nested scope to make sure the arenas are fused correctly.
::hpb::Arena arena;
::protos::Ptr<ThemeExtension> extension1 =
::hpb::Ptr<ThemeExtension> extension1 =
::protos::CreateMessage<ThemeExtension>(arena);
extension1->set_ext_name("Hello World");
prior_message = ::protos::internal::GetInternalMsg(extension1);
@ -749,7 +748,7 @@ TEST(CppGeneratedCode, SetExtensionWithPtr) {
#ifndef _MSC_VER
TEST(CppGeneratedCode, SetExtensionShouldNotCompileForWrongType) {
::hpb::Arena arena;
::protos::Ptr<TestModel> model = ::protos::CreateMessage<TestModel>(arena);
::hpb::Ptr<TestModel> model = ::protos::CreateMessage<TestModel>(arena);
ThemeExtension extension1;
ContainerExtension extension2;
@ -770,11 +769,11 @@ TEST(CppGeneratedCode, SetExtensionShouldNotCompileForWrongType) {
TEST(CppGeneratedCode, SetExtensionWithPtrSameArena) {
::hpb::Arena arena;
::protos::Ptr<TestModel> model = ::protos::CreateMessage<TestModel>(arena);
::hpb::Ptr<TestModel> model = ::protos::CreateMessage<TestModel>(arena);
void* prior_message;
{
// Use a nested scope to make sure the arenas are fused correctly.
::protos::Ptr<ThemeExtension> extension1 =
::hpb::Ptr<ThemeExtension> extension1 =
::protos::CreateMessage<ThemeExtension>(arena);
extension1->set_ext_name("Hello World");
prior_message = ::protos::internal::GetInternalMsg(extension1);
@ -791,9 +790,9 @@ TEST(CppGeneratedCode, SetExtensionWithPtrSameArena) {
TEST(CppGeneratedCode, SetExtensionFusingFailureShouldCopy) {
// Use an initial block to disallow fusing.
char initial_block[1000];
protos::Arena arena(initial_block, sizeof(initial_block));
hpb::Arena arena(initial_block, sizeof(initial_block));
protos::Ptr<TestModel> model = protos::CreateMessage<TestModel>(arena);
hpb::Ptr<TestModel> model = ::protos::CreateMessage<TestModel>(arena);
ThemeExtension extension1;
extension1.set_ext_name("Hello World");
@ -861,7 +860,7 @@ TEST(CppGeneratedCode, GetExtensionOnMutableChild) {
TestModel model;
ThemeExtension extension1;
extension1.set_ext_name("Hello World");
::protos::Ptr<TestModel> mutable_recursive_child =
::hpb::Ptr<TestModel> mutable_recursive_child =
model.mutable_recursive_child();
EXPECT_EQ(false, ::protos::HasExtension(mutable_recursive_child, theme));
EXPECT_EQ(
@ -877,13 +876,13 @@ TEST(CppGeneratedCode, GetExtensionOnImmutableChild) {
TestModel model;
ThemeExtension extension1;
extension1.set_ext_name("Hello World");
::protos::Ptr<TestModel> mutable_recursive_child =
::hpb::Ptr<TestModel> mutable_recursive_child =
model.mutable_recursive_child();
EXPECT_EQ(false, ::protos::HasExtension(mutable_recursive_child, theme));
EXPECT_EQ(
true,
::protos::SetExtension(mutable_recursive_child, theme, extension1).ok());
::protos::Ptr<const TestModel> recursive_child = model.recursive_child();
::hpb::Ptr<const TestModel> recursive_child = model.recursive_child();
EXPECT_EQ("Hello World",
::protos::GetExtension(recursive_child, theme).value()->ext_name());
}
@ -915,7 +914,7 @@ TEST(CppGeneratedCode, SerializeNestedMessageUsingArena) {
TestModel model;
model.mutable_recursive_child()->set_str1("Hello World");
::upb::Arena arena;
::protos::Ptr<const TestModel> child = model.recursive_child();
::hpb::Ptr<const TestModel> child = model.recursive_child();
absl::StatusOr<absl::string_view> bytes = ::protos::Serialize(child, arena);
EXPECT_EQ(true, bytes.ok());
TestModel parsed_model = ::protos::Parse<TestModel>(bytes.value()).value();
@ -945,7 +944,7 @@ TEST(CppGeneratedCode, ParseIntoPtrToModel) {
::upb::Arena arena;
auto bytes = ::protos::Serialize(&model, arena);
EXPECT_EQ(true, bytes.ok());
::protos::Ptr<TestModel> parsed_model =
::hpb::Ptr<TestModel> parsed_model =
::protos::CreateMessage<TestModel>(arena);
EXPECT_TRUE(::protos::Parse(parsed_model, bytes.value()));
EXPECT_EQ("Test123", parsed_model->str1());
@ -992,15 +991,15 @@ TEST(CppGeneratedCode, NameCollisions) {
TEST(CppGeneratedCode, SharedPointer) {
std::shared_ptr<TestModel> model = std::make_shared<TestModel>();
::upb::Arena arena;
auto bytes = protos::Serialize(model.get(), arena);
EXPECT_TRUE(protos::Parse(model.get(), bytes.value()));
auto bytes = ::protos::Serialize(model.get(), arena);
EXPECT_TRUE(::protos::Parse(model.get(), bytes.value()));
}
TEST(CppGeneratedCode, UniquePointer) {
auto model = std::make_unique<TestModel>();
::upb::Arena arena;
auto bytes = protos::Serialize(model.get(), arena);
EXPECT_TRUE(protos::Parse(model.get(), bytes.value()));
auto bytes = ::protos::Serialize(model.get(), arena);
EXPECT_TRUE(::protos::Parse(model.get(), bytes.value()));
}
TEST(CppGeneratedCode, Assignment) {
@ -1039,21 +1038,21 @@ TEST(CppGeneratedCode, PtrConstructor) {
TEST(CppGeneratedCode, MutableToProxy) {
TestModel model;
::protos::Ptr<ChildModel1> child = model.mutable_child_model_1();
::hpb::Ptr<ChildModel1> child = model.mutable_child_model_1();
(void)child;
}
TEST(CppGeneratedCode, ProxyToCProxy) {
TestModel model;
::protos::Ptr<ChildModel1> child = model.mutable_child_model_1();
::protos::Ptr<const ChildModel1> child2 = child;
::hpb::Ptr<ChildModel1> child = model.mutable_child_model_1();
::hpb::Ptr<const ChildModel1> child2 = child;
(void)child2;
}
TEST(CppGeneratedCode, MutableAccessorsAreHiddenInCProxy) {
TestModel model;
::protos::Ptr<TestModel> proxy = &model;
::protos::Ptr<const TestModel> cproxy = proxy;
::hpb::Ptr<TestModel> proxy = &model;
::hpb::Ptr<const TestModel> cproxy = proxy;
const auto test_const_accessors = [](auto p) {
// We don't want to run it, just check it compiles.
@ -1105,7 +1104,7 @@ TEST(CppGeneratedCode, MutableAccessorsAreHiddenInCProxy) {
test_mutable_accessors(cproxy, false);
}
bool ProxyToCProxyMethod(::protos::Ptr<const ChildModel1> child) {
bool ProxyToCProxyMethod(::hpb::Ptr<const ChildModel1> child) {
return child->child_str1() == "text in child";
}
@ -1118,7 +1117,7 @@ TEST(CppGeneratedCode, PassProxyToCProxy) {
TEST(CppGeneratedCode, PtrImplicitConversion) {
TestModel model;
model.set_int64(5);
::protos::Ptr<TestModel> model_ptr = &model;
::hpb::Ptr<TestModel> model_ptr = &model;
EXPECT_EQ(model_ptr->int64(), 5);
}
@ -1163,7 +1162,7 @@ TEST(CppGeneratedCode, CanInvokeClearMessageWithPtr) {
model.set_int64(5);
auto new_child = model.add_child_models();
// Clear using Ptr<T>
auto ptr = ::protos::Ptr<TestModel>(&model);
auto ptr = ::hpb::Ptr<TestModel>(&model);
::protos::ClearMessage(ptr);
// Successful clear
EXPECT_FALSE(model.has_int64());
@ -1186,8 +1185,8 @@ bool CanCallClearMessage() {
}
TEST(CppGeneratedCode, CannotInvokeClearMessageWithConstPtr) {
EXPECT_TRUE(CanCallClearMessage<::protos::Ptr<TestModel>>());
EXPECT_FALSE(CanCallClearMessage<::protos::Ptr<const TestModel>>());
EXPECT_TRUE(CanCallClearMessage<::hpb::Ptr<TestModel>>());
EXPECT_FALSE(CanCallClearMessage<::hpb::Ptr<const TestModel>>());
}
TEST(CppGeneratedCode, CannotInvokeClearMessageWithConstRawPtr) {

Loading…
Cancel
Save