protobuf 2.2.5-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (256) hide show
  1. data/.gitignore +17 -0
  2. data/.travis.yml +9 -0
  3. data/.yardopts +5 -0
  4. data/Gemfile +3 -0
  5. data/README.md +316 -0
  6. data/Rakefile +29 -0
  7. data/UPGRADING.md +60 -0
  8. data/bin/rpc_server +5 -0
  9. data/bin/rprotoc +62 -0
  10. data/examples/addressbook.pb.rb +55 -0
  11. data/examples/addressbook.proto +24 -0
  12. data/examples/reading_a_message.rb +32 -0
  13. data/examples/writing_a_message.rb +46 -0
  14. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
  15. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
  16. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
  17. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
  18. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
  19. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
  20. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
  21. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  22. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
  23. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
  24. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
  25. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
  26. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  27. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
  28. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
  29. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
  30. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
  31. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
  32. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
  33. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
  34. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
  35. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
  36. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
  37. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
  38. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
  39. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
  40. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
  41. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
  42. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
  43. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
  44. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
  45. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
  46. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
  47. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
  48. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
  49. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
  50. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
  51. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
  52. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
  53. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
  54. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
  55. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
  56. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
  57. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
  58. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
  59. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
  60. data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
  61. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
  62. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
  63. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
  64. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
  65. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
  66. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
  67. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
  68. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
  69. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
  70. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
  71. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
  72. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
  73. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
  74. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
  75. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
  76. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
  77. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
  78. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
  79. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
  80. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
  81. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
  82. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
  83. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
  84. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
  85. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
  86. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
  87. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
  88. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
  89. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
  90. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
  91. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
  92. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
  93. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
  94. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
  95. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
  96. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
  97. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
  98. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
  99. data/ext/ruby_generator/Makefile +10 -0
  100. data/ext/ruby_generator/RubyGenerator.cpp +450 -0
  101. data/ext/ruby_generator/RubyGenerator.h +199 -0
  102. data/ext/ruby_generator/extconf.rb +36 -0
  103. data/ext/ruby_generator/protoc-ruby +0 -0
  104. data/lib/protobuf/cli.rb +188 -0
  105. data/lib/protobuf/enum.rb +58 -0
  106. data/lib/protobuf/enum_value.rb +59 -0
  107. data/lib/protobuf/evented.rb +22 -0
  108. data/lib/protobuf/exceptions.rb +11 -0
  109. data/lib/protobuf/ext/eventmachine.rb +14 -0
  110. data/lib/protobuf/field/base_field.rb +240 -0
  111. data/lib/protobuf/field/bool_field.rb +36 -0
  112. data/lib/protobuf/field/bytes_field.rb +38 -0
  113. data/lib/protobuf/field/double_field.rb +19 -0
  114. data/lib/protobuf/field/enum_field.rb +50 -0
  115. data/lib/protobuf/field/extension_fields.rb +32 -0
  116. data/lib/protobuf/field/field_array.rb +65 -0
  117. data/lib/protobuf/field/fixed32_field.rb +19 -0
  118. data/lib/protobuf/field/fixed64_field.rb +22 -0
  119. data/lib/protobuf/field/float_field.rb +31 -0
  120. data/lib/protobuf/field/int32_field.rb +12 -0
  121. data/lib/protobuf/field/int64_field.rb +12 -0
  122. data/lib/protobuf/field/integer_field.rb +19 -0
  123. data/lib/protobuf/field/message_field.rb +53 -0
  124. data/lib/protobuf/field/sfixed32_field.rb +21 -0
  125. data/lib/protobuf/field/sfixed64_field.rb +24 -0
  126. data/lib/protobuf/field/signed_integer_field.rb +23 -0
  127. data/lib/protobuf/field/sint32_field.rb +12 -0
  128. data/lib/protobuf/field/sint64_field.rb +12 -0
  129. data/lib/protobuf/field/string_field.rb +14 -0
  130. data/lib/protobuf/field/uint32_field.rb +12 -0
  131. data/lib/protobuf/field/uint64_field.rb +12 -0
  132. data/lib/protobuf/field/varint_field.rb +61 -0
  133. data/lib/protobuf/field.rb +57 -0
  134. data/lib/protobuf/logger.rb +86 -0
  135. data/lib/protobuf/message/decoder.rb +83 -0
  136. data/lib/protobuf/message/encoder.rb +48 -0
  137. data/lib/protobuf/message/extend.rb +8 -0
  138. data/lib/protobuf/message/message.rb +1 -0
  139. data/lib/protobuf/message.rb +320 -0
  140. data/lib/protobuf/rpc/buffer.rb +79 -0
  141. data/lib/protobuf/rpc/client.rb +166 -0
  142. data/lib/protobuf/rpc/connector.rb +19 -0
  143. data/lib/protobuf/rpc/connectors/base.rb +38 -0
  144. data/lib/protobuf/rpc/connectors/common.rb +156 -0
  145. data/lib/protobuf/rpc/connectors/em_client.rb +84 -0
  146. data/lib/protobuf/rpc/connectors/eventmachine.rb +87 -0
  147. data/lib/protobuf/rpc/connectors/socket.rb +73 -0
  148. data/lib/protobuf/rpc/connectors/zmq.rb +69 -0
  149. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  150. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  151. data/lib/protobuf/rpc/error.rb +25 -0
  152. data/lib/protobuf/rpc/rpc.pb.rb +118 -0
  153. data/lib/protobuf/rpc/server.rb +89 -0
  154. data/lib/protobuf/rpc/servers/evented/server.rb +41 -0
  155. data/lib/protobuf/rpc/servers/evented_runner.rb +21 -0
  156. data/lib/protobuf/rpc/servers/socket/server.rb +111 -0
  157. data/lib/protobuf/rpc/servers/socket/worker.rb +66 -0
  158. data/lib/protobuf/rpc/servers/socket_runner.rb +27 -0
  159. data/lib/protobuf/rpc/servers/zmq/broker.rb +87 -0
  160. data/lib/protobuf/rpc/servers/zmq/server.rb +50 -0
  161. data/lib/protobuf/rpc/servers/zmq/util.rb +27 -0
  162. data/lib/protobuf/rpc/servers/zmq/worker.rb +60 -0
  163. data/lib/protobuf/rpc/servers/zmq_runner.rb +25 -0
  164. data/lib/protobuf/rpc/service.rb +173 -0
  165. data/lib/protobuf/rpc/service_dispatcher.rb +130 -0
  166. data/lib/protobuf/rpc/service_filters.rb +267 -0
  167. data/lib/protobuf/rpc/stat.rb +83 -0
  168. data/lib/protobuf/socket.rb +22 -0
  169. data/lib/protobuf/version.rb +4 -0
  170. data/lib/protobuf/wire_type.rb +10 -0
  171. data/lib/protobuf/zmq.rb +21 -0
  172. data/lib/protobuf.rb +86 -0
  173. data/proto/rpc.pb.rb +48 -0
  174. data/proto/rpc.proto +73 -0
  175. data/protobuf.gemspec +44 -0
  176. data/spec/benchmark/tasks.rb +179 -0
  177. data/spec/functional/embedded_service_spec.rb +7 -0
  178. data/spec/functional/evented_server_spec.rb +64 -0
  179. data/spec/functional/socket_server_spec.rb +58 -0
  180. data/spec/functional/zmq_server_spec.rb +58 -0
  181. data/spec/lib/protobuf/cli_spec.rb +212 -0
  182. data/spec/lib/protobuf/enum_spec.rb +98 -0
  183. data/spec/lib/protobuf/enum_value_spec.rb +15 -0
  184. data/spec/lib/protobuf/logger_spec.rb +131 -0
  185. data/spec/lib/protobuf/message/encoder_spec.rb +19 -0
  186. data/spec/lib/protobuf/message_spec.rb +209 -0
  187. data/spec/lib/protobuf/rpc/client_spec.rb +158 -0
  188. data/spec/lib/protobuf/rpc/connector_spec.rb +32 -0
  189. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
  190. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +128 -0
  191. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +36 -0
  192. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +22 -0
  193. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +18 -0
  194. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +43 -0
  195. data/spec/lib/protobuf/rpc/servers/zmq/broker_spec.rb +35 -0
  196. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
  197. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +45 -0
  198. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +44 -0
  199. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +116 -0
  200. data/spec/lib/protobuf/rpc/service_filters_spec.rb +451 -0
  201. data/spec/lib/protobuf/rpc/service_spec.rb +165 -0
  202. data/spec/lib/protobuf_spec.rb +62 -0
  203. data/spec/spec_helper.rb +51 -0
  204. data/spec/support/all.rb +6 -0
  205. data/spec/support/server.rb +101 -0
  206. data/spec/support/test/enum.pb.rb +34 -0
  207. data/spec/support/test/enum.proto +12 -0
  208. data/spec/support/test/resource.pb.rb +58 -0
  209. data/spec/support/test/resource.proto +31 -0
  210. data/spec/support/test/resource_service.rb +14 -0
  211. data/spec/support/test_app_file.rb +2 -0
  212. data/spec/support/tolerance_matcher.rb +40 -0
  213. data/test/data/data.bin +3 -0
  214. data/test/data/data_source.py +14 -0
  215. data/test/data/types.bin +0 -0
  216. data/test/data/types_source.py +22 -0
  217. data/test/data/unk.png +0 -0
  218. data/test/proto/addressbook.pb.rb +66 -0
  219. data/test/proto/addressbook.proto +33 -0
  220. data/test/proto/addressbook_base.pb.rb +58 -0
  221. data/test/proto/addressbook_base.proto +26 -0
  222. data/test/proto/addressbook_ext.pb.rb +20 -0
  223. data/test/proto/addressbook_ext.proto +6 -0
  224. data/test/proto/collision.pb.rb +17 -0
  225. data/test/proto/collision.proto +5 -0
  226. data/test/proto/ext_collision.pb.rb +24 -0
  227. data/test/proto/ext_collision.proto +8 -0
  228. data/test/proto/ext_range.pb.rb +22 -0
  229. data/test/proto/ext_range.proto +7 -0
  230. data/test/proto/float_default.proto +10 -0
  231. data/test/proto/lowercase.pb.rb +30 -0
  232. data/test/proto/lowercase.proto +9 -0
  233. data/test/proto/merge.pb.rb +39 -0
  234. data/test/proto/merge.proto +15 -0
  235. data/test/proto/nested.pb.rb +30 -0
  236. data/test/proto/nested.proto +9 -0
  237. data/test/proto/optional_field.pb.rb +35 -0
  238. data/test/proto/optional_field.proto +12 -0
  239. data/test/proto/packed.pb.rb +22 -0
  240. data/test/proto/packed.proto +6 -0
  241. data/test/proto/rpc.proto +6 -0
  242. data/test/proto/types.pb.rb +84 -0
  243. data/test/proto/types.proto +37 -0
  244. data/test/test_addressbook.rb +56 -0
  245. data/test/test_enum_value.rb +41 -0
  246. data/test/test_extension.rb +36 -0
  247. data/test/test_lowercase.rb +11 -0
  248. data/test/test_message.rb +128 -0
  249. data/test/test_optional_field.rb +103 -0
  250. data/test/test_packed_field.rb +40 -0
  251. data/test/test_parse.rb +15 -0
  252. data/test/test_repeated_types.rb +132 -0
  253. data/test/test_serialize.rb +61 -0
  254. data/test/test_standard_message.rb +96 -0
  255. data/test/test_types.rb +226 -0
  256. metadata +461 -0
