protoc 2.6.1.1 → 2.6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/protoc/Makefile.in +10 -13
- data/ext/protoc/extconf.rb +0 -1
- data/ext/protoc/protobuf/CHANGES.txt +593 -0
- data/ext/protoc/protobuf/CONTRIBUTORS.txt +93 -0
- data/ext/protoc/protobuf/INSTALL.txt +237 -0
- data/ext/protoc/protobuf/LICENSE +33 -0
- data/ext/protoc/protobuf/Makefile.am +267 -0
- data/ext/protoc/protobuf/README.md +167 -0
- data/ext/protoc/protobuf/autogen.sh +41 -0
- data/ext/protoc/protobuf/benchmarks/ProtoBench.java +203 -0
- data/ext/protoc/protobuf/benchmarks/google_message1.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_message2.dat +0 -0
- data/ext/protoc/protobuf/benchmarks/google_size.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/google_speed.proto +136 -0
- data/ext/protoc/protobuf/benchmarks/readme.txt +50 -0
- data/ext/protoc/protobuf/configure.ac +159 -0
- data/ext/protoc/protobuf/editors/README.txt +5 -0
- data/ext/protoc/protobuf/editors/proto.vim +105 -0
- data/ext/protoc/protobuf/editors/protobuf-mode.el +220 -0
- data/ext/protoc/protobuf/examples/AddPerson.java +95 -0
- data/ext/protoc/protobuf/examples/ListPeople.java +50 -0
- data/ext/protoc/protobuf/examples/Makefile +58 -0
- data/ext/protoc/protobuf/examples/README.txt +29 -0
- data/ext/protoc/protobuf/examples/add_person.cc +95 -0
- data/ext/protoc/protobuf/examples/add_person.py +58 -0
- data/ext/protoc/protobuf/examples/addressbook.proto +30 -0
- data/ext/protoc/protobuf/examples/list_people.cc +68 -0
- data/ext/protoc/protobuf/examples/list_people.py +38 -0
- data/ext/protoc/protobuf/generate_descriptor_proto.sh +33 -0
- data/ext/protoc/protobuf/java/README.txt +96 -0
- data/ext/protoc/protobuf/java/pom.xml +217 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessage.java +466 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractMessageLite.java +355 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/AbstractParser.java +253 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingRpcChannel.java +51 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BlockingService.java +64 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/BoundedByteString.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ByteString.java +1022 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedInputStream.java +1311 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/CodedOutputStream.java +1297 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Descriptors.java +2238 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/DynamicMessage.java +622 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Extension.java +96 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java +392 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistryLite.java +185 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/FieldSet.java +907 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessage.java +2213 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/GeneratedMessageLite.java +949 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Internal.java +391 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java +122 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyField.java +154 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyFieldLite.java +176 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringArrayList.java +367 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LazyStringList.java +163 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/LiteralByteString.java +362 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Message.java +244 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLite.java +320 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java +60 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageOrBuilder.java +143 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/MessageReflection.java +931 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Parser.java +261 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolMessageEnum.java +58 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ProtocolStringList.java +48 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java +696 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RopeByteString.java +957 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcCallback.java +47 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcChannel.java +71 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcController.java +118 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/RpcUtil.java +134 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Service.java +117 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/ServiceException.java +52 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SingleFieldBuilder.java +241 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/SmallSortedMap.java +618 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/TextFormat.java +1984 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UninitializedMessageException.java +99 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnknownFieldSet.java +995 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java +205 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/Utf8.java +349 -0
- data/ext/protoc/protobuf/java/src/main/java/com/google/protobuf/WireFormat.java +163 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/AbstractMessageTest.java +527 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/BoundedByteStringTest.java +68 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ByteStringTest.java +759 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CheckUtf8Test.java +141 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedInputStreamTest.java +769 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/CodedOutputStreamTest.java +401 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DeprecatedFieldTest.java +80 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DescriptorsTest.java +735 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/DynamicMessageTest.java +326 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/GeneratedMessageTest.java +1515 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8Test.java +180 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java +421 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldLiteTest.java +134 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyFieldTest.java +121 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyMessageLiteTest.java +319 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringArrayListTest.java +174 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java +143 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java +85 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteTest.java +148 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/LiteralByteStringTest.java +396 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/MessageTest.java +353 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/NestedBuildersTest.java +185 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ParserTest.java +381 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RepeatedFieldBuilderTest.java +190 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java +97 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/RopeByteStringTest.java +115 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/ServiceTest.java +320 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SingleFieldBuilderTest.java +155 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/SmallSortedMapTest.java +420 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestBadIdentifiers.java +96 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TestUtil.java +4124 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/TextFormatTest.java +994 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnknownFieldSetTest.java +653 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java +227 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/WireFormatTest.java +606 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lazy_fields_lite.proto +61 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/lite_equals_and_hash.proto +55 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/multiple_files_test.proto +77 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_builders_test.proto +53 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension.proto +46 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/nested_extension_lite.proto +48 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension.proto +49 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/non_nested_extension_lite.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test.proto +38 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test2.proto +42 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/outer_class_name_test3.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_bad_identifiers.proto +157 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8.proto +50 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_check_utf8_size.proto +51 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_custom_options.proto +43 -0
- data/ext/protoc/protobuf/java/src/test/java/com/google/protobuf/test_extra_interfaces.proto +60 -0
- data/ext/protoc/protobuf/m4/ac_system_extensions.m4 +37 -0
- data/ext/protoc/protobuf/m4/acx_check_suncc.m4 +75 -0
- data/ext/protoc/protobuf/m4/acx_pthread.m4 +397 -0
- data/ext/protoc/protobuf/m4/stl_hash.m4 +72 -0
- data/ext/protoc/protobuf/more_tests/Makefile +41 -0
- data/ext/protoc/protobuf/post_process_dist.sh +60 -0
- data/ext/protoc/protobuf/protobuf-lite.pc.in +13 -0
- data/ext/protoc/protobuf/protobuf.pc.in +14 -0
- data/ext/protoc/protobuf/python/README.txt +105 -0
- data/ext/protoc/protobuf/python/ez_setup.py +284 -0
- data/ext/protoc/protobuf/python/google/__init__.py +1 -0
- data/ext/protoc/protobuf/python/google/protobuf/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor.py +849 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_database.py +137 -0
- data/ext/protoc/protobuf/python/google/protobuf/descriptor_pool.py +643 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.cc +139 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/api_implementation_default_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/containers.py +269 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/cpp_message.py +663 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/decoder.py +831 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_database_test.py +63 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test.py +564 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test1.proto +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_pool_test2.proto +70 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/descriptor_test.py +669 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/encoder.py +788 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/enum_type_wrapper.py +89 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test1.proto +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/factory_test2.proto +92 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/generator_test.py +343 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_factory_test.py +131 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_listener.py +78 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_python_test.py +54 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/message_test.py +681 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/missing_enum_values.proto +50 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions.proto +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_extensions_dynamic.proto +49 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/more_messages.proto +51 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/python_message.py +1251 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/reflection_test.py +2934 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/service_reflection_test.py +136 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/symbol_database_test.py +120 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_bad_identifiers.proto +52 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/test_util.py +662 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_encoding_test.py +68 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/text_format_test.py +743 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/type_checkers.py +328 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/unknown_fields_test.py +231 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format.py +268 -0
- data/ext/protoc/protobuf/python/google/protobuf/internal/wire_format_test.py +253 -0
- data/ext/protoc/protobuf/python/google/protobuf/message.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/message_factory.py +155 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/README +6 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/__init__.py +0 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/cpp_message.py +61 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.cc +357 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor.h +96 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/descriptor_cpp2_test.py +58 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.cc +338 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/extension_dict.h +123 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.cc +2561 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message.h +305 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/message_factory_cpp2_test.py +56 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/proto2_api_test.proto +38 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python.proto +66 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/python_protobuf.h +57 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/reflection_cpp2_generated_test.py +94 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.cc +763 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_composite_container.h +172 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.cc +825 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/repeated_scalar_container.h +112 -0
- data/ext/protoc/protobuf/python/google/protobuf/pyext/scoped_pyobject_ptr.h +95 -0
- data/ext/protoc/protobuf/python/google/protobuf/reflection.py +205 -0
- data/ext/protoc/protobuf/python/google/protobuf/service.py +226 -0
- data/ext/protoc/protobuf/python/google/protobuf/service_reflection.py +284 -0
- data/ext/protoc/protobuf/python/google/protobuf/symbol_database.py +185 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_encoding.py +110 -0
- data/ext/protoc/protobuf/python/google/protobuf/text_format.py +873 -0
- data/ext/protoc/protobuf/python/mox.py +1401 -0
- data/ext/protoc/protobuf/python/setup.py +201 -0
- data/ext/protoc/protobuf/python/stubout.py +140 -0
- data/ext/protoc/protobuf/src/Makefile.am +418 -0
- data/ext/protoc/protobuf/src/google/protobuf/SEBS +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.cc +84 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/code_generator.h +145 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.cc +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface.h +378 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/command_line_interface_unittest.cc +1654 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc +288 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc +431 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc +210 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h +86 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h +185 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc +665 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_file.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc +125 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc +494 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h +206 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc +2645 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message.h +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc +375 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_options.h +58 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc +451 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +123 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc +334 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc +642 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h +127 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto +132 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc +2074 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.h +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.cc +480 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer.h +317 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/importer_unittest.cc +617 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_context.h +95 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc +233 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc +67 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.cc +333 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum.h +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.cc +778 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_enum_field.h +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.cc +207 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_extension.h +109 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.cc +213 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_field.h +162 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.cc +534 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_file.h +115 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.cc +158 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc +77 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_generator_factory.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.cc +737 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_helpers.h +322 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.cc +826 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_lazy_message_field.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.cc +1666 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message.h +140 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.cc +1343 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_message_field.h +173 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc +266 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_name_resolver.h +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_plugin_unittest.cc +124 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc +877 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_primitive_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_service.h +135 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc +201 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h +90 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.cc +1056 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/java/java_string_field.h +160 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/main.cc +61 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.cc +240 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/mock_code_generator.h +117 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.cc +1750 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser.h +522 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/parser_unittest.cc +2612 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.cc +163 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.h +72 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.cc +1148 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.pb.h +897 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/plugin.proto +147 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.cc +1262 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_generator.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/python/python_plugin_unittest.cc +118 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.cc +463 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/subprocess.h +108 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/test_plugin.cc +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_output_unittest.sh +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.cc +218 -0
- data/ext/protoc/protobuf/src/google/protobuf/compiler/zip_writer.h +93 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.cc +5420 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.h +1691 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.cc +9135 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.pb.h +6761 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor.proto +687 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.cc +543 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database.h +369 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_database_unittest.cc +748 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_pb2_test.py +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/descriptor_unittest.cc +5501 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.cc +764 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message.h +148 -0
- data/ext/protoc/protobuf/src/google/protobuf/dynamic_message_unittest.cc +230 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.cc +1663 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set.h +1234 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_heavy.cc +734 -0
- data/ext/protoc/protobuf/src/google/protobuf/extension_set_unittest.cc +1095 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_enum_reflection.h +91 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.cc +1683 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection.h +504 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc +795 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.cc +65 -0
- data/ext/protoc/protobuf/src/google/protobuf/generated_message_util.h +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.cc +914 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream.h +1220 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_inl.h +69 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/coded_stream_unittest.cc +1378 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.cc +326 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream.h +209 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/gzip_stream_unittest.sh +44 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/package_info.h +54 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.cc +198 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer.h +136 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/printer_unittest.cc +285 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.cc +113 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/strtod.h +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.cc +1127 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer.h +402 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/tokenizer_unittest.cc +999 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.cc +57 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream.h +248 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +405 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +354 -0
- data/ext/protoc/protobuf/src/google/protobuf/io/zero_copy_stream_unittest.cc +965 -0
- data/ext/protoc/protobuf/src/google/protobuf/lite_unittest.cc +350 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.cc +358 -0
- data/ext/protoc/protobuf/src/google/protobuf/message.h +866 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.cc +335 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_lite.h +247 -0
- data/ext/protoc/protobuf/src/google/protobuf/message_unittest.cc +427 -0
- data/ext/protoc/protobuf/src/google/protobuf/package_info.h +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.cc +269 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops.h +81 -0
- data/ext/protoc/protobuf/src/google/protobuf/reflection_ops_unittest.cc +475 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.cc +87 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field.h +1603 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_reflection_unittest.cc +195 -0
- data/ext/protoc/protobuf/src/google/protobuf/repeated_field_unittest.cc +1442 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.cc +46 -0
- data/ext/protoc/protobuf/src/google/protobuf/service.h +291 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops.h +227 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm64_gcc.h +325 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_gcc.h +151 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_arm_qnx.h +146 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_atomicword_compat.h +122 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_macosx.h +225 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_mips_gcc.h +313 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_pnacl.h +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_solaris.h +188 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_tsan.h +219 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc +137 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.h +293 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc +112 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h +150 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.cc +395 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common.h +1226 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/common_unittest.cc +357 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/hash.h +232 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/map_util.h +771 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.cc +99 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once.h +166 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/once_unittest.cc +253 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/platform_macros.h +103 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/shared_ptr.h +470 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stl_util.h +121 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.cc +175 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf.h +76 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/stringprintf_unittest.cc +152 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid.cc +536 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/structurally_valid_unittest.cc +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.cc +1279 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil.h +562 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/strutil_unittest.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.cc +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/substitute.h +170 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util.h +138 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/template_util_unittest.cc +130 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/stubs/type_traits_unittest.cc +628 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.cc +3345 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util.h +215 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.cc +1585 -0
- data/ext/protoc/protobuf/src/google/protobuf/test_util_lite.h +101 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/bad_utf8_string +1 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_message_oneof_implemented +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/golden_packed_fields_message +0 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_oneof_implemented.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_data_pointy_oneof.txt +129 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testdata/text_format_unittest_extensions_data_pointy.txt +134 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.cc +194 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/file.h +97 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.cc +255 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/googletest.h +102 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgunzip.cc +73 -0
- data/ext/protoc/protobuf/src/google/protobuf/testing/zcgzip.cc +79 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.cc +1746 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format.h +473 -0
- data/ext/protoc/protobuf/src/google/protobuf/text_format_unittest.cc +1479 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest.proto +861 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_custom_options.proto +393 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_embed_optimize_for.proto +50 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_empty.proto +37 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_enormous_descriptor.proto +1046 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import.proto +64 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_lite.proto +51 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public.proto +40 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_import_public_lite.proto +42 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite.proto +384 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_lite_imports_nonlite.proto +43 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_mset.proto +83 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_no_generic_services.proto +53 -0
- data/ext/protoc/protobuf/src/google/protobuf/unittest_optimize_for.proto +66 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.cc +265 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set.h +318 -0
- data/ext/protoc/protobuf/src/google/protobuf/unknown_field_set_unittest.cc +599 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.cc +1101 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format.h +336 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.cc +471 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite.h +661 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_lite_inl.h +860 -0
- data/ext/protoc/protobuf/src/google/protobuf/wire_format_unittest.cc +1120 -0
- data/ext/protoc/protobuf/src/solaris/libstdc++.la +51 -0
- data/ext/protoc/protobuf/vsprojects/config.h +29 -0
- data/ext/protoc/protobuf/vsprojects/convert2008to2005.sh +20 -0
- data/ext/protoc/protobuf/vsprojects/extract_includes.bat +50 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf-lite.vcproj +302 -0
- data/ext/protoc/protobuf/vsprojects/libprotobuf.vcproj +470 -0
- data/ext/protoc/protobuf/vsprojects/libprotoc.vcproj +466 -0
- data/ext/protoc/protobuf/vsprojects/lite-test.vcproj +305 -0
- data/ext/protoc/protobuf/vsprojects/protobuf.sln +92 -0
- data/ext/protoc/protobuf/vsprojects/protoc.vcproj +192 -0
- data/ext/protoc/protobuf/vsprojects/readme.txt +114 -0
- data/ext/protoc/protobuf/vsprojects/test_plugin.vcproj +209 -0
- data/ext/protoc/protobuf/vsprojects/tests.vcproj +681 -0
- data/lib/protoc/version.rb +1 -1
- metadata +480 -3
|
@@ -0,0 +1,172 @@
|
|
|
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: anuraag@google.com (Anuraag Agrawal)
|
|
32
|
+
// Author: tibell@google.com (Johan Tibell)
|
|
33
|
+
|
|
34
|
+
#ifndef GOOGLE_PROTOBUF_PYTHON_CPP_REPEATED_COMPOSITE_CONTAINER_H__
|
|
35
|
+
#define GOOGLE_PROTOBUF_PYTHON_CPP_REPEATED_COMPOSITE_CONTAINER_H__
|
|
36
|
+
|
|
37
|
+
#include <Python.h>
|
|
38
|
+
|
|
39
|
+
#include <memory>
|
|
40
|
+
#ifndef _SHARED_PTR_H
|
|
41
|
+
#include <google/protobuf/stubs/shared_ptr.h>
|
|
42
|
+
#endif
|
|
43
|
+
#include <string>
|
|
44
|
+
#include <vector>
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
namespace google {
|
|
48
|
+
namespace protobuf {
|
|
49
|
+
|
|
50
|
+
class FieldDescriptor;
|
|
51
|
+
class Message;
|
|
52
|
+
|
|
53
|
+
using internal::shared_ptr;
|
|
54
|
+
|
|
55
|
+
namespace python {
|
|
56
|
+
|
|
57
|
+
struct CMessage;
|
|
58
|
+
struct CFieldDescriptor;
|
|
59
|
+
|
|
60
|
+
// A RepeatedCompositeContainer can be in one of two states: attached
|
|
61
|
+
// or released.
|
|
62
|
+
//
|
|
63
|
+
// When in the attached state all modifications to the container are
|
|
64
|
+
// done both on the 'message' and on the 'child_messages'
|
|
65
|
+
// list. In this state all Messages refered to by the children in
|
|
66
|
+
// 'child_messages' are owner by the 'owner'.
|
|
67
|
+
//
|
|
68
|
+
// When in the released state 'message', 'owner', 'parent', and
|
|
69
|
+
// 'parent_field' are NULL.
|
|
70
|
+
typedef struct RepeatedCompositeContainer {
|
|
71
|
+
PyObject_HEAD;
|
|
72
|
+
|
|
73
|
+
// This is the top-level C++ Message object that owns the whole
|
|
74
|
+
// proto tree. Every Python RepeatedCompositeContainer holds a
|
|
75
|
+
// reference to it in order to keep it alive as long as there's a
|
|
76
|
+
// Python object that references any part of the tree.
|
|
77
|
+
shared_ptr<Message> owner;
|
|
78
|
+
|
|
79
|
+
// Weak reference to parent object. May be NULL. Used to make sure
|
|
80
|
+
// the parent is writable before modifying the
|
|
81
|
+
// RepeatedCompositeContainer.
|
|
82
|
+
CMessage* parent;
|
|
83
|
+
|
|
84
|
+
// A descriptor used to modify the underlying 'message'.
|
|
85
|
+
CFieldDescriptor* parent_field;
|
|
86
|
+
|
|
87
|
+
// Pointer to the C++ Message that contains this container. The
|
|
88
|
+
// RepeatedCompositeContainer does not own this pointer.
|
|
89
|
+
//
|
|
90
|
+
// If NULL, this message has been released from its parent (by
|
|
91
|
+
// calling Clear() or ClearField() on the parent.
|
|
92
|
+
Message* message;
|
|
93
|
+
|
|
94
|
+
// A callable that is used to create new child messages.
|
|
95
|
+
PyObject* subclass_init;
|
|
96
|
+
|
|
97
|
+
// A list of child messages.
|
|
98
|
+
PyObject* child_messages;
|
|
99
|
+
} RepeatedCompositeContainer;
|
|
100
|
+
|
|
101
|
+
extern PyTypeObject RepeatedCompositeContainer_Type;
|
|
102
|
+
|
|
103
|
+
namespace repeated_composite_container {
|
|
104
|
+
|
|
105
|
+
// Returns the number of items in this repeated composite container.
|
|
106
|
+
static Py_ssize_t Length(RepeatedCompositeContainer* self);
|
|
107
|
+
|
|
108
|
+
// Appends a new CMessage to the container and returns it. The
|
|
109
|
+
// CMessage is initialized using the content of kwargs.
|
|
110
|
+
//
|
|
111
|
+
// Returns a new reference if successful; returns NULL and sets an
|
|
112
|
+
// exception if unsuccessful.
|
|
113
|
+
PyObject* Add(RepeatedCompositeContainer* self,
|
|
114
|
+
PyObject* args,
|
|
115
|
+
PyObject* kwargs);
|
|
116
|
+
|
|
117
|
+
// Appends all the CMessages in the input iterator to the container.
|
|
118
|
+
//
|
|
119
|
+
// Returns None if successful; returns NULL and sets an exception if
|
|
120
|
+
// unsuccessful.
|
|
121
|
+
PyObject* Extend(RepeatedCompositeContainer* self, PyObject* value);
|
|
122
|
+
|
|
123
|
+
// Appends a new message to the container for each message in the
|
|
124
|
+
// input iterator, merging each data element in. Equivalent to extend.
|
|
125
|
+
//
|
|
126
|
+
// Returns None if successful; returns NULL and sets an exception if
|
|
127
|
+
// unsuccessful.
|
|
128
|
+
PyObject* MergeFrom(RepeatedCompositeContainer* self, PyObject* other);
|
|
129
|
+
|
|
130
|
+
// Accesses messages in the container.
|
|
131
|
+
//
|
|
132
|
+
// Returns a new reference to the message for an integer parameter.
|
|
133
|
+
// Returns a new reference to a list of messages for a slice.
|
|
134
|
+
PyObject* Subscript(RepeatedCompositeContainer* self, PyObject* slice);
|
|
135
|
+
|
|
136
|
+
// Deletes items from the container (cannot be used for assignment).
|
|
137
|
+
//
|
|
138
|
+
// Returns 0 on success, -1 on failure.
|
|
139
|
+
int AssignSubscript(RepeatedCompositeContainer* self,
|
|
140
|
+
PyObject* slice,
|
|
141
|
+
PyObject* value);
|
|
142
|
+
|
|
143
|
+
// Releases the messages in the container to the given message.
|
|
144
|
+
//
|
|
145
|
+
// Returns 0 on success, -1 on failure.
|
|
146
|
+
int ReleaseToMessage(RepeatedCompositeContainer* self,
|
|
147
|
+
google::protobuf::Message* new_message);
|
|
148
|
+
|
|
149
|
+
// Releases the messages in the container to a new message.
|
|
150
|
+
//
|
|
151
|
+
// Returns 0 on success, -1 on failure.
|
|
152
|
+
int Release(RepeatedCompositeContainer* self);
|
|
153
|
+
|
|
154
|
+
// Returns 0 on success, -1 on failure.
|
|
155
|
+
int SetOwner(RepeatedCompositeContainer* self,
|
|
156
|
+
const shared_ptr<Message>& new_owner);
|
|
157
|
+
|
|
158
|
+
// Removes the last element of the repeated message field 'field' on
|
|
159
|
+
// the Message 'message', and transfers the ownership of the released
|
|
160
|
+
// Message to 'cmessage'.
|
|
161
|
+
//
|
|
162
|
+
// Corresponds to reflection api method ReleaseMessage.
|
|
163
|
+
void ReleaseLastTo(const FieldDescriptor* field,
|
|
164
|
+
Message* message,
|
|
165
|
+
CMessage* cmessage);
|
|
166
|
+
|
|
167
|
+
} // namespace repeated_composite_container
|
|
168
|
+
} // namespace python
|
|
169
|
+
} // namespace protobuf
|
|
170
|
+
|
|
171
|
+
} // namespace google
|
|
172
|
+
#endif // GOOGLE_PROTOBUF_PYTHON_CPP_REPEATED_COMPOSITE_CONTAINER_H__
|
|
@@ -0,0 +1,825 @@
|
|
|
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: anuraag@google.com (Anuraag Agrawal)
|
|
32
|
+
// Author: tibell@google.com (Johan Tibell)
|
|
33
|
+
|
|
34
|
+
#include <google/protobuf/pyext/repeated_scalar_container.h>
|
|
35
|
+
|
|
36
|
+
#include <memory>
|
|
37
|
+
#ifndef _SHARED_PTR_H
|
|
38
|
+
#include <google/protobuf/stubs/shared_ptr.h>
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
#include <google/protobuf/stubs/common.h>
|
|
42
|
+
#include <google/protobuf/descriptor.h>
|
|
43
|
+
#include <google/protobuf/dynamic_message.h>
|
|
44
|
+
#include <google/protobuf/message.h>
|
|
45
|
+
#include <google/protobuf/pyext/descriptor.h>
|
|
46
|
+
#include <google/protobuf/pyext/message.h>
|
|
47
|
+
#include <google/protobuf/pyext/scoped_pyobject_ptr.h>
|
|
48
|
+
|
|
49
|
+
#if PY_MAJOR_VERSION >= 3
|
|
50
|
+
#define PyInt_FromLong PyLong_FromLong
|
|
51
|
+
#if PY_VERSION_HEX < 0x03030000
|
|
52
|
+
#error "Python 3.0 - 3.2 are not supported."
|
|
53
|
+
#else
|
|
54
|
+
#define PyString_AsString(ob) \
|
|
55
|
+
(PyUnicode_Check(ob)? PyUnicode_AsUTF8(ob): PyBytes_AS_STRING(ob))
|
|
56
|
+
#endif
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
namespace google {
|
|
60
|
+
namespace protobuf {
|
|
61
|
+
namespace python {
|
|
62
|
+
|
|
63
|
+
extern google::protobuf::DynamicMessageFactory* global_message_factory;
|
|
64
|
+
|
|
65
|
+
namespace repeated_scalar_container {
|
|
66
|
+
|
|
67
|
+
static int InternalAssignRepeatedField(
|
|
68
|
+
RepeatedScalarContainer* self, PyObject* list) {
|
|
69
|
+
self->message->GetReflection()->ClearField(self->message,
|
|
70
|
+
self->parent_field->descriptor);
|
|
71
|
+
for (Py_ssize_t i = 0; i < PyList_GET_SIZE(list); ++i) {
|
|
72
|
+
PyObject* value = PyList_GET_ITEM(list, i);
|
|
73
|
+
if (Append(self, value) == NULL) {
|
|
74
|
+
return -1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static Py_ssize_t Len(RepeatedScalarContainer* self) {
|
|
81
|
+
google::protobuf::Message* message = self->message;
|
|
82
|
+
return message->GetReflection()->FieldSize(*message,
|
|
83
|
+
self->parent_field->descriptor);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
static int AssignItem(RepeatedScalarContainer* self,
|
|
87
|
+
Py_ssize_t index,
|
|
88
|
+
PyObject* arg) {
|
|
89
|
+
cmessage::AssureWritable(self->parent);
|
|
90
|
+
google::protobuf::Message* message = self->message;
|
|
91
|
+
const google::protobuf::FieldDescriptor* field_descriptor =
|
|
92
|
+
self->parent_field->descriptor;
|
|
93
|
+
if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) {
|
|
94
|
+
PyErr_SetString(
|
|
95
|
+
PyExc_KeyError, "Field does not belong to message!");
|
|
96
|
+
return -1;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const google::protobuf::Reflection* reflection = message->GetReflection();
|
|
100
|
+
int field_size = reflection->FieldSize(*message, field_descriptor);
|
|
101
|
+
if (index < 0) {
|
|
102
|
+
index = field_size + index;
|
|
103
|
+
}
|
|
104
|
+
if (index < 0 || index >= field_size) {
|
|
105
|
+
PyErr_Format(PyExc_IndexError,
|
|
106
|
+
"list assignment index (%d) out of range",
|
|
107
|
+
static_cast<int>(index));
|
|
108
|
+
return -1;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (arg == NULL) {
|
|
112
|
+
ScopedPyObjectPtr py_index(PyLong_FromLong(index));
|
|
113
|
+
return cmessage::InternalDeleteRepeatedField(message, field_descriptor,
|
|
114
|
+
py_index, NULL);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (PySequence_Check(arg) && !(PyBytes_Check(arg) || PyUnicode_Check(arg))) {
|
|
118
|
+
PyErr_SetString(PyExc_TypeError, "Value must be scalar");
|
|
119
|
+
return -1;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
switch (field_descriptor->cpp_type()) {
|
|
123
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_INT32: {
|
|
124
|
+
GOOGLE_CHECK_GET_INT32(arg, value, -1);
|
|
125
|
+
reflection->SetRepeatedInt32(message, field_descriptor, index, value);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_INT64: {
|
|
129
|
+
GOOGLE_CHECK_GET_INT64(arg, value, -1);
|
|
130
|
+
reflection->SetRepeatedInt64(message, field_descriptor, index, value);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: {
|
|
134
|
+
GOOGLE_CHECK_GET_UINT32(arg, value, -1);
|
|
135
|
+
reflection->SetRepeatedUInt32(message, field_descriptor, index, value);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: {
|
|
139
|
+
GOOGLE_CHECK_GET_UINT64(arg, value, -1);
|
|
140
|
+
reflection->SetRepeatedUInt64(message, field_descriptor, index, value);
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: {
|
|
144
|
+
GOOGLE_CHECK_GET_FLOAT(arg, value, -1);
|
|
145
|
+
reflection->SetRepeatedFloat(message, field_descriptor, index, value);
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: {
|
|
149
|
+
GOOGLE_CHECK_GET_DOUBLE(arg, value, -1);
|
|
150
|
+
reflection->SetRepeatedDouble(message, field_descriptor, index, value);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: {
|
|
154
|
+
GOOGLE_CHECK_GET_BOOL(arg, value, -1);
|
|
155
|
+
reflection->SetRepeatedBool(message, field_descriptor, index, value);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_STRING: {
|
|
159
|
+
if (!CheckAndSetString(
|
|
160
|
+
arg, message, field_descriptor, reflection, false, index)) {
|
|
161
|
+
return -1;
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: {
|
|
166
|
+
GOOGLE_CHECK_GET_INT32(arg, value, -1);
|
|
167
|
+
const google::protobuf::EnumDescriptor* enum_descriptor =
|
|
168
|
+
field_descriptor->enum_type();
|
|
169
|
+
const google::protobuf::EnumValueDescriptor* enum_value =
|
|
170
|
+
enum_descriptor->FindValueByNumber(value);
|
|
171
|
+
if (enum_value != NULL) {
|
|
172
|
+
reflection->SetRepeatedEnum(message, field_descriptor, index,
|
|
173
|
+
enum_value);
|
|
174
|
+
} else {
|
|
175
|
+
ScopedPyObjectPtr s(PyObject_Str(arg));
|
|
176
|
+
if (s != NULL) {
|
|
177
|
+
PyErr_Format(PyExc_ValueError, "Unknown enum value: %s",
|
|
178
|
+
PyString_AsString(s.get()));
|
|
179
|
+
}
|
|
180
|
+
return -1;
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
default:
|
|
185
|
+
PyErr_Format(
|
|
186
|
+
PyExc_SystemError, "Adding value to a field of unknown type %d",
|
|
187
|
+
field_descriptor->cpp_type());
|
|
188
|
+
return -1;
|
|
189
|
+
}
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
static PyObject* Item(RepeatedScalarContainer* self, Py_ssize_t index) {
|
|
194
|
+
google::protobuf::Message* message = self->message;
|
|
195
|
+
const google::protobuf::FieldDescriptor* field_descriptor =
|
|
196
|
+
self->parent_field->descriptor;
|
|
197
|
+
const google::protobuf::Reflection* reflection = message->GetReflection();
|
|
198
|
+
|
|
199
|
+
int field_size = reflection->FieldSize(*message, field_descriptor);
|
|
200
|
+
if (index < 0) {
|
|
201
|
+
index = field_size + index;
|
|
202
|
+
}
|
|
203
|
+
if (index < 0 || index >= field_size) {
|
|
204
|
+
PyErr_Format(PyExc_IndexError,
|
|
205
|
+
"list assignment index (%d) out of range",
|
|
206
|
+
static_cast<int>(index));
|
|
207
|
+
return NULL;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
PyObject* result = NULL;
|
|
211
|
+
switch (field_descriptor->cpp_type()) {
|
|
212
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_INT32: {
|
|
213
|
+
int32 value = reflection->GetRepeatedInt32(
|
|
214
|
+
*message, field_descriptor, index);
|
|
215
|
+
result = PyInt_FromLong(value);
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_INT64: {
|
|
219
|
+
int64 value = reflection->GetRepeatedInt64(
|
|
220
|
+
*message, field_descriptor, index);
|
|
221
|
+
result = PyLong_FromLongLong(value);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: {
|
|
225
|
+
uint32 value = reflection->GetRepeatedUInt32(
|
|
226
|
+
*message, field_descriptor, index);
|
|
227
|
+
result = PyLong_FromLongLong(value);
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: {
|
|
231
|
+
uint64 value = reflection->GetRepeatedUInt64(
|
|
232
|
+
*message, field_descriptor, index);
|
|
233
|
+
result = PyLong_FromUnsignedLongLong(value);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: {
|
|
237
|
+
float value = reflection->GetRepeatedFloat(
|
|
238
|
+
*message, field_descriptor, index);
|
|
239
|
+
result = PyFloat_FromDouble(value);
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: {
|
|
243
|
+
double value = reflection->GetRepeatedDouble(
|
|
244
|
+
*message, field_descriptor, index);
|
|
245
|
+
result = PyFloat_FromDouble(value);
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: {
|
|
249
|
+
bool value = reflection->GetRepeatedBool(
|
|
250
|
+
*message, field_descriptor, index);
|
|
251
|
+
result = PyBool_FromLong(value ? 1 : 0);
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: {
|
|
255
|
+
const google::protobuf::EnumValueDescriptor* enum_value =
|
|
256
|
+
message->GetReflection()->GetRepeatedEnum(
|
|
257
|
+
*message, field_descriptor, index);
|
|
258
|
+
result = PyInt_FromLong(enum_value->number());
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_STRING: {
|
|
262
|
+
string value = reflection->GetRepeatedString(
|
|
263
|
+
*message, field_descriptor, index);
|
|
264
|
+
result = ToStringObject(field_descriptor, value);
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: {
|
|
268
|
+
PyObject* py_cmsg = PyObject_CallObject(reinterpret_cast<PyObject*>(
|
|
269
|
+
&CMessage_Type), NULL);
|
|
270
|
+
if (py_cmsg == NULL) {
|
|
271
|
+
return NULL;
|
|
272
|
+
}
|
|
273
|
+
CMessage* cmsg = reinterpret_cast<CMessage*>(py_cmsg);
|
|
274
|
+
const google::protobuf::Message& msg = reflection->GetRepeatedMessage(
|
|
275
|
+
*message, field_descriptor, index);
|
|
276
|
+
cmsg->owner = self->owner;
|
|
277
|
+
cmsg->parent = self->parent;
|
|
278
|
+
cmsg->message = const_cast<google::protobuf::Message*>(&msg);
|
|
279
|
+
cmsg->read_only = false;
|
|
280
|
+
result = reinterpret_cast<PyObject*>(py_cmsg);
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
default:
|
|
284
|
+
PyErr_Format(
|
|
285
|
+
PyExc_SystemError,
|
|
286
|
+
"Getting value from a repeated field of unknown type %d",
|
|
287
|
+
field_descriptor->cpp_type());
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
static PyObject* Subscript(RepeatedScalarContainer* self, PyObject* slice) {
|
|
294
|
+
Py_ssize_t from;
|
|
295
|
+
Py_ssize_t to;
|
|
296
|
+
Py_ssize_t step;
|
|
297
|
+
Py_ssize_t length;
|
|
298
|
+
Py_ssize_t slicelength;
|
|
299
|
+
bool return_list = false;
|
|
300
|
+
#if PY_MAJOR_VERSION < 3
|
|
301
|
+
if (PyInt_Check(slice)) {
|
|
302
|
+
from = to = PyInt_AsLong(slice);
|
|
303
|
+
} else // NOLINT
|
|
304
|
+
#endif
|
|
305
|
+
if (PyLong_Check(slice)) {
|
|
306
|
+
from = to = PyLong_AsLong(slice);
|
|
307
|
+
} else if (PySlice_Check(slice)) {
|
|
308
|
+
length = Len(self);
|
|
309
|
+
#if PY_MAJOR_VERSION >= 3
|
|
310
|
+
if (PySlice_GetIndicesEx(slice,
|
|
311
|
+
#else
|
|
312
|
+
if (PySlice_GetIndicesEx(reinterpret_cast<PySliceObject*>(slice),
|
|
313
|
+
#endif
|
|
314
|
+
length, &from, &to, &step, &slicelength) == -1) {
|
|
315
|
+
return NULL;
|
|
316
|
+
}
|
|
317
|
+
return_list = true;
|
|
318
|
+
} else {
|
|
319
|
+
PyErr_SetString(PyExc_TypeError, "list indices must be integers");
|
|
320
|
+
return NULL;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
if (!return_list) {
|
|
324
|
+
return Item(self, from);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
PyObject* list = PyList_New(0);
|
|
328
|
+
if (list == NULL) {
|
|
329
|
+
return NULL;
|
|
330
|
+
}
|
|
331
|
+
if (from <= to) {
|
|
332
|
+
if (step < 0) {
|
|
333
|
+
return list;
|
|
334
|
+
}
|
|
335
|
+
for (Py_ssize_t index = from; index < to; index += step) {
|
|
336
|
+
if (index < 0 || index >= length) {
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
ScopedPyObjectPtr s(Item(self, index));
|
|
340
|
+
PyList_Append(list, s);
|
|
341
|
+
}
|
|
342
|
+
} else {
|
|
343
|
+
if (step > 0) {
|
|
344
|
+
return list;
|
|
345
|
+
}
|
|
346
|
+
for (Py_ssize_t index = from; index > to; index += step) {
|
|
347
|
+
if (index < 0 || index >= length) {
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
ScopedPyObjectPtr s(Item(self, index));
|
|
351
|
+
PyList_Append(list, s);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return list;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
PyObject* Append(RepeatedScalarContainer* self, PyObject* item) {
|
|
358
|
+
cmessage::AssureWritable(self->parent);
|
|
359
|
+
google::protobuf::Message* message = self->message;
|
|
360
|
+
const google::protobuf::FieldDescriptor* field_descriptor =
|
|
361
|
+
self->parent_field->descriptor;
|
|
362
|
+
|
|
363
|
+
if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) {
|
|
364
|
+
PyErr_SetString(
|
|
365
|
+
PyExc_KeyError, "Field does not belong to message!");
|
|
366
|
+
return NULL;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
const google::protobuf::Reflection* reflection = message->GetReflection();
|
|
370
|
+
switch (field_descriptor->cpp_type()) {
|
|
371
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_INT32: {
|
|
372
|
+
GOOGLE_CHECK_GET_INT32(item, value, NULL);
|
|
373
|
+
reflection->AddInt32(message, field_descriptor, value);
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
376
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_INT64: {
|
|
377
|
+
GOOGLE_CHECK_GET_INT64(item, value, NULL);
|
|
378
|
+
reflection->AddInt64(message, field_descriptor, value);
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: {
|
|
382
|
+
GOOGLE_CHECK_GET_UINT32(item, value, NULL);
|
|
383
|
+
reflection->AddUInt32(message, field_descriptor, value);
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: {
|
|
387
|
+
GOOGLE_CHECK_GET_UINT64(item, value, NULL);
|
|
388
|
+
reflection->AddUInt64(message, field_descriptor, value);
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: {
|
|
392
|
+
GOOGLE_CHECK_GET_FLOAT(item, value, NULL);
|
|
393
|
+
reflection->AddFloat(message, field_descriptor, value);
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: {
|
|
397
|
+
GOOGLE_CHECK_GET_DOUBLE(item, value, NULL);
|
|
398
|
+
reflection->AddDouble(message, field_descriptor, value);
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: {
|
|
402
|
+
GOOGLE_CHECK_GET_BOOL(item, value, NULL);
|
|
403
|
+
reflection->AddBool(message, field_descriptor, value);
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
406
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_STRING: {
|
|
407
|
+
if (!CheckAndSetString(
|
|
408
|
+
item, message, field_descriptor, reflection, true, -1)) {
|
|
409
|
+
return NULL;
|
|
410
|
+
}
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: {
|
|
414
|
+
GOOGLE_CHECK_GET_INT32(item, value, NULL);
|
|
415
|
+
const google::protobuf::EnumDescriptor* enum_descriptor =
|
|
416
|
+
field_descriptor->enum_type();
|
|
417
|
+
const google::protobuf::EnumValueDescriptor* enum_value =
|
|
418
|
+
enum_descriptor->FindValueByNumber(value);
|
|
419
|
+
if (enum_value != NULL) {
|
|
420
|
+
reflection->AddEnum(message, field_descriptor, enum_value);
|
|
421
|
+
} else {
|
|
422
|
+
ScopedPyObjectPtr s(PyObject_Str(item));
|
|
423
|
+
if (s != NULL) {
|
|
424
|
+
PyErr_Format(PyExc_ValueError, "Unknown enum value: %s",
|
|
425
|
+
PyString_AsString(s.get()));
|
|
426
|
+
}
|
|
427
|
+
return NULL;
|
|
428
|
+
}
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
default:
|
|
432
|
+
PyErr_Format(
|
|
433
|
+
PyExc_SystemError, "Adding value to a field of unknown type %d",
|
|
434
|
+
field_descriptor->cpp_type());
|
|
435
|
+
return NULL;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
Py_RETURN_NONE;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
static int AssSubscript(RepeatedScalarContainer* self,
|
|
442
|
+
PyObject* slice,
|
|
443
|
+
PyObject* value) {
|
|
444
|
+
Py_ssize_t from;
|
|
445
|
+
Py_ssize_t to;
|
|
446
|
+
Py_ssize_t step;
|
|
447
|
+
Py_ssize_t length;
|
|
448
|
+
Py_ssize_t slicelength;
|
|
449
|
+
bool create_list = false;
|
|
450
|
+
|
|
451
|
+
cmessage::AssureWritable(self->parent);
|
|
452
|
+
google::protobuf::Message* message = self->message;
|
|
453
|
+
const google::protobuf::FieldDescriptor* field_descriptor =
|
|
454
|
+
self->parent_field->descriptor;
|
|
455
|
+
|
|
456
|
+
#if PY_MAJOR_VERSION < 3
|
|
457
|
+
if (PyInt_Check(slice)) {
|
|
458
|
+
from = to = PyInt_AsLong(slice);
|
|
459
|
+
} else
|
|
460
|
+
#endif
|
|
461
|
+
if (PyLong_Check(slice)) {
|
|
462
|
+
from = to = PyLong_AsLong(slice);
|
|
463
|
+
} else if (PySlice_Check(slice)) {
|
|
464
|
+
const google::protobuf::Reflection* reflection = message->GetReflection();
|
|
465
|
+
length = reflection->FieldSize(*message, field_descriptor);
|
|
466
|
+
#if PY_MAJOR_VERSION >= 3
|
|
467
|
+
if (PySlice_GetIndicesEx(slice,
|
|
468
|
+
#else
|
|
469
|
+
if (PySlice_GetIndicesEx(reinterpret_cast<PySliceObject*>(slice),
|
|
470
|
+
#endif
|
|
471
|
+
length, &from, &to, &step, &slicelength) == -1) {
|
|
472
|
+
return -1;
|
|
473
|
+
}
|
|
474
|
+
create_list = true;
|
|
475
|
+
} else {
|
|
476
|
+
PyErr_SetString(PyExc_TypeError, "list indices must be integers");
|
|
477
|
+
return -1;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
if (value == NULL) {
|
|
481
|
+
return cmessage::InternalDeleteRepeatedField(
|
|
482
|
+
message, field_descriptor, slice, NULL);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
if (!create_list) {
|
|
486
|
+
return AssignItem(self, from, value);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
ScopedPyObjectPtr full_slice(PySlice_New(NULL, NULL, NULL));
|
|
490
|
+
if (full_slice == NULL) {
|
|
491
|
+
return -1;
|
|
492
|
+
}
|
|
493
|
+
ScopedPyObjectPtr new_list(Subscript(self, full_slice));
|
|
494
|
+
if (new_list == NULL) {
|
|
495
|
+
return -1;
|
|
496
|
+
}
|
|
497
|
+
if (PySequence_SetSlice(new_list, from, to, value) < 0) {
|
|
498
|
+
return -1;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
return InternalAssignRepeatedField(self, new_list);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
PyObject* Extend(RepeatedScalarContainer* self, PyObject* value) {
|
|
505
|
+
cmessage::AssureWritable(self->parent);
|
|
506
|
+
if (PyObject_Not(value)) {
|
|
507
|
+
Py_RETURN_NONE;
|
|
508
|
+
}
|
|
509
|
+
ScopedPyObjectPtr iter(PyObject_GetIter(value));
|
|
510
|
+
if (iter == NULL) {
|
|
511
|
+
PyErr_SetString(PyExc_TypeError, "Value must be iterable");
|
|
512
|
+
return NULL;
|
|
513
|
+
}
|
|
514
|
+
ScopedPyObjectPtr next;
|
|
515
|
+
while ((next.reset(PyIter_Next(iter))) != NULL) {
|
|
516
|
+
if (Append(self, next) == NULL) {
|
|
517
|
+
return NULL;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
if (PyErr_Occurred()) {
|
|
521
|
+
return NULL;
|
|
522
|
+
}
|
|
523
|
+
Py_RETURN_NONE;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
static PyObject* Insert(RepeatedScalarContainer* self, PyObject* args) {
|
|
527
|
+
Py_ssize_t index;
|
|
528
|
+
PyObject* value;
|
|
529
|
+
if (!PyArg_ParseTuple(args, "lO", &index, &value)) {
|
|
530
|
+
return NULL;
|
|
531
|
+
}
|
|
532
|
+
ScopedPyObjectPtr full_slice(PySlice_New(NULL, NULL, NULL));
|
|
533
|
+
ScopedPyObjectPtr new_list(Subscript(self, full_slice));
|
|
534
|
+
if (PyList_Insert(new_list, index, value) < 0) {
|
|
535
|
+
return NULL;
|
|
536
|
+
}
|
|
537
|
+
int ret = InternalAssignRepeatedField(self, new_list);
|
|
538
|
+
if (ret < 0) {
|
|
539
|
+
return NULL;
|
|
540
|
+
}
|
|
541
|
+
Py_RETURN_NONE;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
static PyObject* Remove(RepeatedScalarContainer* self, PyObject* value) {
|
|
545
|
+
Py_ssize_t match_index = -1;
|
|
546
|
+
for (Py_ssize_t i = 0; i < Len(self); ++i) {
|
|
547
|
+
ScopedPyObjectPtr elem(Item(self, i));
|
|
548
|
+
if (PyObject_RichCompareBool(elem, value, Py_EQ)) {
|
|
549
|
+
match_index = i;
|
|
550
|
+
break;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
if (match_index == -1) {
|
|
554
|
+
PyErr_SetString(PyExc_ValueError, "remove(x): x not in container");
|
|
555
|
+
return NULL;
|
|
556
|
+
}
|
|
557
|
+
if (AssignItem(self, match_index, NULL) < 0) {
|
|
558
|
+
return NULL;
|
|
559
|
+
}
|
|
560
|
+
Py_RETURN_NONE;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
static PyObject* RichCompare(RepeatedScalarContainer* self,
|
|
564
|
+
PyObject* other,
|
|
565
|
+
int opid) {
|
|
566
|
+
if (opid != Py_EQ && opid != Py_NE) {
|
|
567
|
+
Py_INCREF(Py_NotImplemented);
|
|
568
|
+
return Py_NotImplemented;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// Copy the contents of this repeated scalar container, and other if it is
|
|
572
|
+
// also a repeated scalar container, into Python lists so we can delegate
|
|
573
|
+
// to the list's compare method.
|
|
574
|
+
|
|
575
|
+
ScopedPyObjectPtr full_slice(PySlice_New(NULL, NULL, NULL));
|
|
576
|
+
if (full_slice == NULL) {
|
|
577
|
+
return NULL;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
ScopedPyObjectPtr other_list_deleter;
|
|
581
|
+
if (PyObject_TypeCheck(other, &RepeatedScalarContainer_Type)) {
|
|
582
|
+
other_list_deleter.reset(Subscript(
|
|
583
|
+
reinterpret_cast<RepeatedScalarContainer*>(other), full_slice));
|
|
584
|
+
other = other_list_deleter.get();
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
ScopedPyObjectPtr list(Subscript(self, full_slice));
|
|
588
|
+
if (list == NULL) {
|
|
589
|
+
return NULL;
|
|
590
|
+
}
|
|
591
|
+
return PyObject_RichCompare(list, other, opid);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
PyObject* Reduce(RepeatedScalarContainer* unused_self) {
|
|
595
|
+
PyErr_Format(
|
|
596
|
+
PickleError_class,
|
|
597
|
+
"can't pickle repeated message fields, convert to list first");
|
|
598
|
+
return NULL;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
static PyObject* Sort(RepeatedScalarContainer* self,
|
|
602
|
+
PyObject* args,
|
|
603
|
+
PyObject* kwds) {
|
|
604
|
+
// Support the old sort_function argument for backwards
|
|
605
|
+
// compatibility.
|
|
606
|
+
if (kwds != NULL) {
|
|
607
|
+
PyObject* sort_func = PyDict_GetItemString(kwds, "sort_function");
|
|
608
|
+
if (sort_func != NULL) {
|
|
609
|
+
// Must set before deleting as sort_func is a borrowed reference
|
|
610
|
+
// and kwds might be the only thing keeping it alive.
|
|
611
|
+
if (PyDict_SetItemString(kwds, "cmp", sort_func) == -1)
|
|
612
|
+
return NULL;
|
|
613
|
+
if (PyDict_DelItemString(kwds, "sort_function") == -1)
|
|
614
|
+
return NULL;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
ScopedPyObjectPtr full_slice(PySlice_New(NULL, NULL, NULL));
|
|
619
|
+
if (full_slice == NULL) {
|
|
620
|
+
return NULL;
|
|
621
|
+
}
|
|
622
|
+
ScopedPyObjectPtr list(Subscript(self, full_slice));
|
|
623
|
+
if (list == NULL) {
|
|
624
|
+
return NULL;
|
|
625
|
+
}
|
|
626
|
+
ScopedPyObjectPtr m(PyObject_GetAttrString(list, "sort"));
|
|
627
|
+
if (m == NULL) {
|
|
628
|
+
return NULL;
|
|
629
|
+
}
|
|
630
|
+
ScopedPyObjectPtr res(PyObject_Call(m, args, kwds));
|
|
631
|
+
if (res == NULL) {
|
|
632
|
+
return NULL;
|
|
633
|
+
}
|
|
634
|
+
int ret = InternalAssignRepeatedField(self, list);
|
|
635
|
+
if (ret < 0) {
|
|
636
|
+
return NULL;
|
|
637
|
+
}
|
|
638
|
+
Py_RETURN_NONE;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
static int Init(RepeatedScalarContainer* self,
|
|
642
|
+
PyObject* args,
|
|
643
|
+
PyObject* kwargs) {
|
|
644
|
+
PyObject* py_parent;
|
|
645
|
+
PyObject* py_parent_field;
|
|
646
|
+
if (!PyArg_UnpackTuple(args, "__init__()", 2, 2, &py_parent,
|
|
647
|
+
&py_parent_field)) {
|
|
648
|
+
return -1;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
if (!PyObject_TypeCheck(py_parent, &CMessage_Type)) {
|
|
652
|
+
PyErr_Format(PyExc_TypeError,
|
|
653
|
+
"expect %s, but got %s",
|
|
654
|
+
CMessage_Type.tp_name,
|
|
655
|
+
Py_TYPE(py_parent)->tp_name);
|
|
656
|
+
return -1;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
if (!PyObject_TypeCheck(py_parent_field, &CFieldDescriptor_Type)) {
|
|
660
|
+
PyErr_Format(PyExc_TypeError,
|
|
661
|
+
"expect %s, but got %s",
|
|
662
|
+
CFieldDescriptor_Type.tp_name,
|
|
663
|
+
Py_TYPE(py_parent_field)->tp_name);
|
|
664
|
+
return -1;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
CMessage* cmessage = reinterpret_cast<CMessage*>(py_parent);
|
|
668
|
+
CFieldDescriptor* cdescriptor = reinterpret_cast<CFieldDescriptor*>(
|
|
669
|
+
py_parent_field);
|
|
670
|
+
|
|
671
|
+
if (!FIELD_BELONGS_TO_MESSAGE(cdescriptor->descriptor, cmessage->message)) {
|
|
672
|
+
PyErr_SetString(
|
|
673
|
+
PyExc_KeyError, "Field does not belong to message!");
|
|
674
|
+
return -1;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
self->message = cmessage->message;
|
|
678
|
+
self->parent = cmessage;
|
|
679
|
+
self->parent_field = cdescriptor;
|
|
680
|
+
self->owner = cmessage->owner;
|
|
681
|
+
return 0;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// Initializes the underlying Message object of "to" so it becomes a new parent
|
|
685
|
+
// repeated scalar, and copies all the values from "from" to it. A child scalar
|
|
686
|
+
// container can be released by passing it as both from and to (e.g. making it
|
|
687
|
+
// the recipient of the new parent message and copying the values from itself).
|
|
688
|
+
static int InitializeAndCopyToParentContainer(
|
|
689
|
+
RepeatedScalarContainer* from,
|
|
690
|
+
RepeatedScalarContainer* to) {
|
|
691
|
+
ScopedPyObjectPtr full_slice(PySlice_New(NULL, NULL, NULL));
|
|
692
|
+
if (full_slice == NULL) {
|
|
693
|
+
return -1;
|
|
694
|
+
}
|
|
695
|
+
ScopedPyObjectPtr values(Subscript(from, full_slice));
|
|
696
|
+
if (values == NULL) {
|
|
697
|
+
return -1;
|
|
698
|
+
}
|
|
699
|
+
google::protobuf::Message* new_message = global_message_factory->GetPrototype(
|
|
700
|
+
from->message->GetDescriptor())->New();
|
|
701
|
+
to->parent = NULL;
|
|
702
|
+
// TODO(anuraag): Document why it's OK to hang on to parent_field,
|
|
703
|
+
// even though it's a weak reference. It ought to be enough to
|
|
704
|
+
// hold on to the FieldDescriptor only.
|
|
705
|
+
to->parent_field = from->parent_field;
|
|
706
|
+
to->message = new_message;
|
|
707
|
+
to->owner.reset(new_message);
|
|
708
|
+
if (InternalAssignRepeatedField(to, values) < 0) {
|
|
709
|
+
return -1;
|
|
710
|
+
}
|
|
711
|
+
return 0;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
int Release(RepeatedScalarContainer* self) {
|
|
715
|
+
return InitializeAndCopyToParentContainer(self, self);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
PyObject* DeepCopy(RepeatedScalarContainer* self, PyObject* arg) {
|
|
719
|
+
ScopedPyObjectPtr init_args(
|
|
720
|
+
PyTuple_Pack(2, self->parent, self->parent_field));
|
|
721
|
+
PyObject* clone = PyObject_CallObject(
|
|
722
|
+
reinterpret_cast<PyObject*>(&RepeatedScalarContainer_Type), init_args);
|
|
723
|
+
if (clone == NULL) {
|
|
724
|
+
return NULL;
|
|
725
|
+
}
|
|
726
|
+
if (!PyObject_TypeCheck(clone, &RepeatedScalarContainer_Type)) {
|
|
727
|
+
Py_DECREF(clone);
|
|
728
|
+
return NULL;
|
|
729
|
+
}
|
|
730
|
+
if (InitializeAndCopyToParentContainer(
|
|
731
|
+
self, reinterpret_cast<RepeatedScalarContainer*>(clone)) < 0) {
|
|
732
|
+
Py_DECREF(clone);
|
|
733
|
+
return NULL;
|
|
734
|
+
}
|
|
735
|
+
return clone;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
static void Dealloc(RepeatedScalarContainer* self) {
|
|
739
|
+
self->owner.reset();
|
|
740
|
+
Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
void SetOwner(RepeatedScalarContainer* self,
|
|
744
|
+
const shared_ptr<Message>& new_owner) {
|
|
745
|
+
self->owner = new_owner;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
static PySequenceMethods SqMethods = {
|
|
749
|
+
(lenfunc)Len, /* sq_length */
|
|
750
|
+
0, /* sq_concat */
|
|
751
|
+
0, /* sq_repeat */
|
|
752
|
+
(ssizeargfunc)Item, /* sq_item */
|
|
753
|
+
0, /* sq_slice */
|
|
754
|
+
(ssizeobjargproc)AssignItem /* sq_ass_item */
|
|
755
|
+
};
|
|
756
|
+
|
|
757
|
+
static PyMappingMethods MpMethods = {
|
|
758
|
+
(lenfunc)Len, /* mp_length */
|
|
759
|
+
(binaryfunc)Subscript, /* mp_subscript */
|
|
760
|
+
(objobjargproc)AssSubscript, /* mp_ass_subscript */
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
static PyMethodDef Methods[] = {
|
|
764
|
+
{ "__deepcopy__", (PyCFunction)DeepCopy, METH_VARARGS,
|
|
765
|
+
"Makes a deep copy of the class." },
|
|
766
|
+
{ "__reduce__", (PyCFunction)Reduce, METH_NOARGS,
|
|
767
|
+
"Outputs picklable representation of the repeated field." },
|
|
768
|
+
{ "append", (PyCFunction)Append, METH_O,
|
|
769
|
+
"Appends an object to the repeated container." },
|
|
770
|
+
{ "extend", (PyCFunction)Extend, METH_O,
|
|
771
|
+
"Appends objects to the repeated container." },
|
|
772
|
+
{ "insert", (PyCFunction)Insert, METH_VARARGS,
|
|
773
|
+
"Appends objects to the repeated container." },
|
|
774
|
+
{ "remove", (PyCFunction)Remove, METH_O,
|
|
775
|
+
"Removes an object from the repeated container." },
|
|
776
|
+
{ "sort", (PyCFunction)Sort, METH_VARARGS | METH_KEYWORDS,
|
|
777
|
+
"Sorts the repeated container."},
|
|
778
|
+
{ NULL, NULL }
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
} // namespace repeated_scalar_container
|
|
782
|
+
|
|
783
|
+
PyTypeObject RepeatedScalarContainer_Type = {
|
|
784
|
+
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
|
785
|
+
"google.protobuf.internal."
|
|
786
|
+
"cpp._message.RepeatedScalarContainer", // tp_name
|
|
787
|
+
sizeof(RepeatedScalarContainer), // tp_basicsize
|
|
788
|
+
0, // tp_itemsize
|
|
789
|
+
(destructor)repeated_scalar_container::Dealloc, // tp_dealloc
|
|
790
|
+
0, // tp_print
|
|
791
|
+
0, // tp_getattr
|
|
792
|
+
0, // tp_setattr
|
|
793
|
+
0, // tp_compare
|
|
794
|
+
0, // tp_repr
|
|
795
|
+
0, // tp_as_number
|
|
796
|
+
&repeated_scalar_container::SqMethods, // tp_as_sequence
|
|
797
|
+
&repeated_scalar_container::MpMethods, // tp_as_mapping
|
|
798
|
+
0, // tp_hash
|
|
799
|
+
0, // tp_call
|
|
800
|
+
0, // tp_str
|
|
801
|
+
0, // tp_getattro
|
|
802
|
+
0, // tp_setattro
|
|
803
|
+
0, // tp_as_buffer
|
|
804
|
+
Py_TPFLAGS_DEFAULT, // tp_flags
|
|
805
|
+
"A Repeated scalar container", // tp_doc
|
|
806
|
+
0, // tp_traverse
|
|
807
|
+
0, // tp_clear
|
|
808
|
+
(richcmpfunc)repeated_scalar_container::RichCompare, // tp_richcompare
|
|
809
|
+
0, // tp_weaklistoffset
|
|
810
|
+
0, // tp_iter
|
|
811
|
+
0, // tp_iternext
|
|
812
|
+
repeated_scalar_container::Methods, // tp_methods
|
|
813
|
+
0, // tp_members
|
|
814
|
+
0, // tp_getset
|
|
815
|
+
0, // tp_base
|
|
816
|
+
0, // tp_dict
|
|
817
|
+
0, // tp_descr_get
|
|
818
|
+
0, // tp_descr_set
|
|
819
|
+
0, // tp_dictoffset
|
|
820
|
+
(initproc)repeated_scalar_container::Init, // tp_init
|
|
821
|
+
};
|
|
822
|
+
|
|
823
|
+
} // namespace python
|
|
824
|
+
} // namespace protobuf
|
|
825
|
+
} // namespace google
|