定义.proto接口文件

package tutorial;

message Person {
required string name = ;
required int32 id = ; //unique ID number for this person
optional string email = ;
enum PhoneType {
MOBILE = ;
HOME = ;
WORK = ;
}
message PhoneNumber {
required string number = ;
optional PhoneType type = [default = HOME];
}
repeated PhoneNumber phone = ;
}
message AddressBook {
repeated Person person = ;
}
service SearchService {
rpc Search (Person) returns (Person);
} 自动生成的类:
tutorial::Person
tutorial::Person::PhoneNumber 全名其实为:typedef Person_PhoneNumber PhoneNumber;
枚举见黄色部分 全名其实为:typedef Person_PhoneType PhoneType;
tutorial::AddressBook 注意引用时候的命名空间,与接口定义的结构之间的关系,是彼此对应的~~~
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: addressbook.proto #ifndef PROTOBUF_addressbook_2eproto__INCLUDED
#define PROTOBUF_addressbook_2eproto__INCLUDED #include <string> #include <google/protobuf/stubs/common.h> #if GOOGLE_PROTOBUF_VERSION < 2004000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 2004001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif #include <google/protobuf/generated_message_util.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/generated_message_reflection.h>
// @@protoc_insertion_point(includes) namespace tutorial { // Internal implementation detail -- do not call these.
void protobuf_AddDesc_addressbook_2eproto();
void protobuf_AssignDesc_addressbook_2eproto();
void protobuf_ShutdownFile_addressbook_2eproto(); class Person;
class Person_PhoneNumber;
class AddressBook; enum Person_PhoneType {
Person_PhoneType_MOBILE = ,
Person_PhoneType_HOME = ,
Person_PhoneType_WORK =
};
bool Person_PhoneType_IsValid(int value);
const Person_PhoneType Person_PhoneType_PhoneType_MIN = Person_PhoneType_MOBILE;
const Person_PhoneType Person_PhoneType_PhoneType_MAX = Person_PhoneType_WORK;
const int Person_PhoneType_PhoneType_ARRAYSIZE = Person_PhoneType_PhoneType_MAX + ; const ::google::protobuf::EnumDescriptor* Person_PhoneType_descriptor();
inline const ::std::string& Person_PhoneType_Name(Person_PhoneType value) {
return ::google::protobuf::internal::NameOfEnum(
Person_PhoneType_descriptor(), value);
}
inline bool Person_PhoneType_Parse(
const ::std::string& name, Person_PhoneType* value) {
return ::google::protobuf::internal::ParseNamedEnum<Person_PhoneType>(
Person_PhoneType_descriptor(), name, value);
}
// =================================================================== class Person_PhoneNumber : public ::google::protobuf::Message {
public:
Person_PhoneNumber();
virtual ~Person_PhoneNumber(); Person_PhoneNumber(const Person_PhoneNumber& from); inline Person_PhoneNumber& operator=(const Person_PhoneNumber& from) {
CopyFrom(from);
return *this;
} inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
return _unknown_fields_;
} inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
return &_unknown_fields_;
} static const ::google::protobuf::Descriptor* descriptor();
static const Person_PhoneNumber& default_instance(); void Swap(Person_PhoneNumber* other); // implements Message ---------------------------------------------- Person_PhoneNumber* New() const;
void CopyFrom(const ::google::protobuf::Message& from);
void MergeFrom(const ::google::protobuf::Message& from);
void CopyFrom(const Person_PhoneNumber& from);
void MergeFrom(const Person_PhoneNumber& from);
void Clear();
bool IsInitialized() const; int ByteSize() const;
bool MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input);
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const;
::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
int GetCachedSize() const { return _cached_size_; }
private:
void SharedCtor();
void SharedDtor();
void SetCachedSize(int size) const;
public: ::google::protobuf::Metadata GetMetadata() const; // nested types ---------------------------------------------------- // accessors ------------------------------------------------------- // required string number = 1;
inline bool has_number() const;
inline void clear_number();
static const int kNumberFieldNumber = ;
inline const ::std::string& number() const;
inline void set_number(const ::std::string& value);
inline void set_number(const char* value);
inline void set_number(const char* value, size_t size);
inline ::std::string* mutable_number();
inline ::std::string* release_number(); // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
inline bool has_type() const;
inline void clear_type();
static const int kTypeFieldNumber = ;
inline ::tutorial::Person_PhoneType type() const;
inline void set_type(::tutorial::Person_PhoneType value); // @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber)
private:
inline void set_has_number();
inline void clear_has_number();
inline void set_has_type();
inline void clear_has_type(); ::google::protobuf::UnknownFieldSet _unknown_fields_; ::std::string* number_;
int type_; mutable int _cached_size_;
::google::protobuf::uint32 _has_bits_[( + ) / ]; friend void protobuf_AddDesc_addressbook_2eproto();
friend void protobuf_AssignDesc_addressbook_2eproto();
friend void protobuf_ShutdownFile_addressbook_2eproto(); void InitAsDefaultInstance();
static Person_PhoneNumber* default_instance_;
};
// ------------------------------------------------------------------- class Person : public ::google::protobuf::Message {
public:
Person();
virtual ~Person(); Person(const Person& from); inline Person& operator=(const Person& from) {
CopyFrom(from);
return *this;
} inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
return _unknown_fields_;
} inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
return &_unknown_fields_;
} static const ::google::protobuf::Descriptor* descriptor();
static const Person& default_instance(); void Swap(Person* other); // implements Message ---------------------------------------------- Person* New() const;
void CopyFrom(const ::google::protobuf::Message& from);
void MergeFrom(const ::google::protobuf::Message& from);
void CopyFrom(const Person& from);
void MergeFrom(const Person& from);
void Clear();
bool IsInitialized() const; int ByteSize() const;
bool MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input);
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const;
::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
int GetCachedSize() const { return _cached_size_; }
private:
void SharedCtor();
void SharedDtor();
void SetCachedSize(int size) const;
public: ::google::protobuf::Metadata GetMetadata() const; // nested types ---------------------------------------------------- typedef Person_PhoneNumber PhoneNumber; typedef Person_PhoneType PhoneType;
static const PhoneType MOBILE = Person_PhoneType_MOBILE;
static const PhoneType HOME = Person_PhoneType_HOME;
static const PhoneType WORK = Person_PhoneType_WORK;
static inline bool PhoneType_IsValid(int value) {
return Person_PhoneType_IsValid(value);
}
static const PhoneType PhoneType_MIN =
Person_PhoneType_PhoneType_MIN;
static const PhoneType PhoneType_MAX =
Person_PhoneType_PhoneType_MAX;
static const int PhoneType_ARRAYSIZE =
Person_PhoneType_PhoneType_ARRAYSIZE;
static inline const ::google::protobuf::EnumDescriptor*
PhoneType_descriptor() {
return Person_PhoneType_descriptor();
}
static inline const ::std::string& PhoneType_Name(PhoneType value) {
return Person_PhoneType_Name(value);
}
static inline bool PhoneType_Parse(const ::std::string& name,
PhoneType* value) {
return Person_PhoneType_Parse(name, value);
} // accessors ------------------------------------------------------- // required string name = 1;
inline bool has_name() const;
inline void clear_name();
static const int kNameFieldNumber = ;
inline const ::std::string& name() const;
inline void set_name(const ::std::string& value);
inline void set_name(const char* value);
inline void set_name(const char* value, size_t size);
inline ::std::string* mutable_name();
inline ::std::string* release_name(); // required int32 id = 2;
inline bool has_id() const;
inline void clear_id();
static const int kIdFieldNumber = ;
inline ::google::protobuf::int32 id() const;
inline void set_id(::google::protobuf::int32 value); // optional string email = 3;
inline bool has_email() const;
inline void clear_email();
static const int kEmailFieldNumber = ;
inline const ::std::string& email() const;
inline void set_email(const ::std::string& value);
inline void set_email(const char* value);
inline void set_email(const char* value, size_t size);
inline ::std::string* mutable_email();
inline ::std::string* release_email(); // repeated .tutorial.Person.PhoneNumber phone = 4;
inline int phone_size() const;
inline void clear_phone();
static const int kPhoneFieldNumber = ;
inline const ::tutorial::Person_PhoneNumber& phone(int index) const;
inline ::tutorial::Person_PhoneNumber* mutable_phone(int index);
inline ::tutorial::Person_PhoneNumber* add_phone();
inline const ::google::protobuf::RepeatedPtrField< ::tutorial::Person_PhoneNumber >&
phone() const;
inline ::google::protobuf::RepeatedPtrField< ::tutorial::Person_PhoneNumber >*
mutable_phone(); // @@protoc_insertion_point(class_scope:tutorial.Person)
private:
inline void set_has_name();
inline void clear_has_name();
inline void set_has_id();
inline void clear_has_id();
inline void set_has_email();
inline void clear_has_email(); ::google::protobuf::UnknownFieldSet _unknown_fields_; ::std::string* name_;
::std::string* email_;
::google::protobuf::RepeatedPtrField< ::tutorial::Person_PhoneNumber > phone_;
::google::protobuf::int32 id_; mutable int _cached_size_;
::google::protobuf::uint32 _has_bits_[( + ) / ]; friend void protobuf_AddDesc_addressbook_2eproto();
friend void protobuf_AssignDesc_addressbook_2eproto();
friend void protobuf_ShutdownFile_addressbook_2eproto(); void InitAsDefaultInstance();
static Person* default_instance_;
};
// ------------------------------------------------------------------- class AddressBook : public ::google::protobuf::Message {
public:
AddressBook();
virtual ~AddressBook(); AddressBook(const AddressBook& from); inline AddressBook& operator=(const AddressBook& from) {
CopyFrom(from);
return *this;
} inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
return _unknown_fields_;
} inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
return &_unknown_fields_;
} static const ::google::protobuf::Descriptor* descriptor();
static const AddressBook& default_instance(); void Swap(AddressBook* other); // implements Message ---------------------------------------------- AddressBook* New() const;
void CopyFrom(const ::google::protobuf::Message& from);
void MergeFrom(const ::google::protobuf::Message& from);
void CopyFrom(const AddressBook& from);
void MergeFrom(const AddressBook& from);
void Clear();
bool IsInitialized() const; int ByteSize() const;
bool MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input);
void SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const;
::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
int GetCachedSize() const { return _cached_size_; }
private:
void SharedCtor();
void SharedDtor();
void SetCachedSize(int size) const;
public: ::google::protobuf::Metadata GetMetadata() const; // nested types ---------------------------------------------------- // accessors ------------------------------------------------------- // repeated .tutorial.Person person = 1;
inline int person_size() const;
inline void clear_person();
static const int kPersonFieldNumber = ;
inline const ::tutorial::Person& person(int index) const;
inline ::tutorial::Person* mutable_person(int index);
inline ::tutorial::Person* add_person();
inline const ::google::protobuf::RepeatedPtrField< ::tutorial::Person >&
person() const;
inline ::google::protobuf::RepeatedPtrField< ::tutorial::Person >*
mutable_person(); // @@protoc_insertion_point(class_scope:tutorial.AddressBook)
private: ::google::protobuf::UnknownFieldSet _unknown_fields_; ::google::protobuf::RepeatedPtrField< ::tutorial::Person > person_; mutable int _cached_size_;
::google::protobuf::uint32 _has_bits_[( + ) / ]; friend void protobuf_AddDesc_addressbook_2eproto();
friend void protobuf_AssignDesc_addressbook_2eproto();
friend void protobuf_ShutdownFile_addressbook_2eproto(); void InitAsDefaultInstance();
static AddressBook* default_instance_;
};
// =================================================================== // =================================================================== // Person_PhoneNumber // required string number = 1;
inline bool Person_PhoneNumber::has_number() const {
return (_has_bits_[] & 0x00000001u) != ;
}
inline void Person_PhoneNumber::set_has_number() {
_has_bits_[] |= 0x00000001u;
}
inline void Person_PhoneNumber::clear_has_number() {
_has_bits_[] &= ~0x00000001u;
}
inline void Person_PhoneNumber::clear_number() {
if (number_ != &::google::protobuf::internal::kEmptyString) {
number_->clear();
}
clear_has_number();
}
inline const ::std::string& Person_PhoneNumber::number() const {
return *number_;
}
inline void Person_PhoneNumber::set_number(const ::std::string& value) {
set_has_number();
if (number_ == &::google::protobuf::internal::kEmptyString) {
number_ = new ::std::string;
}
number_->assign(value);
}
inline void Person_PhoneNumber::set_number(const char* value) {
set_has_number();
if (number_ == &::google::protobuf::internal::kEmptyString) {
number_ = new ::std::string;
}
number_->assign(value);
}
inline void Person_PhoneNumber::set_number(const char* value, size_t size) {
set_has_number();
if (number_ == &::google::protobuf::internal::kEmptyString) {
number_ = new ::std::string;
}
number_->assign(reinterpret_cast<const char*>(value), size);
}
inline ::std::string* Person_PhoneNumber::mutable_number() {
set_has_number();
if (number_ == &::google::protobuf::internal::kEmptyString) {
number_ = new ::std::string;
}
return number_;
}
inline ::std::string* Person_PhoneNumber::release_number() {
clear_has_number();
if (number_ == &::google::protobuf::internal::kEmptyString) {
return NULL;
} else {
::std::string* temp = number_;
number_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
return temp;
}
} // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
inline bool Person_PhoneNumber::has_type() const {
return (_has_bits_[] & 0x00000002u) != ;
}
inline void Person_PhoneNumber::set_has_type() {
_has_bits_[] |= 0x00000002u;
}
inline void Person_PhoneNumber::clear_has_type() {
_has_bits_[] &= ~0x00000002u;
}
inline void Person_PhoneNumber::clear_type() {
type_ = ;
clear_has_type();
}
inline ::tutorial::Person_PhoneType Person_PhoneNumber::type() const {
return static_cast< ::tutorial::Person_PhoneType >(type_);
}
inline void Person_PhoneNumber::set_type(::tutorial::Person_PhoneType value) {
GOOGLE_DCHECK(::tutorial::Person_PhoneType_IsValid(value));
set_has_type();
type_ = value;
} // ------------------------------------------------------------------- // Person // required string name = 1;
inline bool Person::has_name() const {
return (_has_bits_[] & 0x00000001u) != ;
}
inline void Person::set_has_name() {
_has_bits_[] |= 0x00000001u;
}
inline void Person::clear_has_name() {
_has_bits_[] &= ~0x00000001u;
}
inline void Person::clear_name() {
if (name_ != &::google::protobuf::internal::kEmptyString) {
name_->clear();
}
clear_has_name();
}
inline const ::std::string& Person::name() const {
return *name_;
}
inline void Person::set_name(const ::std::string& value) {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
name_->assign(value);
}
inline void Person::set_name(const char* value) {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
name_->assign(value);
}
inline void Person::set_name(const char* value, size_t size) {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
name_->assign(reinterpret_cast<const char*>(value), size);
}
inline ::std::string* Person::mutable_name() {
set_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
name_ = new ::std::string;
}
return name_;
}
inline ::std::string* Person::release_name() {
clear_has_name();
if (name_ == &::google::protobuf::internal::kEmptyString) {
return NULL;
} else {
::std::string* temp = name_;
name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
return temp;
}
} // required int32 id = 2;
inline bool Person::has_id() const {
return (_has_bits_[] & 0x00000002u) != ;
}
inline void Person::set_has_id() {
_has_bits_[] |= 0x00000002u;
}
inline void Person::clear_has_id() {
_has_bits_[] &= ~0x00000002u;
}
inline void Person::clear_id() {
id_ = ;
clear_has_id();
}
inline ::google::protobuf::int32 Person::id() const {
return id_;
}
inline void Person::set_id(::google::protobuf::int32 value) {
set_has_id();
id_ = value;
} // optional string email = 3;
inline bool Person::has_email() const {
return (_has_bits_[] & 0x00000004u) != ;
}
inline void Person::set_has_email() {
_has_bits_[] |= 0x00000004u;
}
inline void Person::clear_has_email() {
_has_bits_[] &= ~0x00000004u;
}
inline void Person::clear_email() {
if (email_ != &::google::protobuf::internal::kEmptyString) {
email_->clear();
}
clear_has_email();
}
inline const ::std::string& Person::email() const {
return *email_;
}
inline void Person::set_email(const ::std::string& value) {
set_has_email();
if (email_ == &::google::protobuf::internal::kEmptyString) {
email_ = new ::std::string;
}
email_->assign(value);
}
inline void Person::set_email(const char* value) {
set_has_email();
if (email_ == &::google::protobuf::internal::kEmptyString) {
email_ = new ::std::string;
}
email_->assign(value);
}
inline void Person::set_email(const char* value, size_t size) {
set_has_email();
if (email_ == &::google::protobuf::internal::kEmptyString) {
email_ = new ::std::string;
}
email_->assign(reinterpret_cast<const char*>(value), size);
}
inline ::std::string* Person::mutable_email() {
set_has_email();
if (email_ == &::google::protobuf::internal::kEmptyString) {
email_ = new ::std::string;
}
return email_;
}
inline ::std::string* Person::release_email() {
clear_has_email();
if (email_ == &::google::protobuf::internal::kEmptyString) {
return NULL;
} else {
::std::string* temp = email_;
email_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
return temp;
}
} // repeated .tutorial.Person.PhoneNumber phone = 4;
inline int Person::phone_size() const {
return phone_.size();
}
inline void Person::clear_phone() {
phone_.Clear();
}
inline const ::tutorial::Person_PhoneNumber& Person::phone(int index) const {
return phone_.Get(index);
}
inline ::tutorial::Person_PhoneNumber* Person::mutable_phone(int index) {
return phone_.Mutable(index);
}
inline ::tutorial::Person_PhoneNumber* Person::add_phone() {
return phone_.Add();
}
inline const ::google::protobuf::RepeatedPtrField< ::tutorial::Person_PhoneNumber >&
Person::phone() const {
return phone_;
}
inline ::google::protobuf::RepeatedPtrField< ::tutorial::Person_PhoneNumber >*
Person::mutable_phone() {
return &phone_;
} // ------------------------------------------------------------------- // AddressBook // repeated .tutorial.Person person = 1;
inline int AddressBook::person_size() const {
return person_.size();
}
inline void AddressBook::clear_person() {
person_.Clear();
}
inline const ::tutorial::Person& AddressBook::person(int index) const {
return person_.Get(index);
}
inline ::tutorial::Person* AddressBook::mutable_person(int index) {
return person_.Mutable(index);
}
inline ::tutorial::Person* AddressBook::add_person() {
return person_.Add();
}
inline const ::google::protobuf::RepeatedPtrField< ::tutorial::Person >&
AddressBook::person() const {
return person_;
}
inline ::google::protobuf::RepeatedPtrField< ::tutorial::Person >*
AddressBook::mutable_person() {
return &person_;
} // @@protoc_insertion_point(namespace_scope) } // namespace tutorial #ifndef SWIG
namespace google {
namespace protobuf { template <>
inline const EnumDescriptor* GetEnumDescriptor< ::tutorial::Person_PhoneType>() {
return ::tutorial::Person_PhoneType_descriptor();
} } // namespace google
} // namespace protobuf
#endif // SWIG // @@protoc_insertion_point(global_scope) #endif // PROTOBUF_addressbook_2eproto__INCLUDED

