protoc 2.6.1.1 → 2.6.1.2

Sign up to get free protection for your applications and to get access to all the features.
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