protoc 2.6.1.1 → 2.6.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. checksums.yaml +4 -4
  2. data/ext/protoc/Makefile.in +10 -13
  3. data/ext/protoc/extconf.rb +0 -1
  4. data/ext/protoc/protobuf/CHANGES.txt +593 -0
  5. data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
  6. data/ext/protoc/protobuf/INSTALL.txt +237 -0
  7. data/ext/protoc/protobuf/LICENSE +33 -0
  8. data/ext/protoc/protobuf/Makefile.am +267 -0
  9. data/ext/protoc/protobuf/README.md +167 -0
  10. data/ext/protoc/protobuf/autogen.sh +41 -0
  11. data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
  12. data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
  13. data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
  14. data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
  15. data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
  16. data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
  17. data/ext/protoc/protobuf/configure.ac +159 -0
  18. data/ext/protoc/protobuf/editors/README.txt +5 -0
  19. data/ext/protoc/protobuf/editors/proto.vim +105 -0
  20. data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
  21. data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
  22. data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
  23. data/ext/protoc/protobuf/examples/Makefile +58 -0
  24. data/ext/protoc/protobuf/examples/README.txt +29 -0
  25. data/ext/protoc/protobuf/examples/add_person.cc +95 -0
  26. data/ext/protoc/protobuf/examples/add_person.py +58 -0
  27. data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
  28. data/ext/protoc/protobuf/examples/list_people.cc +68 -0
  29. data/ext/protoc/protobuf/examples/list_people.py +38 -0
  30. data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
  31. data/ext/protoc/protobuf/java/README.txt +96 -0
  32. data/ext/protoc/protobuf/java/pom.xml +217 -0
  33. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
  34. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
  35. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
  36. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
  37. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
  38. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
  39. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
  40. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
  41. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
  42. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
  43. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
  44. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
  45. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
  46. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
  47. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
  48. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
  49. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
  50. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
  51. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
  52. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
  53. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
  54. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
  55. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
  56. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
  57. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
  58. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
  59. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
  60. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
  61. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
  62. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
  63. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
  64. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
  65. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
  66. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
  67. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
  68. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
  69. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
  70. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
  71. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
  72. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
  73. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
  74. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
  75. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
  76. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
  77. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
  78. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
  79. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
  80. data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
  81. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
  82. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
  83. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
  84. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
  85. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
  86. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
  87. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
  88. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
  89. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
  90. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
  91. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
  92. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
  93. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
  94. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
  95. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
  96. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
  97. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
  98. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
  99. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
  100. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
  101. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
  102. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
  103. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
  104. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
  105. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
  106. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
  107. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
  108. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
  109. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
  110. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
  111. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
  112. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
  113. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
  114. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
  115. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
  116. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
  117. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
  118. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
  119. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
  120. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
  121. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
  122. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
  123. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
  124. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
  125. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
  126. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
  127. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
  128. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
  129. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
  130. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
  131. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
  132. data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
  133. data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
  134. data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
  135. data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
  136. data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
  137. data/ext/protoc/protobuf/more_tests/Makefile +41 -0
  138. data/ext/protoc/protobuf/post_process_dist.sh +60 -0
  139. data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
  140. data/ext/protoc/protobuf/protobuf.pc.in +14 -0
  141. data/ext/protoc/protobuf/python/README.txt +105 -0
  142. data/ext/protoc/protobuf/python/ez_setup.py +284 -0
  143. data/ext/protoc/protobuf/python/google/__init__.py +1 -0
  144. data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
  145. data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
  146. data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
  147. data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
  148. data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
  149. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
  150. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
  151. data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
  152. data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
  153. data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
  154. data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
  155. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
  156. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
  157. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
  158. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
  159. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
  160. data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
  161. data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
  162. data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
  163. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
  164. data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
  165. data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
  166. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
  167. data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
  168. data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
  169. data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
  170. data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
  171. data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
  172. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
  173. data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
  174. data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
  175. data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
  176. data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
  177. data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
  178. data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
  179. data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
  180. data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
  181. data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
  182. data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
  183. data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
  184. data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
  185. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
  186. data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
  187. data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
  188. data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
  189. data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
  190. data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
  191. data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
  192. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
  193. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
  194. data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
  195. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
  196. data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
  197. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
  198. data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
  199. data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
  200. data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
  201. data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
  202. data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
  203. data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
  204. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
  205. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
  206. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
  207. data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
  208. data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
  209. data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
  210. data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
  211. data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
  212. data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
  213. data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
  214. data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
  215. data/ext/protoc/protobuf/python/mox.py +1401 -0
  216. data/ext/protoc/protobuf/python/setup.py +201 -0
  217. data/ext/protoc/protobuf/python/stubout.py +140 -0
  218. data/ext/protoc/protobuf/src/Makefile.am +418 -0
  219. data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
  220. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
  221. data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
  222. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
  223. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
  224. data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
  225. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
  226. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
  227. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
  228. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
  229. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
  230. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
  231. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
  232. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
  233. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
  234. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
  235. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
  236. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
  237. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  238. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
  239. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
  240. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
  241. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
  242. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
  243. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
  244. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
  245. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
  246. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
  247. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
  248. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
  249. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  250. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
  251. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
  252. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
  253. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
  254. data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
  255. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
  256. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
  257. data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
  258. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
  259. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
  260. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
  261. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
  262. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
  263. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
  264. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
  265. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
  266. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
  267. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
  268. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
  269. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
  270. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
  271. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
  272. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
  273. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
  274. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
  275. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
  276. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
  277. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
  278. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
  279. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
  280. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
  281. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
  282. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
  283. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
  284. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
  285. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
  286. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
  287. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
  288. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
  289. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
  290. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
  291. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
  292. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
  293. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
  294. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
  295. data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
  296. data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
  297. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
  298. data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
  299. data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
  300. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
  301. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
  302. data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
  303. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
  304. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
  305. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
  306. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
  307. data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
  308. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
  309. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
  310. data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
  311. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
  312. data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
  313. data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
  314. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
  315. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
  316. data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
  317. data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
  318. data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
  319. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
  320. data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
  321. data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
  322. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
  323. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
  324. data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
  325. data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
  326. data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
  327. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
  328. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
  329. data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
  330. data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
  331. data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
  332. data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
  333. data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
  334. data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
  335. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
  336. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
  337. data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
  338. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
  339. data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
  340. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
  341. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
  342. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
  343. data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
  344. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
  345. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
  346. data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
  347. data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
  348. data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
  349. data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
  350. data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
  351. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
  352. data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
  353. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
  354. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
  355. data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
  356. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
  357. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
  358. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
  359. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
  360. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
  361. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
  362. data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
  363. data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
  364. data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
  365. data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
  366. data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
  367. data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
  368. data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
  369. data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
  370. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
  371. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
  372. data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
  373. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
  374. data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
  375. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
  376. data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
  377. data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
  378. data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
  379. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
  380. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
  381. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
  382. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
  383. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
  384. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
  385. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
  386. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
  387. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
  388. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
  389. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
  390. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
  391. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
  392. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
  393. data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
  394. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
  395. data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
  396. data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
  397. data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
  398. data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
  399. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
  400. data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
  401. data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
  402. data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
  403. data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
  404. data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
  405. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
  406. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
  407. data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
  408. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
  409. data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
  410. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
  411. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
  412. data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
  413. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
  414. data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
  415. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
  416. data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
  417. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
  418. data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
  419. data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
  420. data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
  421. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
  422. data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
  423. data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
  424. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
  425. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
  426. data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
  427. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
  428. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
  429. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
  430. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
  431. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
  432. data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
  433. data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
  434. data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
  435. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
  436. data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
  437. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
  438. data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
  439. data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
  440. data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
  441. data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
  442. data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
  443. data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
  444. data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
  445. data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
  446. data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
  447. data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
  448. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
  449. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
  450. data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
  451. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
  452. data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
  453. data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
  454. data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
  455. data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
  456. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
  457. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
  458. data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
  459. data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
  460. data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
  461. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
  462. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
  463. data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
  464. data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
  465. data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
  466. data/ext/protoc/protobuf/vsprojects/config.h +29 -0
  467. data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
  468. data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
  469. data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
  470. data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
  471. data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
  472. data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
  473. data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
  474. data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
  475. data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
  476. data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
  477. data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
  478. data/lib/protoc/version.rb +1 -1
  479. metadata +480 -3