// Generated by the protocol buffer compiler.  DO NOT EDIT!

#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
#include "addressbook.pb.h" #include <algorithm> #include <google/protobuf/stubs/once.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes) namespace tutorial { namespace { const ::google::protobuf::Descriptor* Person_descriptor_ = NULL;
const ::google::protobuf::internal::GeneratedMessageReflection*
Person_reflection_ = NULL;
const ::google::protobuf::Descriptor* Person_PhoneNumber_descriptor_ = NULL;
const ::google::protobuf::internal::GeneratedMessageReflection*
Person_PhoneNumber_reflection_ = NULL;
const ::google::protobuf::EnumDescriptor* Person_PhoneType_descriptor_ = NULL;
const ::google::protobuf::Descriptor* AddressBook_descriptor_ = NULL;
const ::google::protobuf::internal::GeneratedMessageReflection*
AddressBook_reflection_ = NULL; } // namespace void protobuf_AssignDesc_addressbook_2eproto() {
protobuf_AddDesc_addressbook_2eproto();
const ::google::protobuf::FileDescriptor* file =
::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
"addressbook.proto");
GOOGLE_CHECK(file != NULL);
Person_descriptor_ = file->message_type();
static const int Person_offsets_[] = {
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, name_),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, id_),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, email_),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, phone_),
};
Person_reflection_ =
new ::google::protobuf::internal::GeneratedMessageReflection(
Person_descriptor_,
Person::default_instance_,
Person_offsets_,
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, _has_bits_[]),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person, _unknown_fields_),
-,
::google::protobuf::DescriptorPool::generated_pool(),
::google::protobuf::MessageFactory::generated_factory(),
sizeof(Person));
Person_PhoneNumber_descriptor_ = Person_descriptor_->nested_type();
static const int Person_PhoneNumber_offsets_[] = {
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person_PhoneNumber, number_),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person_PhoneNumber, type_),
};
Person_PhoneNumber_reflection_ =
new ::google::protobuf::internal::GeneratedMessageReflection(
Person_PhoneNumber_descriptor_,
Person_PhoneNumber::default_instance_,
Person_PhoneNumber_offsets_,
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person_PhoneNumber, _has_bits_[]),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Person_PhoneNumber, _unknown_fields_),
-,
::google::protobuf::DescriptorPool::generated_pool(),
::google::protobuf::MessageFactory::generated_factory(),
sizeof(Person_PhoneNumber));
Person_PhoneType_descriptor_ = Person_descriptor_->enum_type();
AddressBook_descriptor_ = file->message_type();
static const int AddressBook_offsets_[] = {
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AddressBook, person_),
};
AddressBook_reflection_ =
new ::google::protobuf::internal::GeneratedMessageReflection(
AddressBook_descriptor_,
AddressBook::default_instance_,
AddressBook_offsets_,
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AddressBook, _has_bits_[]),
GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(AddressBook, _unknown_fields_),
-,
::google::protobuf::DescriptorPool::generated_pool(),
::google::protobuf::MessageFactory::generated_factory(),
sizeof(AddressBook));
} namespace { GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
inline void protobuf_AssignDescriptorsOnce() {
::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
&protobuf_AssignDesc_addressbook_2eproto);
} void protobuf_RegisterTypes(const ::std::string&) {
protobuf_AssignDescriptorsOnce();
::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
Person_descriptor_, &Person::default_instance());
::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
Person_PhoneNumber_descriptor_, &Person_PhoneNumber::default_instance());
::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
AddressBook_descriptor_, &AddressBook::default_instance());
} } // namespace void protobuf_ShutdownFile_addressbook_2eproto() {
delete Person::default_instance_;
delete Person_reflection_;
delete Person_PhoneNumber::default_instance_;
delete Person_PhoneNumber_reflection_;
delete AddressBook::default_instance_;
delete AddressBook_reflection_;
} void protobuf_AddDesc_addressbook_2eproto() {
static bool already_here = false;
if (already_here) return;
already_here = true;
GOOGLE_PROTOBUF_VERIFY_VERSION; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
"\n\021addressbook.proto\022\010tutorial\"\332\001\n\006Person"
"\022\014\n\004name\030\001 \002(\t\022\n\n\002id\030\002 \002(\005\022\r\n\005email\030\003 \001("
"\t\022+\n\005phone\030\004 \003(\0132\034.tutorial.Person.Phone"
"Number\032M\n\013PhoneNumber\022\016\n\006number\030\001 \002(\t\022.\n"
"\004type\030\002 \001(\0162\032.tutorial.Person.PhoneType:"
"\004HOME\"+\n\tPhoneType\022\n\n\006MOBILE\020\000\022\010\n\004HOME\020\001"
"\022\010\n\004WORK\020\002\"/\n\013AddressBook\022 \n\006person\030\001 \003("
"\0132\020.tutorial.Person2=\n\rSearchService\022,\n\006"
"Search\022\020.tutorial.Person\032\020.tutorial.Pers"
"on", );
::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
"addressbook.proto", &protobuf_RegisterTypes);
Person::default_instance_ = new Person();
Person_PhoneNumber::default_instance_ = new Person_PhoneNumber();
AddressBook::default_instance_ = new AddressBook();
Person::default_instance_->InitAsDefaultInstance();
Person_PhoneNumber::default_instance_->InitAsDefaultInstance();
AddressBook::default_instance_->InitAsDefaultInstance();
::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_addressbook_2eproto);
} // Force AddDescriptors() to be called at static initialization time.
struct StaticDescriptorInitializer_addressbook_2eproto {
StaticDescriptorInitializer_addressbook_2eproto() {
protobuf_AddDesc_addressbook_2eproto();
}
} static_descriptor_initializer_addressbook_2eproto_; // =================================================================== const ::google::protobuf::EnumDescriptor* Person_PhoneType_descriptor() {
protobuf_AssignDescriptorsOnce();
return Person_PhoneType_descriptor_;
}
bool Person_PhoneType_IsValid(int value) {
switch(value) {
case :
case :
case :
return true;
default:
return false;
}
} #ifndef _MSC_VER
const Person_PhoneType Person::MOBILE;
const Person_PhoneType Person::HOME;
const Person_PhoneType Person::WORK;
const Person_PhoneType Person::PhoneType_MIN;
const Person_PhoneType Person::PhoneType_MAX;
const int Person::PhoneType_ARRAYSIZE;
#endif // _MSC_VER
#ifndef _MSC_VER
const int Person_PhoneNumber::kNumberFieldNumber;
const int Person_PhoneNumber::kTypeFieldNumber;
#endif // !_MSC_VER Person_PhoneNumber::Person_PhoneNumber()
: ::google::protobuf::Message() {
SharedCtor();
} void Person_PhoneNumber::InitAsDefaultInstance() {
} Person_PhoneNumber::Person_PhoneNumber(const Person_PhoneNumber& from)
: ::google::protobuf::Message() {
SharedCtor();
MergeFrom(from);
} void Person_PhoneNumber::SharedCtor() {
_cached_size_ = ;
number_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
type_ = ;
::memset(_has_bits_, , sizeof(_has_bits_));
} Person_PhoneNumber::~Person_PhoneNumber() {
SharedDtor();
} void Person_PhoneNumber::SharedDtor() {
if (number_ != &::google::protobuf::internal::kEmptyString) {
delete number_;
}
if (this != default_instance_) {
}
} void Person_PhoneNumber::SetCachedSize(int size) const {
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* Person_PhoneNumber::descriptor() {
protobuf_AssignDescriptorsOnce();
return Person_PhoneNumber_descriptor_;
} const Person_PhoneNumber& Person_PhoneNumber::default_instance() {
if (default_instance_ == NULL) protobuf_AddDesc_addressbook_2eproto(); return *default_instance_;
} Person_PhoneNumber* Person_PhoneNumber::default_instance_ = NULL; Person_PhoneNumber* Person_PhoneNumber::New() const {
return new Person_PhoneNumber;
} void Person_PhoneNumber::Clear() {
if (_has_bits_[ / ] & (0xffu << ( % ))) {
if (has_number()) {
if (number_ != &::google::protobuf::internal::kEmptyString) {
number_->clear();
}
}
type_ = ;
}
::memset(_has_bits_, , sizeof(_has_bits_));
mutable_unknown_fields()->Clear();
} bool Person_PhoneNumber::MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
::google::protobuf::uint32 tag;
while ((tag = input->ReadTag()) != ) {
switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
// required string number = 1;
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
DO_(::google::protobuf::internal::WireFormatLite::ReadString(
input, this->mutable_number()));
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->number().data(), this->number().length(),
::google::protobuf::internal::WireFormat::PARSE);
} else {
goto handle_uninterpreted;
}
if (input->ExpectTag()) goto parse_type;
break;
} // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
parse_type:
int value;
DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
input, &value)));
if (::tutorial::Person_PhoneType_IsValid(value)) {
set_type(static_cast< ::tutorial::Person_PhoneType >(value));
} else {
mutable_unknown_fields()->AddVarint(, value);
}
} else {
goto handle_uninterpreted;
}
if (input->ExpectAtEnd()) return true;
break;
} default: {
handle_uninterpreted:
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
return true;
}
DO_(::google::protobuf::internal::WireFormat::SkipField(
input, tag, mutable_unknown_fields()));
break;
}
}
}
return true;
#undef DO_
} void Person_PhoneNumber::SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const {
// required string number = 1;
if (has_number()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->number().data(), this->number().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
::google::protobuf::internal::WireFormatLite::WriteString(
, this->number(), output);
} // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
if (has_type()) {
::google::protobuf::internal::WireFormatLite::WriteEnum(
, this->type(), output);
} if (!unknown_fields().empty()) {
::google::protobuf::internal::WireFormat::SerializeUnknownFields(
unknown_fields(), output);
}
} ::google::protobuf::uint8* Person_PhoneNumber::SerializeWithCachedSizesToArray(
::google::protobuf::uint8* target) const {
// required string number = 1;
if (has_number()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->number().data(), this->number().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
target =
::google::protobuf::internal::WireFormatLite::WriteStringToArray(
, this->number(), target);
} // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
if (has_type()) {
target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
, this->type(), target);
} if (!unknown_fields().empty()) {
target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
unknown_fields(), target);
}
return target;
} int Person_PhoneNumber::ByteSize() const {
int total_size = ; if (_has_bits_[ / ] & (0xffu << ( % ))) {
// required string number = 1;
if (has_number()) {
total_size += +
::google::protobuf::internal::WireFormatLite::StringSize(
this->number());
} // optional .tutorial.Person.PhoneType type = 2 [default = HOME];
if (has_type()) {
total_size += +
::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
} }
if (!unknown_fields().empty()) {
total_size +=
::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
unknown_fields());
}
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = total_size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
return total_size;
} void Person_PhoneNumber::MergeFrom(const ::google::protobuf::Message& from) {
GOOGLE_CHECK_NE(&from, this);
const Person_PhoneNumber* source =
::google::protobuf::internal::dynamic_cast_if_available<const Person_PhoneNumber*>(
&from);
if (source == NULL) {
::google::protobuf::internal::ReflectionOps::Merge(from, this);
} else {
MergeFrom(*source);
}
} void Person_PhoneNumber::MergeFrom(const Person_PhoneNumber& from) {
GOOGLE_CHECK_NE(&from, this);
if (from._has_bits_[ / ] & (0xffu << ( % ))) {
if (from.has_number()) {
set_number(from.number());
}
if (from.has_type()) {
set_type(from.type());
}
}
mutable_unknown_fields()->MergeFrom(from.unknown_fields());
} void Person_PhoneNumber::CopyFrom(const ::google::protobuf::Message& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
} void Person_PhoneNumber::CopyFrom(const Person_PhoneNumber& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
} bool Person_PhoneNumber::IsInitialized() const {
if ((_has_bits_[] & 0x00000001) != 0x00000001) return false; return true;
} void Person_PhoneNumber::Swap(Person_PhoneNumber* other) {
if (other != this) {
std::swap(number_, other->number_);
std::swap(type_, other->type_);
std::swap(_has_bits_[], other->_has_bits_[]);
_unknown_fields_.Swap(&other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);
}
} ::google::protobuf::Metadata Person_PhoneNumber::GetMetadata() const {
protobuf_AssignDescriptorsOnce();
::google::protobuf::Metadata metadata;
metadata.descriptor = Person_PhoneNumber_descriptor_;
metadata.reflection = Person_PhoneNumber_reflection_;
return metadata;
} // ------------------------------------------------------------------- #ifndef _MSC_VER
const int Person::kNameFieldNumber;
const int Person::kIdFieldNumber;
const int Person::kEmailFieldNumber;
const int Person::kPhoneFieldNumber;
#endif // !_MSC_VER Person::Person()
: ::google::protobuf::Message() {
SharedCtor();
} void Person::InitAsDefaultInstance() {
} Person::Person(const Person& from)
: ::google::protobuf::Message() {
SharedCtor();
MergeFrom(from);
} void Person::SharedCtor() {
_cached_size_ = ;
name_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
id_ = ;
email_ = const_cast< ::std::string*>(&::google::protobuf::internal::kEmptyString);
::memset(_has_bits_, , sizeof(_has_bits_));
} Person::~Person() {
SharedDtor();
} void Person::SharedDtor() {
if (name_ != &::google::protobuf::internal::kEmptyString) {
delete name_;
}
if (email_ != &::google::protobuf::internal::kEmptyString) {
delete email_;
}
if (this != default_instance_) {
}
} void Person::SetCachedSize(int size) const {
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* Person::descriptor() {
protobuf_AssignDescriptorsOnce();
return Person_descriptor_;
} const Person& Person::default_instance() {
if (default_instance_ == NULL) protobuf_AddDesc_addressbook_2eproto(); return *default_instance_;
} Person* Person::default_instance_ = NULL; Person* Person::New() const {
return new Person;
} void Person::Clear() {
if (_has_bits_[ / ] & (0xffu << ( % ))) {
if (has_name()) {
if (name_ != &::google::protobuf::internal::kEmptyString) {
name_->clear();
}
}
id_ = ;
if (has_email()) {
if (email_ != &::google::protobuf::internal::kEmptyString) {
email_->clear();
}
}
}
phone_.Clear();
::memset(_has_bits_, , sizeof(_has_bits_));
mutable_unknown_fields()->Clear();
} bool Person::MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
::google::protobuf::uint32 tag;
while ((tag = input->ReadTag()) != ) {
switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
// required string name = 1;
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
DO_(::google::protobuf::internal::WireFormatLite::ReadString(
input, this->mutable_name()));
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->name().data(), this->name().length(),
::google::protobuf::internal::WireFormat::PARSE);
} else {
goto handle_uninterpreted;
}
if (input->ExpectTag()) goto parse_id;
break;
} // required int32 id = 2;
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
parse_id:
DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
input, &id_)));
set_has_id();
} else {
goto handle_uninterpreted;
}
if (input->ExpectTag()) goto parse_email;
break;
} // optional string email = 3;
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
parse_email:
DO_(::google::protobuf::internal::WireFormatLite::ReadString(
input, this->mutable_email()));
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->email().data(), this->email().length(),
::google::protobuf::internal::WireFormat::PARSE);
} else {
goto handle_uninterpreted;
}
if (input->ExpectTag()) goto parse_phone;
break;
} // repeated .tutorial.Person.PhoneNumber phone = 4;
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
parse_phone:
DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
input, add_phone()));
} else {
goto handle_uninterpreted;
}
if (input->ExpectTag()) goto parse_phone;
if (input->ExpectAtEnd()) return true;
break;
} default: {
handle_uninterpreted:
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
return true;
}
DO_(::google::protobuf::internal::WireFormat::SkipField(
input, tag, mutable_unknown_fields()));
break;
}
}
}
return true;
#undef DO_
} void Person::SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const {
// required string name = 1;
if (has_name()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->name().data(), this->name().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
::google::protobuf::internal::WireFormatLite::WriteString(
, this->name(), output);
} // required int32 id = 2;
if (has_id()) {
::google::protobuf::internal::WireFormatLite::WriteInt32(, this->id(), output);
} // optional string email = 3;
if (has_email()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->email().data(), this->email().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
::google::protobuf::internal::WireFormatLite::WriteString(
, this->email(), output);
} // repeated .tutorial.Person.PhoneNumber phone = 4;
for (int i = ; i < this->phone_size(); i++) {
::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
, this->phone(i), output);
} if (!unknown_fields().empty()) {
::google::protobuf::internal::WireFormat::SerializeUnknownFields(
unknown_fields(), output);
}
} ::google::protobuf::uint8* Person::SerializeWithCachedSizesToArray(
::google::protobuf::uint8* target) const {
// required string name = 1;
if (has_name()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->name().data(), this->name().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
target =
::google::protobuf::internal::WireFormatLite::WriteStringToArray(
, this->name(), target);
} // required int32 id = 2;
if (has_id()) {
target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(, this->id(), target);
} // optional string email = 3;
if (has_email()) {
::google::protobuf::internal::WireFormat::VerifyUTF8String(
this->email().data(), this->email().length(),
::google::protobuf::internal::WireFormat::SERIALIZE);
target =
::google::protobuf::internal::WireFormatLite::WriteStringToArray(
, this->email(), target);
} // repeated .tutorial.Person.PhoneNumber phone = 4;
for (int i = ; i < this->phone_size(); i++) {
target = ::google::protobuf::internal::WireFormatLite::
WriteMessageNoVirtualToArray(
, this->phone(i), target);
} if (!unknown_fields().empty()) {
target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
unknown_fields(), target);
}
return target;
} int Person::ByteSize() const {
int total_size = ; if (_has_bits_[ / ] & (0xffu << ( % ))) {
// required string name = 1;
if (has_name()) {
total_size += +
::google::protobuf::internal::WireFormatLite::StringSize(
this->name());
} // required int32 id = 2;
if (has_id()) {
total_size += +
::google::protobuf::internal::WireFormatLite::Int32Size(
this->id());
} // optional string email = 3;
if (has_email()) {
total_size += +
::google::protobuf::internal::WireFormatLite::StringSize(
this->email());
} }
// repeated .tutorial.Person.PhoneNumber phone = 4;
total_size += * this->phone_size();
for (int i = ; i < this->phone_size(); i++) {
total_size +=
::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
this->phone(i));
} if (!unknown_fields().empty()) {
total_size +=
::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
unknown_fields());
}
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = total_size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
return total_size;
} void Person::MergeFrom(const ::google::protobuf::Message& from) {
GOOGLE_CHECK_NE(&from, this);
const Person* source =
::google::protobuf::internal::dynamic_cast_if_available<const Person*>(
&from);
if (source == NULL) {
::google::protobuf::internal::ReflectionOps::Merge(from, this);
} else {
MergeFrom(*source);
}
} void Person::MergeFrom(const Person& from) {
GOOGLE_CHECK_NE(&from, this);
phone_.MergeFrom(from.phone_);
if (from._has_bits_[ / ] & (0xffu << ( % ))) {
if (from.has_name()) {
set_name(from.name());
}
if (from.has_id()) {
set_id(from.id());
}
if (from.has_email()) {
set_email(from.email());
}
}
mutable_unknown_fields()->MergeFrom(from.unknown_fields());
} void Person::CopyFrom(const ::google::protobuf::Message& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
} void Person::CopyFrom(const Person& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
} bool Person::IsInitialized() const {
if ((_has_bits_[] & 0x00000003) != 0x00000003) return false; for (int i = ; i < phone_size(); i++) {
if (!this->phone(i).IsInitialized()) return false;
}
return true;
} void Person::Swap(Person* other) {
if (other != this) {
std::swap(name_, other->name_);
std::swap(id_, other->id_);
std::swap(email_, other->email_);
phone_.Swap(&other->phone_);
std::swap(_has_bits_[], other->_has_bits_[]);
_unknown_fields_.Swap(&other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);
}
} ::google::protobuf::Metadata Person::GetMetadata() const {
protobuf_AssignDescriptorsOnce();
::google::protobuf::Metadata metadata;
metadata.descriptor = Person_descriptor_;
metadata.reflection = Person_reflection_;
return metadata;
} // =================================================================== #ifndef _MSC_VER
const int AddressBook::kPersonFieldNumber;
#endif // !_MSC_VER AddressBook::AddressBook()
: ::google::protobuf::Message() {
SharedCtor();
} void AddressBook::InitAsDefaultInstance() {
} AddressBook::AddressBook(const AddressBook& from)
: ::google::protobuf::Message() {
SharedCtor();
MergeFrom(from);
} void AddressBook::SharedCtor() {
_cached_size_ = ;
::memset(_has_bits_, , sizeof(_has_bits_));
} AddressBook::~AddressBook() {
SharedDtor();
} void AddressBook::SharedDtor() {
if (this != default_instance_) {
}
} void AddressBook::SetCachedSize(int size) const {
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* AddressBook::descriptor() {
protobuf_AssignDescriptorsOnce();
return AddressBook_descriptor_;
} const AddressBook& AddressBook::default_instance() {
if (default_instance_ == NULL) protobuf_AddDesc_addressbook_2eproto(); return *default_instance_;
} AddressBook* AddressBook::default_instance_ = NULL; AddressBook* AddressBook::New() const {
return new AddressBook;
} void AddressBook::Clear() {
person_.Clear();
::memset(_has_bits_, , sizeof(_has_bits_));
mutable_unknown_fields()->Clear();
} bool AddressBook::MergePartialFromCodedStream(
::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!(EXPRESSION)) return false
::google::protobuf::uint32 tag;
while ((tag = input->ReadTag()) != ) {
switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
// repeated .tutorial.Person person = 1;
case : {
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
parse_person:
DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
input, add_person()));
} else {
goto handle_uninterpreted;
}
if (input->ExpectTag()) goto parse_person;
if (input->ExpectAtEnd()) return true;
break;
} default: {
handle_uninterpreted:
if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
return true;
}
DO_(::google::protobuf::internal::WireFormat::SkipField(
input, tag, mutable_unknown_fields()));
break;
}
}
}
return true;
#undef DO_
} void AddressBook::SerializeWithCachedSizes(
::google::protobuf::io::CodedOutputStream* output) const {
// repeated .tutorial.Person person = 1;
for (int i = ; i < this->person_size(); i++) {
::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
, this->person(i), output);
} if (!unknown_fields().empty()) {
::google::protobuf::internal::WireFormat::SerializeUnknownFields(
unknown_fields(), output);
}
} ::google::protobuf::uint8* AddressBook::SerializeWithCachedSizesToArray(
::google::protobuf::uint8* target) const {
// repeated .tutorial.Person person = 1;
for (int i = ; i < this->person_size(); i++) {
target = ::google::protobuf::internal::WireFormatLite::
WriteMessageNoVirtualToArray(
, this->person(i), target);
} if (!unknown_fields().empty()) {
target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
unknown_fields(), target);
}
return target;
} int AddressBook::ByteSize() const {
int total_size = ; // repeated .tutorial.Person person = 1;
total_size += * this->person_size();
for (int i = ; i < this->person_size(); i++) {
total_size +=
::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
this->person(i));
} if (!unknown_fields().empty()) {
total_size +=
::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
unknown_fields());
}
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
_cached_size_ = total_size;
GOOGLE_SAFE_CONCURRENT_WRITES_END();
return total_size;
} void AddressBook::MergeFrom(const ::google::protobuf::Message& from) {
GOOGLE_CHECK_NE(&from, this);
const AddressBook* source =
::google::protobuf::internal::dynamic_cast_if_available<const AddressBook*>(
&from);
if (source == NULL) {
::google::protobuf::internal::ReflectionOps::Merge(from, this);
} else {
MergeFrom(*source);
}
} void AddressBook::MergeFrom(const AddressBook& from) {
GOOGLE_CHECK_NE(&from, this);
person_.MergeFrom(from.person_);
mutable_unknown_fields()->MergeFrom(from.unknown_fields());
} void AddressBook::CopyFrom(const ::google::protobuf::Message& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
} void AddressBook::CopyFrom(const AddressBook& from) {
if (&from == this) return;
Clear();
MergeFrom(from);
} bool AddressBook::IsInitialized() const { for (int i = ; i < person_size(); i++) {
if (!this->person(i).IsInitialized()) return false;
}
return true;
} void AddressBook::Swap(AddressBook* other) {
if (other != this) {
person_.Swap(&other->person_);
std::swap(_has_bits_[], other->_has_bits_[]);
_unknown_fields_.Swap(&other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);
}
} ::google::protobuf::Metadata AddressBook::GetMetadata() const {
protobuf_AssignDescriptorsOnce();
::google::protobuf::Metadata metadata;
metadata.descriptor = AddressBook_descriptor_;
metadata.reflection = AddressBook_reflection_;
return metadata;
} // @@protoc_insertion_point(namespace_scope) } // namespace tutorial // @@protoc_insertion_point(global_scope)

 编译.proto文件

