CiklumCPPSat24032012:SergeyBratus-GoogleProtocolBuffers

770 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
770
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CiklumCPPSat24032012:SergeyBratus-GoogleProtocolBuffers

  1. 1. GOOGLE PROTOCOLBUFFERSПлюсы и минусы использования вреальных проектах
  2. 2. Как все это работает• Создайте .proto файл в котором будет информация о том что вы будете сериализовать• Сгенерируйте файлы с учетом нужного языка программирования используя утилиту protoc.exe• Добавьте код для вызова функций сериализации
  3. 3. Поддерживаемые языки• С++• Java• Python
  4. 4. Other Languages• Action Script•C• C#• Haskell• Javascript• Objective C• Perl• PHP• Ruby• Scala• Visual Basic
  5. 5. Proto файлmessage Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4;}
  6. 6. С чего начинается .proto Messagemessage SearchRequest{optional int32 page_number = 1;}
  7. 7. Message Field Types• double, float, int32, int64, uint32, uint64, sint32, sint64, fixed32, fixed64, sfixed32, sfixed64, bool, string, bytes• enum Smth{ UNIVERSAL = 0; WEB = 1; IMAGES = 2;}• Other Messages
  8. 8. Field RulesВ сообщении могут быть поля следующих типов• required: 1• optional: 0 или 1• repeated: > 0
  9. 9. Required Fieldrequired int32 foo = 1;• bool has_foo() const• int32 foo() const• void set_foo(int32 value)• void clear_foo()
  10. 10. Optional Fieldoptional Int32 foo = 1;• bool has_foo() const• int32 foo() const• void set_foo(int32 value)• void clear_foo()IsInitialized = true;foo вернет дефолтное значение
  11. 11. String Fieldoptional string foo = 1;required string foo = 1;• bool has_foo() const• const string& foo() const• void set_foo(const string& value)• void set_foo(const char* value)• void set_foo(const char* value, int size)• string* mutable_foo()• void clear_foo()• string* release_foo()
  12. 12. Enum Fieldsenum Bar { BAR_VALUE = 1; }optional Bar foo = 1;required Bar foo = 1;• bool has_foo() const• Bar foo() const• void set_foo(Bar value)• void clear_foo()
  13. 13. Message Fieldsmessage Bar {}optional Bar foo = 1;required Bar foo = 1;• bool has_foo() const• const Bar& foo() const• Bar* mutable_foo()• void clear_foo()• Bar* release_foo()
  14. 14. Repeated Numeric Fieldsrepeated int32 foo = 1;• int foo_size() const• int32 foo(int index) const• void set_foo(int index, int32 value)• void add_foo(int32 value)• void clear_foo()• const RepeatedField<int32>& foo() const• RepeatedField<int32>* mutable_foo()
  15. 15. Repeated String Fieldsrepeated string foo = 1;repeated bytes foo = 1;• int foo_size() const• const string& foo(int index) const• void set_foo(int index, const string& value)• void set_foo(int index, const char* value)• void set_foo(int index, const char* value, int size)• string* mutable_foo(int index)• void add_foo(const string& value)• void add_foo(const char* value)• void add_foo(const char* value, int size)• string* add_foo()• void clear_foo()• const RepeatedPtrField<string>& foo() const• RepeatedPtrField<string>* mutable_foo()
  16. 16. Repeated Enum Fieldsenum Bar { BAR_VALUE = 1; }repeated Bar foo = 1;• int foo_size() const• Bar foo(int index) const• void set_foo(int index, Bar value)• void add_foo(Bar value)• void clear_foo()• const RepeatedField<int>& foo() const• RepeatedField<int>* mutable_foo()
  17. 17. Repeated Embedded Message Fieldsmessage Bar {}repeated Bar foo = 1;• int int foo_size() const• const Bar& foo(int index) const• Bar* mutable_foo(int index)• Bar* add_foo()• void clear_foo()• const RepeatedPtrField<Bar>& foo() const• RepeatedPtrField<Bar>* mutable_foo()
  18. 18. Enumerationsenum Foo { VALUE_A = 1; VALUE_B = 5;}• const const EnumDescriptor* Foo_descriptor()• bool Foo_IsValid(int value)
  19. 19. Arrays• String• Bytes
  20. 20. String String => std::string Bytes => std::string
  21. 21. Convertstd::wstring ConvertToWstring(const std::string& source){ if (source.empty()) return std::wstring(); return std::wstring((const wchar_t *)source.c_str(), source.size() / sizeof(wchar_t));}
  22. 22. Generate File protoc --cpp_out=. test.proto
  23. 23. SerializingSearchRequest pack;pack.set_opt("test");pack.set_req("test");std::vector<char> vec(pack.ByteSize());pack.SerializeToArray(&vec.at(0), vec.size());
  24. 24. DeserializingSearchRequest unpack;unpack.ParseFromArray(&vec.at(0), vec.size());
  25. 25. Pack FunctionsBool SerializeToCodedStream(io::CodedOutputStream * output)constBool SerializeToZeroCopyStream(io::ZeroCopyOutputStream *output) constBool SerializeToString(string * output) constBool SerializeToArray(void * data, int size) constString SerializeAsString() constBool AppendToString(string * output) const
  26. 26. Cookies• Поддержка extensions message Foo { // ... extensions 100 to 199; } extend Foo { optional int32 bar = 126; }• Packages package foo.bar; message Open { ... }• Options option optimize_for = CODE_SIZE; option optimize_for = SPEED;
  27. 27. Questions?

×