From 779f61c6a3ce02a119e28e802f229e61b69b9046 Mon Sep 17 00:00:00 2001 From: temporal Date: Wed, 13 Aug 2008 03:15:00 +0000 Subject: Integrate recent changes from google3. protoc - New flags --encode and --decode can be used to convert between protobuf text format and binary format from the command-line. - New flag --descriptor_set_out can be used to write FileDescriptorProtos for all parsed files directly into a single output file. This is particularly useful if you wish to parse .proto files from programs written in languages other than C++: just run protoc as a background process and have it output a FileDescriptorList, then parse that natively. C++ - Reflection objects are now per-class rather than per-instance. To make this possible, the Reflection interface had to be changed such that all methods take the Message instance as a parameter. This change improves performance significantly in memory-bandwidth-limited use cases, since it makes the message objects smaller. Note that source-incompatible interface changes like this will not be made again after the library leaves beta. Python - MergeFrom(message) and CopyFrom(message) are now implemented. - SerializeToString() raises an exception if the message is missing required fields. - Code organization improvements. - Fixed doc comments for RpcController and RpcChannel, which had somehow been swapped. --- src/google/protobuf/message.cc | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'src/google/protobuf/message.cc') diff --git a/src/google/protobuf/message.cc b/src/google/protobuf/message.cc index f740ef18..b9b1ac6c 100644 --- a/src/google/protobuf/message.cc +++ b/src/google/protobuf/message.cc @@ -50,7 +50,6 @@ static string InitializationErrorMessage(const char* action, } Message::~Message() {} -Message::Reflection::~Reflection() {} void Message::MergeFrom(const Message& from) { const Descriptor* descriptor = GetDescriptor(); @@ -58,7 +57,7 @@ void Message::MergeFrom(const Message& from) { << ": Tried to merge from a message with a different type. " "to: " << descriptor->full_name() << ", " "from:" << from.GetDescriptor()->full_name(); - ReflectionOps::Merge(descriptor, *from.GetReflection(), GetReflection()); + ReflectionOps::Merge(from, this); } void Message::CopyFrom(const Message& from) { @@ -67,20 +66,19 @@ void Message::CopyFrom(const Message& from) { << ": Tried to copy from a message with a different type." "to: " << descriptor->full_name() << ", " "from:" << from.GetDescriptor()->full_name(); - ReflectionOps::Copy(descriptor, *from.GetReflection(), GetReflection()); + ReflectionOps::Copy(from, this); } void Message::Clear() { - ReflectionOps::Clear(GetDescriptor(), GetReflection()); + ReflectionOps::Clear(this); } bool Message::IsInitialized() const { - return ReflectionOps::IsInitialized(GetDescriptor(), *GetReflection()); + return ReflectionOps::IsInitialized(*this); } void Message::FindInitializationErrors(vector* errors) const { - return ReflectionOps::FindInitializationErrors( - GetDescriptor(), *GetReflection(), "", errors); + return ReflectionOps::FindInitializationErrors(*this, "", errors); } string Message::InitializationErrorString() const { @@ -96,12 +94,11 @@ void Message::CheckInitialized() const { } void Message::DiscardUnknownFields() { - return ReflectionOps::DiscardUnknownFields(GetDescriptor(), GetReflection()); + return ReflectionOps::DiscardUnknownFields(this); } bool Message::MergePartialFromCodedStream(io::CodedInputStream* input) { - return WireFormat::ParseAndMergePartial( - GetDescriptor(), input, GetReflection()); + return WireFormat::ParseAndMergePartial(input, this); } bool Message::MergeFromCodedStream(io::CodedInputStream* input) { @@ -178,12 +175,11 @@ bool Message::ParsePartialFromIstream(istream* input) { bool Message::SerializeWithCachedSizes( io::CodedOutputStream* output) const { - return WireFormat::SerializeWithCachedSizes( - GetDescriptor(), GetReflection(), GetCachedSize(), output); + return WireFormat::SerializeWithCachedSizes(*this, GetCachedSize(), output); } int Message::ByteSize() const { - int size = WireFormat::ByteSize(GetDescriptor(), GetReflection()); + int size = WireFormat::ByteSize(*this); SetCachedSize(size); return size; } @@ -281,6 +277,8 @@ bool Message::SerializePartialToOstream(ostream* output) const { } +Reflection::~Reflection() {} + // =================================================================== // MessageFactory -- cgit v1.2.3