protoc -I=./ --cpp_out=./ addressbook.proto

生成了:addressbook.pb.cc
addressbook.pb.h 要包含的头文件
 AddPerson.cpp
#include <iostream>
#include <fstream>
#include <string>
#include "addressbook.pb.h"
using namespace std; void PromptForAddress(tutorial::Person* person)
{
cout << "Enter person ID number: ";
int id;
cin >> id;
person->set_id(id);
cin.ignore(, '\n'); cout << "Enter name: ";
string *name = person->mutable_name();
getline(cin, *name);
cout << "Enter name: ";
getline(cin, *person->mutable_name()); inline ::std::string* mutable_name();
为啥有*呢? inline ::std::string* 返回值声明为指针 使用*【person->mutable_name()】 解引用


    cout << "Enter email address (blank for none): ";
string email;
getline(cin, email);
if(!email.empty()){
person->set_email(email);
} while(true){
cout << "Enter a phone number (or leave blank to finish):";
string number;
getline(cin, number);
if(number.empty()){
break;
} tutorial::Person::PhoneNumber* phone_number = person->add_phone();
phone_number->set_number(number); cout << "Is this a mobile, home or work phone ? ";
string type;
getline(cin, type);
if(type == "mobile"){
phone_number->set_type(tutorial::Person::MOBILE);
}
else if(type == "home"){
phone_number->set_type(tutorial::Person::HOME);
}
else if(type == "work"){
phone_number->set_type(tutorial::Person::WORK);
}
else {
cout << "Unknown phone type. Using default." << endl;
}
}
} int main(int argc, char* argv[]) { GOOGLE_PROTOBUF_VERIFY_VERSION; if (argc != ) {
cerr << "Usage: " << argv[] << " ADDRESS_BOOK_FILE" << endl;
return -;
} tutorial::AddressBook address_book; {
fstream input(argv[], ios::in | ios::binary);
if(!input){
cout << argv[] << ": File not found. Creating a new file." << endl;
} else if (!address_book.ParseFromIstream(&input)) {
cerr << "Failed to parse address book." << endl;
return -;
}
} PromptForAddress(address_book.add_person()); {
fstream out(argv[], ios::out | ios::trunc | ios::binary);
if(!address_book.SerializeToOstream(&out)){ // 此方法为 Message 基类中的 class Person_PhoneNumber : public ::google::protobuf::Message
cerr << "Failed to write address book." << endl;
return -;
}
} google::protobuf::ShutdownProtobufLibrary(); return ;
} /* vim: set ts=4 sw=4 sts=4 tw=100 */
 ListPerson.cpp