@@ -0,0 +1,764 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // https://developers.google.com/protocol-buffers/
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
+ // DynamicMessage is implemented by constructing a data structure which
36
+ // has roughly the same memory layout as a generated message would have.
37
+ // Then, we use GeneratedMessageReflection to implement our reflection
38
+ // interface. All the other operations we need to implement (e.g.
39
+ // parsing, copying, etc.) are already implemented in terms of
40
+ // Reflection, so the rest is easy.
41
+ //
42
+ // The up side of this strategy is that it's very efficient. We don't
43
+ // need to use hash_maps or generic representations of fields. The
44
+ // down side is that this is a low-level memory management hack which
45
+ // can be tricky to get right.
46
+ //
47
+ // As mentioned in the header, we only expose a DynamicMessageFactory
48
+ // publicly, not the DynamicMessage class itself. This is because
49
+ // GenericMessageReflection wants to have a pointer to a "default"
50
+ // copy of the class, with all fields initialized to their default
51
+ // values. We only want to construct one of these per message type,
52
+ // so DynamicMessageFactory stores a cache of default messages for
53
+ // each type it sees (each unique Descriptor pointer). The code
54
+ // refers to the "default" copy of the class as the "prototype".
55
+ //
56
+ // Note on memory allocation: This module often calls "operator new()"
57
+ // to allocate untyped memory, rather than calling something like
58
+ // "new uint8[]". This is because "operator new()" means "Give me some
59
+ // space which I can use as I please." while "new uint8[]" means "Give
60
+ // me an array of 8-bit integers.". In practice, the later may return
61
+ // a pointer that is not aligned correctly for general use. I believe
62
+ // Item 8 of "More Effective C++" discusses this in more detail, though
63
+ // I don't have the book on me right now so I'm not sure.
64
+
65
+ #include <algorithm>
66
+ #include <google/protobuf/stubs/hash.h>
67
+
68
+ #include <google/protobuf/stubs/common.h>
69
+
70
+ #include <google/protobuf/dynamic_message.h>
71
+ #include <google/protobuf/descriptor.h>
72
+ #include <google/protobuf/descriptor.pb.h>
73
+ #include <google/protobuf/generated_message_util.h>
74
+ #include <google/protobuf/generated_message_reflection.h>
75
+ #include <google/protobuf/reflection_ops.h>
76
+ #include <google/protobuf/repeated_field.h>
77
+ #include <google/protobuf/extension_set.h>
78
+ #include <google/protobuf/wire_format.h>
79
+
80
+ namespace google {
81
+ namespace protobuf {
82
+
83
+ using internal::WireFormat;
84
+ using internal::ExtensionSet;
85
+ using internal::GeneratedMessageReflection;
86
+
87
+
88
+ // ===================================================================
89
+ // Some helper tables and functions...
90
+
91
+ namespace {
92
+
93
+ // Compute the byte size of the in-memory representation of the field.
94
+ int FieldSpaceUsed(const FieldDescriptor* field) {
95
+ typedef FieldDescriptor FD; // avoid line wrapping
96
+ if (field->label() == FD::LABEL_REPEATED) {
97
+ switch (field->cpp_type()) {
98
+ case FD::CPPTYPE_INT32 : return sizeof(RepeatedField<int32 >);
99
+ case FD::CPPTYPE_INT64 : return sizeof(RepeatedField<int64 >);
100
+ case FD::CPPTYPE_UINT32 : return sizeof(RepeatedField<uint32 >);
101
+ case FD::CPPTYPE_UINT64 : return sizeof(RepeatedField<uint64 >);
102
+ case FD::CPPTYPE_DOUBLE : return sizeof(RepeatedField<double >);
103
+ case FD::CPPTYPE_FLOAT : return sizeof(RepeatedField<float >);
104
+ case FD::CPPTYPE_BOOL : return sizeof(RepeatedField<bool >);
105
+ case FD::CPPTYPE_ENUM : return sizeof(RepeatedField<int >);
106
+ case FD::CPPTYPE_MESSAGE: return sizeof(RepeatedPtrField<Message>);
107
+
108
+ case FD::CPPTYPE_STRING:
109
+ switch (field->options().ctype()) {
110
+ default: // TODO(kenton): Support other string reps.
111
+ case FieldOptions::STRING:
112
+ return sizeof(RepeatedPtrField<string>);
113
+ }
114
+ break;
115
+ }
116
+ } else {
117
+ switch (field->cpp_type()) {
118
+ case FD::CPPTYPE_INT32 : return sizeof(int32 );
119
+ case FD::CPPTYPE_INT64 : return sizeof(int64 );
120
+ case FD::CPPTYPE_UINT32 : return sizeof(uint32 );
121
+ case FD::CPPTYPE_UINT64 : return sizeof(uint64 );
122
+ case FD::CPPTYPE_DOUBLE : return sizeof(double );
123
+ case FD::CPPTYPE_FLOAT : return sizeof(float );
124
+ case FD::CPPTYPE_BOOL : return sizeof(bool );
125
+ case FD::CPPTYPE_ENUM : return sizeof(int );
126
+
127
+ case FD::CPPTYPE_MESSAGE:
128
+ return sizeof(Message*);
129
+
130
+ case FD::CPPTYPE_STRING:
131
+ switch (field->options().ctype()) {
132
+ default: // TODO(kenton): Support other string reps.
133
+ case FieldOptions::STRING:
134
+ return sizeof(string*);
135
+ }
136
+ break;
137
+ }
138
+ }
139
+
140
+ GOOGLE_LOG(DFATAL) << "Can't get here.";
141
+ return 0;
142
+ }
143
+
144
+ // Compute the byte size of in-memory representation of the oneof fields
145
+ // in default oneof instance.
146
+ int OneofFieldSpaceUsed(const FieldDescriptor* field) {
147
+ typedef FieldDescriptor FD; // avoid line wrapping
148
+ switch (field->cpp_type()) {
149
+ case FD::CPPTYPE_INT32 : return sizeof(int32 );
150
+ case FD::CPPTYPE_INT64 : return sizeof(int64 );
151
+ case FD::CPPTYPE_UINT32 : return sizeof(uint32 );
152
+ case FD::CPPTYPE_UINT64 : return sizeof(uint64 );
153
+ case FD::CPPTYPE_DOUBLE : return sizeof(double );
154
+ case FD::CPPTYPE_FLOAT : return sizeof(float );
155
+ case FD::CPPTYPE_BOOL : return sizeof(bool );
156
+ case FD::CPPTYPE_ENUM : return sizeof(int );
157
+
158
+ case FD::CPPTYPE_MESSAGE:
159
+ return sizeof(Message*);
160
+
161
+ case FD::CPPTYPE_STRING:
162
+ switch (field->options().ctype()) {
163
+ default:
164
+ case FieldOptions::STRING:
165
+ return sizeof(string*);
166
+ }
167
+ break;
168
+ }
169
+
170
+ GOOGLE_LOG(DFATAL) << "Can't get here.";
171
+ return 0;
172
+ }
173
+
174
+ inline int DivideRoundingUp(int i, int j) {
175
+ return (i + (j - 1)) / j;
176
+ }
177
+
178
+ static const int kSafeAlignment = sizeof(uint64);
179
+ static const int kMaxOneofUnionSize = sizeof(uint64);
180
+
181
+ inline int AlignTo(int offset, int alignment) {
182
+ return DivideRoundingUp(offset, alignment) * alignment;
183
+ }
184
+
185
+ // Rounds the given byte offset up to the next offset aligned such that any
186
+ // type may be stored at it.
187
+ inline int AlignOffset(int offset) {
188
+ return AlignTo(offset, kSafeAlignment);
189
+ }
190
+
191
+ #define bitsizeof(T) (sizeof(T) * 8)
192
+
193
+ } // namespace
194
+
195
+ // ===================================================================
196
+
197
+ class DynamicMessage : public Message {
198
+ public:
199
+ struct TypeInfo {
200
+ int size;
201
+ int has_bits_offset;
202
+ int oneof_case_offset;
203
+ int unknown_fields_offset;
204
+ int extensions_offset;
205
+
206
+ // Not owned by the TypeInfo.
207
+ DynamicMessageFactory* factory; // The factory that created this object.
208
+ const DescriptorPool* pool; // The factory's DescriptorPool.
209
+ const Descriptor* type; // Type of this DynamicMessage.
210
+
211
+ // Warning: The order in which the following pointers are defined is
212
+ // important (the prototype must be deleted *before* the offsets).
213
+ scoped_array<int> offsets;
214
+ scoped_ptr<const GeneratedMessageReflection> reflection;
215
+ // Don't use a scoped_ptr to hold the prototype: the destructor for
216
+ // DynamicMessage needs to know whether it is the prototype, and does so by
217
+ // looking back at this field. This would assume details about the
218
+ // implementation of scoped_ptr.
219
+ const DynamicMessage* prototype;
220
+ void* default_oneof_instance;
221
+
222
+ TypeInfo() : prototype(NULL), default_oneof_instance(NULL) {}
223
+
224
+ ~TypeInfo() {
225
+ delete prototype;
226
+ operator delete(default_oneof_instance);
227
+ }
228
+ };
229
+
230
+ DynamicMessage(const TypeInfo* type_info);
231
+ ~DynamicMessage();
232
+
233
+ // Called on the prototype after construction to initialize message fields.
234
+ void CrossLinkPrototypes();
235
+
236
+ // implements Message ----------------------------------------------
237
+
238
+ Message* New() const;
239
+
240
+ int GetCachedSize() const;
241
+ void SetCachedSize(int size) const;
242
+
243
+ Metadata GetMetadata() const;
244
+
245
+
246
+ private:
247
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DynamicMessage);
248
+
249
+ inline bool is_prototype() const {
250
+ return type_info_->prototype == this ||
251
+ // If type_info_->prototype is NULL, then we must be constructing
252
+ // the prototype now, which means we must be the prototype.
253
+ type_info_->prototype == NULL;
254
+ }
255
+
256
+ inline void* OffsetToPointer(int offset) {
257
+ return reinterpret_cast<uint8*>(this) + offset;
258
+ }
259
+ inline const void* OffsetToPointer(int offset) const {
260
+ return reinterpret_cast<const uint8*>(this) + offset;
261
+ }
262
+
263
+ const TypeInfo* type_info_;
264
+
265
+ // TODO(kenton): Make this an atomic<int> when C++ supports it.
266
+ mutable int cached_byte_size_;
267
+ };
268
+
269
+ DynamicMessage::DynamicMessage(const TypeInfo* type_info)
270
+ : type_info_(type_info),
271
+ cached_byte_size_(0) {
272
+ // We need to call constructors for various fields manually and set
273
+ // default values where appropriate. We use placement new to call
274
+ // constructors. If you haven't heard of placement new, I suggest Googling
275
+ // it now. We use placement new even for primitive types that don't have
276
+ // constructors for consistency. (In theory, placement new should be used
277
+ // any time you are trying to convert untyped memory to typed memory, though
278
+ // in practice that's not strictly necessary for types that don't have a
279
+ // constructor.)
280
+
281
+ const Descriptor* descriptor = type_info_->type;
282
+
283
+ // Initialize oneof cases.
284
+ for (int i = 0 ; i < descriptor->oneof_decl_count(); ++i) {
285
+ new(OffsetToPointer(type_info_->oneof_case_offset + sizeof(uint32) * i))
286
+ uint32(0);
287
+ }
288
+
289
+ new(OffsetToPointer(type_info_->unknown_fields_offset)) UnknownFieldSet;
290
+
291
+ if (type_info_->extensions_offset != -1) {
292
+ new(OffsetToPointer(type_info_->extensions_offset)) ExtensionSet;
293
+ }
294
+
295
+ for (int i = 0; i < descriptor->field_count(); i++) {
296
+ const FieldDescriptor* field = descriptor->field(i);
297
+ void* field_ptr = OffsetToPointer(type_info_->offsets[i]);
298
+ if (field->containing_oneof()) {
299
+ continue;
300
+ }
301
+ switch (field->cpp_type()) {
302
+ #define HANDLE_TYPE(CPPTYPE, TYPE) \
303
+ case FieldDescriptor::CPPTYPE_##CPPTYPE: \
304
+ if (!field->is_repeated()) { \
305
+ new(field_ptr) TYPE(field->default_value_##TYPE()); \
306
+ } else { \
307
+ new(field_ptr) RepeatedField<TYPE>(); \
308
+ } \
309
+ break;
310
+
311
+ HANDLE_TYPE(INT32 , int32 );
312
+ HANDLE_TYPE(INT64 , int64 );
313
+ HANDLE_TYPE(UINT32, uint32);
314
+ HANDLE_TYPE(UINT64, uint64);
315
+ HANDLE_TYPE(DOUBLE, double);
316
+ HANDLE_TYPE(FLOAT , float );
317
+ HANDLE_TYPE(BOOL , bool );
318
+ #undef HANDLE_TYPE
319
+
320
+ case FieldDescriptor::CPPTYPE_ENUM:
321
+ if (!field->is_repeated()) {
322
+ new(field_ptr) int(field->default_value_enum()->number());
323
+ } else {
324
+ new(field_ptr) RepeatedField<int>();
325
+ }
326
+ break;
327
+
328
+ case FieldDescriptor::CPPTYPE_STRING:
329
+ switch (field->options().ctype()) {
330
+ default: // TODO(kenton): Support other string reps.
331
+ case FieldOptions::STRING:
332
+ if (!field->is_repeated()) {
333
+ if (is_prototype()) {
334
+ new(field_ptr) const string*(&field->default_value_string());
335
+ } else {
336
+ string* default_value =
337
+ *reinterpret_cast<string* const*>(
338
+ type_info_->prototype->OffsetToPointer(
339
+ type_info_->offsets[i]));
340
+ new(field_ptr) string*(default_value);
341
+ }
342
+ } else {
343
+ new(field_ptr) RepeatedPtrField<string>();
344
+ }
345
+ break;
346
+ }
347
+ break;
348
+
349
+ case FieldDescriptor::CPPTYPE_MESSAGE: {
350
+ if (!field->is_repeated()) {
351
+ new(field_ptr) Message*(NULL);
352
+ } else {
353
+ new(field_ptr) RepeatedPtrField<Message>();
354
+ }
355
+ break;
356
+ }
357
+ }
358
+ }
359
+ }
360
+
361
+ DynamicMessage::~DynamicMessage() {
362
+ const Descriptor* descriptor = type_info_->type;
363
+
364
+ reinterpret_cast<UnknownFieldSet*>(
365
+ OffsetToPointer(type_info_->unknown_fields_offset))->~UnknownFieldSet();
366
+
367
+ if (type_info_->extensions_offset != -1) {
368
+ reinterpret_cast<ExtensionSet*>(
369
+ OffsetToPointer(type_info_->extensions_offset))->~ExtensionSet();
370
+ }
371
+
372
+ // We need to manually run the destructors for repeated fields and strings,
373
+ // just as we ran their constructors in the the DynamicMessage constructor.
374
+ // We also need to manually delete oneof fields if it is set and is string
375
+ // or message.
376
+ // Additionally, if any singular embedded messages have been allocated, we
377
+ // need to delete them, UNLESS we are the prototype message of this type,
378
+ // in which case any embedded messages are other prototypes and shouldn't
379
+ // be touched.
380
+ for (int i = 0; i < descriptor->field_count(); i++) {
381
+ const FieldDescriptor* field = descriptor->field(i);
382
+ if (field->containing_oneof()) {
383
+ void* field_ptr = OffsetToPointer(
384
+ type_info_->oneof_case_offset
385
+ + sizeof(uint32) * field->containing_oneof()->index());
386
+ if (*(reinterpret_cast<const uint32*>(field_ptr)) ==
387
+ field->number()) {
388
+ field_ptr = OffsetToPointer(type_info_->offsets[
389
+ descriptor->field_count() + field->containing_oneof()->index()]);
390
+ if (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING) {
391
+ switch (field->options().ctype()) {
392
+ default:
393
+ case FieldOptions::STRING:
394
+ delete *reinterpret_cast<string**>(field_ptr);
395
+ break;
396
+ }
397
+ } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
398
+ delete *reinterpret_cast<Message**>(field_ptr);
399
+ }
400
+ }
401
+ continue;
402
+ }
403
+ void* field_ptr = OffsetToPointer(type_info_->offsets[i]);
404
+
405
+ if (field->is_repeated()) {
406
+ switch (field->cpp_type()) {
407
+ #define HANDLE_TYPE(UPPERCASE, LOWERCASE) \
408
+ case FieldDescriptor::CPPTYPE_##UPPERCASE : \
409
+ reinterpret_cast<RepeatedField<LOWERCASE>*>(field_ptr) \
410
+ ->~RepeatedField<LOWERCASE>(); \
411
+ break
412
+
413
+ HANDLE_TYPE( INT32, int32);
414
+ HANDLE_TYPE( INT64, int64);
415
+ HANDLE_TYPE(UINT32, uint32);
416
+ HANDLE_TYPE(UINT64, uint64);
417
+ HANDLE_TYPE(DOUBLE, double);
418
+ HANDLE_TYPE( FLOAT, float);
419
+ HANDLE_TYPE( BOOL, bool);
420
+ HANDLE_TYPE( ENUM, int);
421
+ #undef HANDLE_TYPE
422
+
423
+ case FieldDescriptor::CPPTYPE_STRING:
424
+ switch (field->options().ctype()) {
425
+ default: // TODO(kenton): Support other string reps.
426
+ case FieldOptions::STRING:
427
+ reinterpret_cast<RepeatedPtrField<string>*>(field_ptr)
428
+ ->~RepeatedPtrField<string>();
429
+ break;
430
+ }
431
+ break;
432
+
433
+ case FieldDescriptor::CPPTYPE_MESSAGE:
434
+ reinterpret_cast<RepeatedPtrField<Message>*>(field_ptr)
435
+ ->~RepeatedPtrField<Message>();
436
+ break;
437
+ }
438
+
439
+ } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING) {
440
+ switch (field->options().ctype()) {
441
+ default: // TODO(kenton): Support other string reps.
442
+ case FieldOptions::STRING: {
443
+ string* ptr = *reinterpret_cast<string**>(field_ptr);
444
+ if (ptr != &field->default_value_string()) {
445
+ delete ptr;
446
+ }
447
+ break;
448
+ }
449
+ }
450
+ } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
451
+ if (!is_prototype()) {
452
+ Message* message = *reinterpret_cast<Message**>(field_ptr);
453
+ if (message != NULL) {
454
+ delete message;
455
+ }
456
+ }
457
+ }
458
+ }
459
+ }
460
+
461
+ void DynamicMessage::CrossLinkPrototypes() {
462
+ // This should only be called on the prototype message.
463
+ GOOGLE_CHECK(is_prototype());
464
+
465
+ DynamicMessageFactory* factory = type_info_->factory;
466
+ const Descriptor* descriptor = type_info_->type;
467
+
468
+ // Cross-link default messages.
469
+ for (int i = 0; i < descriptor->field_count(); i++) {
470
+ const FieldDescriptor* field = descriptor->field(i);
471
+ void* field_ptr = OffsetToPointer(type_info_->offsets[i]);
472
+ if (field->containing_oneof()) {
473
+ field_ptr = reinterpret_cast<uint8*>(
474
+ type_info_->default_oneof_instance) + type_info_->offsets[i];
475
+ }
476
+
477
+ if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE &&
478
+ !field->is_repeated()) {
479
+ // For fields with message types, we need to cross-link with the
480
+ // prototype for the field's type.
481
+ // For singular fields, the field is just a pointer which should
482
+ // point to the prototype.
483
+ *reinterpret_cast<const Message**>(field_ptr) =
484
+ factory->GetPrototypeNoLock(field->message_type());
485
+ }
486
+ }
487
+ }
488
+
489
+ Message* DynamicMessage::New() const {
490
+ void* new_base = operator new(type_info_->size);
491
+ memset(new_base, 0, type_info_->size);
492
+ return new(new_base) DynamicMessage(type_info_);
493
+ }
494
+
495
+ int DynamicMessage::GetCachedSize() const {
496
+ return cached_byte_size_;
497
+ }
498
+
499
+ void DynamicMessage::SetCachedSize(int size) const {
500
+ // This is theoretically not thread-compatible, but in practice it works
501
+ // because if multiple threads write this simultaneously, they will be
502
+ // writing the exact same value.
503
+ GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
504
+ cached_byte_size_ = size;
505
+ GOOGLE_SAFE_CONCURRENT_WRITES_END();
506
+ }
507
+
508
+ Metadata DynamicMessage::GetMetadata() const {
509
+ Metadata metadata;
510
+ metadata.descriptor = type_info_->type;
511
+ metadata.reflection = type_info_->reflection.get();
512
+ return metadata;
513
+ }
514
+
515
+ // ===================================================================
516
+
517
+ struct DynamicMessageFactory::PrototypeMap {
518
+ typedef hash_map<const Descriptor*, const DynamicMessage::TypeInfo*> Map;
519
+ Map map_;
520
+ };
521
+
522
+ DynamicMessageFactory::DynamicMessageFactory()
523
+ : pool_(NULL), delegate_to_generated_factory_(false),
524
+ prototypes_(new PrototypeMap) {
525
+ }
526
+
527
+ DynamicMessageFactory::DynamicMessageFactory(const DescriptorPool* pool)
528
+ : pool_(pool), delegate_to_generated_factory_(false),
529
+ prototypes_(new PrototypeMap) {
530
+ }
531
+
532
+ DynamicMessageFactory::~DynamicMessageFactory() {
533
+ for (PrototypeMap::Map::iterator iter = prototypes_->map_.begin();
534
+ iter != prototypes_->map_.end(); ++iter) {
535
+ DeleteDefaultOneofInstance(iter->second->type,
536
+ iter->second->offsets.get(),
537
+ iter->second->default_oneof_instance);
538
+ delete iter->second;
539
+ }
540
+ }
541
+
542
+ const Message* DynamicMessageFactory::GetPrototype(const Descriptor* type) {
543
+ MutexLock lock(&prototypes_mutex_);
544
+ return GetPrototypeNoLock(type);
545
+ }
546
+
547
+ const Message* DynamicMessageFactory::GetPrototypeNoLock(
548
+ const Descriptor* type) {
549
+ if (delegate_to_generated_factory_ &&
550
+ type->file()->pool() == DescriptorPool::generated_pool()) {
551
+ return MessageFactory::generated_factory()->GetPrototype(type);
552
+ }
553
+
554
+ const DynamicMessage::TypeInfo** target = &prototypes_->map_[type];
555
+ if (*target != NULL) {
556
+ // Already exists.
557
+ return (*target)->prototype;
558
+ }
559
+
560
+ DynamicMessage::TypeInfo* type_info = new DynamicMessage::TypeInfo;
561
+ *target = type_info;
562
+
563
+ type_info->type = type;
564
+ type_info->pool = (pool_ == NULL) ? type->file()->pool() : pool_;
565
+ type_info->factory = this;
566
+
567
+ // We need to construct all the structures passed to
568
+ // GeneratedMessageReflection's constructor. This includes:
569
+ // - A block of memory that contains space for all the message's fields.
570
+ // - An array of integers indicating the byte offset of each field within
571
+ // this block.
572
+ // - A big bitfield containing a bit for each field indicating whether
573
+ // or not that field is set.
574
+
575
+ // Compute size and offsets.
576
+ int* offsets = new int[type->field_count() + type->oneof_decl_count()];
577
+ type_info->offsets.reset(offsets);
578
+
579
+ // Decide all field offsets by packing in order.
580
+ // We place the DynamicMessage object itself at the beginning of the allocated
581
+ // space.
582
+ int size = sizeof(DynamicMessage);
583
+ size = AlignOffset(size);
584
+
585
+ // Next the has_bits, which is an array of uint32s.
586
+ type_info->has_bits_offset = size;
587
+ int has_bits_array_size =
588
+ DivideRoundingUp(type->field_count(), bitsizeof(uint32));
589
+ size += has_bits_array_size * sizeof(uint32);
590
+ size = AlignOffset(size);
591
+
592
+ // The oneof_case, if any. It is an array of uint32s.
593
+ if (type->oneof_decl_count() > 0) {
594
+ type_info->oneof_case_offset = size;
595
+ size += type->oneof_decl_count() * sizeof(uint32);
596
+ size = AlignOffset(size);
597
+ }
598
+
599
+ // The ExtensionSet, if any.
600
+ if (type->extension_range_count() > 0) {
601
+ type_info->extensions_offset = size;
602
+ size += sizeof(ExtensionSet);
603
+ size = AlignOffset(size);
604
+ } else {
605
+ // No extensions.
606
+ type_info->extensions_offset = -1;
607
+ }
608
+
609
+ // All the fields.
610
+ for (int i = 0; i < type->field_count(); i++) {
611
+ // Make sure field is aligned to avoid bus errors.
612
+ // Oneof fields do not use any space.
613
+ if (!type->field(i)->containing_oneof()) {
614
+ int field_size = FieldSpaceUsed(type->field(i));
615
+ size = AlignTo(size, min(kSafeAlignment, field_size));
616
+ offsets[i] = size;
617
+ size += field_size;
618
+ }
619
+ }
620
+
621
+ // The oneofs.
622
+ for (int i = 0; i < type->oneof_decl_count(); i++) {
623
+ size = AlignTo(size, kSafeAlignment);
624
+ offsets[type->field_count() + i] = size;
625
+ size += kMaxOneofUnionSize;
626
+ }
627
+
628
+ // Add the UnknownFieldSet to the end.
629
+ size = AlignOffset(size);
630
+ type_info->unknown_fields_offset = size;
631
+ size += sizeof(UnknownFieldSet);
632
+
633
+ // Align the final size to make sure no clever allocators think that
634
+ // alignment is not necessary.
635
+ size = AlignOffset(size);
636
+ type_info->size = size;
637
+
638
+ // Allocate the prototype.
639
+ void* base = operator new(size);
640
+ memset(base, 0, size);
641
+ DynamicMessage* prototype = new(base) DynamicMessage(type_info);
642
+ type_info->prototype = prototype;
643
+
644
+ // Construct the reflection object.
645
+ if (type->oneof_decl_count() > 0) {
646
+ // Compute the size of default oneof instance and offsets of default
647
+ // oneof fields.
648
+ int oneof_size = 0;
649
+ for (int i = 0; i < type->oneof_decl_count(); i++) {
650
+ for (int j = 0; j < type->oneof_decl(i)->field_count(); j++) {
651
+ const FieldDescriptor* field = type->oneof_decl(i)->field(j);
652
+ int field_size = OneofFieldSpaceUsed(field);
653
+ oneof_size = AlignTo(oneof_size, min(kSafeAlignment, field_size));
654
+ offsets[field->index()] = oneof_size;
655
+ oneof_size += field_size;
656
+ }
657
+ }
658
+ // Construct default oneof instance.
659
+ type_info->default_oneof_instance = ::operator new(oneof_size);
660
+ ConstructDefaultOneofInstance(type_info->type,
661
+ type_info->offsets.get(),
662
+ type_info->default_oneof_instance);
663
+ type_info->reflection.reset(
664
+ new GeneratedMessageReflection(
665
+ type_info->type,
666
+ type_info->prototype,
667
+ type_info->offsets.get(),
668
+ type_info->has_bits_offset,
669
+ type_info->unknown_fields_offset,
670
+ type_info->extensions_offset,
671
+ type_info->default_oneof_instance,
672
+ type_info->oneof_case_offset,
673
+ type_info->pool,
674
+ this,
675
+ type_info->size));
676
+ } else {
677
+ type_info->reflection.reset(
678
+ new GeneratedMessageReflection(
679
+ type_info->type,
680
+ type_info->prototype,
681
+ type_info->offsets.get(),
682
+ type_info->has_bits_offset,
683
+ type_info->unknown_fields_offset,
684
+ type_info->extensions_offset,
685
+ type_info->pool,
686
+ this,
687
+ type_info->size));
688
+ }
689
+ // Cross link prototypes.
690
+ prototype->CrossLinkPrototypes();
691
+
692
+ return prototype;
693
+ }
694
+
695
+ void DynamicMessageFactory::ConstructDefaultOneofInstance(
696
+ const Descriptor* type,
697
+ const int offsets[],
698
+ void* default_oneof_instance) {
699
+ for (int i = 0; i < type->oneof_decl_count(); i++) {
700
+ for (int j = 0; j < type->oneof_decl(i)->field_count(); j++) {
701
+ const FieldDescriptor* field = type->oneof_decl(i)->field(j);
702
+ void* field_ptr = reinterpret_cast<uint8*>(
703
+ default_oneof_instance) + offsets[field->index()];
704
+ switch (field->cpp_type()) {
705
+ #define HANDLE_TYPE(CPPTYPE, TYPE) \
706
+ case FieldDescriptor::CPPTYPE_##CPPTYPE: \
707
+ new(field_ptr) TYPE(field->default_value_##TYPE()); \
708
+ break;
709
+
710
+ HANDLE_TYPE(INT32 , int32 );
711
+ HANDLE_TYPE(INT64 , int64 );
712
+ HANDLE_TYPE(UINT32, uint32);
713
+ HANDLE_TYPE(UINT64, uint64);
714
+ HANDLE_TYPE(DOUBLE, double);
715
+ HANDLE_TYPE(FLOAT , float );
716
+ HANDLE_TYPE(BOOL , bool );
717
+ #undef HANDLE_TYPE
718
+
719
+ case FieldDescriptor::CPPTYPE_ENUM:
720
+ new(field_ptr) int(field->default_value_enum()->number());
721
+ break;
722
+ case FieldDescriptor::CPPTYPE_STRING:
723
+ switch (field->options().ctype()) {
724
+ default:
725
+ case FieldOptions::STRING:
726
+ if (field->has_default_value()) {
727
+ new(field_ptr) const string*(&field->default_value_string());
728
+ } else {
729
+ new(field_ptr) string*(
730
+ const_cast<string*>(&internal::GetEmptyString()));
731
+ }
732
+ break;
733
+ }
734
+ break;
735
+
736
+ case FieldDescriptor::CPPTYPE_MESSAGE: {
737
+ new(field_ptr) Message*(NULL);
738
+ break;
739
+ }
740
+ }
741
+ }
742
+ }
743
+ }
744
+
745
+ void DynamicMessageFactory::DeleteDefaultOneofInstance(
746
+ const Descriptor* type,
747
+ const int offsets[],
748
+ void* default_oneof_instance) {
749
+ for (int i = 0; i < type->oneof_decl_count(); i++) {
750
+ for (int j = 0; j < type->oneof_decl(i)->field_count(); j++) {
751
+ const FieldDescriptor* field = type->oneof_decl(i)->field(j);
752
+ if (field->cpp_type() == FieldDescriptor::CPPTYPE_STRING) {
753
+ switch (field->options().ctype()) {
754
+ default:
755
+ case FieldOptions::STRING:
756
+ break;
757
+ }
758
+ }
759
+ }
760
+ }
761
+ }
762
+
763
+ } // namespace protobuf
764
+ } // namespace google