@@ -0,0 +1,268 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // http://code.google.com/p/protobuf/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+ //
35
+ // Contains classes used to keep track of unrecognized fields seen while
36
+ // parsing a protocol message.
37
+
38
+ #ifndef GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__
39
+ #define GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__
40
+
41
+ #include <string>
42
+ #include <vector>
43
+ #include <google/protobuf/repeated_field.h>
44
+
45
+ namespace google {
46
+ namespace protobuf {
47
+
48
+ class Message; // message.h
49
+ class UnknownField; // below
50
+
51
+ // An UnknownFieldSet contains fields that were encountered while parsing a
52
+ // message but were not defined by its type. Keeping track of these can be
53
+ // useful, especially in that they may be written if the message is serialized
54
+ // again without being cleared in between. This means that software which
55
+ // simply receives messages and forwards them to other servers does not need
56
+ // to be updated every time a new field is added to the message definition.
57
+ //
58
+ // To get the UnknownFieldSet attached to any message, call
59
+ // Reflection::GetUnknownFields().
60
+ //
61
+ // This class is necessarily tied to the protocol buffer wire format, unlike
62
+ // the Reflection interface which is independent of any serialization scheme.
63
+ class LIBPROTOBUF_EXPORT UnknownFieldSet {
64
+ public:
65
+ UnknownFieldSet();
66
+ ~UnknownFieldSet();
67
+
68
+ // Remove all fields.
69
+ inline void Clear();
70
+
71
+ // Is this set empty?
72
+ inline bool empty() const;
73
+
74
+ // Merge the contents of some other UnknownFieldSet with this one.
75
+ void MergeFrom(const UnknownFieldSet& other);
76
+
77
+ // Swaps the contents of some other UnknownFieldSet with this one.
78
+ inline void Swap(UnknownFieldSet* x);
79
+
80
+ // Computes (an estimate of) the total number of bytes currently used for
81
+ // storing the unknown fields in memory. Does NOT include
82
+ // sizeof(*this) in the calculation.
83
+ int SpaceUsedExcludingSelf() const;
84
+
85
+ // Version of SpaceUsed() including sizeof(*this).
86
+ int SpaceUsed() const;
87
+
88
+ // Returns the number of fields present in the UnknownFieldSet.
89
+ inline int field_count() const;
90
+ // Get a field in the set, where 0 <= index < field_count(). The fields
91
+ // appear in the order in which they were added.
92
+ inline const UnknownField& field(int index) const;
93
+ // Get a mutable pointer to a field in the set, where
94
+ // 0 <= index < field_count(). The fields appear in the order in which
95
+ // they were added.
96
+ inline UnknownField* mutable_field(int index);
97
+
98
+ // Adding fields ---------------------------------------------------
99
+
100
+ void AddVarint(int number, uint64 value);
101
+ void AddFixed32(int number, uint32 value);
102
+ void AddFixed64(int number, uint64 value);
103
+ void AddLengthDelimited(int number, const string& value);
104
+ string* AddLengthDelimited(int number);
105
+ UnknownFieldSet* AddGroup(int number);
106
+
107
+ // Adds an unknown field from another set.
108
+ void AddField(const UnknownField& field);
109
+
110
+ // Parsing helpers -------------------------------------------------
111
+ // These work exactly like the similarly-named methods of Message.
112
+
113
+ bool MergeFromCodedStream(io::CodedInputStream* input);
114
+ bool ParseFromCodedStream(io::CodedInputStream* input);
115
+ bool ParseFromZeroCopyStream(io::ZeroCopyInputStream* input);
116
+ bool ParseFromArray(const void* data, int size);
117
+ inline bool ParseFromString(const string& data) {
118
+ return ParseFromArray(data.data(), data.size());
119
+ }
120
+
121
+ private:
122
+ void ClearFallback();
123
+
124
+ vector<UnknownField>* fields_;
125
+
126
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(UnknownFieldSet);
127
+ };
128
+
129
+ // Represents one field in an UnknownFieldSet.
130
+ class LIBPROTOBUF_EXPORT UnknownField {
131
+ public:
132
+ enum Type {
133
+ TYPE_VARINT,
134
+ TYPE_FIXED32,
135
+ TYPE_FIXED64,
136
+ TYPE_LENGTH_DELIMITED,
137
+ TYPE_GROUP
138
+ };
139
+
140
+ // The field's tag number, as seen on the wire.
141
+ inline int number() const;
142
+
143
+ // The field type.
144
+ inline Type type() const;
145
+
146
+ // Accessors -------------------------------------------------------
147
+ // Each method works only for UnknownFields of the corresponding type.
148
+
149
+ inline uint64 varint() const;
150
+ inline uint32 fixed32() const;
151
+ inline uint64 fixed64() const;
152
+ inline const string& length_delimited() const;
153
+ inline const UnknownFieldSet& group() const;
154
+
155
+ inline void set_varint(uint64 value);
156
+ inline void set_fixed32(uint32 value);
157
+ inline void set_fixed64(uint64 value);
158
+ inline void set_length_delimited(const string& value);
159
+ inline string* mutable_length_delimited();
160
+ inline UnknownFieldSet* mutable_group();
161
+
162
+ private:
163
+ friend class UnknownFieldSet;
164
+
165
+ // If this UnknownField contains a pointer, delete it.
166
+ void Delete();
167
+
168
+ // Make a deep copy of any pointers in this UnknownField.
169
+ void DeepCopy();
170
+
171
+ unsigned int number_ : 29;
172
+ unsigned int type_ : 3;
173
+ union {
174
+ uint64 varint_;
175
+ uint32 fixed32_;
176
+ uint64 fixed64_;
177
+ string* length_delimited_;
178
+ UnknownFieldSet* group_;
179
+ };
180
+ };
181
+
182
+ // ===================================================================
183
+ // inline implementations
184
+
185
+ inline void UnknownFieldSet::Clear() {
186
+ if (fields_ != NULL) {
187
+ ClearFallback();
188
+ }
189
+ }
190
+
191
+ inline bool UnknownFieldSet::empty() const {
192
+ return fields_ == NULL || fields_->empty();
193
+ }
194
+
195
+ inline void UnknownFieldSet::Swap(UnknownFieldSet* x) {
196
+ std::swap(fields_, x->fields_);
197
+ }
198
+
199
+ inline int UnknownFieldSet::field_count() const {
200
+ return (fields_ == NULL) ? 0 : fields_->size();
201
+ }
202
+ inline const UnknownField& UnknownFieldSet::field(int index) const {
203
+ return (*fields_)[index];
204
+ }
205
+ inline UnknownField* UnknownFieldSet::mutable_field(int index) {
206
+ return &(*fields_)[index];
207
+ }
208
+
209
+ inline void UnknownFieldSet::AddLengthDelimited(
210
+ int number, const string& value) {
211
+ AddLengthDelimited(number)->assign(value);
212
+ }
213
+
214
+ inline int UnknownField::number() const { return number_; }
215
+ inline UnknownField::Type UnknownField::type() const {
216
+ return static_cast<Type>(type_);
217
+ }
218
+
219
+ inline uint64 UnknownField::varint () const {
220
+ GOOGLE_DCHECK_EQ(type_, TYPE_VARINT);
221
+ return varint_;
222
+ }
223
+ inline uint32 UnknownField::fixed32() const {
224
+ GOOGLE_DCHECK_EQ(type_, TYPE_FIXED32);
225
+ return fixed32_;
226
+ }
227
+ inline uint64 UnknownField::fixed64() const {
228
+ GOOGLE_DCHECK_EQ(type_, TYPE_FIXED64);
229
+ return fixed64_;
230
+ }
231
+ inline const string& UnknownField::length_delimited() const {
232
+ GOOGLE_DCHECK_EQ(type_, TYPE_LENGTH_DELIMITED);
233
+ return *length_delimited_;
234
+ }
235
+ inline const UnknownFieldSet& UnknownField::group() const {
236
+ GOOGLE_DCHECK_EQ(type_, TYPE_GROUP);
237
+ return *group_;
238
+ }
239
+
240
+ inline void UnknownField::set_varint(uint64 value) {
241
+ GOOGLE_DCHECK_EQ(type_, TYPE_VARINT);
242
+ varint_ = value;
243
+ }
244
+ inline void UnknownField::set_fixed32(uint32 value) {
245
+ GOOGLE_DCHECK_EQ(type_, TYPE_FIXED32);
246
+ fixed32_ = value;
247
+ }
248
+ inline void UnknownField::set_fixed64(uint64 value) {
249
+ GOOGLE_DCHECK_EQ(type_, TYPE_FIXED64);
250
+ fixed64_ = value;
251
+ }
252
+ inline void UnknownField::set_length_delimited(const string& value) {
253
+ GOOGLE_DCHECK_EQ(type_, TYPE_LENGTH_DELIMITED);
254
+ length_delimited_->assign(value);
255
+ }
256
+ inline string* UnknownField::mutable_length_delimited() {
257
+ GOOGLE_DCHECK_EQ(type_, TYPE_LENGTH_DELIMITED);
258
+ return length_delimited_;
259
+ }
260
+ inline UnknownFieldSet* UnknownField::mutable_group() {
261
+ GOOGLE_DCHECK_EQ(type_, TYPE_GROUP);
262
+ return group_;
263
+ }
264
+
265
+ } // namespace protobuf
266
+
267
+ } // namespace google
268
+ #endif // GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__
@@ -0,0 +1,304 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // http://code.google.com/p/protobuf/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ // atenasio@google.com (Chris Atenasio) (ZigZag transform)
33
+ // Based on original Protocol Buffers design by
34
+ // Sanjay Ghemawat, Jeff Dean, and others.
35
+ //
36
+ // This header is logically internal, but is made public because it is used
37
+ // from protocol-compiler-generated code, which may reside in other components.
38
+
39
+ #ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_H__
40
+ #define GOOGLE_PROTOBUF_WIRE_FORMAT_H__
41
+
42
+ #include <string>
43
+ #include <google/protobuf/descriptor.pb.h>
44
+ #include <google/protobuf/descriptor.h>
45
+ #include <google/protobuf/message.h>
46
+ #include <google/protobuf/wire_format_lite.h>
47
+
48
+ // Do UTF-8 validation on string type in Debug build only
49
+ #ifndef NDEBUG
50
+ #define GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED
51
+ #endif
52
+
53
+ namespace google {
54
+ namespace protobuf {
55
+ namespace io {
56
+ class CodedInputStream; // coded_stream.h
57
+ class CodedOutputStream; // coded_stream.h
58
+ }
59
+ class UnknownFieldSet; // unknown_field_set.h
60
+ }
61
+
62
+ namespace protobuf {
63
+ namespace internal {
64
+
65
+ // This class is for internal use by the protocol buffer library and by
66
+ // protocol-complier-generated message classes. It must not be called
67
+ // directly by clients.
68
+ //
69
+ // This class contains code for implementing the binary protocol buffer
70
+ // wire format via reflection. The WireFormatLite class implements the
71
+ // non-reflection based routines.
72
+ //
73
+ // This class is really a namespace that contains only static methods
74
+ class LIBPROTOBUF_EXPORT WireFormat {
75
+ public:
76
+
77
+ // Given a field return its WireType
78
+ static inline WireFormatLite::WireType WireTypeForField(
79
+ const FieldDescriptor* field);
80
+
81
+ // Given a FieldSescriptor::Type return its WireType
82
+ static inline WireFormatLite::WireType WireTypeForFieldType(
83
+ FieldDescriptor::Type type);
84
+
85
+ // Compute the byte size of a tag. For groups, this includes both the start
86
+ // and end tags.
87
+ static inline int TagSize(int field_number, FieldDescriptor::Type type);
88
+
89
+ // These procedures can be used to implement the methods of Message which
90
+ // handle parsing and serialization of the protocol buffer wire format
91
+ // using only the Reflection interface. When you ask the protocol
92
+ // compiler to optimize for code size rather than speed, it will implement
93
+ // those methods in terms of these procedures. Of course, these are much
94
+ // slower than the specialized implementations which the protocol compiler
95
+ // generates when told to optimize for speed.
96
+
97
+ // Read a message in protocol buffer wire format.
98
+ //
99
+ // This procedure reads either to the end of the input stream or through
100
+ // a WIRETYPE_END_GROUP tag ending the message, whichever comes first.
101
+ // It returns false if the input is invalid.
102
+ //
103
+ // Required fields are NOT checked by this method. You must call
104
+ // IsInitialized() on the resulting message yourself.
105
+ static bool ParseAndMergePartial(io::CodedInputStream* input,
106
+ Message* message);
107
+
108
+ // Serialize a message in protocol buffer wire format.
109
+ //
110
+ // Any embedded messages within the message must have their correct sizes
111
+ // cached. However, the top-level message need not; its size is passed as
112
+ // a parameter to this procedure.
113
+ //
114
+ // These return false iff the underlying stream returns a write error.
115
+ static void SerializeWithCachedSizes(
116
+ const Message& message,
117
+ int size, io::CodedOutputStream* output);
118
+
119
+ // Implements Message::ByteSize() via reflection. WARNING: The result
120
+ // of this method is *not* cached anywhere. However, all embedded messages
121
+ // will have their ByteSize() methods called, so their sizes will be cached.
122
+ // Therefore, calling this method is sufficient to allow you to call
123
+ // WireFormat::SerializeWithCachedSizes() on the same object.
124
+ static int ByteSize(const Message& message);
125
+
126
+ // -----------------------------------------------------------------
127
+ // Helpers for dealing with unknown fields
128
+
129
+ // Skips a field value of the given WireType. The input should start
130
+ // positioned immediately after the tag. If unknown_fields is non-NULL,
131
+ // the contents of the field will be added to it.
132
+ static bool SkipField(io::CodedInputStream* input, uint32 tag,
133
+ UnknownFieldSet* unknown_fields);
134
+
135
+ // Reads and ignores a message from the input. If unknown_fields is non-NULL,
136
+ // the contents will be added to it.
137
+ static bool SkipMessage(io::CodedInputStream* input,
138
+ UnknownFieldSet* unknown_fields);
139
+
140
+ // Write the contents of an UnknownFieldSet to the output.
141
+ static void SerializeUnknownFields(const UnknownFieldSet& unknown_fields,
142
+ io::CodedOutputStream* output);
143
+ // Same as above, except writing directly to the provided buffer.
144
+ // Requires that the buffer have sufficient capacity for
145
+ // ComputeUnknownFieldsSize(unknown_fields).
146
+ //
147
+ // Returns a pointer past the last written byte.
148
+ static uint8* SerializeUnknownFieldsToArray(
149
+ const UnknownFieldSet& unknown_fields,
150
+ uint8* target);
151
+
152
+ // Same thing except for messages that have the message_set_wire_format
153
+ // option.
154
+ static void SerializeUnknownMessageSetItems(
155
+ const UnknownFieldSet& unknown_fields,
156
+ io::CodedOutputStream* output);
157
+ // Same as above, except writing directly to the provided buffer.
158
+ // Requires that the buffer have sufficient capacity for
159
+ // ComputeUnknownMessageSetItemsSize(unknown_fields).
160
+ //
161
+ // Returns a pointer past the last written byte.
162
+ static uint8* SerializeUnknownMessageSetItemsToArray(
163
+ const UnknownFieldSet& unknown_fields,
164
+ uint8* target);
165
+
166
+ // Compute the size of the UnknownFieldSet on the wire.
167
+ static int ComputeUnknownFieldsSize(const UnknownFieldSet& unknown_fields);
168
+
169
+ // Same thing except for messages that have the message_set_wire_format
170
+ // option.
171
+ static int ComputeUnknownMessageSetItemsSize(
172
+ const UnknownFieldSet& unknown_fields);
173
+
174
+
175
+ // Helper functions for encoding and decoding tags. (Inlined below and in
176
+ // _inl.h)
177
+ //
178
+ // This is different from MakeTag(field->number(), field->type()) in the case
179
+ // of packed repeated fields.
180
+ static uint32 MakeTag(const FieldDescriptor* field);
181
+
182
+ // Parse a single field. The input should start out positioned immidately
183
+ // after the tag.
184
+ static bool ParseAndMergeField(
185
+ uint32 tag,
186
+ const FieldDescriptor* field, // May be NULL for unknown
187
+ Message* message,
188
+ io::CodedInputStream* input);
189
+
190
+ // Serialize a single field.
191
+ static void SerializeFieldWithCachedSizes(
192
+ const FieldDescriptor* field, // Cannot be NULL
193
+ const Message& message,
194
+ io::CodedOutputStream* output);
195
+
196
+ // Compute size of a single field. If the field is a message type, this
197
+ // will call ByteSize() for the embedded message, insuring that it caches
198
+ // its size.
199
+ static int FieldByteSize(
200
+ const FieldDescriptor* field, // Cannot be NULL
201
+ const Message& message);
202
+
203
+ // Parse/serialize a MessageSet::Item group. Used with messages that use
204
+ // opion message_set_wire_format = true.
205
+ static bool ParseAndMergeMessageSetItem(
206
+ io::CodedInputStream* input,
207
+ Message* message);
208
+ static void SerializeMessageSetItemWithCachedSizes(
209
+ const FieldDescriptor* field,
210
+ const Message& message,
211
+ io::CodedOutputStream* output);
212
+ static int MessageSetItemByteSize(
213
+ const FieldDescriptor* field,
214
+ const Message& message);
215
+
216
+ // Computes the byte size of a field, excluding tags. For packed fields, it
217
+ // only includes the size of the raw data, and not the size of the total
218
+ // length, but for other length-delimited types, the size of the length is
219
+ // included.
220
+ static int FieldDataOnlyByteSize(
221
+ const FieldDescriptor* field, // Cannot be NULL
222
+ const Message& message);
223
+
224
+ enum Operation {
225
+ PARSE,
226
+ SERIALIZE,
227
+ };
228
+
229
+ // Verifies that a string field is valid UTF8, logging an error if not.
230
+ static void VerifyUTF8String(const char* data, int size, Operation op);
231
+
232
+ private:
233
+ // Verifies that a string field is valid UTF8, logging an error if not.
234
+ static void VerifyUTF8StringFallback(
235
+ const char* data,
236
+ int size,
237
+ Operation op);
238
+
239
+
240
+
241
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(WireFormat);
242
+ };
243
+
244
+ // Subclass of FieldSkipper which saves skipped fields to an UnknownFieldSet.
245
+ class LIBPROTOBUF_EXPORT UnknownFieldSetFieldSkipper : public FieldSkipper {
246
+ public:
247
+ UnknownFieldSetFieldSkipper(UnknownFieldSet* unknown_fields)
248
+ : unknown_fields_(unknown_fields) {}
249
+ virtual ~UnknownFieldSetFieldSkipper() {}
250
+
251
+ // implements FieldSkipper -----------------------------------------
252
+ virtual bool SkipField(io::CodedInputStream* input, uint32 tag);
253
+ virtual bool SkipMessage(io::CodedInputStream* input);
254
+ virtual void SkipUnknownEnum(int field_number, int value);
255
+
256
+ private:
257
+ UnknownFieldSet* unknown_fields_;
258
+ };
259
+
260
+ // inline methods ====================================================
261
+
262
+ inline WireFormatLite::WireType WireFormat::WireTypeForField(
263
+ const FieldDescriptor* field) {
264
+ if (field->options().packed()) {
265
+ return WireFormatLite::WIRETYPE_LENGTH_DELIMITED;
266
+ } else {
267
+ return WireTypeForFieldType(field->type());
268
+ }
269
+ }
270
+
271
+ inline WireFormatLite::WireType WireFormat::WireTypeForFieldType(
272
+ FieldDescriptor::Type type) {
273
+ // Some compilers don't like enum -> enum casts, so we implicit_cast to
274
+ // int first.
275
+ return WireFormatLite::WireTypeForFieldType(
276
+ static_cast<WireFormatLite::FieldType>(
277
+ implicit_cast<int>(type)));
278
+ }
279
+
280
+ inline uint32 WireFormat::MakeTag(const FieldDescriptor* field) {
281
+ return WireFormatLite::MakeTag(field->number(), WireTypeForField(field));
282
+ }
283
+
284
+ inline int WireFormat::TagSize(int field_number, FieldDescriptor::Type type) {
285
+ // Some compilers don't like enum -> enum casts, so we implicit_cast to
286
+ // int first.
287
+ return WireFormatLite::TagSize(field_number,
288
+ static_cast<WireFormatLite::FieldType>(
289
+ implicit_cast<int>(type)));
290
+ }
291
+
292
+ inline void WireFormat::VerifyUTF8String(const char* data, int size,
293
+ WireFormat::Operation op) {
294
+ #ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED
295
+ WireFormat::VerifyUTF8StringFallback(data, size, op);
296
+ #endif
297
+ }
298
+
299
+
300
+ } // namespace internal
301
+ } // namespace protobuf
302
+
303
+ } // namespace google
304
+ #endif // GOOGLE_PROTOBUF_WIRE_FORMAT_H__