#include <iostream>
#include <fstream>
#include "addressbook.pb.h"
using namespace std; void ListPeople(const tutorial::AddressBook& address_book) {
for (int i = ; i < address_book.person_size(); i++) {
const tutorial::Person& person = address_book.person(i); cout << "Person ID:" << person.id() << endl;
cout << "Name: " << person.name() << endl; if (person.has_email()) {
cout << "E-Mail address: " << person.email();
} for ( int j = ; j < person.phone_size(); j++ ) {
const tutorial::Person::PhoneNumber& phone_number = person.phone(j); switch(phone_number.type()) {
case tutorial::Person::MOBILE:
cout << "Mobile Phone #: ";
break;
case tutorial::Person::HOME:
cout << " Home Phone #: ";
break;
case tutorial::Person::WORK:
cout << " Work phone #: ";
break;
}
cout << phone_number.number() << endl;
}
}
} int main(int argc, char* argv[]) { GOOGLE_PROTOBUF_VERIFY_VERSION; if(argc != ) {
cerr << "Usage: " << argv[] << " ADDRESS_BOOK_FILE" << endl;
return -;
} tutorial::AddressBook address_book; {
fstream input(argv[], ios::in | ios::binary);
if (!address_book.ParseFromIstream(&input)) { // 此方法为 Message 基类中的 class Person_PhoneNumber : public ::google::protobuf::Message
cerr << "Failed to parse address book." << endl;
return -;
}
} ListPeople(address_book); google::protobuf::ShutdownProtobufLibrary(); return ;
} /* vim: set ts=4 sw=4 sts=4 tw=100 */
 g++ 编译
