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,195 @@
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: tgs@google.com (Tom Szymanski)
32
+ //
33
+ // Test reflection methods for aggregate access to Repeated[Ptr]Fields.
34
+ // This test proto2 methods on a proto2 layout.
35
+
36
+ #include <google/protobuf/stubs/common.h>
37
+ #include <google/protobuf/stubs/stringprintf.h>
38
+ #include <google/protobuf/unittest.pb.h>
39
+ #include <google/protobuf/test_util.h>
40
+ #include <gtest/gtest.h>
41
+
42
+ namespace google {
43
+ namespace protobuf {
44
+
45
+ using unittest::ForeignMessage;
46
+ using unittest::TestAllTypes;
47
+ using unittest::TestAllExtensions;
48
+
49
+ namespace {
50
+
51
+ static int Func(int i, int j) {
52
+ return i * j;
53
+ }
54
+
55
+ static string StrFunc(int i, int j) {
56
+ string str;
57
+ SStringPrintf(&str, "%d", Func(i, 4));
58
+ return str;
59
+ }
60
+
61
+
62
+ TEST(RepeatedFieldReflectionTest, RegularFields) {
63
+ TestAllTypes message;
64
+ const Reflection* refl = message.GetReflection();
65
+ const Descriptor* desc = message.GetDescriptor();
66
+
67
+ for (int i = 0; i < 10; ++i) {
68
+ message.add_repeated_int32(Func(i, 1));
69
+ message.add_repeated_double(Func(i, 2));
70
+ message.add_repeated_string(StrFunc(i, 5));
71
+ message.add_repeated_foreign_message()->set_c(Func(i, 6));
72
+ }
73
+
74
+ // Get FieldDescriptors for all the fields of interest.
75
+ const FieldDescriptor* fd_repeated_int32 =
76
+ desc->FindFieldByName("repeated_int32");
77
+ const FieldDescriptor* fd_repeated_double =
78
+ desc->FindFieldByName("repeated_double");
79
+ const FieldDescriptor* fd_repeated_string =
80
+ desc->FindFieldByName("repeated_string");
81
+ const FieldDescriptor* fd_repeated_foreign_message =
82
+ desc->FindFieldByName("repeated_foreign_message");
83
+
84
+ // Get RepeatedField objects for all fields of interest.
85
+ const RepeatedField<int32>& rf_int32 =
86
+ refl->GetRepeatedField<int32>(message, fd_repeated_int32);
87
+ const RepeatedField<double>& rf_double =
88
+ refl->GetRepeatedField<double>(message, fd_repeated_double);
89
+
90
+ // Get mutable RepeatedField objects for all fields of interest.
91
+ RepeatedField<int32>* mrf_int32 =
92
+ refl->MutableRepeatedField<int32>(&message, fd_repeated_int32);
93
+ RepeatedField<double>* mrf_double =
94
+ refl->MutableRepeatedField<double>(&message, fd_repeated_double);
95
+
96
+ // Get RepeatedPtrField objects for all fields of interest.
97
+ const RepeatedPtrField<string>& rpf_string =
98
+ refl->GetRepeatedPtrField<string>(message, fd_repeated_string);
99
+ const RepeatedPtrField<ForeignMessage>& rpf_foreign_message =
100
+ refl->GetRepeatedPtrField<ForeignMessage>(
101
+ message, fd_repeated_foreign_message);
102
+ const RepeatedPtrField<Message>& rpf_message =
103
+ refl->GetRepeatedPtrField<Message>(
104
+ message, fd_repeated_foreign_message);
105
+
106
+ // Get mutable RepeatedPtrField objects for all fields of interest.
107
+ RepeatedPtrField<string>* mrpf_string =
108
+ refl->MutableRepeatedPtrField<string>(&message, fd_repeated_string);
109
+ RepeatedPtrField<ForeignMessage>* mrpf_foreign_message =
110
+ refl->MutableRepeatedPtrField<ForeignMessage>(
111
+ &message, fd_repeated_foreign_message);
112
+ RepeatedPtrField<Message>* mrpf_message =
113
+ refl->MutableRepeatedPtrField<Message>(
114
+ &message, fd_repeated_foreign_message);
115
+
116
+ // Make sure we can do get and sets through the Repeated[Ptr]Field objects.
117
+ for (int i = 0; i < 10; ++i) {
118
+ // Check gets through const objects.
119
+ EXPECT_EQ(rf_int32.Get(i), Func(i, 1));
120
+ EXPECT_EQ(rf_double.Get(i), Func(i, 2));
121
+ EXPECT_EQ(rpf_string.Get(i), StrFunc(i, 5));
122
+ EXPECT_EQ(rpf_foreign_message.Get(i).c(), Func(i, 6));
123
+ EXPECT_EQ(down_cast<const ForeignMessage*>(&rpf_message.Get(i))->c(),
124
+ Func(i, 6));
125
+
126
+ // Check gets through mutable objects.
127
+ EXPECT_EQ(mrf_int32->Get(i), Func(i, 1));
128
+ EXPECT_EQ(mrf_double->Get(i), Func(i, 2));
129
+ EXPECT_EQ(mrpf_string->Get(i), StrFunc(i, 5));
130
+ EXPECT_EQ(mrpf_foreign_message->Get(i).c(), Func(i, 6));
131
+ EXPECT_EQ(down_cast<const ForeignMessage*>(&mrpf_message->Get(i))->c(),
132
+ Func(i, 6));
133
+
134
+ // Check sets through mutable objects.
135
+ mrf_int32->Set(i, Func(i, -1));
136
+ mrf_double->Set(i, Func(i, -2));
137
+ mrpf_string->Mutable(i)->assign(StrFunc(i, -5));
138
+ mrpf_foreign_message->Mutable(i)->set_c(Func(i, -6));
139
+ EXPECT_EQ(message.repeated_int32(i), Func(i, -1));
140
+ EXPECT_EQ(message.repeated_double(i), Func(i, -2));
141
+ EXPECT_EQ(message.repeated_string(i), StrFunc(i, -5));
142
+ EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, -6));
143
+ down_cast<ForeignMessage*>(mrpf_message->Mutable(i))->set_c(Func(i, 7));
144
+ EXPECT_EQ(message.repeated_foreign_message(i).c(), Func(i, 7));
145
+ }
146
+
147
+ #ifdef PROTOBUF_HAS_DEATH_TEST
148
+ // Make sure types are checked correctly at runtime.
149
+ const FieldDescriptor* fd_optional_int32 =
150
+ desc->FindFieldByName("optional_int32");
151
+ EXPECT_DEATH(refl->GetRepeatedField<int32>(
152
+ message, fd_optional_int32), "requires a repeated field");
153
+ EXPECT_DEATH(refl->GetRepeatedField<double>(
154
+ message, fd_repeated_int32), "not the right type");
155
+ EXPECT_DEATH(refl->GetRepeatedPtrField<TestAllTypes>(
156
+ message, fd_repeated_foreign_message), "wrong submessage type");
157
+ #endif // PROTOBUF_HAS_DEATH_TEST
158
+ }
159
+
160
+
161
+
162
+
163
+ TEST(RepeatedFieldReflectionTest, ExtensionFields) {
164
+ TestAllExtensions extended_message;
165
+ const Reflection* refl = extended_message.GetReflection();
166
+ const Descriptor* desc = extended_message.GetDescriptor();
167
+
168
+ for (int i = 0; i < 10; ++i) {
169
+ extended_message.AddExtension(
170
+ unittest::repeated_int64_extension, Func(i, 1));
171
+ }
172
+
173
+ const FieldDescriptor* fd_repeated_int64_extension =
174
+ desc->file()->FindExtensionByName("repeated_int64_extension");
175
+ GOOGLE_CHECK(fd_repeated_int64_extension != NULL);
176
+
177
+ const RepeatedField<int64>& rf_int64_extension =
178
+ refl->GetRepeatedField<int64>(extended_message,
179
+ fd_repeated_int64_extension);
180
+
181
+ RepeatedField<int64>* mrf_int64_extension =
182
+ refl->MutableRepeatedField<int64>(&extended_message,
183
+ fd_repeated_int64_extension);
184
+
185
+ for (int i = 0; i < 10; ++i) {
186
+ EXPECT_EQ(Func(i, 1), rf_int64_extension.Get(i));
187
+ mrf_int64_extension->Set(i, Func(i, -1));
188
+ EXPECT_EQ(Func(i, -1),
189
+ extended_message.GetExtension(unittest::repeated_int64_extension, i));
190
+ }
191
+ }
192
+
193
+ } // namespace
194
+ } // namespace protobuf
195
+ } // namespace google
@@ -0,0 +1,1442 @@
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
+ // TODO(kenton): Improve this unittest to bring it up to the standards of
36
+ // other proto2 unittests.
37
+
38
+ #include <algorithm>
39
+ #include <limits>
40
+ #include <list>
41
+ #include <vector>
42
+
43
+ #include <google/protobuf/repeated_field.h>
44
+
45
+ #include <google/protobuf/stubs/common.h>
46
+ #include <google/protobuf/unittest.pb.h>
47
+ #include <google/protobuf/stubs/strutil.h>
48
+ #include <google/protobuf/testing/googletest.h>
49
+ #include <gtest/gtest.h>
50
+ #include <google/protobuf/stubs/stl_util.h>
51
+
52
+ namespace google {
53
+ using protobuf_unittest::TestAllTypes;
54
+
55
+ namespace protobuf {
56
+ namespace {
57
+
58
+ // Test operations on a small RepeatedField.
59
+ TEST(RepeatedField, Small) {
60
+ RepeatedField<int> field;
61
+
62
+ EXPECT_TRUE(field.empty());
63
+ EXPECT_EQ(field.size(), 0);
64
+
65
+ field.Add(5);
66
+
67
+ EXPECT_FALSE(field.empty());
68
+ EXPECT_EQ(field.size(), 1);
69
+ EXPECT_EQ(field.Get(0), 5);
70
+
71
+ field.Add(42);
72
+
73
+ EXPECT_FALSE(field.empty());
74
+ EXPECT_EQ(field.size(), 2);
75
+ EXPECT_EQ(field.Get(0), 5);
76
+ EXPECT_EQ(field.Get(1), 42);
77
+
78
+ field.Set(1, 23);
79
+
80
+ EXPECT_FALSE(field.empty());
81
+ EXPECT_EQ(field.size(), 2);
82
+ EXPECT_EQ(field.Get(0), 5);
83
+ EXPECT_EQ(field.Get(1), 23);
84
+
85
+ field.RemoveLast();
86
+
87
+ EXPECT_FALSE(field.empty());
88
+ EXPECT_EQ(field.size(), 1);
89
+ EXPECT_EQ(field.Get(0), 5);
90
+
91
+ field.Clear();
92
+
93
+ EXPECT_TRUE(field.empty());
94
+ EXPECT_EQ(field.size(), 0);
95
+ int expected_usage = 4 * sizeof(int);
96
+ EXPECT_EQ(field.SpaceUsedExcludingSelf(), expected_usage);
97
+ }
98
+
99
+
100
+ // Test operations on a RepeatedField which is large enough to allocate a
101
+ // separate array.
102
+ TEST(RepeatedField, Large) {
103
+ RepeatedField<int> field;
104
+
105
+ for (int i = 0; i < 16; i++) {
106
+ field.Add(i * i);
107
+ }
108
+
109
+ EXPECT_FALSE(field.empty());
110
+ EXPECT_EQ(field.size(), 16);
111
+
112
+ for (int i = 0; i < 16; i++) {
113
+ EXPECT_EQ(field.Get(i), i * i);
114
+ }
115
+
116
+ int expected_usage = 16 * sizeof(int);
117
+ EXPECT_GE(field.SpaceUsedExcludingSelf(), expected_usage);
118
+ }
119
+
120
+ // Test swapping between various types of RepeatedFields.
121
+ TEST(RepeatedField, SwapSmallSmall) {
122
+ RepeatedField<int> field1;
123
+ RepeatedField<int> field2;
124
+
125
+ field1.Add(5);
126
+ field1.Add(42);
127
+
128
+ EXPECT_FALSE(field1.empty());
129
+ EXPECT_EQ(field1.size(), 2);
130
+ EXPECT_EQ(field1.Get(0), 5);
131
+ EXPECT_EQ(field1.Get(1), 42);
132
+
133
+ EXPECT_TRUE(field2.empty());
134
+ EXPECT_EQ(field2.size(), 0);
135
+
136
+ field1.Swap(&field2);
137
+
138
+ EXPECT_TRUE(field1.empty());
139
+ EXPECT_EQ(field1.size(), 0);
140
+
141
+ EXPECT_FALSE(field2.empty());
142
+ EXPECT_EQ(field2.size(), 2);
143
+ EXPECT_EQ(field2.Get(0), 5);
144
+ EXPECT_EQ(field2.Get(1), 42);
145
+ }
146
+
147
+ TEST(RepeatedField, SwapLargeSmall) {
148
+ RepeatedField<int> field1;
149
+ RepeatedField<int> field2;
150
+
151
+ for (int i = 0; i < 16; i++) {
152
+ field1.Add(i * i);
153
+ }
154
+ field2.Add(5);
155
+ field2.Add(42);
156
+ field1.Swap(&field2);
157
+
158
+ EXPECT_EQ(field1.size(), 2);
159
+ EXPECT_EQ(field1.Get(0), 5);
160
+ EXPECT_EQ(field1.Get(1), 42);
161
+ EXPECT_EQ(field2.size(), 16);
162
+ for (int i = 0; i < 16; i++) {
163
+ EXPECT_EQ(field2.Get(i), i * i);
164
+ }
165
+ }
166
+
167
+ TEST(RepeatedField, SwapLargeLarge) {
168
+ RepeatedField<int> field1;
169
+ RepeatedField<int> field2;
170
+
171
+ field1.Add(5);
172
+ field1.Add(42);
173
+ for (int i = 0; i < 16; i++) {
174
+ field1.Add(i);
175
+ field2.Add(i * i);
176
+ }
177
+ field2.Swap(&field1);
178
+
179
+ EXPECT_EQ(field1.size(), 16);
180
+ for (int i = 0; i < 16; i++) {
181
+ EXPECT_EQ(field1.Get(i), i * i);
182
+ }
183
+ EXPECT_EQ(field2.size(), 18);
184
+ EXPECT_EQ(field2.Get(0), 5);
185
+ EXPECT_EQ(field2.Get(1), 42);
186
+ for (int i = 2; i < 18; i++) {
187
+ EXPECT_EQ(field2.Get(i), i - 2);
188
+ }
189
+ }
190
+
191
+ // Determines how much space was reserved by the given field by adding elements
192
+ // to it until it re-allocates its space.
193
+ static int ReservedSpace(RepeatedField<int>* field) {
194
+ const int* ptr = field->data();
195
+ do {
196
+ field->Add(0);
197
+ } while (field->data() == ptr);
198
+
199
+ return field->size() - 1;
200
+ }
201
+
202
+ TEST(RepeatedField, ReserveMoreThanDouble) {
203
+ // Reserve more than double the previous space in the field and expect the
204
+ // field to reserve exactly the amount specified.
205
+ RepeatedField<int> field;
206
+ field.Reserve(20);
207
+
208
+ EXPECT_EQ(20, ReservedSpace(&field));
209
+ }
210
+
211
+ TEST(RepeatedField, ReserveLessThanDouble) {
212
+ // Reserve less than double the previous space in the field and expect the
213
+ // field to grow by double instead.
214
+ RepeatedField<int> field;
215
+ field.Reserve(20);
216
+ field.Reserve(30);
217
+
218
+ EXPECT_EQ(40, ReservedSpace(&field));
219
+ }
220
+
221
+ TEST(RepeatedField, ReserveLessThanExisting) {
222
+ // Reserve less than the previous space in the field and expect the
223
+ // field to not re-allocate at all.
224
+ RepeatedField<int> field;
225
+ field.Reserve(20);
226
+ const int* previous_ptr = field.data();
227
+ field.Reserve(10);
228
+
229
+ EXPECT_EQ(previous_ptr, field.data());
230
+ EXPECT_EQ(20, ReservedSpace(&field));
231
+ }
232
+
233
+ TEST(RepeatedField, Resize) {
234
+ RepeatedField<int> field;
235
+ field.Resize(2, 1);
236
+ EXPECT_EQ(2, field.size());
237
+ field.Resize(5, 2);
238
+ EXPECT_EQ(5, field.size());
239
+ field.Resize(4, 3);
240
+ ASSERT_EQ(4, field.size());
241
+ EXPECT_EQ(1, field.Get(0));
242
+ EXPECT_EQ(1, field.Get(1));
243
+ EXPECT_EQ(2, field.Get(2));
244
+ EXPECT_EQ(2, field.Get(3));
245
+ field.Resize(0, 4);
246
+ EXPECT_TRUE(field.empty());
247
+ }
248
+
249
+ TEST(RepeatedField, MergeFrom) {
250
+ RepeatedField<int> source, destination;
251
+ source.Add(4);
252
+ source.Add(5);
253
+ destination.Add(1);
254
+ destination.Add(2);
255
+ destination.Add(3);
256
+
257
+ destination.MergeFrom(source);
258
+
259
+ ASSERT_EQ(5, destination.size());
260
+ EXPECT_EQ(1, destination.Get(0));
261
+ EXPECT_EQ(2, destination.Get(1));
262
+ EXPECT_EQ(3, destination.Get(2));
263
+ EXPECT_EQ(4, destination.Get(3));
264
+ EXPECT_EQ(5, destination.Get(4));
265
+ }
266
+
267
+ #ifdef PROTOBUF_HAS_DEATH_TEST
268
+ TEST(RepeatedField, MergeFromSelf) {
269
+ RepeatedField<int> me;
270
+ me.Add(3);
271
+ EXPECT_DEATH(me.MergeFrom(me), "");
272
+ }
273
+ #endif // PROTOBUF_HAS_DEATH_TEST
274
+
275
+ TEST(RepeatedField, CopyFrom) {
276
+ RepeatedField<int> source, destination;
277
+ source.Add(4);
278
+ source.Add(5);
279
+ destination.Add(1);
280
+ destination.Add(2);
281
+ destination.Add(3);
282
+
283
+ destination.CopyFrom(source);
284
+
285
+ ASSERT_EQ(2, destination.size());
286
+ EXPECT_EQ(4, destination.Get(0));
287
+ EXPECT_EQ(5, destination.Get(1));
288
+ }
289
+
290
+ TEST(RepeatedField, CopyFromSelf) {
291
+ RepeatedField<int> me;
292
+ me.Add(3);
293
+ me.CopyFrom(me);
294
+ ASSERT_EQ(1, me.size());
295
+ EXPECT_EQ(3, me.Get(0));
296
+ }
297
+
298
+ TEST(RepeatedField, CopyConstruct) {
299
+ RepeatedField<int> source;
300
+ source.Add(1);
301
+ source.Add(2);
302
+
303
+ RepeatedField<int> destination(source);
304
+
305
+ ASSERT_EQ(2, destination.size());
306
+ EXPECT_EQ(1, destination.Get(0));
307
+ EXPECT_EQ(2, destination.Get(1));
308
+ }
309
+
310
+ TEST(RepeatedField, IteratorConstruct) {
311
+ vector<int> values;
312
+ values.push_back(1);
313
+ values.push_back(2);
314
+
315
+ RepeatedField<int> field(values.begin(), values.end());
316
+ ASSERT_EQ(values.size(), field.size());
317
+ EXPECT_EQ(values[0], field.Get(0));
318
+ EXPECT_EQ(values[1], field.Get(1));
319
+
320
+ RepeatedField<int> other(field.begin(), field.end());
321
+ ASSERT_EQ(values.size(), other.size());
322
+ EXPECT_EQ(values[0], other.Get(0));
323
+ EXPECT_EQ(values[1], other.Get(1));
324
+ }
325
+
326
+ TEST(RepeatedField, CopyAssign) {
327
+ RepeatedField<int> source, destination;
328
+ source.Add(4);
329
+ source.Add(5);
330
+ destination.Add(1);
331
+ destination.Add(2);
332
+ destination.Add(3);
333
+
334
+ destination = source;
335
+
336
+ ASSERT_EQ(2, destination.size());
337
+ EXPECT_EQ(4, destination.Get(0));
338
+ EXPECT_EQ(5, destination.Get(1));
339
+ }
340
+
341
+ TEST(RepeatedField, SelfAssign) {
342
+ // Verify that assignment to self does not destroy data.
343
+ RepeatedField<int> source, *p;
344
+ p = &source;
345
+ source.Add(7);
346
+ source.Add(8);
347
+
348
+ *p = source;
349
+
350
+ ASSERT_EQ(2, source.size());
351
+ EXPECT_EQ(7, source.Get(0));
352
+ EXPECT_EQ(8, source.Get(1));
353
+ }
354
+
355
+ TEST(RepeatedField, MutableDataIsMutable) {
356
+ RepeatedField<int> field;
357
+ field.Add(1);
358
+ EXPECT_EQ(1, field.Get(0));
359
+ // The fact that this line compiles would be enough, but we'll check the
360
+ // value anyway.
361
+ *field.mutable_data() = 2;
362
+ EXPECT_EQ(2, field.Get(0));
363
+ }
364
+
365
+ TEST(RepeatedField, Truncate) {
366
+ RepeatedField<int> field;
367
+
368
+ field.Add(12);
369
+ field.Add(34);
370
+ field.Add(56);
371
+ field.Add(78);
372
+ EXPECT_EQ(4, field.size());
373
+
374
+ field.Truncate(3);
375
+ EXPECT_EQ(3, field.size());
376
+
377
+ field.Add(90);
378
+ EXPECT_EQ(4, field.size());
379
+ EXPECT_EQ(90, field.Get(3));
380
+
381
+ // Truncations that don't change the size are allowed, but growing is not
382
+ // allowed.
383
+ field.Truncate(field.size());
384
+ #ifdef PROTOBUF_HAS_DEATH_TEST
385
+ EXPECT_DEBUG_DEATH(field.Truncate(field.size() + 1), "new_size");
386
+ #endif
387
+ }
388
+
389
+
390
+ TEST(RepeatedField, ExtractSubrange) {
391
+ // Exhaustively test every subrange in arrays of all sizes from 0 through 9.
392
+ for (int sz = 0; sz < 10; ++sz) {
393
+ for (int num = 0; num <= sz; ++num) {
394
+ for (int start = 0; start < sz - num; ++start) {
395
+ // Create RepeatedField with sz elements having values 0 through sz-1.
396
+ RepeatedField<int32> field;
397
+ for (int i = 0; i < sz; ++i)
398
+ field.Add(i);
399
+ EXPECT_EQ(field.size(), sz);
400
+
401
+ // Create a catcher array and call ExtractSubrange.
402
+ int32 catcher[10];
403
+ for (int i = 0; i < 10; ++i)
404
+ catcher[i] = -1;
405
+ field.ExtractSubrange(start, num, catcher);
406
+
407
+ // Does the resulting array have the right size?
408
+ EXPECT_EQ(field.size(), sz - num);
409
+
410
+ // Were the removed elements extracted into the catcher array?
411
+ for (int i = 0; i < num; ++i)
412
+ EXPECT_EQ(catcher[i], start + i);
413
+ EXPECT_EQ(catcher[num], -1);
414
+
415
+ // Does the resulting array contain the right values?
416
+ for (int i = 0; i < start; ++i)
417
+ EXPECT_EQ(field.Get(i), i);
418
+ for (int i = start; i < field.size(); ++i)
419
+ EXPECT_EQ(field.Get(i), i + num);
420
+ }
421
+ }
422
+ }
423
+ }
424
+
425
+ // ===================================================================
426
+ // RepeatedPtrField tests. These pretty much just mirror the RepeatedField
427
+ // tests above.
428
+
429
+ TEST(RepeatedPtrField, Small) {
430
+ RepeatedPtrField<string> field;
431
+
432
+ EXPECT_TRUE(field.empty());
433
+ EXPECT_EQ(field.size(), 0);
434
+
435
+ field.Add()->assign("foo");
436
+
437
+ EXPECT_FALSE(field.empty());
438
+ EXPECT_EQ(field.size(), 1);
439
+ EXPECT_EQ(field.Get(0), "foo");
440
+
441
+ field.Add()->assign("bar");
442
+
443
+ EXPECT_FALSE(field.empty());
444
+ EXPECT_EQ(field.size(), 2);
445
+ EXPECT_EQ(field.Get(0), "foo");
446
+ EXPECT_EQ(field.Get(1), "bar");
447
+
448
+ field.Mutable(1)->assign("baz");
449
+
450
+ EXPECT_FALSE(field.empty());
451
+ EXPECT_EQ(field.size(), 2);
452
+ EXPECT_EQ(field.Get(0), "foo");
453
+ EXPECT_EQ(field.Get(1), "baz");
454
+
455
+ field.RemoveLast();
456
+
457
+ EXPECT_FALSE(field.empty());
458
+ EXPECT_EQ(field.size(), 1);
459
+ EXPECT_EQ(field.Get(0), "foo");
460
+
461
+ field.Clear();
462
+
463
+ EXPECT_TRUE(field.empty());
464
+ EXPECT_EQ(field.size(), 0);
465
+ }
466
+
467
+ TEST(RepeatedPtrField, Large) {
468
+ RepeatedPtrField<string> field;
469
+
470
+ for (int i = 0; i < 16; i++) {
471
+ *field.Add() += 'a' + i;
472
+ }
473
+
474
+ EXPECT_EQ(field.size(), 16);
475
+
476
+ for (int i = 0; i < 16; i++) {
477
+ EXPECT_EQ(field.Get(i).size(), 1);
478
+ EXPECT_EQ(field.Get(i)[0], 'a' + i);
479
+ }
480
+
481
+ int min_expected_usage = 16 * sizeof(string);
482
+ EXPECT_GE(field.SpaceUsedExcludingSelf(), min_expected_usage);
483
+ }
484
+
485
+ TEST(RepeatedPtrField, SwapSmallSmall) {
486
+ RepeatedPtrField<string> field1;
487
+ RepeatedPtrField<string> field2;
488
+
489
+ EXPECT_TRUE(field1.empty());
490
+ EXPECT_EQ(field1.size(), 0);
491
+ EXPECT_TRUE(field2.empty());
492
+ EXPECT_EQ(field2.size(), 0);
493
+
494
+ field1.Add()->assign("foo");
495
+ field1.Add()->assign("bar");
496
+
497
+ EXPECT_FALSE(field1.empty());
498
+ EXPECT_EQ(field1.size(), 2);
499
+ EXPECT_EQ(field1.Get(0), "foo");
500
+ EXPECT_EQ(field1.Get(1), "bar");
501
+
502
+ EXPECT_TRUE(field2.empty());
503
+ EXPECT_EQ(field2.size(), 0);
504
+
505
+ field1.Swap(&field2);
506
+
507
+ EXPECT_TRUE(field1.empty());
508
+ EXPECT_EQ(field1.size(), 0);
509
+
510
+ EXPECT_EQ(field2.size(), 2);
511
+ EXPECT_EQ(field2.Get(0), "foo");
512
+ EXPECT_EQ(field2.Get(1), "bar");
513
+ }
514
+
515
+ TEST(RepeatedPtrField, SwapLargeSmall) {
516
+ RepeatedPtrField<string> field1;
517
+ RepeatedPtrField<string> field2;
518
+
519
+ field2.Add()->assign("foo");
520
+ field2.Add()->assign("bar");
521
+ for (int i = 0; i < 16; i++) {
522
+ *field1.Add() += 'a' + i;
523
+ }
524
+ field1.Swap(&field2);
525
+
526
+ EXPECT_EQ(field1.size(), 2);
527
+ EXPECT_EQ(field1.Get(0), "foo");
528
+ EXPECT_EQ(field1.Get(1), "bar");
529
+ EXPECT_EQ(field2.size(), 16);
530
+ for (int i = 0; i < 16; i++) {
531
+ EXPECT_EQ(field2.Get(i).size(), 1);
532
+ EXPECT_EQ(field2.Get(i)[0], 'a' + i);
533
+ }
534
+ }
535
+
536
+ TEST(RepeatedPtrField, SwapLargeLarge) {
537
+ RepeatedPtrField<string> field1;
538
+ RepeatedPtrField<string> field2;
539
+
540
+ field1.Add()->assign("foo");
541
+ field1.Add()->assign("bar");
542
+ for (int i = 0; i < 16; i++) {
543
+ *field1.Add() += 'A' + i;
544
+ *field2.Add() += 'a' + i;
545
+ }
546
+ field2.Swap(&field1);
547
+
548
+ EXPECT_EQ(field1.size(), 16);
549
+ for (int i = 0; i < 16; i++) {
550
+ EXPECT_EQ(field1.Get(i).size(), 1);
551
+ EXPECT_EQ(field1.Get(i)[0], 'a' + i);
552
+ }
553
+ EXPECT_EQ(field2.size(), 18);
554
+ EXPECT_EQ(field2.Get(0), "foo");
555
+ EXPECT_EQ(field2.Get(1), "bar");
556
+ for (int i = 2; i < 18; i++) {
557
+ EXPECT_EQ(field2.Get(i).size(), 1);
558
+ EXPECT_EQ(field2.Get(i)[0], 'A' + i - 2);
559
+ }
560
+ }
561
+
562
+ static int ReservedSpace(RepeatedPtrField<string>* field) {
563
+ const string* const* ptr = field->data();
564
+ do {
565
+ field->Add();
566
+ } while (field->data() == ptr);
567
+
568
+ return field->size() - 1;
569
+ }
570
+
571
+ TEST(RepeatedPtrField, ReserveMoreThanDouble) {
572
+ RepeatedPtrField<string> field;
573
+ field.Reserve(20);
574
+
575
+ EXPECT_EQ(20, ReservedSpace(&field));
576
+ }
577
+
578
+ TEST(RepeatedPtrField, ReserveLessThanDouble) {
579
+ RepeatedPtrField<string> field;
580
+ field.Reserve(20);
581
+ field.Reserve(30);
582
+
583
+ EXPECT_EQ(40, ReservedSpace(&field));
584
+ }
585
+
586
+ TEST(RepeatedPtrField, ReserveLessThanExisting) {
587
+ RepeatedPtrField<string> field;
588
+ field.Reserve(20);
589
+ const string* const* previous_ptr = field.data();
590
+ field.Reserve(10);
591
+
592
+ EXPECT_EQ(previous_ptr, field.data());
593
+ EXPECT_EQ(20, ReservedSpace(&field));
594
+ }
595
+
596
+ TEST(RepeatedPtrField, ReserveDoesntLoseAllocated) {
597
+ // Check that a bug is fixed: An earlier implementation of Reserve()
598
+ // failed to copy pointers to allocated-but-cleared objects, possibly
599
+ // leading to segfaults.
600
+ RepeatedPtrField<string> field;
601
+ string* first = field.Add();
602
+ field.RemoveLast();
603
+
604
+ field.Reserve(20);
605
+ EXPECT_EQ(first, field.Add());
606
+ }
607
+
608
+ // Clearing elements is tricky with RepeatedPtrFields since the memory for
609
+ // the elements is retained and reused.
610
+ TEST(RepeatedPtrField, ClearedElements) {
611
+ RepeatedPtrField<string> field;
612
+
613
+ string* original = field.Add();
614
+ *original = "foo";
615
+
616
+ EXPECT_EQ(field.ClearedCount(), 0);
617
+
618
+ field.RemoveLast();
619
+ EXPECT_TRUE(original->empty());
620
+ EXPECT_EQ(field.ClearedCount(), 1);
621
+
622
+ EXPECT_EQ(field.Add(), original); // Should return same string for reuse.
623
+
624
+ EXPECT_EQ(field.ReleaseLast(), original); // We take ownership.
625
+ EXPECT_EQ(field.ClearedCount(), 0);
626
+
627
+ EXPECT_NE(field.Add(), original); // Should NOT return the same string.
628
+ EXPECT_EQ(field.ClearedCount(), 0);
629
+
630
+ field.AddAllocated(original); // Give ownership back.
631
+ EXPECT_EQ(field.ClearedCount(), 0);
632
+ EXPECT_EQ(field.Mutable(1), original);
633
+
634
+ field.Clear();
635
+ EXPECT_EQ(field.ClearedCount(), 2);
636
+ EXPECT_EQ(field.ReleaseCleared(), original); // Take ownership again.
637
+ EXPECT_EQ(field.ClearedCount(), 1);
638
+ EXPECT_NE(field.Add(), original);
639
+ EXPECT_EQ(field.ClearedCount(), 0);
640
+ EXPECT_NE(field.Add(), original);
641
+ EXPECT_EQ(field.ClearedCount(), 0);
642
+
643
+ field.AddCleared(original); // Give ownership back, but as a cleared object.
644
+ EXPECT_EQ(field.ClearedCount(), 1);
645
+ EXPECT_EQ(field.Add(), original);
646
+ EXPECT_EQ(field.ClearedCount(), 0);
647
+ }
648
+
649
+ // Test all code paths in AddAllocated().
650
+ TEST(RepeatedPtrField, AddAlocated) {
651
+ RepeatedPtrField<string> field;
652
+ while (field.size() < field.Capacity()) {
653
+ field.Add()->assign("filler");
654
+ }
655
+
656
+ int index = field.size();
657
+
658
+ // First branch: Field is at capacity with no cleared objects.
659
+ string* foo = new string("foo");
660
+ field.AddAllocated(foo);
661
+ EXPECT_EQ(index + 1, field.size());
662
+ EXPECT_EQ(0, field.ClearedCount());
663
+ EXPECT_EQ(foo, &field.Get(index));
664
+
665
+ // Last branch: Field is not at capacity and there are no cleared objects.
666
+ string* bar = new string("bar");
667
+ field.AddAllocated(bar);
668
+ ++index;
669
+ EXPECT_EQ(index + 1, field.size());
670
+ EXPECT_EQ(0, field.ClearedCount());
671
+ EXPECT_EQ(bar, &field.Get(index));
672
+
673
+ // Third branch: Field is not at capacity and there are no cleared objects.
674
+ field.RemoveLast();
675
+ string* baz = new string("baz");
676
+ field.AddAllocated(baz);
677
+ EXPECT_EQ(index + 1, field.size());
678
+ EXPECT_EQ(1, field.ClearedCount());
679
+ EXPECT_EQ(baz, &field.Get(index));
680
+
681
+ // Second branch: Field is at capacity but has some cleared objects.
682
+ while (field.size() < field.Capacity()) {
683
+ field.Add()->assign("filler2");
684
+ }
685
+ field.RemoveLast();
686
+ index = field.size();
687
+ string* qux = new string("qux");
688
+ field.AddAllocated(qux);
689
+ EXPECT_EQ(index + 1, field.size());
690
+ // We should have discarded the cleared object.
691
+ EXPECT_EQ(0, field.ClearedCount());
692
+ EXPECT_EQ(qux, &field.Get(index));
693
+ }
694
+
695
+ TEST(RepeatedPtrField, MergeFrom) {
696
+ RepeatedPtrField<string> source, destination;
697
+ source.Add()->assign("4");
698
+ source.Add()->assign("5");
699
+ destination.Add()->assign("1");
700
+ destination.Add()->assign("2");
701
+ destination.Add()->assign("3");
702
+
703
+ destination.MergeFrom(source);
704
+
705
+ ASSERT_EQ(5, destination.size());
706
+ EXPECT_EQ("1", destination.Get(0));
707
+ EXPECT_EQ("2", destination.Get(1));
708
+ EXPECT_EQ("3", destination.Get(2));
709
+ EXPECT_EQ("4", destination.Get(3));
710
+ EXPECT_EQ("5", destination.Get(4));
711
+ }
712
+
713
+ #ifdef PROTOBUF_HAS_DEATH_TEST
714
+ TEST(RepeatedPtrField, MergeFromSelf) {
715
+ RepeatedPtrField<string> me;
716
+ me.Add()->assign("1");
717
+ EXPECT_DEATH(me.MergeFrom(me), "");
718
+ }
719
+ #endif // PROTOBUF_HAS_DEATH_TEST
720
+
721
+ TEST(RepeatedPtrField, CopyFrom) {
722
+ RepeatedPtrField<string> source, destination;
723
+ source.Add()->assign("4");
724
+ source.Add()->assign("5");
725
+ destination.Add()->assign("1");
726
+ destination.Add()->assign("2");
727
+ destination.Add()->assign("3");
728
+
729
+ destination.CopyFrom(source);
730
+
731
+ ASSERT_EQ(2, destination.size());
732
+ EXPECT_EQ("4", destination.Get(0));
733
+ EXPECT_EQ("5", destination.Get(1));
734
+ }
735
+
736
+ TEST(RepeatedPtrField, CopyFromSelf) {
737
+ RepeatedPtrField<string> me;
738
+ me.Add()->assign("1");
739
+ me.CopyFrom(me);
740
+ ASSERT_EQ(1, me.size());
741
+ EXPECT_EQ("1", me.Get(0));
742
+ }
743
+
744
+ TEST(RepeatedPtrField, CopyConstruct) {
745
+ RepeatedPtrField<string> source;
746
+ source.Add()->assign("1");
747
+ source.Add()->assign("2");
748
+
749
+ RepeatedPtrField<string> destination(source);
750
+
751
+ ASSERT_EQ(2, destination.size());
752
+ EXPECT_EQ("1", destination.Get(0));
753
+ EXPECT_EQ("2", destination.Get(1));
754
+ }
755
+
756
+ TEST(RepeatedPtrField, IteratorConstruct_String) {
757
+ vector<string> values;
758
+ values.push_back("1");
759
+ values.push_back("2");
760
+
761
+ RepeatedPtrField<string> field(values.begin(), values.end());
762
+ ASSERT_EQ(values.size(), field.size());
763
+ EXPECT_EQ(values[0], field.Get(0));
764
+ EXPECT_EQ(values[1], field.Get(1));
765
+
766
+ RepeatedPtrField<string> other(field.begin(), field.end());
767
+ ASSERT_EQ(values.size(), other.size());
768
+ EXPECT_EQ(values[0], other.Get(0));
769
+ EXPECT_EQ(values[1], other.Get(1));
770
+ }
771
+
772
+ TEST(RepeatedPtrField, IteratorConstruct_Proto) {
773
+ typedef TestAllTypes::NestedMessage Nested;
774
+ vector<Nested> values;
775
+ values.push_back(Nested());
776
+ values.back().set_bb(1);
777
+ values.push_back(Nested());
778
+ values.back().set_bb(2);
779
+
780
+ RepeatedPtrField<Nested> field(values.begin(), values.end());
781
+ ASSERT_EQ(values.size(), field.size());
782
+ EXPECT_EQ(values[0].bb(), field.Get(0).bb());
783
+ EXPECT_EQ(values[1].bb(), field.Get(1).bb());
784
+
785
+ RepeatedPtrField<Nested> other(field.begin(), field.end());
786
+ ASSERT_EQ(values.size(), other.size());
787
+ EXPECT_EQ(values[0].bb(), other.Get(0).bb());
788
+ EXPECT_EQ(values[1].bb(), other.Get(1).bb());
789
+ }
790
+
791
+ TEST(RepeatedPtrField, CopyAssign) {
792
+ RepeatedPtrField<string> source, destination;
793
+ source.Add()->assign("4");
794
+ source.Add()->assign("5");
795
+ destination.Add()->assign("1");
796
+ destination.Add()->assign("2");
797
+ destination.Add()->assign("3");
798
+
799
+ destination = source;
800
+
801
+ ASSERT_EQ(2, destination.size());
802
+ EXPECT_EQ("4", destination.Get(0));
803
+ EXPECT_EQ("5", destination.Get(1));
804
+ }
805
+
806
+ TEST(RepeatedPtrField, SelfAssign) {
807
+ // Verify that assignment to self does not destroy data.
808
+ RepeatedPtrField<string> source, *p;
809
+ p = &source;
810
+ source.Add()->assign("7");
811
+ source.Add()->assign("8");
812
+
813
+ *p = source;
814
+
815
+ ASSERT_EQ(2, source.size());
816
+ EXPECT_EQ("7", source.Get(0));
817
+ EXPECT_EQ("8", source.Get(1));
818
+ }
819
+
820
+ TEST(RepeatedPtrField, MutableDataIsMutable) {
821
+ RepeatedPtrField<string> field;
822
+ *field.Add() = "1";
823
+ EXPECT_EQ("1", field.Get(0));
824
+ // The fact that this line compiles would be enough, but we'll check the
825
+ // value anyway.
826
+ string** data = field.mutable_data();
827
+ **data = "2";
828
+ EXPECT_EQ("2", field.Get(0));
829
+ }
830
+
831
+ TEST(RepeatedPtrField, ExtractSubrange) {
832
+ // Exhaustively test every subrange in arrays of all sizes from 0 through 9
833
+ // with 0 through 3 cleared elements at the end.
834
+ for (int sz = 0; sz < 10; ++sz) {
835
+ for (int num = 0; num <= sz; ++num) {
836
+ for (int start = 0; start < sz - num; ++start) {
837
+ for (int extra = 0; extra < 4; ++extra) {
838
+ vector<string*> subject;
839
+
840
+ // Create an array with "sz" elements and "extra" cleared elements.
841
+ RepeatedPtrField<string> field;
842
+ for (int i = 0; i < sz + extra; ++i) {
843
+ subject.push_back(new string());
844
+ field.AddAllocated(subject[i]);
845
+ }
846
+ EXPECT_EQ(field.size(), sz + extra);
847
+ for (int i = 0; i < extra; ++i)
848
+ field.RemoveLast();
849
+ EXPECT_EQ(field.size(), sz);
850
+ EXPECT_EQ(field.ClearedCount(), extra);
851
+
852
+ // Create a catcher array and call ExtractSubrange.
853
+ string* catcher[10];
854
+ for (int i = 0; i < 10; ++i)
855
+ catcher[i] = NULL;
856
+ field.ExtractSubrange(start, num, catcher);
857
+
858
+ // Does the resulting array have the right size?
859
+ EXPECT_EQ(field.size(), sz - num);
860
+
861
+ // Were the removed elements extracted into the catcher array?
862
+ for (int i = 0; i < num; ++i)
863
+ EXPECT_EQ(catcher[i], subject[start + i]);
864
+ EXPECT_EQ(NULL, catcher[num]);
865
+
866
+ // Does the resulting array contain the right values?
867
+ for (int i = 0; i < start; ++i)
868
+ EXPECT_EQ(field.Mutable(i), subject[i]);
869
+ for (int i = start; i < field.size(); ++i)
870
+ EXPECT_EQ(field.Mutable(i), subject[i + num]);
871
+
872
+ // Reinstate the cleared elements.
873
+ EXPECT_EQ(field.ClearedCount(), extra);
874
+ for (int i = 0; i < extra; ++i)
875
+ field.Add();
876
+ EXPECT_EQ(field.ClearedCount(), 0);
877
+ EXPECT_EQ(field.size(), sz - num + extra);
878
+
879
+ // Make sure the extra elements are all there (in some order).
880
+ for (int i = sz; i < sz + extra; ++i) {
881
+ int count = 0;
882
+ for (int j = sz; j < sz + extra; ++j) {
883
+ if (field.Mutable(j - num) == subject[i])
884
+ count += 1;
885
+ }
886
+ EXPECT_EQ(count, 1);
887
+ }
888
+
889
+ // Release the caught elements.
890
+ for (int i = 0; i < num; ++i)
891
+ delete catcher[i];
892
+ }
893
+ }
894
+ }
895
+ }
896
+ }
897
+
898
+ TEST(RepeatedPtrField, DeleteSubrange) {
899
+ // DeleteSubrange is a trivial extension of ExtendSubrange.
900
+ }
901
+
902
+ // ===================================================================
903
+
904
+ // Iterator tests stolen from net/proto/proto-array_unittest.
905
+ class RepeatedFieldIteratorTest : public testing::Test {
906
+ protected:
907
+ virtual void SetUp() {
908
+ for (int i = 0; i < 3; ++i) {
909
+ proto_array_.Add(i);
910
+ }
911
+ }
912
+
913
+ RepeatedField<int> proto_array_;
914
+ };
915
+
916
+ TEST_F(RepeatedFieldIteratorTest, Convertible) {
917
+ RepeatedField<int>::iterator iter = proto_array_.begin();
918
+ RepeatedField<int>::const_iterator c_iter = iter;
919
+ RepeatedField<int>::value_type value = *c_iter;
920
+ EXPECT_EQ(0, value);
921
+ }
922
+
923
+ TEST_F(RepeatedFieldIteratorTest, MutableIteration) {
924
+ RepeatedField<int>::iterator iter = proto_array_.begin();
925
+ EXPECT_EQ(0, *iter);
926
+ ++iter;
927
+ EXPECT_EQ(1, *iter++);
928
+ EXPECT_EQ(2, *iter);
929
+ ++iter;
930
+ EXPECT_TRUE(proto_array_.end() == iter);
931
+
932
+ EXPECT_EQ(2, *(proto_array_.end() - 1));
933
+ }
934
+
935
+ TEST_F(RepeatedFieldIteratorTest, ConstIteration) {
936
+ const RepeatedField<int>& const_proto_array = proto_array_;
937
+ RepeatedField<int>::const_iterator iter = const_proto_array.begin();
938
+ EXPECT_EQ(0, *iter);
939
+ ++iter;
940
+ EXPECT_EQ(1, *iter++);
941
+ EXPECT_EQ(2, *iter);
942
+ ++iter;
943
+ EXPECT_TRUE(proto_array_.end() == iter);
944
+ EXPECT_EQ(2, *(proto_array_.end() - 1));
945
+ }
946
+
947
+ TEST_F(RepeatedFieldIteratorTest, Mutation) {
948
+ RepeatedField<int>::iterator iter = proto_array_.begin();
949
+ *iter = 7;
950
+ EXPECT_EQ(7, proto_array_.Get(0));
951
+ }
952
+
953
+ // -------------------------------------------------------------------
954
+
955
+ class RepeatedPtrFieldIteratorTest : public testing::Test {
956
+ protected:
957
+ virtual void SetUp() {
958
+ proto_array_.Add()->assign("foo");
959
+ proto_array_.Add()->assign("bar");
960
+ proto_array_.Add()->assign("baz");
961
+ }
962
+
963
+ RepeatedPtrField<string> proto_array_;
964
+ };
965
+
966
+ TEST_F(RepeatedPtrFieldIteratorTest, Convertible) {
967
+ RepeatedPtrField<string>::iterator iter = proto_array_.begin();
968
+ RepeatedPtrField<string>::const_iterator c_iter = iter;
969
+ RepeatedPtrField<string>::value_type value = *c_iter;
970
+ EXPECT_EQ("foo", value);
971
+ }
972
+
973
+ TEST_F(RepeatedPtrFieldIteratorTest, MutableIteration) {
974
+ RepeatedPtrField<string>::iterator iter = proto_array_.begin();
975
+ EXPECT_EQ("foo", *iter);
976
+ ++iter;
977
+ EXPECT_EQ("bar", *(iter++));
978
+ EXPECT_EQ("baz", *iter);
979
+ ++iter;
980
+ EXPECT_TRUE(proto_array_.end() == iter);
981
+ EXPECT_EQ("baz", *(--proto_array_.end()));
982
+ }
983
+
984
+ TEST_F(RepeatedPtrFieldIteratorTest, ConstIteration) {
985
+ const RepeatedPtrField<string>& const_proto_array = proto_array_;
986
+ RepeatedPtrField<string>::const_iterator iter = const_proto_array.begin();
987
+ EXPECT_EQ("foo", *iter);
988
+ ++iter;
989
+ EXPECT_EQ("bar", *(iter++));
990
+ EXPECT_EQ("baz", *iter);
991
+ ++iter;
992
+ EXPECT_TRUE(const_proto_array.end() == iter);
993
+ EXPECT_EQ("baz", *(--const_proto_array.end()));
994
+ }
995
+
996
+ TEST_F(RepeatedPtrFieldIteratorTest, MutableReverseIteration) {
997
+ RepeatedPtrField<string>::reverse_iterator iter = proto_array_.rbegin();
998
+ EXPECT_EQ("baz", *iter);
999
+ ++iter;
1000
+ EXPECT_EQ("bar", *(iter++));
1001
+ EXPECT_EQ("foo", *iter);
1002
+ ++iter;
1003
+ EXPECT_TRUE(proto_array_.rend() == iter);
1004
+ EXPECT_EQ("foo", *(--proto_array_.rend()));
1005
+ }
1006
+
1007
+ TEST_F(RepeatedPtrFieldIteratorTest, ConstReverseIteration) {
1008
+ const RepeatedPtrField<string>& const_proto_array = proto_array_;
1009
+ RepeatedPtrField<string>::const_reverse_iterator iter
1010
+ = const_proto_array.rbegin();
1011
+ EXPECT_EQ("baz", *iter);
1012
+ ++iter;
1013
+ EXPECT_EQ("bar", *(iter++));
1014
+ EXPECT_EQ("foo", *iter);
1015
+ ++iter;
1016
+ EXPECT_TRUE(const_proto_array.rend() == iter);
1017
+ EXPECT_EQ("foo", *(--const_proto_array.rend()));
1018
+ }
1019
+
1020
+ TEST_F(RepeatedPtrFieldIteratorTest, RandomAccess) {
1021
+ RepeatedPtrField<string>::iterator iter = proto_array_.begin();
1022
+ RepeatedPtrField<string>::iterator iter2 = iter;
1023
+ ++iter2;
1024
+ ++iter2;
1025
+ EXPECT_TRUE(iter + 2 == iter2);
1026
+ EXPECT_TRUE(iter == iter2 - 2);
1027
+ EXPECT_EQ("baz", iter[2]);
1028
+ EXPECT_EQ("baz", *(iter + 2));
1029
+ EXPECT_EQ(3, proto_array_.end() - proto_array_.begin());
1030
+ }
1031
+
1032
+ TEST_F(RepeatedPtrFieldIteratorTest, Comparable) {
1033
+ RepeatedPtrField<string>::const_iterator iter = proto_array_.begin();
1034
+ RepeatedPtrField<string>::const_iterator iter2 = iter + 1;
1035
+ EXPECT_TRUE(iter == iter);
1036
+ EXPECT_TRUE(iter != iter2);
1037
+ EXPECT_TRUE(iter < iter2);
1038
+ EXPECT_TRUE(iter <= iter2);
1039
+ EXPECT_TRUE(iter <= iter);
1040
+ EXPECT_TRUE(iter2 > iter);
1041
+ EXPECT_TRUE(iter2 >= iter);
1042
+ EXPECT_TRUE(iter >= iter);
1043
+ }
1044
+
1045
+ // Uninitialized iterator does not point to any of the RepeatedPtrField.
1046
+ TEST_F(RepeatedPtrFieldIteratorTest, UninitializedIterator) {
1047
+ RepeatedPtrField<string>::iterator iter;
1048
+ EXPECT_TRUE(iter != proto_array_.begin());
1049
+ EXPECT_TRUE(iter != proto_array_.begin() + 1);
1050
+ EXPECT_TRUE(iter != proto_array_.begin() + 2);
1051
+ EXPECT_TRUE(iter != proto_array_.begin() + 3);
1052
+ EXPECT_TRUE(iter != proto_array_.end());
1053
+ }
1054
+
1055
+ TEST_F(RepeatedPtrFieldIteratorTest, STLAlgorithms_lower_bound) {
1056
+ proto_array_.Clear();
1057
+ proto_array_.Add()->assign("a");
1058
+ proto_array_.Add()->assign("c");
1059
+ proto_array_.Add()->assign("d");
1060
+ proto_array_.Add()->assign("n");
1061
+ proto_array_.Add()->assign("p");
1062
+ proto_array_.Add()->assign("x");
1063
+ proto_array_.Add()->assign("y");
1064
+
1065
+ string v = "f";
1066
+ RepeatedPtrField<string>::const_iterator it =
1067
+ lower_bound(proto_array_.begin(), proto_array_.end(), v);
1068
+
1069
+ EXPECT_EQ(*it, "n");
1070
+ EXPECT_TRUE(it == proto_array_.begin() + 3);
1071
+ }
1072
+
1073
+ TEST_F(RepeatedPtrFieldIteratorTest, Mutation) {
1074
+ RepeatedPtrField<string>::iterator iter = proto_array_.begin();
1075
+ *iter = "qux";
1076
+ EXPECT_EQ("qux", proto_array_.Get(0));
1077
+ }
1078
+
1079
+ // -------------------------------------------------------------------
1080
+
1081
+ class RepeatedPtrFieldPtrsIteratorTest : public testing::Test {
1082
+ protected:
1083
+ virtual void SetUp() {
1084
+ proto_array_.Add()->assign("foo");
1085
+ proto_array_.Add()->assign("bar");
1086
+ proto_array_.Add()->assign("baz");
1087
+ const_proto_array_ = &proto_array_;
1088
+ }
1089
+
1090
+ RepeatedPtrField<string> proto_array_;
1091
+ const RepeatedPtrField<string>* const_proto_array_;
1092
+ };
1093
+
1094
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, ConvertiblePtr) {
1095
+ RepeatedPtrField<string>::pointer_iterator iter =
1096
+ proto_array_.pointer_begin();
1097
+ static_cast<void>(iter);
1098
+ }
1099
+
1100
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, ConvertibleConstPtr) {
1101
+ RepeatedPtrField<string>::const_pointer_iterator iter =
1102
+ const_proto_array_->pointer_begin();
1103
+ static_cast<void>(iter);
1104
+ }
1105
+
1106
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, MutablePtrIteration) {
1107
+ RepeatedPtrField<string>::pointer_iterator iter =
1108
+ proto_array_.pointer_begin();
1109
+ EXPECT_EQ("foo", **iter);
1110
+ ++iter;
1111
+ EXPECT_EQ("bar", **(iter++));
1112
+ EXPECT_EQ("baz", **iter);
1113
+ ++iter;
1114
+ EXPECT_TRUE(proto_array_.pointer_end() == iter);
1115
+ EXPECT_EQ("baz", **(--proto_array_.pointer_end()));
1116
+ }
1117
+
1118
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, MutableConstPtrIteration) {
1119
+ RepeatedPtrField<string>::const_pointer_iterator iter =
1120
+ const_proto_array_->pointer_begin();
1121
+ EXPECT_EQ("foo", **iter);
1122
+ ++iter;
1123
+ EXPECT_EQ("bar", **(iter++));
1124
+ EXPECT_EQ("baz", **iter);
1125
+ ++iter;
1126
+ EXPECT_TRUE(const_proto_array_->pointer_end() == iter);
1127
+ EXPECT_EQ("baz", **(--const_proto_array_->pointer_end()));
1128
+ }
1129
+
1130
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, RandomPtrAccess) {
1131
+ RepeatedPtrField<string>::pointer_iterator iter =
1132
+ proto_array_.pointer_begin();
1133
+ RepeatedPtrField<string>::pointer_iterator iter2 = iter;
1134
+ ++iter2;
1135
+ ++iter2;
1136
+ EXPECT_TRUE(iter + 2 == iter2);
1137
+ EXPECT_TRUE(iter == iter2 - 2);
1138
+ EXPECT_EQ("baz", *iter[2]);
1139
+ EXPECT_EQ("baz", **(iter + 2));
1140
+ EXPECT_EQ(3, proto_array_.end() - proto_array_.begin());
1141
+ }
1142
+
1143
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, RandomConstPtrAccess) {
1144
+ RepeatedPtrField<string>::const_pointer_iterator iter =
1145
+ const_proto_array_->pointer_begin();
1146
+ RepeatedPtrField<string>::const_pointer_iterator iter2 = iter;
1147
+ ++iter2;
1148
+ ++iter2;
1149
+ EXPECT_TRUE(iter + 2 == iter2);
1150
+ EXPECT_TRUE(iter == iter2 - 2);
1151
+ EXPECT_EQ("baz", *iter[2]);
1152
+ EXPECT_EQ("baz", **(iter + 2));
1153
+ EXPECT_EQ(3, const_proto_array_->end() - const_proto_array_->begin());
1154
+ }
1155
+
1156
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, ComparablePtr) {
1157
+ RepeatedPtrField<string>::pointer_iterator iter =
1158
+ proto_array_.pointer_begin();
1159
+ RepeatedPtrField<string>::pointer_iterator iter2 = iter + 1;
1160
+ EXPECT_TRUE(iter == iter);
1161
+ EXPECT_TRUE(iter != iter2);
1162
+ EXPECT_TRUE(iter < iter2);
1163
+ EXPECT_TRUE(iter <= iter2);
1164
+ EXPECT_TRUE(iter <= iter);
1165
+ EXPECT_TRUE(iter2 > iter);
1166
+ EXPECT_TRUE(iter2 >= iter);
1167
+ EXPECT_TRUE(iter >= iter);
1168
+ }
1169
+
1170
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, ComparableConstPtr) {
1171
+ RepeatedPtrField<string>::const_pointer_iterator iter =
1172
+ const_proto_array_->pointer_begin();
1173
+ RepeatedPtrField<string>::const_pointer_iterator iter2 = iter + 1;
1174
+ EXPECT_TRUE(iter == iter);
1175
+ EXPECT_TRUE(iter != iter2);
1176
+ EXPECT_TRUE(iter < iter2);
1177
+ EXPECT_TRUE(iter <= iter2);
1178
+ EXPECT_TRUE(iter <= iter);
1179
+ EXPECT_TRUE(iter2 > iter);
1180
+ EXPECT_TRUE(iter2 >= iter);
1181
+ EXPECT_TRUE(iter >= iter);
1182
+ }
1183
+
1184
+ // Uninitialized iterator does not point to any of the RepeatedPtrOverPtrs.
1185
+ // Dereferencing an uninitialized iterator crashes the process.
1186
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, UninitializedPtrIterator) {
1187
+ RepeatedPtrField<string>::pointer_iterator iter;
1188
+ EXPECT_TRUE(iter != proto_array_.pointer_begin());
1189
+ EXPECT_TRUE(iter != proto_array_.pointer_begin() + 1);
1190
+ EXPECT_TRUE(iter != proto_array_.pointer_begin() + 2);
1191
+ EXPECT_TRUE(iter != proto_array_.pointer_begin() + 3);
1192
+ EXPECT_TRUE(iter != proto_array_.pointer_end());
1193
+ }
1194
+
1195
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, UninitializedConstPtrIterator) {
1196
+ RepeatedPtrField<string>::const_pointer_iterator iter;
1197
+ EXPECT_TRUE(iter != const_proto_array_->pointer_begin());
1198
+ EXPECT_TRUE(iter != const_proto_array_->pointer_begin() + 1);
1199
+ EXPECT_TRUE(iter != const_proto_array_->pointer_begin() + 2);
1200
+ EXPECT_TRUE(iter != const_proto_array_->pointer_begin() + 3);
1201
+ EXPECT_TRUE(iter != const_proto_array_->pointer_end());
1202
+ }
1203
+
1204
+ // This comparison functor is required by the tests for RepeatedPtrOverPtrs.
1205
+ // They operate on strings and need to compare strings as strings in
1206
+ // any stl algorithm, even though the iterator returns a pointer to a string
1207
+ // - i.e. *iter has type string*.
1208
+ struct StringLessThan {
1209
+ bool operator()(const string* z, const string& y) {
1210
+ return *z < y;
1211
+ }
1212
+ bool operator()(const string* z, const string* y) const { return *z < *y; }
1213
+ };
1214
+
1215
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, PtrSTLAlgorithms_lower_bound) {
1216
+ proto_array_.Clear();
1217
+ proto_array_.Add()->assign("a");
1218
+ proto_array_.Add()->assign("c");
1219
+ proto_array_.Add()->assign("d");
1220
+ proto_array_.Add()->assign("n");
1221
+ proto_array_.Add()->assign("p");
1222
+ proto_array_.Add()->assign("x");
1223
+ proto_array_.Add()->assign("y");
1224
+
1225
+ {
1226
+ string v = "f";
1227
+ RepeatedPtrField<string>::pointer_iterator it =
1228
+ lower_bound(proto_array_.pointer_begin(), proto_array_.pointer_end(),
1229
+ &v, StringLessThan());
1230
+
1231
+ GOOGLE_CHECK(*it != NULL);
1232
+
1233
+ EXPECT_EQ(**it, "n");
1234
+ EXPECT_TRUE(it == proto_array_.pointer_begin() + 3);
1235
+ }
1236
+ {
1237
+ string v = "f";
1238
+ RepeatedPtrField<string>::const_pointer_iterator it =
1239
+ lower_bound(const_proto_array_->pointer_begin(),
1240
+ const_proto_array_->pointer_end(),
1241
+ &v, StringLessThan());
1242
+
1243
+ GOOGLE_CHECK(*it != NULL);
1244
+
1245
+ EXPECT_EQ(**it, "n");
1246
+ EXPECT_TRUE(it == const_proto_array_->pointer_begin() + 3);
1247
+ }
1248
+ }
1249
+
1250
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, PtrMutation) {
1251
+ RepeatedPtrField<string>::pointer_iterator iter =
1252
+ proto_array_.pointer_begin();
1253
+ **iter = "qux";
1254
+ EXPECT_EQ("qux", proto_array_.Get(0));
1255
+
1256
+ EXPECT_EQ("bar", proto_array_.Get(1));
1257
+ EXPECT_EQ("baz", proto_array_.Get(2));
1258
+ ++iter;
1259
+ delete *iter;
1260
+ *iter = new string("a");
1261
+ ++iter;
1262
+ delete *iter;
1263
+ *iter = new string("b");
1264
+ EXPECT_EQ("a", proto_array_.Get(1));
1265
+ EXPECT_EQ("b", proto_array_.Get(2));
1266
+ }
1267
+
1268
+ TEST_F(RepeatedPtrFieldPtrsIteratorTest, Sort) {
1269
+ proto_array_.Add()->assign("c");
1270
+ proto_array_.Add()->assign("d");
1271
+ proto_array_.Add()->assign("n");
1272
+ proto_array_.Add()->assign("p");
1273
+ proto_array_.Add()->assign("a");
1274
+ proto_array_.Add()->assign("y");
1275
+ proto_array_.Add()->assign("x");
1276
+ EXPECT_EQ("foo", proto_array_.Get(0));
1277
+ EXPECT_EQ("n", proto_array_.Get(5));
1278
+ EXPECT_EQ("x", proto_array_.Get(9));
1279
+ sort(proto_array_.pointer_begin(),
1280
+ proto_array_.pointer_end(),
1281
+ StringLessThan());
1282
+ EXPECT_EQ("a", proto_array_.Get(0));
1283
+ EXPECT_EQ("baz", proto_array_.Get(2));
1284
+ EXPECT_EQ("y", proto_array_.Get(9));
1285
+ }
1286
+
1287
+
1288
+ // -----------------------------------------------------------------------------
1289
+ // Unit-tests for the insert iterators
1290
+ // google::protobuf::RepeatedFieldBackInserter,
1291
+ // google::protobuf::AllocatedRepeatedPtrFieldBackInserter
1292
+ // Ported from util/gtl/proto-array-iterators_unittest.
1293
+
1294
+ class RepeatedFieldInsertionIteratorsTest : public testing::Test {
1295
+ protected:
1296
+ std::list<double> halves;
1297
+ std::list<int> fibonacci;
1298
+ std::vector<string> words;
1299
+ typedef TestAllTypes::NestedMessage Nested;
1300
+ Nested nesteds[2];
1301
+ std::vector<Nested*> nested_ptrs;
1302
+ TestAllTypes protobuffer;
1303
+
1304
+ virtual void SetUp() {
1305
+ fibonacci.push_back(1);
1306
+ fibonacci.push_back(1);
1307
+ fibonacci.push_back(2);
1308
+ fibonacci.push_back(3);
1309
+ fibonacci.push_back(5);
1310
+ fibonacci.push_back(8);
1311
+ std::copy(fibonacci.begin(), fibonacci.end(),
1312
+ RepeatedFieldBackInserter(protobuffer.mutable_repeated_int32()));
1313
+
1314
+ halves.push_back(1.0);
1315
+ halves.push_back(0.5);
1316
+ halves.push_back(0.25);
1317
+ halves.push_back(0.125);
1318
+ halves.push_back(0.0625);
1319
+ std::copy(halves.begin(), halves.end(),
1320
+ RepeatedFieldBackInserter(protobuffer.mutable_repeated_double()));
1321
+
1322
+ words.push_back("Able");
1323
+ words.push_back("was");
1324
+ words.push_back("I");
1325
+ words.push_back("ere");
1326
+ words.push_back("I");
1327
+ words.push_back("saw");
1328
+ words.push_back("Elba");
1329
+ std::copy(words.begin(), words.end(),
1330
+ RepeatedFieldBackInserter(protobuffer.mutable_repeated_string()));
1331
+
1332
+ nesteds[0].set_bb(17);
1333
+ nesteds[1].set_bb(4711);
1334
+ std::copy(&nesteds[0], &nesteds[2],
1335
+ RepeatedFieldBackInserter(
1336
+ protobuffer.mutable_repeated_nested_message()));
1337
+
1338
+ nested_ptrs.push_back(new Nested);
1339
+ nested_ptrs.back()->set_bb(170);
1340
+ nested_ptrs.push_back(new Nested);
1341
+ nested_ptrs.back()->set_bb(47110);
1342
+ std::copy(nested_ptrs.begin(), nested_ptrs.end(),
1343
+ RepeatedFieldBackInserter(
1344
+ protobuffer.mutable_repeated_nested_message()));
1345
+
1346
+ }
1347
+
1348
+ virtual void TearDown() {
1349
+ STLDeleteContainerPointers(nested_ptrs.begin(), nested_ptrs.end());
1350
+ }
1351
+ };
1352
+
1353
+ TEST_F(RepeatedFieldInsertionIteratorsTest, Fibonacci) {
1354
+ EXPECT_TRUE(std::equal(fibonacci.begin(),
1355
+ fibonacci.end(),
1356
+ protobuffer.repeated_int32().begin()));
1357
+ EXPECT_TRUE(std::equal(protobuffer.repeated_int32().begin(),
1358
+ protobuffer.repeated_int32().end(),
1359
+ fibonacci.begin()));
1360
+ }
1361
+
1362
+ TEST_F(RepeatedFieldInsertionIteratorsTest, Halves) {
1363
+ EXPECT_TRUE(std::equal(halves.begin(),
1364
+ halves.end(),
1365
+ protobuffer.repeated_double().begin()));
1366
+ EXPECT_TRUE(std::equal(protobuffer.repeated_double().begin(),
1367
+ protobuffer.repeated_double().end(),
1368
+ halves.begin()));
1369
+ }
1370
+
1371
+ TEST_F(RepeatedFieldInsertionIteratorsTest, Words) {
1372
+ ASSERT_EQ(words.size(), protobuffer.repeated_string_size());
1373
+ for (int i = 0; i < words.size(); ++i)
1374
+ EXPECT_EQ(words.at(i), protobuffer.repeated_string(i));
1375
+ }
1376
+
1377
+ TEST_F(RepeatedFieldInsertionIteratorsTest, Words2) {
1378
+ words.clear();
1379
+ words.push_back("sing");
1380
+ words.push_back("a");
1381
+ words.push_back("song");
1382
+ words.push_back("of");
1383
+ words.push_back("six");
1384
+ words.push_back("pence");
1385
+ protobuffer.mutable_repeated_string()->Clear();
1386
+ std::copy(words.begin(), words.end(), RepeatedPtrFieldBackInserter(
1387
+ protobuffer.mutable_repeated_string()));
1388
+ ASSERT_EQ(words.size(), protobuffer.repeated_string_size());
1389
+ for (int i = 0; i < words.size(); ++i)
1390
+ EXPECT_EQ(words.at(i), protobuffer.repeated_string(i));
1391
+ }
1392
+
1393
+ TEST_F(RepeatedFieldInsertionIteratorsTest, Nesteds) {
1394
+ ASSERT_EQ(protobuffer.repeated_nested_message_size(), 4);
1395
+ EXPECT_EQ(protobuffer.repeated_nested_message(0).bb(), 17);
1396
+ EXPECT_EQ(protobuffer.repeated_nested_message(1).bb(), 4711);
1397
+ EXPECT_EQ(protobuffer.repeated_nested_message(2).bb(), 170);
1398
+ EXPECT_EQ(protobuffer.repeated_nested_message(3).bb(), 47110);
1399
+ }
1400
+
1401
+ TEST_F(RepeatedFieldInsertionIteratorsTest,
1402
+ AllocatedRepeatedPtrFieldWithStringIntData) {
1403
+ vector<Nested*> data;
1404
+ TestAllTypes goldenproto;
1405
+ for (int i = 0; i < 10; ++i) {
1406
+ Nested* new_data = new Nested;
1407
+ new_data->set_bb(i);
1408
+ data.push_back(new_data);
1409
+
1410
+ new_data = goldenproto.add_repeated_nested_message();
1411
+ new_data->set_bb(i);
1412
+ }
1413
+ TestAllTypes testproto;
1414
+ copy(data.begin(), data.end(),
1415
+ AllocatedRepeatedPtrFieldBackInserter(
1416
+ testproto.mutable_repeated_nested_message()));
1417
+ EXPECT_EQ(testproto.DebugString(), goldenproto.DebugString());
1418
+ }
1419
+
1420
+ TEST_F(RepeatedFieldInsertionIteratorsTest,
1421
+ AllocatedRepeatedPtrFieldWithString) {
1422
+ vector<string*> data;
1423
+ TestAllTypes goldenproto;
1424
+ for (int i = 0; i < 10; ++i) {
1425
+ string* new_data = new string;
1426
+ *new_data = "name-" + SimpleItoa(i);
1427
+ data.push_back(new_data);
1428
+
1429
+ new_data = goldenproto.add_repeated_string();
1430
+ *new_data = "name-" + SimpleItoa(i);
1431
+ }
1432
+ TestAllTypes testproto;
1433
+ copy(data.begin(), data.end(),
1434
+ AllocatedRepeatedPtrFieldBackInserter(
1435
+ testproto.mutable_repeated_string()));
1436
+ EXPECT_EQ(testproto.DebugString(), goldenproto.DebugString());
1437
+ }
1438
+
1439
+ } // namespace
1440
+
1441
+ } // namespace protobuf
1442
+ } // namespace google