g++ -g -o writer AddPerson.cpp addressbook.pb.cc -I. -I /home/users/wangquanjun/lab/protobuf/protobuf/include -L /home/users/wangquanjun/lab/protobuf/protobuf/lib -lprotobuf -pthread
g++ -g -o reader ListPerson.cpp addressbook.pb.cc -I. -I /home/users/wangquanjun/lab/protobuf/protobuf/include -L /home/users/wangquanjun/lab/protobuf/protobuf/lib -lprotobuf -pthread
 使用
touch ADDRESS_BOOK_FILE
./writer ADDRESS_BOOK_FILE ./reader ADDRESS_BOOK_FILE

google protobuf 使用示例的更多相关文章

  1. google protobuf序列化原理解析 (PHP示例)

    一.简介 Protocol Buffers是谷歌定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小, ...

  2. google protobuf安装与使用

    google protobuf是一个灵活的.高效的用于序列化数据的协议.相比较XML和JSON格式,protobuf更小.更快.更便捷.google protobuf是跨语言的,并且自带了一个编译器( ...

  3. google protobuf初体验

    最近在读别人代码的时候发现一个的东西,名字叫protobuf, 感觉挺好用的,写在这里,留个记录.那么什么是protobuf 呢?假如您在网上搜索,应该会得到类似这样的文字介绍: Google Pro ...

  4. google protobuf ios开发使用

    简介: protobuf 即 google protocol buffer 是一种数据封装格式协议: 比如其他经常用的xml,json等格式:protobuf的优势是效率高,同样的一份数据使用prot ...

  5. google protobuf使用

    下载的是github上的:https://github.com/google/protobuf If you get the source from github, you need to gener ...

  6. 使用CSharp编写Google Protobuf插件

    什么是 Google Protocol Buffer? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 ...

  7. Google Protobuf结合Netty实践

    1.Win版Protobuf代码生成工具下载: https://github.com/protocolbuffers/protobuf/releases 注意下载protoc-3.6.1-win32. ...

  8. google/protobuf hello world

    /(ㄒoㄒ)/~~ 官网被墙 1. github > Search > protobuf or protocol buffers 2.https://github.com/google/p ...

  9. 《精通并发与Netty》学习笔记(05 - Google Protobuf与Netty的结合)

    protobuf是由Google开发的一套对数据结构进行序列化的方法,可用做通信协议,数据存储格式,等等.其特点是不限语言.不限平台.扩展性强 Netty也提供了对Protobuf的天然支持,我们今天 ...

随机推荐

  1. HTML5新特性之WebNotifications

    Web Notifications是HTML5中一个令人欣喜的新特性,它支持开发者配置和显示桌面通知,为用户提供更好的体验,最令人称赞的是,即使用户忙于其他工作时也可以收到来自页面的消息通知,例如一个 ...

  2. 图片上传即时显示javascript代码

    这是基于javascript的一种图片上传即时显示方法,测试结果IE6和火狐浏览器可以正常使用.google浏览器不兼容. 这种方法兼容性比较差,仅供参考,建议使用ajax方法来即时显示图片. 1.首 ...

  3. NodeJS安全设计:好吃的草莓味糖果,只给好朋友小红

    上一篇文章中,我们已经建立了一个有缓冲机制的文件服务器,能给客户端响应附件类型的文件,其实,就爱莲(iLinkIT)而言,NodeJS的模块做到这样也就已经可以了,因为使用的场景就是电脑和手机之间,与 ...

  4. MyBatis参数传入集合之foreach动态sql

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...

  5. Spring boot 1.3.5 RELEASE 官方文档中文翻译--目录

    说明: 打算利用闲暇时候翻译一下Spring boot的官方文档,翻译的版本是1.3.5 RELEASE. 做这件事的目的呢有四: 国内中文的Spring boot资料实在不多,希望能给后来人一点小小 ...

  6. Unity基本操作一

    1,使对象进入摄像机镜头内align with view 2,太阳光 创建点point light,调节Intensity改变光照强度,上面的Range改变光照范围. 3,Animation选中Pla ...

  7. initial,常用于消除css格式

    刚在群里有人问在不改变原有css的情况下怎么清除一个css属性.有人提出了 initial,再此记录下. initial 关键字用于设置 CSS 属性为它的默认值. initial 关键字可用于任何 ...

  8. Delphi中的四舍五入函数

    一.Delphi中的四舍五入法     四舍五入是一种应用非常广泛的近似计算方法,针对不同的应用需求,其有算术舍入法和银行家舍入法两种.     所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则 ...

  9. c 递归函数浅析

    所谓递归,简而言之就是应用程序自身调用自身,以实现层次数据结构的查询和访问. 递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很 ...

  10. MFC VC6++学习笔记

    一.mfc中基于对话框程序添加菜单栏 1打开对话框资源,然后右键->属性->常规 里面有个"菜单" 下拉框,然后选择IDM_USER! 2打开对话框,右键属性,选择刚才 ...