Pārlūkot izejas kodu

Initialize python-wheel branch

Bo Yang 7 gadi atpakaļ
vecāks
revīzija
99002ae47a
100 mainītis faili ar 0 papildinājumiem un 30273 dzēšanām
  1. 0 83
      .travis.yml
  2. 0 920
      BUILD
  3. 0 1833
      CHANGES.txt
  4. 0 102
      CONTRIBUTORS.txt
  5. 0 42
      LICENSE
  6. 0 1112
      Makefile.am
  7. 0 42
      Protobuf.podspec
  8. 0 88
      README.md
  9. 0 55
      WORKSPACE
  10. 0 36
      appveyor.bat
  11. 0 44
      appveyor.yml
  12. 0 53
      autogen.sh
  13. 0 247
      benchmarks/Makefile.am
  14. 0 145
      benchmarks/README.md
  15. 0 0
      benchmarks/__init__.py
  16. 0 63
      benchmarks/benchmarks.proto
  17. 0 254
      benchmarks/cpp_benchmark.cc
  18. 0 78
      benchmarks/datasets/google_message1/benchmark_message1_proto2.proto
  19. 0 78
      benchmarks/datasets/google_message1/benchmark_message1_proto3.proto
  20. BIN
      benchmarks/datasets/google_message1/dataset.google_message1_proto2.pb
  21. BIN
      benchmarks/datasets/google_message1/dataset.google_message1_proto3.pb
  22. 0 76
      benchmarks/datasets/google_message2/benchmark_message2.proto
  23. BIN
      benchmarks/datasets/google_message2/dataset.google_message2.pb
  24. 0 533
      benchmarks/datasets/google_message3/benchmark_message3.proto
  25. 0 1279
      benchmarks/datasets/google_message3/benchmark_message3_1.proto
  26. 0 498
      benchmarks/datasets/google_message3/benchmark_message3_2.proto
  27. 0 465
      benchmarks/datasets/google_message3/benchmark_message3_3.proto
  28. 0 490
      benchmarks/datasets/google_message3/benchmark_message3_4.proto
  29. 0 472
      benchmarks/datasets/google_message3/benchmark_message3_5.proto
  30. 0 453
      benchmarks/datasets/google_message3/benchmark_message3_6.proto
  31. 0 55
      benchmarks/datasets/google_message3/benchmark_message3_7.proto
  32. 0 1899
      benchmarks/datasets/google_message3/benchmark_message3_8.proto
  33. 0 453
      benchmarks/datasets/google_message4/benchmark_message4.proto
  34. 0 473
      benchmarks/datasets/google_message4/benchmark_message4_1.proto
  35. 0 291
      benchmarks/datasets/google_message4/benchmark_message4_2.proto
  36. 0 750
      benchmarks/datasets/google_message4/benchmark_message4_3.proto
  37. 0 5
      benchmarks/download_data.sh
  38. 0 138
      benchmarks/google_size.proto
  39. 0 95
      benchmarks/java/pom.xml
  40. 0 180
      benchmarks/java/src/main/java/com/google/protobuf/ProtoBench.java
  41. 0 197
      benchmarks/java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java
  42. 0 117
      benchmarks/py_benchmark.py
  43. 0 29
      benchmarks/python_benchmark_messages.cc
  44. 0 205
      cmake/CMakeLists.txt
  45. 0 336
      cmake/README.md
  46. 0 57
      cmake/examples.cmake
  47. 0 131
      cmake/extract_includes.bat.in
  48. 0 136
      cmake/install.cmake
  49. 0 66
      cmake/libprotobuf-lite.cmake
  50. 0 129
      cmake/libprotobuf.cmake
  51. 0 229
      cmake/libprotoc.cmake
  52. 0 60
      cmake/protobuf-config-version.cmake.in
  53. 0 121
      cmake/protobuf-config.cmake.in
  54. 0 11
      cmake/protobuf-lite.pc.cmake
  55. 0 189
      cmake/protobuf-module.cmake.in
  56. 0 7
      cmake/protobuf-options.cmake
  57. 0 11
      cmake/protobuf.pc.cmake
  58. 0 6
      cmake/protoc.cmake
  59. 0 227
      cmake/tests.cmake
  60. 0 23
      composer.json
  61. 0 221
      configure.ac
  62. 0 317
      conformance/ConformanceJava.java
  63. 0 125
      conformance/ConformanceJavaLite.java
  64. 0 371
      conformance/Makefile.am
  65. 0 73
      conformance/README.md
  66. 0 21
      conformance/autoload.php
  67. 0 119
      conformance/conformance.proto
  68. 0 220
      conformance/conformance_cpp.cc
  69. 0 182
      conformance/conformance_nodejs.js
  70. 0 188
      conformance/conformance_objc.m
  71. 0 105
      conformance/conformance_php.php
  72. 0 146
      conformance/conformance_python.py
  73. 0 131
      conformance/conformance_ruby.rb
  74. 0 2562
      conformance/conformance_test.cc
  75. 0 267
      conformance/conformance_test.h
  76. 0 326
      conformance/conformance_test_runner.cc
  77. 0 56
      conformance/failure_list_cpp.txt
  78. 0 2
      conformance/failure_list_csharp.txt
  79. 0 47
      conformance/failure_list_java.txt
  80. 0 13
      conformance/failure_list_js.txt
  81. 0 2
      conformance/failure_list_objc.txt
  82. 0 20
      conformance/failure_list_php.txt
  83. 0 182
      conformance/failure_list_php_c.txt
  84. 0 225
      conformance/failure_list_php_zts_c.txt
  85. 0 2
      conformance/failure_list_python-post26.txt
  86. 0 21
      conformance/failure_list_python.txt
  87. 0 54
      conformance/failure_list_python_cpp.txt
  88. 0 135
      conformance/failure_list_ruby.txt
  89. 0 2075
      conformance/third_party/jsoncpp/json.h
  90. 0 5192
      conformance/third_party/jsoncpp/jsoncpp.cpp
  91. 0 73
      conformance/update_failure_list.py
  92. 0 31
      csharp/.gitignore
  93. 0 148
      csharp/CHANGES.txt
  94. 0 37
      csharp/Google.Protobuf.Tools.nuspec
  95. 0 92
      csharp/README.md
  96. 0 10
      csharp/build_packages.bat
  97. 0 52
      csharp/build_tools.sh
  98. 0 17
      csharp/buildall.sh
  99. 0 126
      csharp/compatibility_tests/v3.0.0/protos/csharp/protos/unittest_issues.proto
  100. 0 120
      csharp/compatibility_tests/v3.0.0/protos/src/google/protobuf/map_unittest_proto3.proto

+ 0 - 83
.travis.yml

@@ -1,83 +0,0 @@
-# Everything is driven by the test.sh, so the language doesn't really
-# matter, it just controls the default install/script/etc. steps on
-# travis.
-language: cpp
-script: ./tests.sh $CONFIG
-
-# The test matrix is manually built to cover a mix of linux and macOS
-# hosted setups; this lets some extra settings be done specific to each
-# host/language instead of forcing common values on all the tests.
-matrix:
-  include:
-    # -----------------------------------------------------------------
-    # macOS hosted tests for Objective-C
-
-    - os: osx
-      env: CONFIG=objectivec_osx
-      osx_image: xcode9.1
-      language: objective-c
-    # iOS build log was starting to choke travis UI, so split to cover the
-    # Xcode Debug and Release Configurations independently.
-    - os: osx
-      env: CONFIG=objectivec_ios_debug
-      osx_image: xcode9.1
-      language: objective-c
-    - os: osx
-      env: CONFIG=objectivec_ios_release
-      osx_image: xcode9.1
-      language: objective-c
-    - os: osx
-      env: CONFIG=objectivec_cocoapods_integration
-      osx_image: xcode9.1
-      language: objective-c
-
-    # -----------------------------------------------------------------
-    # macOS hosted tests for other languages.
-
-    - os: osx
-      env: CONFIG=cpp
-    - os: osx
-      env: CONFIG=cpp_distcheck
-    - os: osx
-      env: CONFIG=javascript
-    - os: osx
-      env: CONFIG=python
-    - os: osx
-      env: CONFIG=python_cpp
-    - os: osx
-      env: CONFIG=php5.6_mac
-    - os: osx
-      env: CONFIG=php7.0_mac
-
-    # -----------------------------------------------------------------
-    # Linux hosted tests
-
-    # The dotnet environment requires Ubuntu 14.04 or 16.04. This
-    # configuration is effectively an "extra" one, outside the
-    # autogenerated matrix.
-    - os: linux
-      env: CONFIG=csharp
-      language: csharp
-      dist: trusty
-      sudo: required
-      dotnet: 1.0.4
-      mono: none
-    # This test is kept on travis because it doesn't play nicely with other
-    # tests on jenkins running in parallel.
-    - os: linux
-      env: CONFIG=cpp_distcheck
-    # The Java compatibility test currently only runs on Linux because it will
-    # fetch pre-built Linux protoc binaries in the test.
-    - os: linux
-      env: CONFIG=java_compatibility
-      sudo: required
-      dist: trusty
-    # The Python compatibility test currently only runs on Linux because it will
-    # fetch pre-built Linux protoc binaries in the test.
-    - os: linux
-      env: CONFIG=python_compatibility
-      sudo: required
-      dist: trusty
-
-notifications:
-  email: false

+ 0 - 920
BUILD

@@ -1,920 +0,0 @@
-# Bazel (http://bazel.io/) BUILD file for Protobuf.
-
-licenses(["notice"])
-
-exports_files(["LICENSE"])
-
-################################################################################
-# Protobuf Runtime Library
-################################################################################
-
-WIN_COPTS = [
-    "/DHAVE_PTHREAD",
-    "/wd4018", # -Wno-sign-compare
-    "/wd4514", # -Wno-unused-function
-]
-
-COPTS = select({
-    ":windows" : WIN_COPTS,
-    ":windows_msvc" : WIN_COPTS,
-    "//conditions:default": [
-        "-DHAVE_PTHREAD",
-        "-Wall",
-        "-Wwrite-strings",
-        "-Woverloaded-virtual",
-        "-Wno-sign-compare",
-        "-Wno-unused-function",
-        # Prevents ISO C++ const string assignment warnings for pyext sources.
-        "-Wno-writable-strings",
-    ],
-})
-
-config_setting(
-    name = "windows",
-    values = { "cpu": "x64_windows" },
-)
-
-config_setting(
-    name = "windows_msvc",
-    values = { "cpu": "x64_windows_msvc" },
-)
-
-config_setting(
-    name = "android",
-    values = {
-        "crosstool_top": "//external:android/crosstool",
-    },
-)
-
-# Android and Windows builds do not need to link in a separate pthread library.
-LINK_OPTS = select({
-    ":android": [],
-    ":windows": [],
-    ":windows_msvc": [],
-    "//conditions:default": ["-lpthread", "-lm"],
-})
-
-load(
-    ":protobuf.bzl",
-    "cc_proto_library",
-    "py_proto_library",
-    "internal_copied_filegroup",
-    "internal_gen_well_known_protos_java",
-    "internal_protobuf_py_tests",
-)
-
-cc_library(
-    name = "protobuf_lite",
-    srcs = [
-        # AUTOGEN(protobuf_lite_srcs)
-        "src/google/protobuf/arena.cc",
-        "src/google/protobuf/arenastring.cc",
-        "src/google/protobuf/extension_set.cc",
-        "src/google/protobuf/generated_message_table_driven_lite.cc",
-        "src/google/protobuf/generated_message_util.cc",
-        "src/google/protobuf/implicit_weak_message.cc",
-        "src/google/protobuf/io/coded_stream.cc",
-        "src/google/protobuf/io/zero_copy_stream.cc",
-        "src/google/protobuf/io/zero_copy_stream_impl_lite.cc",
-        "src/google/protobuf/message_lite.cc",
-        "src/google/protobuf/repeated_field.cc",
-        "src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc",
-        "src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc",
-        "src/google/protobuf/stubs/bytestream.cc",
-        "src/google/protobuf/stubs/common.cc",
-        "src/google/protobuf/stubs/int128.cc",
-        "src/google/protobuf/stubs/io_win32.cc",
-        "src/google/protobuf/stubs/once.cc",
-        "src/google/protobuf/stubs/status.cc",
-        "src/google/protobuf/stubs/statusor.cc",
-        "src/google/protobuf/stubs/stringpiece.cc",
-        "src/google/protobuf/stubs/stringprintf.cc",
-        "src/google/protobuf/stubs/structurally_valid.cc",
-        "src/google/protobuf/stubs/strutil.cc",
-        "src/google/protobuf/stubs/time.cc",
-        "src/google/protobuf/wire_format_lite.cc",
-    ],
-    hdrs = glob(["src/google/protobuf/**/*.h"]),
-    copts = COPTS,
-    includes = ["src/"],
-    linkopts = LINK_OPTS,
-    visibility = ["//visibility:public"],
-)
-
-cc_library(
-    name = "protobuf",
-    srcs = [
-        # AUTOGEN(protobuf_srcs)
-        "src/google/protobuf/any.cc",
-        "src/google/protobuf/any.pb.cc",
-        "src/google/protobuf/api.pb.cc",
-        "src/google/protobuf/compiler/importer.cc",
-        "src/google/protobuf/compiler/parser.cc",
-        "src/google/protobuf/descriptor.cc",
-        "src/google/protobuf/descriptor.pb.cc",
-        "src/google/protobuf/descriptor_database.cc",
-        "src/google/protobuf/duration.pb.cc",
-        "src/google/protobuf/dynamic_message.cc",
-        "src/google/protobuf/empty.pb.cc",
-        "src/google/protobuf/extension_set_heavy.cc",
-        "src/google/protobuf/field_mask.pb.cc",
-        "src/google/protobuf/generated_message_reflection.cc",
-        "src/google/protobuf/generated_message_table_driven.cc",
-        "src/google/protobuf/io/gzip_stream.cc",
-        "src/google/protobuf/io/printer.cc",
-        "src/google/protobuf/io/strtod.cc",
-        "src/google/protobuf/io/tokenizer.cc",
-        "src/google/protobuf/io/zero_copy_stream_impl.cc",
-        "src/google/protobuf/map_field.cc",
-        "src/google/protobuf/message.cc",
-        "src/google/protobuf/reflection_ops.cc",
-        "src/google/protobuf/service.cc",
-        "src/google/protobuf/source_context.pb.cc",
-        "src/google/protobuf/struct.pb.cc",
-        "src/google/protobuf/stubs/mathlimits.cc",
-        "src/google/protobuf/stubs/substitute.cc",
-        "src/google/protobuf/text_format.cc",
-        "src/google/protobuf/timestamp.pb.cc",
-        "src/google/protobuf/type.pb.cc",
-        "src/google/protobuf/unknown_field_set.cc",
-        "src/google/protobuf/util/delimited_message_util.cc",
-        "src/google/protobuf/util/field_comparator.cc",
-        "src/google/protobuf/util/field_mask_util.cc",
-        "src/google/protobuf/util/internal/datapiece.cc",
-        "src/google/protobuf/util/internal/default_value_objectwriter.cc",
-        "src/google/protobuf/util/internal/error_listener.cc",
-        "src/google/protobuf/util/internal/field_mask_utility.cc",
-        "src/google/protobuf/util/internal/json_escaping.cc",
-        "src/google/protobuf/util/internal/json_objectwriter.cc",
-        "src/google/protobuf/util/internal/json_stream_parser.cc",
-        "src/google/protobuf/util/internal/object_writer.cc",
-        "src/google/protobuf/util/internal/proto_writer.cc",
-        "src/google/protobuf/util/internal/protostream_objectsource.cc",
-        "src/google/protobuf/util/internal/protostream_objectwriter.cc",
-        "src/google/protobuf/util/internal/type_info.cc",
-        "src/google/protobuf/util/internal/type_info_test_helper.cc",
-        "src/google/protobuf/util/internal/utility.cc",
-        "src/google/protobuf/util/json_util.cc",
-        "src/google/protobuf/util/message_differencer.cc",
-        "src/google/protobuf/util/time_util.cc",
-        "src/google/protobuf/util/type_resolver_util.cc",
-        "src/google/protobuf/wire_format.cc",
-        "src/google/protobuf/wrappers.pb.cc",
-    ],
-    hdrs = glob(["src/**/*.h"]),
-    copts = COPTS,
-    includes = ["src/"],
-    linkopts = LINK_OPTS,
-    visibility = ["//visibility:public"],
-    deps = [":protobuf_lite"],
-)
-
-# This provides just the header files for use in projects that need to build
-# shared libraries for dynamic loading. This target is available until Bazel
-# adds native support for such use cases.
-# TODO(keveman): Remove this target once the support gets added to Bazel.
-cc_library(
-    name = "protobuf_headers",
-    hdrs = glob(["src/**/*.h"]),
-    includes = ["src/"],
-    visibility = ["//visibility:public"],
-)
-
-objc_library(
-    name = "protobuf_objc",
-    hdrs = ["objectivec/GPBProtocolBuffers.h"],
-    includes = ["objectivec"],
-    non_arc_srcs = ["objectivec/GPBProtocolBuffers.m"],
-    visibility = ["//visibility:public"],
-)
-
-# Map of all well known protos.
-# name => (include path, imports)
-WELL_KNOWN_PROTO_MAP = {
-    "any" : ("google/protobuf/any.proto", []),
-    "api" : ("google/protobuf/api.proto", ["source_context", "type"]),
-    "compiler_plugin" : ("google/protobuf/compiler/plugin.proto", ["descriptor"]),
-    "descriptor" : ("google/protobuf/descriptor.proto", []),
-    "duration" : ("google/protobuf/duration.proto", []),
-    "empty" : ("google/protobuf/empty.proto", []),
-    "field_mask" : ("google/protobuf/field_mask.proto", []),
-    "source_context" : ("google/protobuf/source_context.proto", []),
-    "struct" : ("google/protobuf/struct.proto", []),
-    "timestamp" : ("google/protobuf/timestamp.proto", []),
-    "type" : ("google/protobuf/type.proto", ["any", "source_context"]),
-    "wrappers" : ("google/protobuf/wrappers.proto", []),
-}
-
-RELATIVE_WELL_KNOWN_PROTOS = [proto[1][0] for proto in WELL_KNOWN_PROTO_MAP.items()]
-
-WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
-
-filegroup(
-    name = "well_known_protos",
-    srcs = WELL_KNOWN_PROTOS,
-    visibility = ["//visibility:public"],
-)
-
-cc_proto_library(
-    name = "cc_wkt_protos",
-    srcs = WELL_KNOWN_PROTOS,
-    include = "src",
-    default_runtime = ":protobuf",
-    internal_bootstrap_hack = 1,
-    protoc = ":protoc",
-    visibility = ["//visibility:public"],
-)
-
-################################################################################
-# Well Known Types Proto Library Rules
-#
-# These proto_library rules can be used with one of the language specific proto
-# library rules i.e. java_proto_library:
-#
-# java_proto_library(
-#   name = "any_java_proto",
-#   deps = ["@com_google_protobuf//:any_proto],
-# )
-################################################################################
-
-internal_copied_filegroup(
-    name = "_internal_wkt_protos",
-    srcs = WELL_KNOWN_PROTOS,
-    dest = "",
-    strip_prefix = "src",
-    visibility = ["//visibility:hidden"],
-)
-
-[proto_library(
-    name = proto[0] + "_proto",
-    srcs = [proto[1][0]],
-    deps = [dep + "_proto" for dep in proto[1][1]],
-    visibility = ["//visibility:public"],
-    ) for proto in WELL_KNOWN_PROTO_MAP.items()]
-
-################################################################################
-# Protocol Buffers Compiler
-################################################################################
-
-cc_binary(
-    name = "js_embed",
-    srcs = ["src/google/protobuf/compiler/js/embed.cc"],
-    visibility = ["//visibility:public"],
-)
-
-genrule(
-    name = "generate_js_well_known_types_embed",
-    srcs = [
-        "src/google/protobuf/compiler/js/well_known_types/any.js",
-        "src/google/protobuf/compiler/js/well_known_types/struct.js",
-        "src/google/protobuf/compiler/js/well_known_types/timestamp.js",
-    ],
-    outs = ["src/google/protobuf/compiler/js/well_known_types_embed.cc"],
-    cmd = "$(location :js_embed) $(SRCS) > $@",
-    tools = [":js_embed"],
-)
-
-cc_library(
-    name = "protoc_lib",
-    srcs = [
-        # AUTOGEN(protoc_lib_srcs)
-        "src/google/protobuf/compiler/code_generator.cc",
-        "src/google/protobuf/compiler/command_line_interface.cc",
-        "src/google/protobuf/compiler/cpp/cpp_enum.cc",
-        "src/google/protobuf/compiler/cpp/cpp_enum_field.cc",
-        "src/google/protobuf/compiler/cpp/cpp_extension.cc",
-        "src/google/protobuf/compiler/cpp/cpp_field.cc",
-        "src/google/protobuf/compiler/cpp/cpp_file.cc",
-        "src/google/protobuf/compiler/cpp/cpp_generator.cc",
-        "src/google/protobuf/compiler/cpp/cpp_helpers.cc",
-        "src/google/protobuf/compiler/cpp/cpp_map_field.cc",
-        "src/google/protobuf/compiler/cpp/cpp_message.cc",
-        "src/google/protobuf/compiler/cpp/cpp_message_field.cc",
-        "src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc",
-        "src/google/protobuf/compiler/cpp/cpp_primitive_field.cc",
-        "src/google/protobuf/compiler/cpp/cpp_service.cc",
-        "src/google/protobuf/compiler/cpp/cpp_string_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_doc_comment.cc",
-        "src/google/protobuf/compiler/csharp/csharp_enum.cc",
-        "src/google/protobuf/compiler/csharp/csharp_enum_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_field_base.cc",
-        "src/google/protobuf/compiler/csharp/csharp_generator.cc",
-        "src/google/protobuf/compiler/csharp/csharp_helpers.cc",
-        "src/google/protobuf/compiler/csharp/csharp_map_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_message.cc",
-        "src/google/protobuf/compiler/csharp/csharp_message_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_primitive_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_reflection_class.cc",
-        "src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc",
-        "src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc",
-        "src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc",
-        "src/google/protobuf/compiler/java/java_context.cc",
-        "src/google/protobuf/compiler/java/java_doc_comment.cc",
-        "src/google/protobuf/compiler/java/java_enum.cc",
-        "src/google/protobuf/compiler/java/java_enum_field.cc",
-        "src/google/protobuf/compiler/java/java_enum_field_lite.cc",
-        "src/google/protobuf/compiler/java/java_enum_lite.cc",
-        "src/google/protobuf/compiler/java/java_extension.cc",
-        "src/google/protobuf/compiler/java/java_extension_lite.cc",
-        "src/google/protobuf/compiler/java/java_field.cc",
-        "src/google/protobuf/compiler/java/java_file.cc",
-        "src/google/protobuf/compiler/java/java_generator.cc",
-        "src/google/protobuf/compiler/java/java_generator_factory.cc",
-        "src/google/protobuf/compiler/java/java_helpers.cc",
-        "src/google/protobuf/compiler/java/java_lazy_message_field.cc",
-        "src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc",
-        "src/google/protobuf/compiler/java/java_map_field.cc",
-        "src/google/protobuf/compiler/java/java_map_field_lite.cc",
-        "src/google/protobuf/compiler/java/java_message.cc",
-        "src/google/protobuf/compiler/java/java_message_builder.cc",
-        "src/google/protobuf/compiler/java/java_message_builder_lite.cc",
-        "src/google/protobuf/compiler/java/java_message_field.cc",
-        "src/google/protobuf/compiler/java/java_message_field_lite.cc",
-        "src/google/protobuf/compiler/java/java_message_lite.cc",
-        "src/google/protobuf/compiler/java/java_name_resolver.cc",
-        "src/google/protobuf/compiler/java/java_primitive_field.cc",
-        "src/google/protobuf/compiler/java/java_primitive_field_lite.cc",
-        "src/google/protobuf/compiler/java/java_service.cc",
-        "src/google/protobuf/compiler/java/java_shared_code_generator.cc",
-        "src/google/protobuf/compiler/java/java_string_field.cc",
-        "src/google/protobuf/compiler/java/java_string_field_lite.cc",
-        "src/google/protobuf/compiler/javanano/javanano_enum.cc",
-        "src/google/protobuf/compiler/javanano/javanano_enum_field.cc",
-        "src/google/protobuf/compiler/javanano/javanano_extension.cc",
-        "src/google/protobuf/compiler/javanano/javanano_field.cc",
-        "src/google/protobuf/compiler/javanano/javanano_file.cc",
-        "src/google/protobuf/compiler/javanano/javanano_generator.cc",
-        "src/google/protobuf/compiler/javanano/javanano_helpers.cc",
-        "src/google/protobuf/compiler/javanano/javanano_map_field.cc",
-        "src/google/protobuf/compiler/javanano/javanano_message.cc",
-        "src/google/protobuf/compiler/javanano/javanano_message_field.cc",
-        "src/google/protobuf/compiler/javanano/javanano_primitive_field.cc",
-        "src/google/protobuf/compiler/js/js_generator.cc",
-        "src/google/protobuf/compiler/js/well_known_types_embed.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_enum.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_extension.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_field.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_file.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_generator.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_helpers.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_map_field.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_message.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc",
-        "src/google/protobuf/compiler/php/php_generator.cc",
-        "src/google/protobuf/compiler/plugin.cc",
-        "src/google/protobuf/compiler/plugin.pb.cc",
-        "src/google/protobuf/compiler/python/python_generator.cc",
-        "src/google/protobuf/compiler/ruby/ruby_generator.cc",
-        "src/google/protobuf/compiler/subprocess.cc",
-        "src/google/protobuf/compiler/zip_writer.cc",
-    ],
-    copts = COPTS,
-    includes = ["src/"],
-    linkopts = LINK_OPTS,
-    visibility = ["//visibility:public"],
-    deps = [":protobuf"],
-)
-
-cc_binary(
-    name = "protoc",
-    srcs = ["src/google/protobuf/compiler/main.cc"],
-    linkopts = LINK_OPTS,
-    visibility = ["//visibility:public"],
-    deps = [":protoc_lib"],
-)
-
-################################################################################
-# Tests
-################################################################################
-
-RELATIVE_LITE_TEST_PROTOS = [
-    # AUTOGEN(lite_test_protos)
-    "google/protobuf/map_lite_unittest.proto",
-    "google/protobuf/unittest_import_lite.proto",
-    "google/protobuf/unittest_import_public_lite.proto",
-    "google/protobuf/unittest_lite.proto",
-    "google/protobuf/unittest_no_arena_lite.proto",
-]
-
-LITE_TEST_PROTOS = ["src/" + s for s in RELATIVE_LITE_TEST_PROTOS]
-
-RELATIVE_TEST_PROTOS = [
-    # AUTOGEN(test_protos)
-    "google/protobuf/any_test.proto",
-    "google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto",
-    "google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto",
-    "google/protobuf/map_proto2_unittest.proto",
-    "google/protobuf/map_unittest.proto",
-    "google/protobuf/unittest.proto",
-    "google/protobuf/unittest_arena.proto",
-    "google/protobuf/unittest_custom_options.proto",
-    "google/protobuf/unittest_drop_unknown_fields.proto",
-    "google/protobuf/unittest_embed_optimize_for.proto",
-    "google/protobuf/unittest_empty.proto",
-    "google/protobuf/unittest_enormous_descriptor.proto",
-    "google/protobuf/unittest_import.proto",
-    "google/protobuf/unittest_import_public.proto",
-    "google/protobuf/unittest_lazy_dependencies.proto",
-    "google/protobuf/unittest_lazy_dependencies_custom_option.proto",
-    "google/protobuf/unittest_lazy_dependencies_enum.proto",
-    "google/protobuf/unittest_lite_imports_nonlite.proto",
-    "google/protobuf/unittest_mset.proto",
-    "google/protobuf/unittest_mset_wire_format.proto",
-    "google/protobuf/unittest_no_arena.proto",
-    "google/protobuf/unittest_no_arena_import.proto",
-    "google/protobuf/unittest_no_field_presence.proto",
-    "google/protobuf/unittest_no_generic_services.proto",
-    "google/protobuf/unittest_optimize_for.proto",
-    "google/protobuf/unittest_preserve_unknown_enum.proto",
-    "google/protobuf/unittest_preserve_unknown_enum2.proto",
-    "google/protobuf/unittest_proto3_arena.proto",
-    "google/protobuf/unittest_proto3_arena_lite.proto",
-    "google/protobuf/unittest_proto3_lite.proto",
-    "google/protobuf/unittest_well_known_types.proto",
-    "google/protobuf/util/internal/testdata/anys.proto",
-    "google/protobuf/util/internal/testdata/books.proto",
-    "google/protobuf/util/internal/testdata/default_value.proto",
-    "google/protobuf/util/internal/testdata/default_value_test.proto",
-    "google/protobuf/util/internal/testdata/field_mask.proto",
-    "google/protobuf/util/internal/testdata/maps.proto",
-    "google/protobuf/util/internal/testdata/oneofs.proto",
-    "google/protobuf/util/internal/testdata/proto3.proto",
-    "google/protobuf/util/internal/testdata/struct.proto",
-    "google/protobuf/util/internal/testdata/timestamp_duration.proto",
-    "google/protobuf/util/internal/testdata/wrappers.proto",
-    "google/protobuf/util/json_format_proto3.proto",
-    "google/protobuf/util/message_differencer_unittest.proto",
-]
-
-TEST_PROTOS = ["src/" + s for s in RELATIVE_TEST_PROTOS]
-
-cc_proto_library(
-    name = "cc_test_protos",
-    srcs = LITE_TEST_PROTOS + TEST_PROTOS,
-    include = "src",
-    default_runtime = ":protobuf",
-    protoc = ":protoc",
-    deps = [":cc_wkt_protos"],
-)
-
-COMMON_TEST_SRCS = [
-    # AUTOGEN(common_test_srcs)
-    "src/google/protobuf/arena_test_util.cc",
-    "src/google/protobuf/map_test_util.cc",
-    "src/google/protobuf/test_util.cc",
-    "src/google/protobuf/testing/file.cc",
-    "src/google/protobuf/testing/googletest.cc",
-]
-
-cc_binary(
-    name = "test_plugin",
-    srcs = [
-        # AUTOGEN(test_plugin_srcs)
-        "src/google/protobuf/compiler/mock_code_generator.cc",
-        "src/google/protobuf/compiler/test_plugin.cc",
-        "src/google/protobuf/testing/file.cc",
-    ],
-    deps = [
-        ":protobuf",
-        ":protoc_lib",
-        "//external:gtest",
-    ],
-)
-
-cc_test(
-    name = "win32_test",
-    srcs = ["src/google/protobuf/stubs/io_win32_unittest.cc"],
-    deps = [
-        ":protobuf_lite",
-        "//external:gtest_main",
-    ],
-    tags = ["manual", "windows"],
-)
-
-cc_test(
-    name = "protobuf_test",
-    srcs = COMMON_TEST_SRCS + [
-        # AUTOGEN(test_srcs)
-        "src/google/protobuf/any_test.cc",
-        "src/google/protobuf/arena_unittest.cc",
-        "src/google/protobuf/arenastring_unittest.cc",
-        "src/google/protobuf/compiler/annotation_test_util.cc",
-        "src/google/protobuf/compiler/command_line_interface_unittest.cc",
-        "src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc",
-        "src/google/protobuf/compiler/cpp/cpp_move_unittest.cc",
-        "src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc",
-        "src/google/protobuf/compiler/cpp/cpp_unittest.cc",
-        "src/google/protobuf/compiler/cpp/metadata_test.cc",
-        "src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc",
-        "src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc",
-        "src/google/protobuf/compiler/importer_unittest.cc",
-        "src/google/protobuf/compiler/java/java_doc_comment_unittest.cc",
-        "src/google/protobuf/compiler/java/java_plugin_unittest.cc",
-        "src/google/protobuf/compiler/mock_code_generator.cc",
-        "src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc",
-        "src/google/protobuf/compiler/parser_unittest.cc",
-        "src/google/protobuf/compiler/python/python_plugin_unittest.cc",
-        "src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc",
-        "src/google/protobuf/descriptor_database_unittest.cc",
-        "src/google/protobuf/descriptor_unittest.cc",
-        "src/google/protobuf/drop_unknown_fields_test.cc",
-        "src/google/protobuf/dynamic_message_unittest.cc",
-        "src/google/protobuf/extension_set_unittest.cc",
-        "src/google/protobuf/generated_message_reflection_unittest.cc",
-        "src/google/protobuf/io/coded_stream_unittest.cc",
-        "src/google/protobuf/io/printer_unittest.cc",
-        "src/google/protobuf/io/tokenizer_unittest.cc",
-        "src/google/protobuf/io/zero_copy_stream_unittest.cc",
-        "src/google/protobuf/map_field_test.cc",
-        "src/google/protobuf/map_test.cc",
-        "src/google/protobuf/message_unittest.cc",
-        "src/google/protobuf/no_field_presence_test.cc",
-        "src/google/protobuf/preserve_unknown_enum_test.cc",
-        "src/google/protobuf/proto3_arena_lite_unittest.cc",
-        "src/google/protobuf/proto3_arena_unittest.cc",
-        "src/google/protobuf/proto3_lite_unittest.cc",
-        "src/google/protobuf/reflection_ops_unittest.cc",
-        "src/google/protobuf/repeated_field_reflection_unittest.cc",
-        "src/google/protobuf/repeated_field_unittest.cc",
-        "src/google/protobuf/stubs/bytestream_unittest.cc",
-        "src/google/protobuf/stubs/common_unittest.cc",
-        "src/google/protobuf/stubs/int128_unittest.cc",
-        "src/google/protobuf/stubs/io_win32_unittest.cc",
-        "src/google/protobuf/stubs/once_unittest.cc",
-        "src/google/protobuf/stubs/status_test.cc",
-        "src/google/protobuf/stubs/statusor_test.cc",
-        "src/google/protobuf/stubs/stringpiece_unittest.cc",
-        "src/google/protobuf/stubs/stringprintf_unittest.cc",
-        "src/google/protobuf/stubs/structurally_valid_unittest.cc",
-        "src/google/protobuf/stubs/strutil_unittest.cc",
-        "src/google/protobuf/stubs/template_util_unittest.cc",
-        "src/google/protobuf/stubs/time_test.cc",
-        "src/google/protobuf/stubs/type_traits_unittest.cc",
-        "src/google/protobuf/text_format_unittest.cc",
-        "src/google/protobuf/unknown_field_set_unittest.cc",
-        "src/google/protobuf/util/delimited_message_util_test.cc",
-        "src/google/protobuf/util/field_comparator_test.cc",
-        "src/google/protobuf/util/field_mask_util_test.cc",
-        "src/google/protobuf/util/internal/default_value_objectwriter_test.cc",
-        "src/google/protobuf/util/internal/json_objectwriter_test.cc",
-        "src/google/protobuf/util/internal/json_stream_parser_test.cc",
-        "src/google/protobuf/util/internal/protostream_objectsource_test.cc",
-        "src/google/protobuf/util/internal/protostream_objectwriter_test.cc",
-        "src/google/protobuf/util/internal/type_info_test_helper.cc",
-        "src/google/protobuf/util/json_util_test.cc",
-        "src/google/protobuf/util/message_differencer_unittest.cc",
-        "src/google/protobuf/util/time_util_test.cc",
-        "src/google/protobuf/util/type_resolver_util_test.cc",
-        "src/google/protobuf/well_known_types_unittest.cc",
-        "src/google/protobuf/wire_format_unittest.cc",
-    ],
-    copts = COPTS,
-    data = [
-        ":test_plugin",
-    ] + glob([
-        "src/google/protobuf/**/*",
-        # Files for csharp_bootstrap_unittest.cc.
-        "conformance/**/*",
-        "csharp/src/**/*",
-    ]),
-    includes = [
-        "src/",
-    ],
-    linkopts = LINK_OPTS,
-    deps = [
-        ":cc_test_protos",
-        ":protobuf",
-        ":protoc_lib",
-        "//external:gtest_main",
-    ],
-)
-
-################################################################################
-# Java support
-################################################################################
-internal_gen_well_known_protos_java(
-    srcs = WELL_KNOWN_PROTOS,
-)
-
-java_library(
-    name = "protobuf_java",
-    srcs = glob([
-        "java/core/src/main/java/com/google/protobuf/*.java",
-    ]) + [
-        ":gen_well_known_protos_java",
-    ],
-    javacopts = ["-source 6", "-target 6"],
-    visibility = ["//visibility:public"],
-)
-
-java_library(
-    name = "protobuf_java_util",
-    srcs = glob([
-        "java/util/src/main/java/com/google/protobuf/util/*.java",
-    ]),
-    javacopts = ["-source 6", "-target 6"],
-    visibility = ["//visibility:public"],
-    deps = [
-        "protobuf_java",
-        "//external:gson",
-        "//external:guava",
-    ],
-)
-
-################################################################################
-# Python support
-################################################################################
-
-py_library(
-    name = "python_srcs",
-    srcs = glob(
-        [
-            "python/google/protobuf/*.py",
-            "python/google/protobuf/**/*.py",
-        ],
-        exclude = [
-            "python/google/protobuf/__init__.py",
-            "python/google/protobuf/**/__init__.py",
-            "python/google/protobuf/internal/*_test.py",
-            "python/google/protobuf/internal/test_util.py",
-        ],
-    ),
-    imports = ["python"],
-    srcs_version = "PY2AND3",
-)
-
-cc_binary(
-    name = "python/google/protobuf/internal/_api_implementation.so",
-    srcs = ["python/google/protobuf/internal/api_implementation.cc"],
-    copts = COPTS + [
-        "-DPYTHON_PROTO2_CPP_IMPL_V2",
-    ],
-    linkshared = 1,
-    linkstatic = 1,
-    deps = select({
-        "//conditions:default": [],
-        ":use_fast_cpp_protos": ["//external:python_headers"],
-    }),
-)
-
-cc_binary(
-    name = "python/google/protobuf/pyext/_message.so",
-    srcs = glob([
-        "python/google/protobuf/pyext/*.cc",
-        "python/google/protobuf/pyext/*.h",
-    ]),
-    copts = COPTS + [
-        "-DGOOGLE_PROTOBUF_HAS_ONEOF=1",
-    ] + select({
-        "//conditions:default": [],
-        ":allow_oversize_protos": ["-DPROTOBUF_PYTHON_ALLOW_OVERSIZE_PROTOS=1"],
-    }),
-    includes = [
-        "python/",
-        "src/",
-    ],
-    linkshared = 1,
-    linkstatic = 1,
-    deps = [
-        ":protobuf",
-    ] + select({
-        "//conditions:default": [],
-        ":use_fast_cpp_protos": ["//external:python_headers"],
-    }),
-)
-
-config_setting(
-    name = "use_fast_cpp_protos",
-    values = {
-        "define": "use_fast_cpp_protos=true",
-    },
-)
-
-config_setting(
-    name = "allow_oversize_protos",
-    values = {
-        "define": "allow_oversize_protos=true",
-    },
-)
-
-# Copy the builtin proto files from src/google/protobuf to
-# python/google/protobuf. This way, the generated Python sources will be in the
-# same directory as the Python runtime sources. This is necessary for the
-# modules to be imported correctly since they are all part of the same Python
-# package.
-internal_copied_filegroup(
-    name = "protos_python",
-    srcs = WELL_KNOWN_PROTOS,
-    dest = "python",
-    strip_prefix = "src",
-)
-
-# TODO(dzc): Remove this once py_proto_library can have labels in srcs, in
-# which case we can simply add :protos_python in srcs.
-COPIED_WELL_KNOWN_PROTOS = ["python/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
-
-py_proto_library(
-    name = "protobuf_python",
-    srcs = COPIED_WELL_KNOWN_PROTOS,
-    include = "python",
-    data = select({
-        "//conditions:default": [],
-        ":use_fast_cpp_protos": [
-            ":python/google/protobuf/internal/_api_implementation.so",
-            ":python/google/protobuf/pyext/_message.so",
-        ],
-    }),
-    default_runtime = "",
-    protoc = ":protoc",
-    py_libs = [
-        ":python_srcs",
-        "//external:six",
-    ],
-    py_extra_srcs = glob(["python/**/__init__.py"]),
-    srcs_version = "PY2AND3",
-    visibility = ["//visibility:public"],
-)
-
-# Copy the test proto files from src/google/protobuf to
-# python/google/protobuf. This way, the generated Python sources will be in the
-# same directory as the Python runtime sources. This is necessary for the
-# modules to be imported correctly by the tests since they are all part of the
-# same Python package.
-internal_copied_filegroup(
-    name = "protos_python_test",
-    srcs = LITE_TEST_PROTOS + TEST_PROTOS,
-    dest = "python",
-    strip_prefix = "src",
-)
-
-# TODO(dzc): Remove this once py_proto_library can have labels in srcs, in
-# which case we can simply add :protos_python_test in srcs.
-COPIED_LITE_TEST_PROTOS = ["python/" + s for s in RELATIVE_LITE_TEST_PROTOS]
-
-COPIED_TEST_PROTOS = ["python/" + s for s in RELATIVE_TEST_PROTOS]
-
-py_proto_library(
-    name = "python_common_test_protos",
-    srcs = COPIED_LITE_TEST_PROTOS + COPIED_TEST_PROTOS,
-    include = "python",
-    default_runtime = "",
-    protoc = ":protoc",
-    srcs_version = "PY2AND3",
-    deps = [":protobuf_python"],
-)
-
-py_proto_library(
-    name = "python_specific_test_protos",
-    srcs = glob([
-        "python/google/protobuf/internal/*.proto",
-        "python/google/protobuf/internal/import_test_package/*.proto",
-    ]),
-    include = "python",
-    default_runtime = ":protobuf_python",
-    protoc = ":protoc",
-    srcs_version = "PY2AND3",
-    deps = [":python_common_test_protos"],
-)
-
-py_library(
-    name = "python_tests",
-    srcs = glob(
-        [
-            "python/google/protobuf/internal/*_test.py",
-            "python/google/protobuf/internal/test_util.py",
-            "python/google/protobuf/internal/import_test_package/__init__.py",
-        ],
-    ),
-    imports = ["python"],
-    srcs_version = "PY2AND3",
-    deps = [
-        ":protobuf_python",
-        ":python_common_test_protos",
-        ":python_specific_test_protos",
-    ],
-)
-
-internal_protobuf_py_tests(
-    name = "python_tests_batch",
-    data = glob([
-        "src/google/protobuf/**/*",
-    ]),
-    modules = [
-        "descriptor_database_test",
-        "descriptor_pool_test",
-        "descriptor_test",
-        "generator_test",
-        "json_format_test",
-        "message_factory_test",
-        "message_test",
-        "proto_builder_test",
-        "reflection_test",
-        "service_reflection_test",
-        "symbol_database_test",
-        "text_encoding_test",
-        "text_format_test",
-        "unknown_fields_test",
-        "wire_format_test",
-    ],
-    deps = [":python_tests"],
-)
-
-proto_lang_toolchain(
-    name = "cc_toolchain",
-    command_line = "--cpp_out=$(OUT)",
-    runtime = ":protobuf",
-    visibility = ["//visibility:public"],
-)
-
-proto_lang_toolchain(
-    name = "java_toolchain",
-    command_line = "--java_out=$(OUT)",
-    runtime = ":protobuf_java",
-    visibility = ["//visibility:public"],
-)
-
-OBJC_HDRS = [
-    "objectivec/GPBArray.h",
-    "objectivec/GPBBootstrap.h",
-    "objectivec/GPBCodedInputStream.h",
-    "objectivec/GPBCodedOutputStream.h",
-    "objectivec/GPBDescriptor.h",
-    "objectivec/GPBDictionary.h",
-    "objectivec/GPBExtensionInternals.h",
-    "objectivec/GPBExtensionRegistry.h",
-    "objectivec/GPBMessage.h",
-    "objectivec/GPBProtocolBuffers.h",
-    "objectivec/GPBProtocolBuffers_RuntimeSupport.h",
-    "objectivec/GPBRootObject.h",
-    "objectivec/GPBRuntimeTypes.h",
-    "objectivec/GPBUnknownField.h",
-    "objectivec/GPBUnknownFieldSet.h",
-    "objectivec/GPBUtilities.h",
-    "objectivec/GPBWellKnownTypes.h",
-    "objectivec/GPBWireFormat.h",
-    "objectivec/google/protobuf/Any.pbobjc.h",
-    "objectivec/google/protobuf/Api.pbobjc.h",
-    "objectivec/google/protobuf/Duration.pbobjc.h",
-    "objectivec/google/protobuf/Empty.pbobjc.h",
-    "objectivec/google/protobuf/FieldMask.pbobjc.h",
-    "objectivec/google/protobuf/SourceContext.pbobjc.h",
-    "objectivec/google/protobuf/Struct.pbobjc.h",
-    "objectivec/google/protobuf/Timestamp.pbobjc.h",
-    "objectivec/google/protobuf/Type.pbobjc.h",
-    "objectivec/google/protobuf/Wrappers.pbobjc.h",
-]
-
-OBJC_PRIVATE_HDRS = [
-    "objectivec/GPBArray_PackagePrivate.h",
-    "objectivec/GPBCodedInputStream_PackagePrivate.h",
-    "objectivec/GPBCodedOutputStream_PackagePrivate.h",
-    "objectivec/GPBDescriptor_PackagePrivate.h",
-    "objectivec/GPBDictionary_PackagePrivate.h",
-    "objectivec/GPBMessage_PackagePrivate.h",
-    "objectivec/GPBRootObject_PackagePrivate.h",
-    "objectivec/GPBUnknownFieldSet_PackagePrivate.h",
-    "objectivec/GPBUnknownField_PackagePrivate.h",
-    "objectivec/GPBUtilities_PackagePrivate.h",
-]
-
-OBJC_SRCS = [
-    "objectivec/GPBArray.m",
-    "objectivec/GPBCodedInputStream.m",
-    "objectivec/GPBCodedOutputStream.m",
-    "objectivec/GPBDescriptor.m",
-    "objectivec/GPBDictionary.m",
-    "objectivec/GPBExtensionInternals.m",
-    "objectivec/GPBExtensionRegistry.m",
-    "objectivec/GPBMessage.m",
-    "objectivec/GPBRootObject.m",
-    "objectivec/GPBUnknownField.m",
-    "objectivec/GPBUnknownFieldSet.m",
-    "objectivec/GPBUtilities.m",
-    "objectivec/GPBWellKnownTypes.m",
-    "objectivec/GPBWireFormat.m",
-    "objectivec/google/protobuf/Any.pbobjc.m",
-    "objectivec/google/protobuf/Api.pbobjc.m",
-    "objectivec/google/protobuf/Duration.pbobjc.m",
-    "objectivec/google/protobuf/Empty.pbobjc.m",
-    "objectivec/google/protobuf/FieldMask.pbobjc.m",
-    "objectivec/google/protobuf/SourceContext.pbobjc.m",
-    "objectivec/google/protobuf/Struct.pbobjc.m",
-    "objectivec/google/protobuf/Timestamp.pbobjc.m",
-    "objectivec/google/protobuf/Type.pbobjc.m",
-    "objectivec/google/protobuf/Wrappers.pbobjc.m",
-]
-
-objc_library(
-    name = "objectivec",
-    hdrs = OBJC_HDRS + OBJC_PRIVATE_HDRS,
-    includes = [
-        "objectivec",
-    ],
-    non_arc_srcs = OBJC_SRCS,
-    visibility = ["//visibility:public"],
-)

+ 0 - 1833
CHANGES.txt

@@ -1,1833 +0,0 @@
-2017-12-20 version 3.5.1 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
-  Planned Future Changes
-  * Make C++ implementation C++11 only: we plan to require C++11 to build
-    protobuf code starting from 3.6.0 release. Please join this github issue:
-    https://github.com/google/protobuf/issues/2780 to provide your feedback.
-
-  protoc
-  * Fixed a bug introduced in 3.5.0 and protoc in Windows now accepts non-ascii
-    characters in paths again.
-
-  C++
-  * Removed several usages of C++11 features in the code base.
-  * Fixed some compiler warnings.
-
-  PHP
-  * Fixed memory leak in C-extension implementation.
-  * Added discardUnknokwnFields API.
-  * Removed duplicatd typedef in C-extension headers.
-  * Avoided calling private php methods (timelib_update_ts).
-  * Fixed Any.php to use fully-qualified name for DescriptorPool.
-
-  Ruby
-  * Added Google_Protobuf_discard_unknown for discarding unknown fields in
-    messages.
-
-  C#
-  * Unknown fields are now preserved by default.
-  * Floating point values are now bitwise compared, affecting message equality
-    check and Contains() API in map and repeated fields.
-
-
-2017-11-13 version 3.5.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
-  Planned Future Changes
-  * Make C++ implementation C++11 only: we plan to require C++11 to build
-    protobuf code starting from 3.6.0 release. Please join this github issue:
-    https://github.com/google/protobuf/issues/2780 to provide your feedback.
-
-  General
-  * Unknown fields are now preserved in proto3 for most of the language
-    implementations for proto3 by default. See the per-language section for
-    details.
-  * reserve keyword are now supported in enums
-
-  C++
-  * Proto3 messages are now preserving unknown fields by default. If you rely on
-    unknowns fields being dropped. Please use DiscardUnknownFields() explicitly.
-  * Deprecated the unsafe_arena_release_* and unsafe_arena_add_allocated_*
-    methods for string fields.
-  * Added move constructor and move assignment to RepeatedField,
-    RepeatedPtrField and google::protobuf::Any.
-  * Added perfect forwarding in Arena::CreateMessage
-  * In-progress experimental support for implicit weak fields with lite protos.
-    This feature allows the linker to strip out more unused messages and reduce
-    binary size.
-  * Various performance optimizations.
-
-  Java
-  * Proto3 messages are now preserving unknown fields by default. If you’d like
-    to drop unknown fields, please use the DiscardUnknownFieldsParser API. For
-    example:
-      Parser<Foo> parser = DiscardUnknownFieldsParser.wrap(Foo.parser());
-      Foo foo = parser.parseFrom(input);
-  * Added a new CodedInputStream decoder for Iterable<ByteBuffer> with direct
-    ByteBuffers.
-  * TextFormat now prints unknown length-delimited fields as messages if
-    possible.
-  * FieldMaskUtil.merge() no longer creates unnecessary empty messages when a
-    message field is unset in both source message and destination message.
-  * Various performance optimizations.
-
-  Python
-  * Proto3 messages are now preserving unknown fields by default. Use
-    message.DiscardUnknownFields() to drop unknown fields.
-  * Add FieldDescriptor.file in generated code.
-  * Add descriptor pool FindOneofByName in pure python.
-  * Change unknown enum values into unknown field set .
-  * Add more Python dict/list compatibility for Struct/ListValue.
-  * Add utf-8 support for text_format.Merge()/Parse().
-  * Support numeric unknown enum values for proto3 JSON format.
-  * Add warning for Unexpected end-group tag in cpp extension.
-
-  PHP
-  * Proto3 messages are now preserving unknown fields.
-  * Provide well known type messages in runtime.
-  * Add prefix ‘PB’ to generated class of reserved names.
-  * Fixed all conformance tests for encode/decode json in php runtime. C
-    extension needs more work.
-
-  Objective-C
-  * Fixed some issues around copying of messages with unknown fields and then
-    mutating the unknown fields in the copy.
-
-  C#
-  * Added unknown field support in JsonParser.
-  * Fixed oneof message field merge.
-  * Simplify parsing messages from array slices.
-
-  Ruby
-  * Unknown fields are now preserved by default.
-  * Fixed several bugs for segment fault.
-
-  Javascript
-  * Decoder can handle both paced and unpacked data no matter how the proto is
-    defined.
-  * Decoder now accept long varint for 32 bit integers.
-
-
-2017-08-14 version 3.4.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
-  Planned Future Changes
-  * There are some changes that are not included in this release but are planned
-    for the near future
-      - Preserve unknown fields in proto3: We are going to bring unknown fields
-        back into proto3. In this release, some languages start to support
-        preserving unknown fields in proto3, controlled by flags/options. Some
-        languages also introduce explicit APIs to drop unknown fields for
-        migration. Please read the change log sections by languages for details.
-        For general timeline and plan:
-
-          https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view
-
-        For issues and discussions:
-
-          https://github.com/google/protobuf/issues/272
-
-      - Make C++ implementation C++11 only: we plan to require C++11 to build
-        protobuf code starting from 3.5.0 or 3.6.0 release, after unknown fields
-        semantic changes are finished. Please join this
-        github issue:
-
-          https://github.com/google/protobuf/issues/2780
-
-        to provide your feedback.
-
-  General
-  * Extension ranges now accept options and are customizable.
-  * "reserve" keyword now supports “max” in field number ranges,
-    e.g.  reserve 1000 to max;
-
-  C++
-  * Proto3 messages are now able to preserve unknown fields. The default
-    behavior is still to drop unknowns, which will be flipped in a future
-    release. If you rely on unknowns fields being dropped. Please use
-    Message::DiscardUnknownFields() explicitly.
-  * Packable proto3 fields are now packed by default in serialization.
-  * Following C++11 features are introduced when C++11 is available:
-      - move-constructor and move-assignment are introduced to messages
-      - Repeated fields constructor now takes std::initializer_list
-      - rvalue setters are introduced for string fields
-  * Experimental Table-Driven parsing and serialization available to test. To
-    enable it, pass in table_driven_parsing table_driven_serialization protoc
-    generator flags for C++
-
-      $ protoc --cpp_out=table_driven_parsing,table_driven_serialization:./ \
-        test.proto
-
-  * lite generator parameter supported by the generator. Once set, all generated
-    files, use lite runtime regardless of the optimizer_for setting in the
-    .proto file.
-  * Various optimizations to make C++ code more performant on PowerPC platform
-  * Fixed maps data corruption when the maps are modified by both reflection API
-    and generated API.
-  * Deterministic serialization on maps reflection now uses stable sort.
-  * file() accessors are introduced to various *Descriptor classes to make
-    writing template function easier.
-  * ByteSize() and SpaceUsed() are deprecated.Use ByteSizeLong() and
-    SpaceUsedLong() instead
-  * Consistent hash function is used for maps in DEBUG and NDEBUG build.
-  * "using namespace std" is removed from stubs/common.h
-  * Various performance optimizations and bug fixes
-
-  Java
-  * Introduced new parser API DiscardUnknownFieldsParser in preparation of
-    proto3 unknown fields preservation change. Users who want to drop unknown
-    fields should migrate to use this new parser API. For example:
-
-      Parser<Foo> parser = DiscardUnknownFieldsParser.wrap(Foo.parser());
-      Foo foo = parser.parseFrom(input);
-
-  * Introduced new TextFormat API printUnicodeFieldValue() that prints field
-    value without escaping unicode characters.
-  * Added Durations.compare(Duration, Duration) and
-    Timestamps.compare(Timestamp, Timestamp).
-  * JsonFormat now accepts base64url encoded bytes fields.
-  * Optimized CodedInputStream to do less copies when parsing large bytes
-    fields.
-  * Optimized TextFormat to allocate less memory when printing.
-
-  Python
-  * SerializeToString API is changed to SerializeToString(self, **kwargs),
-    deterministic parameter is accepted for deterministic serialization.
-  * Added sort_keys parameter in json format to make the output deterministic.
-  * Added indent parameter in json format.
-  * Added extension support in json format.
-  * Added __repr__ support for repeated field in cpp implementation.
-  * Added file in FieldDescriptor.
-  * Added pretty-print filter to text format.
-  * Services and method descriptors are always printed even if generic_service
-    option is turned off.
-  * Note: AppEngine 2.5 is deprecated on June 2017 that AppEngine 2.5 will
-    never update protobuf runtime. Users who depend on AppEngine 2.5 should use
-    old protoc.
-
-  PHP
-  * Support PHP generic services. Specify file option php_generic_service=true
-    to enable generating service interface.
-  * Message, repeated and map fields setters take value instead of reference.
-  * Added map iterator in c extension.
-  * Support json  encode/decode.
-  * Added more type info in getter/setter phpdoc
-  * Fixed the problem that c extension and php implementation cannot be used
-    together.
-  * Added file option php_namespace to use custom php namespace instead of
-    package.
-  * Added fluent setter.
-  * Added descriptor API in runtime for custom encode/decode.
-  * Various bug fixes.
-
-  Objective-C
-  * Fix for GPBExtensionRegistry copying and add tests.
-  * Optimize GPBDictionary.m codegen to reduce size of overall library by 46K
-    per architecture.
-  * Fix some cases of reading of 64bit map values.
-  * Properly error on a tag with field number zero.
-  * Preserve unknown fields in proto3 syntax files.
-  * Document the exceptions on some of the writing apis.
-
-  C#
-  * Implemented IReadOnlyDictionary<K,V> in MapField<K,V>
-  * Added TryUnpack method for Any message in addition to Unpack.
-  * Converted C# projects to MSBuild (csproj) format.
-
-  Ruby
-  * Several bug fixes.
-
-  Javascript
-  * Added support of field option js_type. Now one can specify the JS type of a
-    64-bit integer field to be string in the generated code by adding option
-    [jstype = JS_STRING] on the field.
-
-2017-04-05 version 3.3.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
-  Planned Future Changes
-  * There are some changes that are not included in this release but are
-    planned for the near future:
-      - Preserve unknown fields in proto3: please read this doc:
-
-          https://docs.google.com/document/d/1KMRX-G91Aa-Y2FkEaHeeviLRRNblgIahbsk4wA14gRk/view
-
-        for the timeline and follow up this github issue:
-
-          https://github.com/google/protobuf/issues/272
-
-        for discussion.
-      - Make C++ implementation C++11 only: we plan to require C++11 to build
-        protobuf code starting from 3.4.0 or 3.5.0 release. Please join this
-        github issue:
-
-          https://github.com/google/protobuf/issues/2780
-
-        to provide your feedback.
-
-  C++
-  * Fixed map fields serialization of DynamicMessage to correctly serialize
-    both key and value regardless of their presence.
-  * Parser now rejects field number 0 correctly.
-  * New API Message::SpaceUsedLong() that’s equivalent to
-    Message::SpaceUsed() but returns the value in size_t.
-  * JSON support
-    - New flag always_print_enums_as_ints in JsonPrintOptions.
-    - New flag preserve_proto_field_names in JsonPrintOptions. It will instruct
-      the JSON printer to use the original field name declared in the .proto
-      file instead of converting them to lowerCamelCase when printing JSON.
-    - JsonPrintOptions.always_print_primtive_fields now works for oneof message
-      fields.
-    - Fixed a bug that doesn’t allow different fields to set the same json_name
-      value.
-    - Fixed a performance bug that causes excessive memory copy when printing
-      large messages.
-  * Various performance optimizations.
-
-  Java
-  * Map field setters eagerly validate inputs and throw NullPointerExceptions
-    as appropriate.
-  * Added ByteBuffer overloads to the generated parsing methods and the Parser
-    interface.
-  * proto3 enum's getNumber() method now throws on UNRECOGNIZED values.
-  * Output of JsonFormat is now locale independent.
-
-  Python
-  * Added FindServiceByName() in the pure-Python DescriptorPool. This works only
-    for descriptors added with DescriptorPool.Add(). Generated descriptor_pool
-    does not support this yet.
-  * Added a descriptor_pool parameter for parsing Any in text_format.Parse().
-  * descriptor_pool.FindFileContainingSymbol() now is able to find nested
-    extensions.
-  * Extending empty [] to repeated field now sets parent message presence.
-
-  PHP
-  * Added file option php_class_prefix. The prefix will be prepended to all
-    generated classes defined in the file.
-  * When encoding, negative int32 values are sign-extended to int64.
-  * Repeated/Map field setter accepts a regular PHP array. Type checking is
-    done on the array elements.
-  * encode/decode are renamed to serializeToString/mergeFromString.
-  * Added mergeFrom, clear method on Message.
-  * Fixed a bug that oneof accessor didn’t return the field name that is
-    actually set.
-  * C extension now works with php7.
-  * This is the first GA release of PHP. We guarantee that old generated code
-    can always work with new runtime and new generated code.
-
-  Objective-C
-  * Fixed help for GPBTimestamp for dates before the epoch that contain
-    fractional seconds.
-  * Added GPBMessageDropUnknownFieldsRecursively() to remove unknowns from a
-    message and any sub messages.
-  * Addressed a threading race in extension registration/lookup.
-  * Increased the max message parsing depth to 100 to match the other languages.
-  * Removed some use of dispatch_once in favor of atomic compare/set since it
-    needs to be heap based.
-  * Fixes for new Xcode 8.3 warnings.
-
-  C#
-  * Fixed MapField.Values.CopyTo, which would throw an exception unnecessarily
-    if provided exactly the right size of array to copy to.
-  * Fixed enum JSON formatting when multiple names mapped to the same numeric
-    value.
-  * Added JSON formatting option to format enums as integers.
-  * Modified RepeatedField<T> to implement IReadOnlyList<T>.
-  * Introduced the start of custom option handling; it's not as pleasant as it
-    might be, but the information is at least present. We expect to extend code
-    generation to improve this in the future.
-  * Introduced ByteString.FromStream and ByteString.FromStreamAsync to
-    efficiently create a ByteString from a stream.
-  * Added whole-message deprecation, which decorates the class with [Obsolete].
-
-  Ruby
-  * Fixed Message#to_h for messages with map fields.
-  * Fixed memcpy() in binary gems to work for old glibc, without breaking the
-    build for non-glibc libc’s like musl.
-
-  Javascript
-  * Added compatibility tests for version 3.0.0.
-  * Added conformance tests.
-  * Fixed serialization of extensions: we need to emit a value even if it is
-    falsy (like the number 0).
-  * Use closurebuilder.py in favor of calcdeps.py for compiling JavaScript.
-
-2017-01-23 version 3.2.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite)
-  General
-  * Added protoc version number to protoc plugin protocol. It can be used by
-    protoc plugin to detect which version of protoc is used with the plugin and
-    mitigate known problems in certain version of protoc.
-
-  C++
-  * The default parsing byte size limit has been raised from 64MB to 2GB.
-  * Added rvalue setters for non-arena string fields.
-  * Enabled debug logging for Android.
-  * Fixed a double-free problem when using Reflection::SetAllocatedMessage()
-    with extension fields.
-  * Fixed several deterministic serialization bugs:
-    * MessageLite::SerializeAsString() now respects the global deterministic
-      serialization flag.
-    * Extension fields are serialized deterministically as well.  Fixed protocol
-      compiler to correctly report importing-self as an error.
-  * Fixed FileDescriptor::DebugString() to print custom options correctly.
-  * Various performance/codesize optimizations and cleanups.
-
-  Java
-  * The default parsing byte size limit has been raised from 64MB to 2GB.
-  * Added recursion limit when parsing JSON.
-  * Fixed a bug that enumType.getDescriptor().getOptions() doesn't have custom
-    options.
-  * Fixed generated code to support field numbers up to 2^29-1.
-
-  Python
-  * You can now assign NumPy scalars/arrays (np.int32, np.int64) to protobuf
-    fields, and assigning other numeric types has been optimized for
-    performance.
-  * Pure-Python: message types are now garbage-collectable.
-  * Python/C++: a lot of internal cleanup/refactoring.
-
-  PHP (Alpha)
-  * For 64-bit integers type (int64/uint64/sfixed64/fixed64/sint64), use PHP
-    integer on 64-bit environment and PHP string on 32-bit environment.
-  * PHP generated code also conforms to PSR-4 now.
-  * Fixed ZTS build for c extension.
-  * Fixed c extension build on Mac.
-  * Fixed c extension build on 32-bit linux.
-  * Fixed the bug that message without namespace is not found in the descriptor
-    pool. (#2240)
-  * Fixed the bug that repeated field is not iterable in c extension.
-  * Message names Empty will be converted to GPBEmpty in generated code.
-  * Added phpdoc in generated files.
-  * The released API is almost stable. Unless there is large problem, we won't
-    change it. See
-    https://developers.google.com/protocol-buffers/docs/reference/php-generated
-    for more details.
-
-  Objective-C
-  * Added support for push/pop of the stream limit on CodedInputStream for
-    anyone doing manual parsing.
-
-  C#
-  * No changes.
-
-  Ruby
-  * Message objects now support #respond_to? for field getters/setters.
-  * You can now compare “message == non_message_object” and it will return false
-    instead of throwing an exception.
-  * JRuby: fixed #hashCode to properly reflect the values in the message.
-
-  Javascript
-  * Deserialization of repeated fields no longer has quadratic performance
-    behavior.
-  * UTF-8 encoding/decoding now properly supports high codepoints.
-  * Added convenience methods for some well-known types: Any, Struct, and
-    Timestamp. These make it easier to convert data between native JavaScript
-    types and the well-known protobuf types.
-
-2016-09-23 version 3.1.0 (C++/Java/Python/PHP/Ruby/Objective-C/C#/JavaScript/Lite)
-  General
-  * Proto3 support in PHP (alpha).
-  * Various bug fixes.
-
-  C++
-  * Added MessageLite::ByteSizeLong() that’s equivalent to
-    MessageLite::ByteSize() but returns the value in size_t. Useful to check
-    whether a message is over the 2G size limit that protobuf can support.
-  * Moved default_instances to global variables. This allows default_instance
-    addresses to be known at compile time.
-  * Adding missing generic gcc 64-bit atomicops.
-  * Restore New*Callback into google::protobuf namespace since these are used
-    by the service stubs code
-  * JSON support.
-    * Fixed some conformance issues.
-  * Fixed a JSON serialization bug for bytes fields.
-
-  Java
-  * Fixed a bug in TextFormat that doesn’t accept empty repeated fields (i.e.,
-    “field: [ ]”).
-  * JSON support
-    * Fixed JsonFormat to do correct snake_case-to-camelCase conversion for
-      non-style-conforming field names.
-    * Fixed JsonFormat to parse empty Any message correctly.
-    * Added an option to JsonFormat.Parser to ignore unknown fields.
-  * Experimental API
-    * Added UnsafeByteOperations.unsafeWrap(byte[]) to wrap a byte array into
-      ByteString without copy.
-
-  Python
-  * JSON support
-    * Fixed some conformance issues.
-
-  PHP (Alpha)
-  * We have added the proto3 support for PHP via both a pure PHP package and a
-    native c extension. The pure PHP package is intended to provide usability
-    to wider range of PHP platforms, while the c extension is intended to
-    provide higher performance. Both implementations provide the same runtime
-    APIs and share the same generated code. Users don’t need to re-generate
-    code for the same proto definition when they want to switch the
-    implementation later. The pure PHP package is included in the php/src
-    directory, and the c extension is included in the php/ext directory.
-
-    Both implementations provide idiomatic PHP APIs:
-    * All messages and enums are defined as PHP classes.
-    * All message fields can only be accessed via getter/setter.
-    * Both repeated field elements and map elements are stored in containers
-      that act like a normal PHP array.
-
-    Unlike several existing third-party PHP implementations for protobuf, our
-    implementations are built on a "strongly-typed" philosophy: message fields
-    and array/map containers will throw exceptions eagerly when values of the
-    incorrect type (not including those that can be type converted, e.g.,
-    double <-> integer <-> numeric string) are inserted.
-
-    Currently, pure PHP runtime supports php5.5, 5.6 and 7 on linux. C
-    extension runtime supports php5.5 and 5.6 on linux.
-
-    See php/README.md for more details about installment. See
-    https://developers.google.com/protocol-buffers/docs/phptutorial for more
-    details about APIs.
-
-  Objective-C
-  * Helpers are now provided for working the the Any well known type (see
-    GPBWellKnownTypes.h for the api additions).
-  * Some improvements in startup code (especially when extensions aren’t used).
-
-  Javascript
-  * Fixed missing import of jspb.Map
-  * Fixed valueWriterFn variable name
-
-  Ruby
-  * Fixed hash computation for JRuby's RubyMessage
-  * Make sure map parsing frames are GC-rooted.
-  * Added API support for well-known types.
-
-  C#
-  * Removed check on dependency in the C# reflection API.
-
-2016-09-06 version 3.0.2 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript/Lite)
-  General
-  * Various bug fixes.
-
-  Objective C
-  * Fix for oneofs in proto3 syntax files where fields were set to the zero
-    value.
-  * Fix for embedded null character in strings.
-  * CocoaDocs support
-
-  Ruby
-  * Fixed memory corruption bug in parsing that could occur under GC pressure.
-
-  Javascript
-  * jspb.Map is now properly exported to CommonJS modules.
-
-  C#
-  * Removed legacy_enum_values flag.
-
-
-2016-07-27 version 3.0.0 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript/Lite)
-  General
-  * This log only contains changes since the beta-4 release. Summarized change
-    log since the last stable release (v2.6.1) can be found in the github
-    release page.
-
-  Compatibility Notice
-  * v3.0.0 is the first API stable release of the v3.x series. We do not expect
-    any future API breaking changes.
-  * For C++, Java Lite and Objective-C, source level compatibility is
-    guaranteed.  Upgrading from v3.0.0 to newer minor version releases will be
-    source compatible. For example, if your code compiles against protobuf
-    v3.0.0, it will continue to compile after you upgrade protobuf library to
-    v3.1.0.
-  * For other languages, both source level compatibility and binary level
-    compatibility are guaranteed. For example, if you have a Java binary built
-    against protobuf v3.0.0. After switching the protobuf runtime binary to
-    v3.1.0, your built binary should continue to work.
-  * Compatibility is only guaranteed for documented API and documented
-    behaviors. If you are using undocumented API (e.g., use anything in the C++
-    internal namespace), it can be broken by minor version releases in an
-    undetermined manner.
-
-  Ruby
-  * When you assign a string field `a.string_field = "X"`, we now call
-    #encode(UTF-8) on the string and freeze the copy. This saves you from
-    needing to ensure the string is already encoded as UTF-8. It also prevents
-    you from mutating the string after it has been assigned (this is how we
-    ensure it stays valid UTF-8).
-  * The generated file for `foo.proto` is now `foo_pb.rb` instead of just
-    `foo.rb`. This makes it easier to see which imports/requires are from
-    protobuf generated code, and also prevents conflicts with any `foo.rb` file
-    you might have written directly in Ruby. It is a backward-incompatible
-    change: you will need to update all of your `require` statements.
-  * For package names like `foo_bar`, we now translate this to the Ruby module
-    `FooBar`. This is more idiomatic Ruby than what we used to do (`Foo_bar`).
-
-  JavaScript
-  * Scalar fields like numbers and boolean now return defaults instead of
-    `undefined` or `null` when they are unset. You can test for presence
-    explicitly by calling `hasFoo()`, which we now generate for scalar fields.
-
-  Java Lite
-  * Java Lite is now implemented as a separate plugin, maintained in the
-    `javalite` branch. Both lite runtime and protoc artifacts will be available
-    in Maven.
-
-  C#
-  * Target platforms now .NET 4.5, selected portable subsets and .NET Core.
-  * legacy_enum_values option is no longer supported.
-
-2016-07-15 version 3.0.0-beta-4 (C++/Java/Python/Ruby/Objective-C/C#/JavaScript)
-  General
-  * Added a deterministic serialization API for C++. The deterministic
-    serialization guarantees that given a binary, equal messages will be
-    serialized to the same bytes. This allows applications like MapReduce to
-    group equal messages based on the serialized bytes. The deterministic
-    serialization is, however, NOT canonical across languages; it is also
-    unstable across different builds with schema changes due to unknown fields.
-    Users who need canonical serialization, e.g. persistent storage in a
-    canonical form, fingerprinting, etc, should define their own
-    canonicalization specification and implement the serializer using reflection
-    APIs rather than relying on this API.
-  * Added OneofOptions. You can now define custom options for oneof groups.
-      import "google/protobuf/descriptor.proto";
-      extend google.protobuf.OneofOptions {
-        optional int32 my_oneof_extension = 12345;
-      }
-      message Foo {
-        oneof oneof_group {
-          (my_oneof_extension) = 54321;
-          ...
-        }
-      }
-
-  C++ (beta)
-  * Introduced a deterministic serialization API in
-    CodedOutputStream::SetSerializationDeterministic(bool). See the notes about
-    deterministic serialization in the General section.
-  * Added google::protobuf::Map::swap() to swap two map fields.
-  * Fixed a memory leak when calling Reflection::ReleaseMessage() on a message
-    allocated on arena.
-  * Improved error reporting when parsing text format protos.
-  * JSON
-      - Added a new parser option to ignore unknown fields when parsing JSON.
-      - Added convenient methods for message to/from JSON conversion.
-  * Various performance optimizations.
-
-  Java (beta)
-  * File option "java_generate_equals_and_hash" is now deprecated. equals() and
-    hashCode() methods are generated by default.
-  * Added a new JSON printer option "omittingInsignificantWhitespace" to produce
-    a more compact JSON output. The printer will pretty-print by default.
-  * Updated Java runtime to be compatible with 2.5.0/2.6.1 generated protos.
-
-  Python (beta)
-  * Added support to pretty print Any messages in text format.
-  * Added a flag to ignore unknown fields when parsing JSON.
-  * Bugfix: "@type" field of a JSON Any message is now correctly put before
-    other fields.
-
-  Objective-C (beta)
-  * Updated the code to support compiling with more compiler warnings
-    enabled. (Issue 1616)
-  * Exposing more detailed errors for parsing failures. (PR 1623)
-  * Small (breaking) change to the naming of some methods on the support classes
-    for map<>. There were collisions with the system provided KVO support, so
-    the names were changed to avoid those issues.  (PR 1699)
-  * Fixed for proper Swift bridging of error handling during parsing. (PR 1712)
-  * Complete support for generating sources that will go into a Framework and
-    depend on generated sources from other Frameworks. (Issue 1457)
-
-  C# (beta)
-  * RepeatedField optimizations.
-  * Support for .NET Core.
-  * Minor bug fixes.
-  * Ability to format a single value in JsonFormatter (advanced usage only).
-  * Modifications to attributes applied to generated code.
-
-  Javascript (alpha)
-  * Maps now have a real map API instead of being treated as repeated fields.
-  * Well-known types are now provided in the google-protobuf package, and the
-    code generator knows to require() them from that package.
-  * Bugfix: non-canonical varints are correctly decoded.
-
-  Ruby (alpha)
-  * Accessors for oneof fields now return default values instead of nil.
-
-  Java Lite
-  * Java lite support is removed from protocol compiler. It will be supported
-    as a protocol compiler plugin in a separate code branch.
-
-2016-05-16 version 3.0.0-beta-3 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript)
-  General
-  * Supported Proto3 lite-runtime in C++/Java for mobile platforms.
-  * Any type now supports APIs to specify prefixes other than
-    type.googleapis.com
-  * Removed javanano_use_deprecated_package option; Nano will always has its own
-    ".nano" package.
-
-  C++ (Beta)
-  * Improved hash maps.
-      - Improved hash maps comments. In particular, please note that equal hash
-        maps will not necessarily have the same iteration order and
-        serialization.
-      - Added a new hash maps implementation that will become the default in a
-        later release.
-  * Arenas
-      - Several inlined methods in Arena were moved to out-of-line to improve
-        build performance and code size.
-      - Added SpaceAllocatedAndUsed() to report both space used and allocated
-      - Added convenient class UnsafeArenaAllocatedRepeatedPtrFieldBackInserter
-  * Any
-      - Allow custom type URL prefixes in Any packing.
-      - TextFormat now expand the Any type rather than printing bytes.
-  * Performance optimizations and various bug fixes.
-
-  Java (Beta)
-  * Introduced an ExperimentalApi annotation. Annotated APIs are experimental
-    and are subject to change in a backward incompatible way in future releases.
-  * Introduced zero-copy serialization as an ExperimentalApi
-      - Introduction of the `ByteOutput` interface. This is similar to
-        `OutputStream` but provides semantics for lazy writing (i.e. no
-        immediate copy required) of fields that are considered to be immutable.
-      - `ByteString` now supports writing to a `ByteOutput`, which will directly
-        expose the internals of the `ByteString` (i.e. `byte[]` or `ByteBuffer`)
-        to the `ByteOutput` without copying.
-      - `CodedOutputStream` now supports writing to a `ByteOutput`. `ByteString`
-        instances that are too large to fit in the internal buffer will be
-        (lazily) written to the `ByteOutput` directly.
-      - This allows applications using large `ByteString` fields to avoid
-        duplication of these fields entirely. Such an application can supply a
-        `ByteOutput` that chains together the chunks received from
-        `CodedOutputStream` before forwarding them onto the IO system.
-  * Other related changes to `CodedOutputStream`
-      - Additional use of `sun.misc.Unsafe` where possible to perform fast
-        access to `byte[]` and `ByteBuffer` values and avoiding unnecessary
-        range checking.
-      - `ByteBuffer`-backed `CodedOutputStream` now writes directly to the
-        `ByteBuffer` rather than to an intermediate array.
-  * Improved lite-runtime.
-      - Lite protos now implement deep equals/hashCode/toString
-      - Significantly improved the performance of Builder#mergeFrom() and
-        Builder#mergeDelimitedFrom()
-  * Various bug fixes and small feature enhancement.
-      - Fixed stack overflow when in hashCode() for infinite recursive oneofs.
-      - Fixed the lazy field parsing in lite to merge rather than overwrite.
-      - TextFormat now supports reporting line/column numbers on errors.
-      - Updated to add appropriate @Override for better compiler errors.
-
-  Python (Beta)
-  * Added JSON format for Any, Struct, Value and ListValue
-  * [ ] is now accepted for both repeated scalar fields and repeated message
-    fields in text format parser.
-  * Numerical field name is now supported in text format.
-  * Added DiscardUnknownFields API for python protobuf message.
-
-  Objective-C (Beta)
-  * Proto comments now come over as HeaderDoc comments in the generated sources
-    so Xcode can pick them up and display them.
-  * The library headers have been updated to use HeaderDoc comments so Xcode can
-    pick them up and display them.
-  * The per message and per field overhead in both generated code and runtime
-    object sizes was reduced.
-  * Generated code now include deprecated annotations when the proto file
-    included them.
-
-  C# (Beta)
-  In general: some changes are breaking, which require regenerating messages.
-  Most user-written code will not be impacted *except* for the renaming of enum
-  values.
-
-  * Allow custom type URL prefixes in `Any` packing, and ignore them when
-    unpacking
-  * `protoc` is now in a separate NuGet package (Google.Protobuf.Tools)
-  * New option: `internal_access` to generate internal classes
-  * Enum values are now PascalCased, and if there's a prefix which matches the
-    name of the enum, that is removed (so an enum `COLOR` with a value
-    `COLOR_BLUE` would generate a value of just `Blue`). An option
-    (`legacy_enum_values`) is temporarily available to disable this, but the
-    option will be removed for GA.
-  * `json_name` option is now honored
-  * If group tags are encountered when parsing, they are validated more
-    thoroughly (although we don't support actual groups)
-  * NuGet dependencies are better specified
-  * Breaking: `Preconditions` is renamed to `ProtoPreconditions`
-  * Breaking: `GeneratedCodeInfo` is renamed to `GeneratedClrTypeInfo`
-  * `JsonFormatter` now allows writing to a `TextWriter`
-  * New interface, `ICustomDiagnosticMessage` to allow more compact
-    representations from `ToString`
-  * `CodedInputStream` and `CodedOutputStream` now implement `IDisposable`,
-    which simply disposes of the streams they were constructed with
-  * Map fields no longer support null values (in line with other languages)
-  * Improvements in JSON formatting and parsing
-
-  Javascript (Alpha)
-  * Better support for "bytes" fields: bytes fields can be read as either a
-    base64 string or UInt8Array (in environments where TypedArray is supported).
-  * New support for CommonJS imports.  This should make it easier to use the
-    JavaScript support in Node.js and tools like WebPack.  See js/README.md for
-    more information.
-  * Some significant internal refactoring to simplify and modularize the code.
-
-  Ruby (Alpha)
-  * JSON serialization now properly uses camelCased names, with a runtime option
-    that will preserve original names from .proto files instead.
-  * Well-known types are now included in the distribution.
-  * Release now includes binary gems for Windows, Mac, and Linux instead of just
-    source gems.
-  * Bugfix for serializing oneofs.
-
-  C++/Java Lite (Alpha)
-    A new "lite" generator parameter was introduced in the protoc for C++ and
-    Java for Proto3 syntax messages. Example usage:
-
-     ./protoc --cpp_out=lite:$OUTPUT_PATH foo.proto
-
-    The protoc will treat the current input and all the transitive dependencies
-    as LITE. The same generator parameter must be used to generate the
-    dependencies.
-
-    In Proto3 syntax files, "optimized_for=LITE_RUNTIME" is no longer supported.
-
-
-2015-12-30 version 3.0.0-beta-2 (C++/Java/Python/Ruby/Nano/Objective-C/C#/JavaScript)
-  General
-  * Introduced a new language implementation: JavaScript.
-  * Added a new field option "json_name". By default proto field names are
-    converted to "lowerCamelCase" in proto3 JSON format. This option can be
-    used to override this behavior and specify a different JSON name for the
-    field.
-  * Added conformance tests to ensure implementations are following proto3 JSON
-    specification.
-
-  C++ (Beta)
-  * Various bug fixes and improvements to the JSON support utility:
-      - Duplicate map keys in JSON are now rejected (i.e., translation will
-        fail).
-      - Fixed wire-format for google.protobuf.Value/ListValue.
-      - Fixed precision loss when converting google.protobuf.Timestamp.
-      - Fixed a bug when parsing invalid UTF-8 code points.
-      - Fixed a memory leak.
-      - Reduced call stack usage.
-
-  Java (Beta)
-  * Cleaned up some unused methods on CodedOutputStream.
-  * Presized lists for packed fields during parsing in the lite runtime to
-    reduce allocations and improve performance.
-  * Improved the performance of unknown fields in the lite runtime.
-  * Introduced UnsafeByteStrings to support zero-copy ByteString creation.
-  * Various bug fixes and improvements to the JSON support utility:
-      - Fixed a thread-safety bug.
-      - Added a new option “preservingProtoFieldNames” to JsonFormat.
-      - Added a new option “includingDefaultValueFields” to JsonFormat.
-      - Updated the JSON utility to comply with proto3 JSON specification.
-
-  Python (Beta)
-  * Added proto3 JSON format utility. It includes support for all field types
-    and a few well-known types except for Any and Struct.
-  * Added runtime support for Any, Timestamp, Duration and FieldMask.
-  * [ ] is now accepted for repeated scalar fields in text format parser.
-  * Map fields now have proper O(1) performance for lookup/insert/delete
-    when using the Python/C++ implementation. They were previously using O(n)
-    search-based algorithms because the C++ reflection interface didn't
-    support true map operations.
-
-  Objective-C (Beta)
-  * Various bug-fixes and code tweaks to pass more strict compiler warnings.
-  * Now has conformance test coverage and is passing all tests.
-
-  C# (Beta)
-  * Various bug-fixes.
-  * Code generation: Files generated in directories based on namespace.
-  * Code generation: Include comments from .proto files in XML doc
-    comments (naively)
-  * Code generation: Change organization/naming of "reflection class" (access
-    to file descriptor)
-  * Code generation and library: Add Parser property to MessageDescriptor,
-    and introduce a non-generic parser type.
-  * Library: Added TypeRegistry to support JSON parsing/formatting of Any.
-  * Library: Added Any.Pack/Unpack support.
-  * Library: Implemented JSON parsing.
-
-  Javascript (Alpha)
-  * Added proto3 support for JavaScript. The runtime is written in pure
-    JavaScript and works in browsers and in Node.js. To generate JavaScript
-    code for your proto, invoke protoc with "--js_out". See js/README.md
-    for more build instructions.
-
-2015-08-26 version 3.0.0-beta-1 (C++/Java/Python/Ruby/Nano/Objective-C/C#)
-  About Beta
-  * This is the first beta release of protobuf v3.0.0. Not all languages
-    have reached beta stage. Languages not marked as beta are still in
-    alpha (i.e., be prepared for API breaking changes).
-
-  General
-  * Proto3 JSON is supported in several languages (fully supported in C++
-    and Java, partially supported in Ruby/C#). The JSON spec is defined in
-    the proto3 language guide:
-
-      https://developers.google.com/protocol-buffers/docs/proto3#json
-
-    We will publish a more detailed spec to define the exact behavior of
-    proto3-conformant JSON serializers and parsers. Until then, do not rely
-    on specific behaviors of the implementation if it’s not documented in
-    the above spec. More specifically, the behavior is not yet finalized for
-    the following:
-      - Parsing invalid JSON input (e.g., input with trailing commas).
-      - Non-camelCase names in JSON input.
-      - The same field appears multiple times in JSON input.
-      - JSON arrays contain “null” values.
-      - The message has unknown fields.
-
-  * Proto3 now enforces strict UTF-8 checking. Parsing will fail if a string
-    field contains non UTF-8 data.
-
-  C++ (Beta)
-  * Introduced new utility functions/classes in the google/protobuf/util
-    directory:
-      - MessageDifferencer: compare two proto messages and report their
-                            differences.
-      - JsonUtil: support converting protobuf binary format to/from JSON.
-      - TimeUtil: utility functions to work with well-known types Timestamp
-                  and Duration.
-      - FieldMaskUtil: utility functions to work with FieldMask.
-
-  * Performance optimization of arena construction and destruction.
-  * Bug fixes for arena and maps support.
-  * Changed to use cmake for Windows Visual Studio builds.
-  * Added Bazel support.
-
-  Java (Beta)
-  * Introduced a new util package that will be distributed as a separate
-    artifact in maven. It contains:
-      - JsonFormat: convert proto messages to/from JSON.
-      - TimeUtil: utility functions to work with Timestamp and Duration.
-      - FieldMaskUtil: utility functions to work with FieldMask.
-
-  * The static PARSER in each generated message is deprecated, and it will
-    be removed in a future release. A static parser() getter is generated
-    for each message type instead.
-  * Performance optimizations for String fields serialization.
-  * Performance optimizations for Lite runtime on Android:
-      - Reduced allocations
-      - Reduced method overhead after ProGuarding
-      - Reduced code size after ProGuarding
-
-  Python (Alpha)
-  * Removed legacy Python 2.5 support.
-  * Moved to a single Python 2.x/3.x-compatible codebase, instead of using 2to3.
-  * Fixed build/tests on Python 2.6, 2.7, 3.3, and 3.4.
-      - Pure-Python works on all four.
-      - Python/C++ implementation works on all but 3.4, due to changes in the
-        Python/C++ API in 3.4.
-  * Some preliminary work has been done to allow for multiple DescriptorPools
-    with Python/C++.
-
-  Ruby (Alpha)
-  * Many bugfixes:
-      - fixed parsing/serialization of bytes, sint, sfixed types
-      - other parser bugfixes
-      - fixed memory leak affecting Ruby 2.2
-
-  JavaNano (Alpha)
-  * JavaNano generated code now will be put in a nano package by default to
-    avoid conflicts with Java generated code.
-
-  Objective-C (Alpha)
-  * Added non-null markup to ObjC library. Requires SDK 8.4+ to build.
-  * Many bugfixes:
-      - Removed the class/enum filter.
-      - Renamed some internal types to avoid conflicts with the well-known types
-        protos.
-      - Added missing support for parsing repeated primitive fields in packed or
-        unpacked forms.
-      - Added *Count for repeated and map<> fields to avoid auto-create when
-        checking for them being set.
-
-  C# (Alpha)
-  * Namespace changed to Google.Protobuf (and NuGet package will be named
-    correspondingly).
-  * Target platforms now .NET 4.5 and selected portable subsets only.
-  * Removed lite runtime.
-  * Reimplementation to use mutable message types.
-  * Null references used to represent "no value" for message type fields.
-  * Proto3 semantics supported; proto2 files are prohibited for C# codegen.
-    Most proto3 features supported:
-      - JSON formatting (a.k.a. serialization to JSON), including well-known
-        types (except for Any).
-      - Wrapper types mapped to nullable value types (or string/ByteString
-        allowing nullability). JSON parsing is not supported yet.
-      - maps
-      - oneof
-      - enum unknown value preservation
-
-2015-05-25 version 3.0.0-alpha-3 (Objective-C/C#):
-  General
-  * Introduced two new language implementations (Objective-C, C#) to proto3.
-  * Explicit "optional" keyword are disallowed in proto3 syntax, as fields are
-    optional by default.
-  * Group fields are no longer supported in proto3 syntax.
-  * Changed repeated primitive fields to use packed serialization by default in
-    proto3 (implemented for C++, Java, Python in this release).  The user can
-    still disable packed serialization by setting packed to false for now.
-  * Added well-known type protos (any.proto, empty.proto, timestamp.proto,
-    duration.proto, etc.). Users can import and use these protos just like
-    regular proto files. Additional runtime support will be added for them in
-    future releases (in the form of utility helper functions, or having them
-    replaced by language specific types in generated code).
-  * Added a "reserved" keyword in both proto2 and proto3 syntax. User can use
-    this keyword to declare reserved field numbers and names to prevent them
-    from being reused by other fields in the same message.
-
-    To reserve field numbers, add a reserved declaration in your message:
-
-      message TestMessage {
-        reserved 2, 15, 9 to 11, 3;
-      }
-
-    This reserves field numbers 2, 3, 9, 10, 11 and 15. If a user uses any of
-    these as field numbers, the protocol buffer compiler will report an error.
-
-    Field names can also be reserved:
-
-      message TestMessage {
-        reserved "foo", "bar";
-      }
-
-  * Various bug fixes since 3.0.0-alpha-2
-
-  Objective-C
-    Objective-C includes a code generator and a native objective-c runtime
-    library.  By adding “--objc_out” to protoc, the code generator will generate
-    a header(*.pbobjc.h) and an implementation file(*.pbobjc.m) for each proto
-    file.
-
-    In this first release, the generated interface provides: enums, messages,
-    field support(single, repeated, map, oneof), proto2 and proto3 syntax
-    support, parsing and serialization. It’s  compatible with ARC and non-ARC
-    usage. Besides, user can also access it via the swift bridging header.
-
-    See objectivec/README.md for details.
-
-  C#
-    * C# protobufs are based on project
-      https://github.com/jskeet/protobuf-csharp-port. The original project was
-      frozen and all the new development will happen here.
-    * Codegen plugin for C# was completely rewritten to C++ and is now an
-      integral part of protoc.
-    * Some refactorings and cleanup has been applied to the C# runtime library.
-    * Only proto2 is supported in C# at the moment, proto3 support is in
-      progress and will likely bring significant breaking changes to the API.
-
-    See csharp/README.md for details.
-
-  C++
-    * Added runtime support for Any type. To use Any in your proto file, first
-      import the definition of Any:
-
-        // foo.proto
-        import "google/protobuf/any.proto";
-        message Foo {
-          google.protobuf.Any any_field = 1;
-        }
-        message Bar {
-          int32 value = 1;
-        }
-
-      Then in C++ you can access the Any field using PackFrom()/UnpackTo()
-      methods:
-
-        Foo foo;
-        Bar bar = ...;
-        foo.mutable_any_field()->PackFrom(bar);
-        ...
-        if (foo.any_field().IsType<Bar>()) {
-          foo.any_field().UnpackTo(&bar);
-          ...
-        }
-    * In text format, entries of a map field will be sorted by key.
-
-  Java
-    * Continued optimizations on the lite runtime to improve performance for
-      Android.
-
-  Python
-    * Added map support.
-      - maps now have a dict-like interface (msg.map_field[key] = value)
-      - existing code that modifies maps via the repeated field interface
-        will need to be updated.
-
-  Ruby
-    * Improvements to RepeatedField's emulation of the Ruby Array API.
-    * Various speedups and internal cleanups.
-
-2015-02-26 version 3.0.0-alpha-2 (Python/Ruby/JavaNano):
-  General
-  * Introduced three new language implementations (Ruby, JavaNano, and
-    Python) to proto3.
-  * Various bug fixes since 3.0.0-alpha-1
-
-  Python:
-    Python has received several updates, most notably support for proto3
-    semantics in any .proto file that declares syntax="proto3".
-    Messages declared in proto3 files no longer represent field presence
-    for scalar fields (number, enums, booleans, or strings).  You can
-    no longer call HasField() for such fields, and they are serialized
-    based on whether they have a non-zero/empty/false value.
-
-    One other notable change is in the C++-accelerated implementation.
-    Descriptor objects (which describe the protobuf schema and allow
-    reflection over it) are no longer duplicated between the Python
-    and C++ layers.  The Python descriptors are now simple wrappers
-    around the C++ descriptors.  This change should significantly
-    reduce the memory usage of programs that use a lot of message
-    types.
-
-  Ruby:
-    We have added proto3 support for Ruby via a native C extension.
-
-    The Ruby extension itself is included in the ruby/ directory, and details on
-    building and installing the extension are in ruby/README.md. The extension
-    will also be published as a Ruby gem. Code generator support is included as
-    part of `protoc` with the `--ruby_out` flag.
-
-    The Ruby extension implements a user-friendly DSL to define message types
-    (also generated by the code generator from `.proto` files).  Once a message
-    type is defined, the user may create instances of the message that behave in
-    ways idiomatic to Ruby. For example:
-
-    - Message fields are present as ordinary Ruby properties (getter method
-      `foo` and setter method `foo=`).
-    - Repeated field elements are stored in a container that acts like a native
-      Ruby array, and map elements are stored in a container that acts like a
-      native Ruby hashmap.
-    - The usual well-known methods, such as `#to_s`, `#dup`, and the like, are
-      present.
-
-    Unlike several existing third-party Ruby extensions for protobuf, this
-    extension is built on a "strongly-typed" philosophy: message fields and
-    array/map containers will throw exceptions eagerly when values of the
-    incorrect type are inserted.
-
-    See ruby/README.md for details.
-
-  JavaNano:
-    JavaNano is a special code generator and runtime library designed especially
-    for resource-restricted systems, like Android. It is very resource-friendly
-    in both the amount of code and the runtime overhead. Here is an an overview
-    of JavaNano features compared with the official Java protobuf:
-
-    - No descriptors or message builders.
-    - All messages are mutable; fields are public Java fields.
-    - For optional fields only, encapsulation behind setter/getter/hazzer/
-      clearer functions is opt-in, which provide proper 'has' state support.
-    - For proto2, if not opted in, has state (field presence) is not available.
-      Serialization outputs all fields not equal to their defaults.
-      The behavior is consistent with proto3 semantics.
-    - Required fields (proto2 only) are always serialized.
-    - Enum constants are integers; protection against invalid values only
-      when parsing from the wire.
-    - Enum constants can be generated into container interfaces bearing
-      the enum's name (so the referencing code is in Java style).
-    - CodedInputByteBufferNano can only take byte[] (not InputStream).
-    - Similarly CodedOutputByteBufferNano can only write to byte[].
-    - Repeated fields are in arrays, not ArrayList or Vector. Null array
-      elements are allowed and silently ignored.
-    - Full support for serializing/deserializing repeated packed fields.
-    - Support  extensions (in proto2).
-    - Unset messages/groups are null, not an immutable empty default
-      instance.
-    - toByteArray(...) and mergeFrom(...) are now static functions of
-      MessageNano.
-    - The 'bytes' type translates to the Java type byte[].
-
-    See javanano/README.txt for details.
-
-2014-12-01 version 3.0.0-alpha-1 (C++/Java):
-
-  General
-  * Introduced Protocol Buffers language version 3 (aka proto3).
-
-    When protobuf was initially opensourced it implemented Protocol Buffers
-    language version 2 (aka proto2), which is why the version number
-    started from v2.0.0. From v3.0.0, a new language version (proto3) is
-    introduced while the old version (proto2) will continue to be supported.
-
-    The main intent of introducing proto3 is to clean up protobuf before
-    pushing the language as the foundation of Google's new API platform.
-    In proto3, the language is simplified, both for ease of use and  to
-    make it available in a wider range of programming languages. At the
-    same time a few features are added to better support common idioms
-    found in APIs.
-
-    The following are the main new features in language version 3:
-
-      1. Removal of field presence logic for primitive value fields, removal
-         of required fields, and removal of default values. This makes proto3
-         significantly easier to implement with open struct representations,
-         as in languages like Android Java, Objective C, or Go.
-      2. Removal of unknown fields.
-      3. Removal of extensions, which are instead replaced by a new standard
-         type called Any.
-      4. Fix semantics for unknown enum values.
-      5. Addition of maps.
-      6. Addition of a small set of standard types for representation of time,
-         dynamic data, etc.
-      7. A well-defined encoding in JSON as an alternative to binary proto
-         encoding.
-
-    This release (v3.0.0-alpha-1) includes partial proto3 support for C++ and
-    Java. Items 6 (well-known types) and 7 (JSON format) in the above feature
-    list are not implemented.
-
-    A new notion "syntax" is introduced to specify whether a .proto file
-    uses proto2 or proto3:
-
-      // foo.proto
-      syntax = "proto3";
-      message Bar {...}
-
-    If omitted, the protocol compiler will generate a warning and "proto2" will
-    be used as the default. This warning will be turned into an error in a
-    future release.
-
-    We recommend that new Protocol Buffers users use proto3. However, we do not
-    generally recommend that existing users migrate from proto2 from proto3 due
-    to API incompatibility, and we will continue to support proto2 for a long
-    time.
-
-  * Added support for map fields (implemented in C++/Java for both proto2 and
-    proto3).
-
-    Map fields can be declared using the following syntax:
-
-      message Foo {
-        map<string, string> values = 1;
-      }
-
-    Data of a map field will be stored in memory as an unordered map and it
-    can be accessed through generated accessors.
-
-  C++
-  * Added arena allocation support (for both proto2 and proto3).
-
-    Profiling shows memory allocation and deallocation constitutes a significant
-    fraction of CPU-time spent in protobuf code and arena allocation is a
-    technique introduced to reduce this cost. With arena allocation, new
-    objects will be allocated from a large piece of preallocated memory and
-    deallocation of these objects is almost free. Early adoption shows 20% to
-    50% improvement in some Google binaries.
-
-    To enable arena support, add the following option to your .proto file:
-
-      option cc_enable_arenas = true;
-
-    Protocol compiler will generate additional code to make the generated
-    message classes work with arenas. This does not change the existing API
-    of protobuf messages and does not affect wire format. Your existing code
-    should continue to work after adding this option. In the future we will
-    make this option enabled by default.
-
-    To actually take advantage of arena allocation, you need to use the arena
-    APIs when creating messages. A quick example of using the arena API:
-
-      {
-        google::protobuf::Arena arena;
-        // Allocate a protobuf message in the arena.
-        MyMessage* message = Arena::CreateMessage<MyMessage>(&arena);
-        // All submessages will be allocated in the same arena.
-        if (!message->ParseFromString(data)) {
-          // Deal with malformed input data.
-        }
-        // Must not delete the message here. It will be deleted automatically
-        // when the arena is destroyed.
-      }
-
-    Currently arena does not work with map fields. Enabling arena in a .proto
-    file containing map fields will result in compile errors in the generated
-    code. This will be addressed in a future release.
-
-2014-10-20 version 2.6.1:
-
-  C++
-  * Added atomicops support for Solaris.
-  * Released memory allocated by InitializeDefaultRepeatedFields() and
-    GetEmptyString(). Some memory sanitizers reported them as memory leaks.
-
-  Java
-  * Updated DynamicMessage.setField() to handle repeated enum values
-    correctly.
-  * Fixed a bug that caused NullPointerException to be thrown when
-    converting manually constructed FileDescriptorProto to
-    FileDescriptor.
-
-  Python
-  * Fixed WhichOneof() to work with de-serialized protobuf messages.
-  * Fixed a missing file problem of Python C++ implementation.
-
-2014-08-15 version 2.6.0:
-
-  General
-  * Added oneofs(unions) feature. Fields in the same oneof will share
-    memory and at most one field can be set at the same time. Use the
-    oneof keyword to define a oneof like:
-      message SampleMessage {
-        oneof test_oneof {
-          string name = 4;
-          YourMessage sub_message = 9;
-        }
-      }
-  * Files, services, enums, messages, methods and enum values can be marked
-    as deprecated now.
-  * Added Support for list values, including lists of messages, when
-    parsing text-formatted protos in C++ and Java.
-      For example:  foo: [1, 2, 3]
-
-  C++
-  * Enhanced customization on TestFormat printing.
-  * Added SwapFields() in reflection API to swap a subset of fields.
-    Added SetAllocatedMessage() in reflection API.
-  * Repeated primitive extensions are now packable. The
-    [packed=true] option only affects serializers. Therefore, it is
-    possible to switch a repeated extension field to packed format
-    without breaking backwards-compatibility.
-  * Various speed optimizations.
-
-  Java
-  * writeTo() method in ByteString can now write a substring to an
-    output stream. Added endWith() method for ByteString.
-  * ByteString and ByteBuffer are now supported in CodedInputStream
-    and CodedOutputStream.
-  * java_generate_equals_and_hash can now be used with the LITE_RUNTIME.
-
-  Python
-  * A new C++-backed extension module (aka "cpp api v2") that replaces the
-    old ("cpp api v1") one.  Much faster than the pure Python code.  This one
-    resolves many bugs and is recommended for general use over the
-    pure Python when possible.
-  * Descriptors now have enum_types_by_name and extension_types_by_name dict
-    attributes.
-  * Support for Python 3.
-
-2013-02-27 version 2.5.0:
-
-  General
-  * New notion "import public" that allows a proto file to forward the content
-    it imports to its importers. For example,
-      // foo.proto
-      import public "bar.proto";
-      import "baz.proto";
-
-      // qux.proto
-      import "foo.proto";
-      // Stuff defined in bar.proto may be used in this file, but stuff from
-      // baz.proto may NOT be used without importing it explicitly.
-    This is useful for moving proto files. To move a proto file, just leave
-    a single "import public" in the old proto file.
-  * New enum option "allow_alias" that specifies whether different symbols can
-    be assigned the same numeric value. Default value is "true". Setting it to
-    false causes the compiler to reject enum definitions where multiple symbols
-    have the same numeric value.
-    Note: We plan to flip the default value to "false" in a future release.
-    Projects using enum aliases should set the option to "true" in their .proto
-    files.
-
-  C++
-  * New generated method set_allocated_foo(Type* foo) for message and string
-    fields. This method allows you to set the field to a pre-allocated object
-    and the containing message takes the ownership of that object.
-  * Added SetAllocatedExtension() and ReleaseExtension() to extensions API.
-  * Custom options are now formatted correctly when descriptors are printed in
-    text format.
-  * Various speed optimizations.
-
-  Java
-  * Comments in proto files are now collected and put into generated code as
-    comments for corresponding classes and data members.
-  * Added Parser to parse directly into messages without a Builder. For
-    example,
-      Foo foo = Foo.PARSER.ParseFrom(input);
-    Using Parser is ~25% faster than using Builder to parse messages.
-  * Added getters/setters to access the underlying ByteString of a string field
-    directly.
-  * ByteString now supports more operations: substring(), prepend(), and
-    append(). The implementation of ByteString uses a binary tree structure
-    to support these operations efficiently.
-  * New method findInitializationErrors() that lists all missing required
-    fields.
-  * Various code size and speed optimizations.
-
-  Python
-  * Added support for dynamic message creation. DescriptorDatabase,
-    DescriptorPool, and MessageFactory work like their C++ counterparts to
-    simplify Descriptor construction from *DescriptorProtos, and MessageFactory
-    provides a message instance from a Descriptor.
-  * Added pickle support for protobuf messages.
-  * Unknown fields are now preserved after parsing.
-  * Fixed bug where custom options were not correctly populated. Custom
-    options can be accessed now.
-  * Added EnumTypeWrapper that provides better accessibility to enum types.
-  * Added ParseMessage(descriptor, bytes) to generate a new Message instance
-    from a descriptor and a byte string.
-
-2011-05-01 version 2.4.1:
-
-  C++
-  * Fixed the friendship problem for old compilers to make the library now gcc 3
-    compatible again.
-  * Fixed vcprojects/extract_includes.bat to extract compiler/plugin.h.
-
-  Java
-  * Removed usages of JDK 1.6 only features to make the library now JDK 1.5
-    compatible again.
-  * Fixed a bug about negative enum values.
-  * serialVersionUID is now defined in generated messages for java serializing.
-  * Fixed protoc to use java.lang.Object, which makes "Object" now a valid
-    message name again.
-
-  Python
-  * Experimental C++ implementation now requires C++ protobuf library installed.
-    See the README.txt in the python directory for details.
-
-2011-02-02 version 2.4.0:
-
-  General
-  * The RPC (cc|java|py)_generic_services default value is now false instead of
-    true.
-  * Custom options can have aggregate types. For example,
-      message MyOption {
-        optional string comment = 1;
-        optional string author = 2;
-      }
-      extend google.protobuf.FieldOptions {
-        optional MyOption myoption = 12345;
-      }
-    This option can now be set as follows:
-      message SomeType {
-        optional int32 field = 1 [(myoption) = { comment:'x' author:'y' }];
-      }
-
-  C++
-  * Various speed and code size optimizations.
-  * Added a release_foo() method on string and message fields.
-  * Fixed gzip_output_stream sub-stream handling.
-
-  Java
-  * Builders now maintain sub-builders for sub-messages. Use getFooBuilder() to
-    get the builder for the sub-message "foo". This allows you to repeatedly
-    modify deeply-nested sub-messages without rebuilding them.
-  * Builder.build() no longer invalidates the Builder for generated messages
-    (You may continue to modify it and then build another message).
-  * Code generator will generate efficient equals() and hashCode()
-    implementations if new option java_generate_equals_and_hash is enabled.
-    (Otherwise, reflection-based implementations are used.)
-  * Generated messages now implement Serializable.
-  * Fields with [deprecated=true] will be marked with @Deprecated in Java.
-  * Added lazy conversion of UTF-8 encoded strings to String objects to improve
-    performance.
-  * Various optimizations.
-  * Enum value can be accessed directly, instead of calling getNumber() on the
-    enum member.
-  * For each enum value, an integer constant is also generated with the suffix
-    _VALUE.
-
-  Python
-  * Added an experimental  C++ implementation for Python messages via a Python
-    extension. Implementation type is controlled by an environment variable
-    PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION (valid values: "cpp" and "python")
-    The default value is currently "python" but will be changed to "cpp" in
-    future release.
-  * Improved performance on message instantiation significantly.
-    Most of the work on message instantiation is done just once per message
-    class, instead of once per message instance.
-  * Improved performance on text message parsing.
-  * Allow add() to forward keyword arguments to the concrete class.
-      E.g. instead of
-        item = repeated_field.add()
-        item.foo = bar
-        item.baz = quux
-      You can do:
-        repeated_field.add(foo=bar, baz=quux)
-  * Added a sort() interface to the BaseContainer.
-  * Added an extend() method to repeated composite fields.
-  * Added UTF8 debug string support.
-
-2010-01-08 version 2.3.0:
-
-  General
-  * Parsers for repeated numeric fields now always accept both packed and
-    unpacked input.  The [packed=true] option only affects serializers.
-    Therefore, it is possible to switch a field to packed format without
-    breaking backwards-compatibility -- as long as all parties are using
-    protobuf 2.3.0 or above, at least.
-  * The generic RPC service code generated by the C++, Java, and Python
-    generators can be disabled via file options:
-      option cc_generic_services = false;
-      option java_generic_services = false;
-      option py_generic_services = false;
-    This allows plugins to generate alternative code, possibly specific to some
-    particular RPC implementation.
-
-  protoc
-  * Now supports a plugin system for code generators.  Plugins can generate
-    code for new languages or inject additional code into the output of other
-    code generators.  Plugins are just binaries which accept a protocol buffer
-    on stdin and write a protocol buffer to stdout, so they may be written in
-    any language.  See src/google/protobuf/compiler/plugin.proto.
-    **WARNING**:  Plugins are experimental.  The interface may change in a
-    future version.
-  * If the output location ends in .zip or .jar, protoc will write its output
-    to a zip/jar archive instead of a directory.  For example:
-      protoc --java_out=myproto_srcs.jar --python_out=myproto.zip myproto.proto
-    Currently the archive contents are not compressed, though this could change
-    in the future.
-  * inf, -inf, and nan can now be used as default values for float and double
-    fields.
-
-  C++
-  * Various speed and code size optimizations.
-  * DynamicMessageFactory is now fully thread-safe.
-  * Message::Utf8DebugString() method is like DebugString() but avoids escaping
-    UTF-8 bytes.
-  * Compiled-in message types can now contain dynamic extensions, through use
-    of CodedInputStream::SetExtensionRegistry().
-  * Now compiles shared libraries (DLLs) by default on Cygwin and MinGW, to
-    match other platforms.  Use --disable-shared to avoid this.
-
-  Java
-  * parseDelimitedFrom() and mergeDelimitedFrom() now detect EOF and return
-    false/null instead of throwing an exception.
-  * Fixed some initialization ordering bugs.
-  * Fixes for OpenJDK 7.
-
-  Python
-  * 10-25 times faster than 2.2.0, still pure-Python.
-  * Calling a mutating method on a sub-message always instantiates the message
-    in its parent even if the mutating method doesn't actually mutate anything
-    (e.g. parsing from an empty string).
-  * Expanded descriptors a bit.
-
-2009-08-11 version 2.2.0:
-
-  C++
-  * Lite mode:  The "optimize_for = LITE_RUNTIME" option causes the compiler
-    to generate code which only depends libprotobuf-lite, which is much smaller
-    than libprotobuf but lacks descriptors, reflection, and some other features.
-  * Fixed bug where Message.Swap(Message) was only implemented for
-    optimize_for_speed.  Swap now properly implemented in both modes
-    (Issue 91).
-  * Added RemoveLast and SwapElements(index1, index2) to Reflection
-    interface for repeated elements.
-  * Added Swap(Message) to Reflection interface.
-  * Floating-point literals in generated code that are intended to be
-    single-precision now explicitly have 'f' suffix to avoid pedantic warnings
-    produced by some compilers.
-  * The [deprecated=true] option now causes the C++ code generator to generate
-    a GCC-style deprecation annotation (no-op on other compilers).
-  * google::protobuf::GetEnumDescriptor<SomeGeneratedEnumType>() returns the
-    EnumDescriptor for that type -- useful for templates which cannot call
-    SomeGeneratedEnumType_descriptor().
-  * Various optimizations and obscure bug fixes.
-
-  Java
-  * Lite mode:  The "optimize_for = LITE_RUNTIME" option causes the compiler
-    to generate code which only depends libprotobuf-lite, which is much smaller
-    than libprotobuf but lacks descriptors, reflection, and some other features.
-  * Lots of style cleanups.
-
-  Python
-  * Fixed endianness bug with floats and doubles.
-  * Text format parsing support.
-  * Fix bug with parsing packed repeated fields in embedded messages.
-  * Ability to initialize fields by passing keyword args to constructor.
-  * Support iterators in extend and __setslice__ for containers.
-
-2009-05-13 version 2.1.0:
-
-  General
-  * Repeated fields of primitive types (types other that string, group, and
-    nested messages) may now use the option [packed = true] to get a more
-    efficient encoding.  In the new encoding, the entire list is written
-    as a single byte blob using the "length-delimited" wire type.  Within
-    this blob, the individual values are encoded the same way they would
-    be normally except without a tag before each value (thus, they are
-    tightly "packed").
-  * For each field, the generated code contains an integer constant assigned
-    to the field number.  For example, the .proto file:
-      message Foo { optional int bar_baz = 123; }
-    would generate the following constants, all with the integer value 123:
-      C++:     Foo::kBarBazFieldNumber
-      Java:    Foo.BAR_BAZ_FIELD_NUMBER
-      Python:  Foo.BAR_BAZ_FIELD_NUMBER
-    Constants are also generated for extensions, with the same naming scheme.
-    These constants may be used as switch cases.
-  * Updated bundled Google Test to version 1.3.0.  Google Test is now bundled
-    in its verbatim form as a nested autoconf package, so you can drop in any
-    other version of Google Test if needed.
-  * optimize_for = SPEED is now the default, by popular demand.  Use
-    optimize_for = CODE_SIZE if code size is more important in your app.
-  * It is now an error to define a default value for a repeated field.
-    Previously, this was silently ignored (it had no effect on the generated
-    code).
-  * Fields can now be marked deprecated like:
-      optional int32 foo = 1 [deprecated = true];
-    Currently this does not have any actual effect, but in the future the code
-    generators may generate deprecation annotations in each language.
-  * Cross-compiling should now be possible using the --with-protoc option to
-    configure.  See README.txt for more info.
-
-  protoc
-  * --error_format=msvs option causes errors to be printed in Visual Studio
-    format, which should allow them to be clicked on in the build log to go
-    directly to the error location.
-  * The type name resolver will no longer resolve type names to fields.  For
-    example, this now works:
-      message Foo {}
-      message Bar {
-        optional int32 Foo = 1;
-        optional Foo baz = 2;
-      }
-    Previously, the type of "baz" would resolve to "Bar.Foo", and you'd get
-    an error because Bar.Foo is a field, not a type.  Now the type of "baz"
-    resolves to the message type Foo.  This change is unlikely to make a
-    difference to anyone who follows the Protocol Buffers style guide.
-
-  C++
-  * Several optimizations, including but not limited to:
-    - Serialization, especially to flat arrays, is 10%-50% faster, possibly
-      more for small objects.
-    - Several descriptor operations which previously required locking no longer
-      do.
-    - Descriptors are now constructed lazily on first use, rather than at
-      process startup time.  This should save memory in programs which do not
-      use descriptors or reflection.
-    - UnknownFieldSet completely redesigned to be more efficient (especially in
-      terms of memory usage).
-    - Various optimizations to reduce code size (though the serialization speed
-      optimizations increased code size).
-  * Message interface has method ParseFromBoundedZeroCopyStream() which parses
-    a limited number of bytes from an input stream rather than parsing until
-    EOF.
-  * GzipInputStream and GzipOutputStream support reading/writing gzip- or
-    zlib-compressed streams if zlib is available.
-    (google/protobuf/io/gzip_stream.h)
-  * DescriptorPool::FindAllExtensions() and corresponding
-    DescriptorDatabase::FindAllExtensions() can be used to enumerate all
-    extensions of a given type.
-  * For each enum type Foo, protoc will generate functions:
-      const string& Foo_Name(Foo value);
-      bool Foo_Parse(const string& name, Foo* result);
-    The former returns the name of the enum constant corresponding to the given
-    value while the latter finds the value corresponding to a name.
-  * RepeatedField and RepeatedPtrField now have back-insertion iterators.
-  * String fields now have setters that take a char* and a size, in addition
-    to the existing ones that took char* or const string&.
-  * DescriptorPool::AllowUnknownDependencies() may be used to tell
-    DescriptorPool to create placeholder descriptors for unknown entities
-    referenced in a FileDescriptorProto.  This can allow you to parse a .proto
-    file without having access to other .proto files that it imports, for
-    example.
-  * Updated gtest to latest version.  The gtest package is now included as a
-    nested autoconf package, so it should be able to drop new versions into the
-    "gtest" subdirectory without modification.
-
-  Java
-  * Fixed bug where Message.mergeFrom(Message) failed to merge extensions.
-  * Message interface has new method toBuilder() which is equivalent to
-    newBuilderForType().mergeFrom(this).
-  * All enums now implement the ProtocolMessageEnum interface.
-  * Setting a field to null now throws NullPointerException.
-  * Fixed tendency for TextFormat's parsing to overflow the stack when
-    parsing large string values.  The underlying problem is with Java's
-    regex implementation (which unfortunately uses recursive backtracking
-    rather than building an NFA).  Worked around by making use of possessive
-    quantifiers.
-  * Generated service classes now also generate pure interfaces.  For a service
-    Foo, Foo.Interface is a pure interface containing all of the service's
-    defined methods.  Foo.newReflectiveService() can be called to wrap an
-    instance of this interface in a class that implements the generic
-    RpcService interface, which provides reflection support that is usually
-    needed by RPC server implementations.
-  * RPC interfaces now support blocking operation in addition to non-blocking.
-    The protocol compiler generates separate blocking and non-blocking stubs
-    which operate against separate blocking and non-blocking RPC interfaces.
-    RPC implementations will have to implement the new interfaces in order to
-    support blocking mode.
-  * New I/O methods parseDelimitedFrom(), mergeDelimitedFrom(), and
-    writeDelimitedTo() read and write "delimited" messages from/to a stream,
-    meaning that the message size precedes the data.  This way, you can write
-    multiple messages to a stream without having to worry about delimiting
-    them yourself.
-  * Throw a more descriptive exception when build() is double-called.
-  * Add a method to query whether CodedInputStream is at the end of the input
-    stream.
-  * Add a method to reset a CodedInputStream's size counter; useful when
-    reading many messages with the same stream.
-  * equals() and hashCode() now account for unknown fields.
-
-  Python
-  * Added slicing support for repeated scalar fields. Added slice retrieval and
-    removal of repeated composite fields.
-  * Updated RPC interfaces to allow for blocking operation.  A client may
-    now pass None for a callback when making an RPC, in which case the
-    call will block until the response is received, and the response
-    object will be returned directly to the caller.  This interface change
-    cannot be used in practice until RPC implementations are updated to
-    implement it.
-  * Changes to input_stream.py should make protobuf compatible with appengine.
-
-2008-11-25 version 2.0.3:
-
-  protoc
-  * Enum values may now have custom options, using syntax similar to field
-    options.
-  * Fixed bug where .proto files which use custom options but don't actually
-    define them (i.e. they import another .proto file defining the options)
-    had to explicitly import descriptor.proto.
-  * Adjacent string literals in .proto files will now be concatenated, like in
-    C.
-  * If an input file is a Windows absolute path (e.g. "C:\foo\bar.proto") and
-    the import path only contains "." (or contains "." but does not contain
-    the file), protoc incorrectly thought that the file was under ".", because
-    it thought that the path was relative (since it didn't start with a slash).
-    This has been fixed.
-
-  C++
-  * Generated message classes now have a Swap() method which efficiently swaps
-    the contents of two objects.
-  * All message classes now have a SpaceUsed() method which returns an estimate
-    of the number of bytes of allocated memory currently owned by the object.
-    This is particularly useful when you are reusing a single message object
-    to improve performance but want to make sure it doesn't bloat up too large.
-  * New method Message::SerializeAsString() returns a string containing the
-    serialized data.  May be more convenient than calling
-    SerializeToString(string*).
-  * In debug mode, log error messages when string-type fields are found to
-    contain bytes that are not valid UTF-8.
-  * Fixed bug where a message with multiple extension ranges couldn't parse
-    extensions.
-  * Fixed bug where MergeFrom(const Message&) didn't do anything if invoked on
-    a message that contained no fields (but possibly contained extensions).
-  * Fixed ShortDebugString() to not be O(n^2).  Durr.
-  * Fixed crash in TextFormat parsing if the first token in the input caused a
-    tokenization error.
-  * Fixed obscure bugs in zero_copy_stream_impl.cc.
-  * Added support for HP C++ on Tru64.
-  * Only build tests on "make check", not "make".
-  * Fixed alignment issue that caused crashes when using DynamicMessage on
-    64-bit Sparc machines.
-  * Simplify template usage to work with MSVC 2003.
-  * Work around GCC 4.3.x x86_64 compiler bug that caused crashes on startup.
-    (This affected Fedora 9 in particular.)
-  * Now works on "Solaris 10 using recent Sun Studio".
-
-  Java
-  * New overload of mergeFrom() which parses a slice of a byte array instead
-    of the whole thing.
-  * New method ByteString.asReadOnlyByteBuffer() does what it sounds like.
-  * Improved performance of isInitialized() when optimizing for code size.
-
-  Python
-  * Corrected ListFields() signature in Message base class to match what
-    subclasses actually implement.
-  * Some minor refactoring.
-  * Don't pass self as first argument to superclass constructor (no longer
-    allowed in Python 2.6).
-
-2008-09-29 version 2.0.2:
-
-  General
-  * License changed from Apache 2.0 to 3-Clause BSD.
-  * It is now possible to define custom "options", which are basically
-    annotations which may be placed on definitions in a .proto file.
-    For example, you might define a field option called "foo" like so:
-      import "google/protobuf/descriptor.proto"
-      extend google.protobuf.FieldOptions {
-        optional string foo = 12345;
-      }
-    Then you annotate a field using the "foo" option:
-      message MyMessage {
-        optional int32 some_field = 1 [(foo) = "bar"]
-      }
-    The value of this option is then visible via the message's
-    Descriptor:
-      const FieldDescriptor* field =
-        MyMessage::descriptor()->FindFieldByName("some_field");
-      assert(field->options().GetExtension(foo) == "bar");
-    This feature has been implemented and tested in C++ and Java.
-    Other languages may or may not need to do extra work to support
-    custom options, depending on how they construct descriptors.
-
-  C++
-  * Fixed some GCC warnings that only occur when using -pedantic.
-  * Improved static initialization code, making ordering more
-    predictable among other things.
-  * TextFormat will no longer accept messages which contain multiple
-    instances of a singular field.  Previously, the latter instance
-    would overwrite the former.
-  * Now works on systems that don't have hash_map.
-
-  Java
-  * Print @Override annotation in generated code where appropriate.
-
-  Python
-  * Strings now use the "unicode" type rather than the "str" type.
-    String fields may still be assigned ASCII "str" values; they will
-    automatically be converted.
-  * Adding a property to an object representing a repeated field now
-    raises an exception.  For example:
-      # No longer works (and never should have).
-      message.some_repeated_field.foo = 1
-
-  Windows
-  * We now build static libraries rather than DLLs by default on MSVC.
-    See vsprojects/readme.txt for more information.
-
-2008-08-15 version 2.0.1:
-
-  protoc
-  * New flags --encode and --decode can be used to convert between protobuf text
-    format and binary format from the command-line.
-  * New flag --descriptor_set_out can be used to write FileDescriptorProtos for
-    all parsed files directly into a single output file.  This is particularly
-    useful if you wish to parse .proto files from programs written in languages
-    other than C++: just run protoc as a background process and have it output
-    a FileDescriptorList, then parse that natively.
-  * Improved error message when an enum value's name conflicts with another
-    symbol defined in the enum type's scope, e.g. if two enum types declared
-    in the same scope have values with the same name.  This is disallowed for
-    compatibility with C++, but this wasn't clear from the error.
-  * Fixed absolute output paths on Windows.
-  * Allow trailing slashes in --proto_path mappings.
-
-  C++
-  * Reflection objects are now per-class rather than per-instance.  To make this
-    possible, the Reflection interface had to be changed such that all methods
-    take the Message instance as a parameter.  This change improves performance
-    significantly in memory-bandwidth-limited use cases, since it makes the
-    message objects smaller.  Note that source-incompatible interface changes
-    like this will not be made again after the library leaves beta.
-  * Heuristically detect sub-messages when printing unknown fields.
-  * Fix static initialization ordering bug that caused crashes at startup when
-    compiling on Mac with static linking.
-  * Fixed TokenizerTest when compiling with -DNDEBUG on Linux.
-  * Fixed incorrect definition of kint32min.
-  * Fix bytes type setter to work with byte sequences with embedded NULLs.
-  * Other irrelevant tweaks.
-
-  Java
-  * Fixed UnknownFieldSet's parsing of varints larger than 32 bits.
-  * Fixed TextFormat's parsing of "inf" and "nan".
-  * Fixed TextFormat's parsing of comments.
-  * Added info to Java POM that will be required when we upload the
-    package to a Maven repo.
-
-  Python
-  * MergeFrom(message) and CopyFrom(message) are now implemented.
-  * SerializeToString() raises an exception if the message is missing required
-    fields.
-  * Code organization improvements.
-  * Fixed doc comments for RpcController and RpcChannel, which had somehow been
-    swapped.
-  * Fixed text_format_test on Windows where floating-point exponents sometimes
-    contain extra zeros.
-  * Fix Python service CallMethod() implementation.
-
-  Other
-  * Improved readmes.
-  * VIM syntax highlighting improvements.
-
-2008-07-07 version 2.0.0:
-
-  * First public release.

+ 0 - 102
CONTRIBUTORS.txt

@@ -1,102 +0,0 @@
-This file contains a list of people who have made large contributions
-to the public version of Protocol Buffers.
-
-Original Protocol Buffers design and implementation:
-  Sanjay Ghemawat <sanjay@google.com>
-  Jeff Dean <jeff@google.com>
-  Daniel Dulitz <daniel@google.com>
-  Craig Silverstein
-  Paul Haahr <haahr@google.com>
-  Corey Anderson <corin@google.com>
-  (and many others)
-
-Proto2 C++ and Java primary author:
-  Kenton Varda <kenton@google.com>
-
-Proto2 Python primary authors:
-  Will Robinson <robinson@google.com>
-  Petar Petrov <petar@google.com>
-
-Java Nano primary authors:
-  Brian Duff <bduff@google.com>
-  Tom Chao <chaot@google.com>
-  Max Cai <maxtroy@google.com>
-  Ulas Kirazci <ulas@google.com>
-
-Large code contributions:
-  Jason Hsueh <jasonh@google.com>
-  Joseph Schorr <jschorr@google.com>
-  Wenbo Zhu <wenboz@google.com>
-
-Large quantity of code reviews:
-  Scott Bruce <sbruce@google.com>
-  Frank Yellin
-  Neal Norwitz <nnorwitz@google.com>
-  Jeffrey Yasskin <jyasskin@google.com>
-  Ambrose Feinstein <ambrose@google.com>
-
-Documentation:
-  Lisa Carey <lcarey@google.com>
-
-Maven packaging:
-  Gregory Kick <gak@google.com>
-
-Patch contributors:
-  Kevin Ko <kevin.s.ko@gmail.com>
-    * Small patch to handle trailing slashes in --proto_path flag.
-  Johan Euphrosine <proppy@aminche.com>
-    * Small patch to fix Python CallMethod().
-  Ulrich Kunitz <kune@deine-taler.de>
-    * Small optimizations to Python serialization.
-  Leandro Lucarella <llucax@gmail.com>
-    * VI syntax highlighting tweaks.
-    * Fix compiler to not make output executable.
-  Dilip Joseph <dilip.antony.joseph@gmail.com>
-    * Heuristic detection of sub-messages when printing unknown fields in
-      text format.
-  Brian Atkinson <nairb774@gmail.com>
-    * Added @Override annotation to generated Java code where appropriate.
-  Vincent Choinière <Choiniere.Vincent@hydro.qc.ca>
-    * Tru64 support.
-  Monty Taylor <monty.taylor@gmail.com>
-    * Solaris 10 + Sun Studio fixes.
-  Alek Storm <alek.storm@gmail.com>
-    * Slicing support for repeated scalar fields for the Python API.
-  Oleg Smolsky <oleg.smolsky@gmail.com>
-    * MS Visual Studio error format option.
-    * Detect unordered_map in stl_hash.m4.
-  Brian Olson <brianolson@google.com>
-    * gzip/zlib I/O support.
-  Michael Poole <mdpoole@troilus.org>
-    * Fixed warnings about generated constructors not explicitly initializing
-      all fields (only present with certain compiler settings).
-    * Added generation of field number constants.
-  Wink Saville <wink@google.com>
-    * Fixed initialization ordering problem in logging code.
-  Will Pierce <willp@nuclei.com>
-    * Small patch improving performance of in Python serialization.
-  Alexandre Vassalotti <alexandre@peadrop.com>
-    * Emacs mode for Protocol Buffers (editors/protobuf-mode.el).
-  Scott Stafford <scott.stafford@gmail.com>
-    * Added Swap(), SwapElements(), and RemoveLast() to Reflection interface.
-  Alexander Melnikov <alm@sibmail.ru>
-    * HPUX support.
-  Oliver Jowett <oliver.jowett@gmail.com>
-    * Detect whether zlib is new enough in configure script.
-    * Fixes for Solaris 10 32/64-bit confusion.
-  Evan Jones <evanj@mit.edu>
-    * Optimize Java serialization code when writing a small message to a stream.
-    * Optimize Java serialization of strings so that UTF-8 encoding happens only
-      once per string per serialization call.
-    * Clean up some Java warnings.
-    * Fix bug with permanent callbacks that delete themselves when run.
-  Michael Kucharski <m.kucharski@gmail.com>
-    * Added CodedInputStream.getTotalBytesRead().
-  Kacper Kowalik <xarthisius.kk@gmail.com>
-    * Fixed m4/acx_pthread.m4 problem for some Linux distributions.
-  William Orr <will@worrbase.com>
-    * Fixed detection of sched_yield on Solaris.
-    * Added atomicops for Solaris
-  Andrew Paprocki <andrew@ishiboo.com>
-    * Fixed minor IBM xlC compiler build issues
-    * Added atomicops for AIX (POWER)

+ 0 - 42
LICENSE

@@ -1,42 +0,0 @@
-This license applies to all parts of Protocol Buffers except the following:
-
-  - Atomicops support for generic gcc, located in
-    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
-    This file is copyrighted by Red Hat Inc.
-
-  - Atomicops support for AIX/POWER, located in
-    src/google/protobuf/stubs/atomicops_internals_power.h.
-    This file is copyrighted by Bloomberg Finance LP.
-
-Copyright 2014, Google Inc.  All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Code generated by the Protocol Buffer compiler is owned by the owner
-of the input file used when generating it.  This code is not
-standalone and requires a support library to be linked with it.  This
-support library is itself covered by the above license.

+ 0 - 1112
Makefile.am

@@ -1,1112 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-ACLOCAL_AMFLAGS = -I m4
-
-AUTOMAKE_OPTIONS = foreign
-
-# Build . before src so that our all-local and clean-local hooks kicks in at
-# the right time.
-SUBDIRS = . src
-
-# Always include gmock in distributions.
-DIST_SUBDIRS = $(subdirs) src conformance benchmarks
-
-# Build gmock before we build protobuf tests.  We don't add gmock to SUBDIRS
-# because then "make check" would also build and run all of gmock's own tests,
-# which takes a lot of time and is generally not useful to us.  Also, we don't
-# want "make install" to recurse into gmock since we don't want to overwrite
-# the installed version of gmock if there is one.
-check-local:
-	@echo "Making lib/libgmock.a lib/libgmock_main.a in gmock"
-	@cd gmock && $(MAKE) $(AM_MAKEFLAGS) lib/libgmock.la lib/libgmock_main.la
-	@cd gmock/gtest && $(MAKE) $(AM_MAKEFLAGS) lib/libgtest.la lib/libgtest_main.la
-
-# We would like to clean gmock when "make clean" is invoked.  But we have to
-# be careful because clean-local is also invoked during "make distclean", but
-# "make distclean" already recurses into gmock because it's listed among the
-# DIST_SUBDIRS.  distclean will delete gmock/Makefile, so if we then try to
-# cd to the directory again and "make clean" it will fail.  So, check that the
-# Makefile exists before recursing.
-clean-local:
-	@if test -e gmock/Makefile; then \
-	  echo "Making clean in gmock"; \
-	  cd gmock && $(MAKE) $(AM_MAKEFLAGS) clean; \
-	fi; \
-	if test -e conformance/Makefile; then \
-	  echo "Making clean in conformance"; \
-	  cd conformance && $(MAKE) $(AM_MAKEFLAGS) clean; \
-	fi; \
-	if test -e benchmarks/Makefile; then \
-	  echo "Making clean in benchmarks"; \
-	  cd benchmarks && $(MAKE) $(AM_MAKEFLAGS) clean; \
-	fi; \
-	if test -e objectivec/DevTools; then \
-	  echo "Cleaning any ObjC pyc files"; \
-	  rm -f objectivec/DevTools/*.pyc; \
-	fi
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = protobuf.pc protobuf-lite.pc
-
-csharp_EXTRA_DIST=                                                           \
-  csharp/.gitignore                                                          \
-  csharp/CHANGES.txt                                                         \
-  csharp/Google.Protobuf.Tools.nuspec                                        \
-  csharp/README.md                                                           \
-  csharp/build_packages.bat                                                  \
-  csharp/build_tools.sh                                                      \
-  csharp/buildall.sh                                                         \
-  csharp/generate_protos.sh                                                  \
-  csharp/global.json                                                         \
-  csharp/keys/Google.Protobuf.public.snk                                     \
-  csharp/keys/Google.Protobuf.snk                                            \
-  csharp/keys/README.md                                                      \
-  csharp/protos/README.md                                                    \
-  csharp/protos/map_unittest_proto3.proto                                    \
-  csharp/protos/unittest_custom_options_proto3.proto                         \
-  csharp/protos/unittest_import_public_proto3.proto                          \
-  csharp/protos/unittest_import_proto3.proto                                 \
-  csharp/protos/unittest_issues.proto                                        \
-  csharp/protos/unittest_proto3.proto                                        \
-  csharp/src/AddressBook/AddPerson.cs                                        \
-  csharp/src/AddressBook/Addressbook.cs                                      \
-  csharp/src/AddressBook/AddressBook.csproj                                  \
-  csharp/src/AddressBook/ListPeople.cs                                       \
-  csharp/src/AddressBook/Program.cs                                          \
-  csharp/src/AddressBook/SampleUsage.cs                                      \
-  csharp/src/Google.Protobuf.Conformance/Conformance.cs                      \
-  csharp/src/Google.Protobuf.Conformance/Google.Protobuf.Conformance.csproj  \
-  csharp/src/Google.Protobuf.Conformance/Program.cs                          \
-  csharp/src/Google.Protobuf.JsonDump/Google.Protobuf.JsonDump.csproj        \
-  csharp/src/Google.Protobuf.JsonDump/Program.cs                             \
-  csharp/src/Google.Protobuf.Test/ByteStringTest.cs                          \
-  csharp/src/Google.Protobuf.Test/CodedInputStreamExtensions.cs              \
-  csharp/src/Google.Protobuf.Test/CodedInputStreamTest.cs                    \
-  csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs                   \
-  csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs                \
-  csharp/src/Google.Protobuf.Test/Collections/ProtobufEqualityComparersTest.cs \
-  csharp/src/Google.Protobuf.Test/Collections/RepeatedFieldTest.cs           \
-  csharp/src/Google.Protobuf.Test/Compatibility/PropertyInfoExtensionsTest.cs \
-  csharp/src/Google.Protobuf.Test/Compatibility/StreamExtensionsTest.cs      \
-  csharp/src/Google.Protobuf.Test/Compatibility/TypeExtensionsTest.cs        \
-  csharp/src/Google.Protobuf.Test/DeprecatedMemberTest.cs                    \
-  csharp/src/Google.Protobuf.Test/EqualityTester.cs                          \
-  csharp/src/Google.Protobuf.Test/FieldCodecTest.cs                          \
-  csharp/src/Google.Protobuf.Test/GeneratedMessageTest.cs                    \
-  csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj                \
-  csharp/src/Google.Protobuf.Test/IssuesTest.cs                              \
-  csharp/src/Google.Protobuf.Test/JsonFormatterTest.cs                       \
-  csharp/src/Google.Protobuf.Test/JsonParserTest.cs                          \
-  csharp/src/Google.Protobuf.Test/JsonTokenizerTest.cs                       \
-  csharp/src/Google.Protobuf.Test/Program.cs                                 \
-  csharp/src/Google.Protobuf.Test/Reflection/CustomOptionsTest.cs            \
-  csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs              \
-  csharp/src/Google.Protobuf.Test/Reflection/FieldAccessTest.cs              \
-  csharp/src/Google.Protobuf.Test/Reflection/TypeRegistryTest.cs             \
-  csharp/src/Google.Protobuf.Test/SampleEnum.cs                              \
-  csharp/src/Google.Protobuf.Test/SampleMessages.cs                          \
-  csharp/src/Google.Protobuf.Test/SampleNaNs.cs                              \
-  csharp/src/Google.Protobuf.Test/TestCornerCases.cs                         \
-  csharp/src/Google.Protobuf.Test/TestProtos/ForeignMessagePartial.cs        \
-  csharp/src/Google.Protobuf.Test/TestProtos/MapUnittestProto3.cs            \
-  csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs           \
-  csharp/src/Google.Protobuf.Test/TestProtos/UnittestCustomOptionsProto3.cs  \
-  csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportProto3.cs         \
-  csharp/src/Google.Protobuf.Test/TestProtos/UnittestImportPublicProto3.cs   \
-  csharp/src/Google.Protobuf.Test/TestProtos/UnittestIssues.cs               \
-  csharp/src/Google.Protobuf.Test/TestProtos/UnittestProto3.cs               \
-  csharp/src/Google.Protobuf.Test/TestProtos/UnittestWellKnownTypes.cs       \
-  csharp/src/Google.Protobuf.Test/WellKnownTypes/AnyTest.cs                  \
-  csharp/src/Google.Protobuf.Test/WellKnownTypes/DurationTest.cs             \
-  csharp/src/Google.Protobuf.Test/WellKnownTypes/FieldMaskTest.cs            \
-  csharp/src/Google.Protobuf.Test/WellKnownTypes/TimestampTest.cs            \
-  csharp/src/Google.Protobuf.Test/WellKnownTypes/WrappersTest.cs             \
-  csharp/src/Google.Protobuf.Test/UnknownFieldSetTest.cs                     \
-  csharp/src/Google.Protobuf.sln                                             \
-  csharp/src/Google.Protobuf/ByteArray.cs                                    \
-  csharp/src/Google.Protobuf/ByteString.cs                                   \
-  csharp/src/Google.Protobuf/CodedInputStream.cs                             \
-  csharp/src/Google.Protobuf/CodedOutputStream.ComputeSize.cs                \
-  csharp/src/Google.Protobuf/CodedOutputStream.cs                            \
-  csharp/src/Google.Protobuf/Collections/Lists.cs                            \
-  csharp/src/Google.Protobuf/Collections/MapField.cs                         \
-  csharp/src/Google.Protobuf/Collections/ProtobufEqualityComparers.cs        \
-  csharp/src/Google.Protobuf/Collections/ReadOnlyDictionary.cs               \
-  csharp/src/Google.Protobuf/Collections/RepeatedField.cs                    \
-  csharp/src/Google.Protobuf/Compatibility/PropertyInfoExtensions.cs         \
-  csharp/src/Google.Protobuf/Compatibility/StreamExtensions.cs               \
-  csharp/src/Google.Protobuf/Compatibility/TypeExtensions.cs                 \
-  csharp/src/Google.Protobuf/FieldCodec.cs                                   \
-  csharp/src/Google.Protobuf/FrameworkPortability.cs                         \
-  csharp/src/Google.Protobuf/Google.Protobuf.csproj                          \
-  csharp/src/Google.Protobuf/ICustomDiagnosticMessage.cs                     \
-  csharp/src/Google.Protobuf/IDeepCloneable.cs                               \
-  csharp/src/Google.Protobuf/IMessage.cs                                     \
-  csharp/src/Google.Protobuf/InvalidJsonException.cs                         \
-  csharp/src/Google.Protobuf/InvalidProtocolBufferException.cs               \
-  csharp/src/Google.Protobuf/JsonFormatter.cs                                \
-  csharp/src/Google.Protobuf/JsonParser.cs                                   \
-  csharp/src/Google.Protobuf/JsonToken.cs                                    \
-  csharp/src/Google.Protobuf/JsonTokenizer.cs                                \
-  csharp/src/Google.Protobuf/LimitedInputStream.cs                           \
-  csharp/src/Google.Protobuf/MessageExtensions.cs                            \
-  csharp/src/Google.Protobuf/MessageParser.cs                                \
-  csharp/src/Google.Protobuf/ProtoPreconditions.cs                           \
-  csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs                      \
-  csharp/src/Google.Protobuf/Reflection/CustomOptions.cs                     \
-  csharp/src/Google.Protobuf/Reflection/Descriptor.cs                        \
-  csharp/src/Google.Protobuf/Reflection/DescriptorBase.cs                    \
-  csharp/src/Google.Protobuf/Reflection/DescriptorPool.cs                    \
-  csharp/src/Google.Protobuf/Reflection/DescriptorUtil.cs                    \
-  csharp/src/Google.Protobuf/Reflection/DescriptorValidationException.cs     \
-  csharp/src/Google.Protobuf/Reflection/EnumDescriptor.cs                    \
-  csharp/src/Google.Protobuf/Reflection/EnumValueDescriptor.cs               \
-  csharp/src/Google.Protobuf/Reflection/FieldAccessorBase.cs                 \
-  csharp/src/Google.Protobuf/Reflection/FieldDescriptor.cs                   \
-  csharp/src/Google.Protobuf/Reflection/FieldType.cs                         \
-  csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs                    \
-  csharp/src/Google.Protobuf/Reflection/GeneratedClrTypeInfo.cs              \
-  csharp/src/Google.Protobuf/Reflection/IDescriptor.cs                       \
-  csharp/src/Google.Protobuf/Reflection/IFieldAccessor.cs                    \
-  csharp/src/Google.Protobuf/Reflection/MapFieldAccessor.cs                  \
-  csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs                 \
-  csharp/src/Google.Protobuf/Reflection/MethodDescriptor.cs                  \
-  csharp/src/Google.Protobuf/Reflection/OneofAccessor.cs                     \
-  csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs                   \
-  csharp/src/Google.Protobuf/Reflection/OriginalNameAttribute.cs             \
-  csharp/src/Google.Protobuf/Reflection/PackageDescriptor.cs                 \
-  csharp/src/Google.Protobuf/Reflection/PartialClasses.cs                    \
-  csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs                    \
-  csharp/src/Google.Protobuf/Reflection/RepeatedFieldAccessor.cs             \
-  csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs                 \
-  csharp/src/Google.Protobuf/Reflection/SingleFieldAccessor.cs               \
-  csharp/src/Google.Protobuf/Reflection/TypeRegistry.cs                      \
-  csharp/src/Google.Protobuf/WellKnownTypes/Any.cs                           \
-  csharp/src/Google.Protobuf/WellKnownTypes/AnyPartial.cs                    \
-  csharp/src/Google.Protobuf/WellKnownTypes/Api.cs                           \
-  csharp/src/Google.Protobuf/WellKnownTypes/Duration.cs                      \
-  csharp/src/Google.Protobuf/WellKnownTypes/DurationPartial.cs               \
-  csharp/src/Google.Protobuf/WellKnownTypes/Empty.cs                         \
-  csharp/src/Google.Protobuf/WellKnownTypes/FieldMask.cs                     \
-  csharp/src/Google.Protobuf/WellKnownTypes/FieldMaskPartial.cs              \
-  csharp/src/Google.Protobuf/WellKnownTypes/SourceContext.cs                 \
-  csharp/src/Google.Protobuf/WellKnownTypes/Struct.cs                        \
-  csharp/src/Google.Protobuf/WellKnownTypes/TimeExtensions.cs                \
-  csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs                     \
-  csharp/src/Google.Protobuf/WellKnownTypes/TimestampPartial.cs              \
-  csharp/src/Google.Protobuf/WellKnownTypes/Type.cs                          \
-  csharp/src/Google.Protobuf/WellKnownTypes/ValuePartial.cs                  \
-  csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs                      \
-  csharp/src/Google.Protobuf/WellKnownTypes/WrappersPartial.cs               \
-  csharp/src/Google.Protobuf/WireFormat.cs                                   \
-  csharp/src/Google.Protobuf/UnknownField.cs                                 \
-  csharp/src/Google.Protobuf/UnknownFieldSet.cs
-
-java_EXTRA_DIST=                                                                   \
-  java/README.md                                                                   \
-  java/core/generate-sources-build.xml                                             \
-  java/core/generate-test-sources-build.xml                                        \
-  java/core/pom.xml                                                                \
-  java/core/src/main/java/com/google/protobuf/AbstractMessage.java                 \
-  java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java             \
-  java/core/src/main/java/com/google/protobuf/AbstractParser.java                  \
-  java/core/src/main/java/com/google/protobuf/AbstractProtobufList.java            \
-  java/core/src/main/java/com/google/protobuf/Android.java                         \
-  java/core/src/main/java/com/google/protobuf/BlockingRpcChannel.java              \
-  java/core/src/main/java/com/google/protobuf/BlockingService.java                 \
-  java/core/src/main/java/com/google/protobuf/BooleanArrayList.java                \
-  java/core/src/main/java/com/google/protobuf/ByteBufferWriter.java                \
-  java/core/src/main/java/com/google/protobuf/ByteOutput.java                      \
-  java/core/src/main/java/com/google/protobuf/ByteString.java                      \
-  java/core/src/main/java/com/google/protobuf/CodedInputStream.java                \
-  java/core/src/main/java/com/google/protobuf/CodedOutputStream.java               \
-  java/core/src/main/java/com/google/protobuf/DiscardUnknownFieldsParser.java      \
-  java/core/src/main/java/com/google/protobuf/Descriptors.java                     \
-  java/core/src/main/java/com/google/protobuf/DoubleArrayList.java                 \
-  java/core/src/main/java/com/google/protobuf/DynamicMessage.java                  \
-  java/core/src/main/java/com/google/protobuf/ExperimentalApi.java                 \
-  java/core/src/main/java/com/google/protobuf/Extension.java                       \
-  java/core/src/main/java/com/google/protobuf/ExtensionLite.java                   \
-  java/core/src/main/java/com/google/protobuf/ExtensionRegistry.java               \
-  java/core/src/main/java/com/google/protobuf/ExtensionRegistryFactory.java        \
-  java/core/src/main/java/com/google/protobuf/ExtensionRegistryLite.java           \
-  java/core/src/main/java/com/google/protobuf/FieldSet.java                        \
-  java/core/src/main/java/com/google/protobuf/FloatArrayList.java                  \
-  java/core/src/main/java/com/google/protobuf/GeneratedMessage.java                \
-  java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java            \
-  java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java              \
-  java/core/src/main/java/com/google/protobuf/IntArrayList.java                    \
-  java/core/src/main/java/com/google/protobuf/Internal.java                        \
-  java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java  \
-  java/core/src/main/java/com/google/protobuf/IterableByteBufferInputStream.java   \
-  java/core/src/main/java/com/google/protobuf/LazyField.java                       \
-  java/core/src/main/java/com/google/protobuf/LazyFieldLite.java                   \
-  java/core/src/main/java/com/google/protobuf/LazyStringArrayList.java             \
-  java/core/src/main/java/com/google/protobuf/LazyStringList.java                  \
-  java/core/src/main/java/com/google/protobuf/LongArrayList.java                   \
-  java/core/src/main/java/com/google/protobuf/MapEntry.java                        \
-  java/core/src/main/java/com/google/protobuf/MapEntryLite.java                    \
-  java/core/src/main/java/com/google/protobuf/MapField.java                        \
-  java/core/src/main/java/com/google/protobuf/MapFieldLite.java                    \
-  java/core/src/main/java/com/google/protobuf/Message.java                         \
-  java/core/src/main/java/com/google/protobuf/MessageLite.java                     \
-  java/core/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java            \
-  java/core/src/main/java/com/google/protobuf/MessageLiteToString.java             \
-  java/core/src/main/java/com/google/protobuf/MessageOrBuilder.java                \
-  java/core/src/main/java/com/google/protobuf/MessageReflection.java               \
-  java/core/src/main/java/com/google/protobuf/MutabilityOracle.java                \
-  java/core/src/main/java/com/google/protobuf/NioByteString.java                   \
-  java/core/src/main/java/com/google/protobuf/Parser.java                          \
-  java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java    \
-  java/core/src/main/java/com/google/protobuf/ProtobufArrayList.java               \
-  java/core/src/main/java/com/google/protobuf/ProtocolMessageEnum.java             \
-  java/core/src/main/java/com/google/protobuf/ProtocolStringList.java              \
-  java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java            \
-  java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java          \
-  java/core/src/main/java/com/google/protobuf/RopeByteString.java                  \
-  java/core/src/main/java/com/google/protobuf/RpcCallback.java                     \
-  java/core/src/main/java/com/google/protobuf/RpcChannel.java                      \
-  java/core/src/main/java/com/google/protobuf/RpcController.java                   \
-  java/core/src/main/java/com/google/protobuf/RpcUtil.java                         \
-  java/core/src/main/java/com/google/protobuf/Service.java                         \
-  java/core/src/main/java/com/google/protobuf/ServiceException.java                \
-  java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java              \
-  java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java            \
-  java/core/src/main/java/com/google/protobuf/SmallSortedMap.java                  \
-  java/core/src/main/java/com/google/protobuf/TextFormat.java                      \
-  java/core/src/main/java/com/google/protobuf/TextFormatEscaper.java               \
-  java/core/src/main/java/com/google/protobuf/TextFormatParseInfoTree.java         \
-  java/core/src/main/java/com/google/protobuf/TextFormatParseLocation.java         \
-  java/core/src/main/java/com/google/protobuf/UninitializedMessageException.java   \
-  java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java                 \
-  java/core/src/main/java/com/google/protobuf/UnknownFieldSetLite.java             \
-  java/core/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java      \
-  java/core/src/main/java/com/google/protobuf/UnsafeByteOperations.java            \
-  java/core/src/main/java/com/google/protobuf/UnsafeUtil.java                      \
-  java/core/src/main/java/com/google/protobuf/Utf8.java                            \
-  java/core/src/main/java/com/google/protobuf/WireFormat.java                      \
-  java/core/src/test/java/com/google/protobuf/AbstractMessageTest.java             \
-  java/core/src/test/java/com/google/protobuf/AnyTest.java                         \
-  java/core/src/test/java/com/google/protobuf/BooleanArrayListTest.java            \
-  java/core/src/test/java/com/google/protobuf/BoundedByteStringTest.java           \
-  java/core/src/test/java/com/google/protobuf/ByteBufferWriterTest.java            \
-  java/core/src/test/java/com/google/protobuf/ByteStringTest.java                  \
-  java/core/src/test/java/com/google/protobuf/CheckUtf8Test.java                   \
-  java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java            \
-  java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java           \
-  java/core/src/test/java/com/google/protobuf/DecodeUtf8Test.java                  \
-  java/core/src/test/java/com/google/protobuf/DeprecatedFieldTest.java             \
-  java/core/src/test/java/com/google/protobuf/DescriptorsTest.java                 \
-  java/core/src/test/java/com/google/protobuf/DiscardUnknownFieldsTest.java        \
-  java/core/src/test/java/com/google/protobuf/DoubleArrayListTest.java             \
-  java/core/src/test/java/com/google/protobuf/DynamicMessageTest.java              \
-  java/core/src/test/java/com/google/protobuf/EnumTest.java                        \
-  java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java    \
-  java/core/src/test/java/com/google/protobuf/FieldPresenceTest.java               \
-  java/core/src/test/java/com/google/protobuf/FloatArrayListTest.java              \
-  java/core/src/test/java/com/google/protobuf/ForceFieldBuildersPreRun.java        \
-  java/core/src/test/java/com/google/protobuf/GeneratedMessageTest.java            \
-  java/core/src/test/java/com/google/protobuf/IntArrayListTest.java                \
-  java/core/src/test/java/com/google/protobuf/IsValidUtf8Test.java                 \
-  java/core/src/test/java/com/google/protobuf/IsValidUtf8TestUtil.java             \
-  java/core/src/test/java/com/google/protobuf/LazyFieldLiteTest.java               \
-  java/core/src/test/java/com/google/protobuf/LazyFieldTest.java                   \
-  java/core/src/test/java/com/google/protobuf/LazyMessageLiteTest.java             \
-  java/core/src/test/java/com/google/protobuf/LazyStringArrayListTest.java         \
-  java/core/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java          \
-  java/core/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java           \
-  java/core/src/test/java/com/google/protobuf/LiteTest.java                        \
-  java/core/src/test/java/com/google/protobuf/LiteralByteStringTest.java           \
-  java/core/src/test/java/com/google/protobuf/LongArrayListTest.java               \
-  java/core/src/test/java/com/google/protobuf/MapForProto2LiteTest.java            \
-  java/core/src/test/java/com/google/protobuf/MapForProto2Test.java                \
-  java/core/src/test/java/com/google/protobuf/MapTest.java                         \
-  java/core/src/test/java/com/google/protobuf/MessageTest.java                     \
-  java/core/src/test/java/com/google/protobuf/NestedBuildersTest.java              \
-  java/core/src/test/java/com/google/protobuf/NioByteStringTest.java               \
-  java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java             \
-  java/core/src/test/java/com/google/protobuf/ParserTest.java                      \
-  java/core/src/test/java/com/google/protobuf/ProtobufArrayListTest.java           \
-  java/core/src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java      \
-  java/core/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java     \
-  java/core/src/test/java/com/google/protobuf/RopeByteStringTest.java              \
-  java/core/src/test/java/com/google/protobuf/ServiceTest.java                     \
-  java/core/src/test/java/com/google/protobuf/SingleFieldBuilderV3Test.java        \
-  java/core/src/test/java/com/google/protobuf/SmallSortedMapTest.java              \
-  java/core/src/test/java/com/google/protobuf/TestBadIdentifiers.java              \
-  java/core/src/test/java/com/google/protobuf/TestBadIdentifiersLite.java          \
-  java/core/src/test/java/com/google/protobuf/TestUtil.java                        \
-  java/core/src/test/java/com/google/protobuf/TestUtilLite.java                    \
-  java/core/src/test/java/com/google/protobuf/TextFormatParseInfoTreeTest.java     \
-  java/core/src/test/java/com/google/protobuf/TextFormatParseLocationTest.java     \
-  java/core/src/test/java/com/google/protobuf/TextFormatTest.java                  \
-  java/core/src/test/java/com/google/protobuf/UnknownEnumValueTest.java            \
-  java/core/src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java         \
-  java/core/src/test/java/com/google/protobuf/UnknownFieldSetTest.java             \
-  java/core/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java  \
-  java/core/src/test/java/com/google/protobuf/WellKnownTypesTest.java              \
-  java/core/src/test/java/com/google/protobuf/WireFormatTest.java                  \
-  java/core/src/test/proto/com/google/protobuf/any_test.proto                      \
-  java/core/src/test/proto/com/google/protobuf/deprecated_file.proto               \
-  java/core/src/test/proto/com/google/protobuf/field_presence_test.proto           \
-  java/core/src/test/proto/com/google/protobuf/lazy_fields_lite.proto              \
-  java/core/src/test/proto/com/google/protobuf/lite_equals_and_hash.proto          \
-  java/core/src/test/proto/com/google/protobuf/map_for_proto2_lite_test.proto      \
-  java/core/src/test/proto/com/google/protobuf/map_for_proto2_test.proto           \
-  java/core/src/test/proto/com/google/protobuf/map_initialization_order_test.proto \
-  java/core/src/test/proto/com/google/protobuf/map_test.proto                      \
-  java/core/src/test/proto/com/google/protobuf/multiple_files_test.proto           \
-  java/core/src/test/proto/com/google/protobuf/nested_builders_test.proto          \
-  java/core/src/test/proto/com/google/protobuf/nested_extension.proto              \
-  java/core/src/test/proto/com/google/protobuf/nested_extension_lite.proto         \
-  java/core/src/test/proto/com/google/protobuf/non_nested_extension.proto          \
-  java/core/src/test/proto/com/google/protobuf/non_nested_extension_lite.proto     \
-  java/core/src/test/proto/com/google/protobuf/outer_class_name_test.proto         \
-  java/core/src/test/proto/com/google/protobuf/outer_class_name_test2.proto        \
-  java/core/src/test/proto/com/google/protobuf/outer_class_name_test3.proto        \
-  java/core/src/test/proto/com/google/protobuf/test_bad_identifiers.proto          \
-  java/core/src/test/proto/com/google/protobuf/test_check_utf8.proto               \
-  java/core/src/test/proto/com/google/protobuf/test_check_utf8_size.proto          \
-  java/core/src/test/proto/com/google/protobuf/test_custom_options.proto           \
-  java/core/src/test/proto/com/google/protobuf/test_extra_interfaces.proto         \
-  java/lite/generate-sources-build.xml                                             \
-  java/lite/generate-test-sources-build.xml                                        \
-  java/lite/pom.xml                                                                \
-  java/pom.xml                                                                     \
-  java/util/pom.xml                                                                \
-  java/util/src/main/java/com/google/protobuf/util/Durations.java                  \
-  java/util/src/main/java/com/google/protobuf/util/FieldMaskTree.java              \
-  java/util/src/main/java/com/google/protobuf/util/FieldMaskUtil.java              \
-  java/util/src/main/java/com/google/protobuf/util/JsonFormat.java                 \
-  java/util/src/main/java/com/google/protobuf/util/TimeUtil.java                   \
-  java/util/src/main/java/com/google/protobuf/util/Timestamps.java                 \
-  java/util/src/test/java/com/google/protobuf/util/FieldMaskTreeTest.java          \
-  java/util/src/test/java/com/google/protobuf/util/FieldMaskUtilTest.java          \
-  java/util/src/test/java/com/google/protobuf/util/JsonFormatTest.java             \
-  java/util/src/test/java/com/google/protobuf/util/TimeUtilTest.java               \
-  java/util/src/test/proto/com/google/protobuf/util/json_test.proto
-
-javanano_EXTRA_DIST=                                                                      \
-  javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java          \
-  javanano/src/main/java/com/google/protobuf/nano/FieldData.java                          \
-  javanano/src/main/java/com/google/protobuf/nano/FieldArray.java                         \
-  javanano/src/main/java/com/google/protobuf/nano/WireFormatNano.java                     \
-  javanano/src/main/java/com/google/protobuf/nano/Extension.java                          \
-  javanano/src/main/java/com/google/protobuf/nano/CodedInputByteBufferNano.java           \
-  javanano/src/main/java/com/google/protobuf/nano/UnknownFieldData.java                   \
-  javanano/src/main/java/com/google/protobuf/nano/MessageNano.java                        \
-  javanano/src/main/java/com/google/protobuf/nano/InternalNano.java                       \
-  javanano/src/main/java/com/google/protobuf/nano/InvalidProtocolBufferNanoException.java \
-  javanano/src/main/java/com/google/protobuf/nano/MapFactories.java                       \
-  javanano/src/main/java/com/google/protobuf/nano/ExtendableMessageNano.java              \
-  javanano/src/main/java/com/google/protobuf/nano/MessageNanoPrinter.java                 \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_accessors_nano.proto           \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_nano.proto          \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_reference_types_nano.proto     \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_extension_repeated_nano.proto  \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_has_nano.proto                 \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_nano.proto                     \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nameclash_nano.proto  \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_single_nano.proto              \
-  javanano/src/test/java/com/google/protobuf/nano/NanoTest.java                           \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_simple_nano.proto              \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_import_nano.proto              \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_merge_nano.proto      \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_extension_nano.proto           \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_packables_nano.proto  \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_extension_singular_nano.proto  \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_recursive_nano.proto           \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_extension_packed_nano.proto    \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_enum_validity_nano.proto       \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_stringutf8_nano.proto          \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nano.proto            \
-  javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_multiple_nano.proto \
-  javanano/src/test/java/com/google/protobuf/nano/map_test.proto                          \
-  javanano/README.md                                                                      \
-  javanano/pom.xml
-
-objectivec_EXTRA_DIST=                                                       \
-  objectivec/DevTools/check_version_stamps.sh                                \
-  objectivec/DevTools/compile_testing_protos.sh                              \
-  objectivec/DevTools/full_mac_build.sh                                      \
-  objectivec/DevTools/pddm.py                                                \
-  objectivec/DevTools/pddm_tests.py                                          \
-  objectivec/generate_well_known_types.sh                                    \
-  objectivec/google/protobuf/Any.pbobjc.h                                    \
-  objectivec/google/protobuf/Any.pbobjc.m                                    \
-  objectivec/google/protobuf/Api.pbobjc.h                                    \
-  objectivec/google/protobuf/Api.pbobjc.m                                    \
-  objectivec/google/protobuf/Duration.pbobjc.h                               \
-  objectivec/google/protobuf/Duration.pbobjc.m                               \
-  objectivec/google/protobuf/Empty.pbobjc.h                                  \
-  objectivec/google/protobuf/Empty.pbobjc.m                                  \
-  objectivec/google/protobuf/FieldMask.pbobjc.h                              \
-  objectivec/google/protobuf/FieldMask.pbobjc.m                              \
-  objectivec/google/protobuf/SourceContext.pbobjc.h                          \
-  objectivec/google/protobuf/SourceContext.pbobjc.m                          \
-  objectivec/google/protobuf/Struct.pbobjc.h                                 \
-  objectivec/google/protobuf/Struct.pbobjc.m                                 \
-  objectivec/google/protobuf/Timestamp.pbobjc.h                              \
-  objectivec/google/protobuf/Timestamp.pbobjc.m                              \
-  objectivec/google/protobuf/Type.pbobjc.h                                   \
-  objectivec/google/protobuf/Type.pbobjc.m                                   \
-  objectivec/google/protobuf/Wrappers.pbobjc.h                               \
-  objectivec/google/protobuf/Wrappers.pbobjc.m                               \
-  objectivec/GPBArray.h                                                      \
-  objectivec/GPBArray.m                                                      \
-  objectivec/GPBArray_PackagePrivate.h                                       \
-  objectivec/GPBBootstrap.h                                                  \
-  objectivec/GPBCodedInputStream.h                                           \
-  objectivec/GPBCodedInputStream.m                                           \
-  objectivec/GPBCodedInputStream_PackagePrivate.h                            \
-  objectivec/GPBCodedOutputStream.h                                          \
-  objectivec/GPBCodedOutputStream.m                                          \
-  objectivec/GPBCodedOutputStream_PackagePrivate.h                           \
-  objectivec/GPBDescriptor.h                                                 \
-  objectivec/GPBDescriptor.m                                                 \
-  objectivec/GPBDescriptor_PackagePrivate.h                                  \
-  objectivec/GPBDictionary.h                                                 \
-  objectivec/GPBDictionary.m                                                 \
-  objectivec/GPBDictionary_PackagePrivate.h                                  \
-  objectivec/GPBExtensionInternals.h                                         \
-  objectivec/GPBExtensionInternals.m                                         \
-  objectivec/GPBExtensionRegistry.h                                          \
-  objectivec/GPBExtensionRegistry.m                                          \
-  objectivec/GPBMessage.h                                                    \
-  objectivec/GPBMessage.m                                                    \
-  objectivec/GPBMessage_PackagePrivate.h                                     \
-  objectivec/GPBProtocolBuffers.h                                            \
-  objectivec/GPBProtocolBuffers.m                                            \
-  objectivec/GPBProtocolBuffers_RuntimeSupport.h                             \
-  objectivec/GPBRootObject.h                                                 \
-  objectivec/GPBRootObject.m                                                 \
-  objectivec/GPBRootObject_PackagePrivate.h                                  \
-  objectivec/GPBRuntimeTypes.h                                               \
-  objectivec/GPBUnknownField.h                                               \
-  objectivec/GPBUnknownField.m                                               \
-  objectivec/GPBUnknownField_PackagePrivate.h                                \
-  objectivec/GPBUnknownFieldSet.h                                            \
-  objectivec/GPBUnknownFieldSet.m                                            \
-  objectivec/GPBUnknownFieldSet_PackagePrivate.h                             \
-  objectivec/GPBUtilities.h                                                  \
-  objectivec/GPBUtilities.m                                                  \
-  objectivec/GPBUtilities_PackagePrivate.h                                   \
-  objectivec/GPBWellKnownTypes.h                                             \
-  objectivec/GPBWellKnownTypes.m                                             \
-  objectivec/GPBWireFormat.h                                                 \
-  objectivec/GPBWireFormat.m                                                 \
-  objectivec/ProtocolBuffers_iOS.xcodeproj/project.pbxproj                   \
-  objectivec/ProtocolBuffers_iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
-  objectivec/ProtocolBuffers_iOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \
-  objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
-  objectivec/ProtocolBuffers_iOS.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
-  objectivec/ProtocolBuffers_OSX.xcodeproj/project.pbxproj                   \
-  objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
-  objectivec/ProtocolBuffers_OSX.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings \
-  objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/PerformanceTests.xcscheme \
-  objectivec/ProtocolBuffers_OSX.xcodeproj/xcshareddata/xcschemes/ProtocolBuffers.xcscheme \
-  objectivec/README.md                                                       \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.pbxproj \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/OSXCocoaPodsTester.xcscheme \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.h \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/AppDelegate.m \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Base.lproj/MainMenu.xib \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/Info.plist \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/OSXCocoaPodsTester/main.m    \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-framework            \
-  objectivec/Tests/CocoaPods/OSXCocoaPodsTester/Podfile-static               \
-  objectivec/Tests/CocoaPods/README.md                                       \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-framework            \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/Podfile-static               \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.pbxproj \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/project.xcworkspace/contents.xcworkspacedata \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester.xcodeproj/xcshareddata/xcschemes/iOSCocoaPodsTester.xcscheme \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.h \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/AppDelegate.m \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Assets.xcassets/AppIcon.appiconset/Contents.json \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/LaunchScreen.storyboard \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Base.lproj/Main.storyboard \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/Info.plist \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.h \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/ViewController.m \
-  objectivec/Tests/CocoaPods/iOSCocoaPodsTester/iOSCocoaPodsTester/main.m    \
-  objectivec/Tests/CocoaPods/run_tests.sh                                    \
-  objectivec/Tests/golden_message                                            \
-  objectivec/Tests/golden_packed_fields_message                              \
-  objectivec/Tests/GPBARCUnittestProtos.m                                    \
-  objectivec/Tests/GPBArrayTests.m                                           \
-  objectivec/Tests/GPBCodedInputStreamTests.m                                \
-  objectivec/Tests/GPBCodedOuputStreamTests.m                                \
-  objectivec/Tests/GPBConcurrencyTests.m                                     \
-  objectivec/Tests/GPBDescriptorTests.m                                      \
-  objectivec/Tests/GPBDictionaryTests+Bool.m                                 \
-  objectivec/Tests/GPBDictionaryTests+Int32.m                                \
-  objectivec/Tests/GPBDictionaryTests+Int64.m                                \
-  objectivec/Tests/GPBDictionaryTests+String.m                               \
-  objectivec/Tests/GPBDictionaryTests+UInt32.m                               \
-  objectivec/Tests/GPBDictionaryTests+UInt64.m                               \
-  objectivec/Tests/GPBDictionaryTests.m                                      \
-  objectivec/Tests/GPBDictionaryTests.pddm                                   \
-  objectivec/Tests/GPBExtensionRegistryTest.m                                \
-  objectivec/Tests/GPBMessageTests+Merge.m                                   \
-  objectivec/Tests/GPBMessageTests+Runtime.m                                 \
-  objectivec/Tests/GPBMessageTests+Serialization.m                           \
-  objectivec/Tests/GPBMessageTests.m                                         \
-  objectivec/Tests/GPBObjectiveCPlusPlusTest.mm                              \
-  objectivec/Tests/GPBPerfTests.m                                            \
-  objectivec/Tests/GPBSwiftTests.swift                                       \
-  objectivec/Tests/GPBTestUtilities.h                                        \
-  objectivec/Tests/GPBTestUtilities.m                                        \
-  objectivec/Tests/GPBUnittestProtos.m                                       \
-  objectivec/Tests/GPBUnittestProtos2.m                                      \
-  objectivec/Tests/GPBUnknownFieldSetTest.m                                  \
-  objectivec/Tests/GPBUtilitiesTests.m                                       \
-  objectivec/Tests/GPBWellKnownTypesTest.m                                   \
-  objectivec/Tests/GPBWireFormatTests.m                                      \
-  objectivec/Tests/iOSTestHarness/AppDelegate.m                              \
-  objectivec/Tests/iOSTestHarness/en.lproj/InfoPlist.strings                 \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_20.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_29.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_40.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_58.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_60.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_76.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_80.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_87.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_120.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_152.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_167.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_180.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/appicon_1024.png \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/AppIcon.appiconset/Contents.json \
-  objectivec/Tests/iOSTestHarness/Images.xcassets/LaunchImage.launchimage/Contents.json \
-  objectivec/Tests/iOSTestHarness/Info.plist                                  \
-  objectivec/Tests/iOSTestHarness/LaunchScreen.xib                            \
-  objectivec/Tests/text_format_map_unittest_data.txt                          \
-  objectivec/Tests/text_format_unittest_data.txt                              \
-  objectivec/Tests/unittest_cycle.proto                                       \
-  objectivec/Tests/unittest_deprecated.proto                                  \
-  objectivec/Tests/unittest_deprecated_file.proto                             \
-  objectivec/Tests/unittest_extension_chain_a.proto                           \
-  objectivec/Tests/unittest_extension_chain_b.proto                           \
-  objectivec/Tests/unittest_extension_chain_c.proto                           \
-  objectivec/Tests/unittest_extension_chain_d.proto                           \
-  objectivec/Tests/unittest_extension_chain_e.proto                           \
-  objectivec/Tests/unittest_extension_chain_f.proto                           \
-  objectivec/Tests/unittest_extension_chain_g.proto                           \
-  objectivec/Tests/unittest_objc.proto                                        \
-  objectivec/Tests/unittest_objc_startup.proto                                \
-  objectivec/Tests/unittest_runtime_proto2.proto                              \
-  objectivec/Tests/unittest_runtime_proto3.proto                              \
-  objectivec/Tests/UnitTests-Bridging-Header.h                                \
-  objectivec/Tests/UnitTests-Info.plist                                       \
-  Protobuf.podspec
-
-php_EXTRA_DIST=                                                       \
-  composer.json                                                       \
-  php/README.md                                                       \
-  php/composer.json                                                   \
-  php/ext/google/protobuf/array.c                                     \
-  php/ext/google/protobuf/config.m4                                   \
-  php/ext/google/protobuf/def.c                                       \
-  php/ext/google/protobuf/encode_decode.c                             \
-  php/ext/google/protobuf/map.c                                       \
-  php/ext/google/protobuf/message.c                                   \
-  php/ext/google/protobuf/package.xml                                 \
-  php/ext/google/protobuf/protobuf.c                                  \
-  php/ext/google/protobuf/protobuf.h                                  \
-  php/ext/google/protobuf/storage.c                                   \
-  php/ext/google/protobuf/type_check.c                                \
-  php/ext/google/protobuf/upb.c                                       \
-  php/ext/google/protobuf/upb.h                                       \
-  php/ext/google/protobuf/utf8.c                                      \
-  php/ext/google/protobuf/utf8.h                                      \
-  php/generate_descriptor_protos.sh                                   \
-  php/phpunit.xml                                                     \
-  php/src/GPBMetadata/Google/Protobuf/Any.php                         \
-  php/src/GPBMetadata/Google/Protobuf/Api.php                         \
-  php/src/GPBMetadata/Google/Protobuf/Duration.php                    \
-  php/src/GPBMetadata/Google/Protobuf/FieldMask.php                   \
-  php/src/GPBMetadata/Google/Protobuf/GPBEmpty.php                    \
-  php/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php         \
-  php/src/GPBMetadata/Google/Protobuf/SourceContext.php               \
-  php/src/GPBMetadata/Google/Protobuf/Struct.php                      \
-  php/src/GPBMetadata/Google/Protobuf/Timestamp.php                   \
-  php/src/GPBMetadata/Google/Protobuf/Type.php                        \
-  php/src/GPBMetadata/Google/Protobuf/Wrappers.php                    \
-  php/src/Google/Protobuf/Any.php                                     \
-  php/src/Google/Protobuf/Api.php                                     \
-  php/src/Google/Protobuf/BoolValue.php                               \
-  php/src/Google/Protobuf/BytesValue.php                              \
-  php/src/Google/Protobuf/Descriptor.php                              \
-  php/src/Google/Protobuf/DescriptorPool.php                          \
-  php/src/Google/Protobuf/DoubleValue.php                             \
-  php/src/Google/Protobuf/Duration.php                                \
-  php/src/Google/Protobuf/Enum.php                                    \
-  php/src/Google/Protobuf/EnumDescriptor.php                          \
-  php/src/Google/Protobuf/EnumValue.php                               \
-  php/src/Google/Protobuf/EnumValueDescriptor.php                     \
-  php/src/Google/Protobuf/Field.php                                   \
-  php/src/Google/Protobuf/FieldDescriptor.php                         \
-  php/src/Google/Protobuf/FieldMask.php                               \
-  php/src/Google/Protobuf/Field_Cardinality.php                       \
-  php/src/Google/Protobuf/Field_Kind.php                              \
-  php/src/Google/Protobuf/FloatValue.php                              \
-  php/src/Google/Protobuf/GPBEmpty.php                                \
-  php/src/Google/Protobuf/Int32Value.php                              \
-  php/src/Google/Protobuf/Int64Value.php                              \
-  php/src/Google/Protobuf/Internal/CodedInputStream.php               \
-  php/src/Google/Protobuf/Internal/CodedOutputStream.php              \
-  php/src/Google/Protobuf/Internal/Descriptor.php                     \
-  php/src/Google/Protobuf/Internal/DescriptorPool.php                 \
-  php/src/Google/Protobuf/Internal/DescriptorProto.php                \
-  php/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php \
-  php/src/Google/Protobuf/Internal/DescriptorProto_ReservedRange.php  \
-  php/src/Google/Protobuf/Internal/EnumBuilderContext.php             \
-  php/src/Google/Protobuf/Internal/EnumDescriptor.php                 \
-  php/src/Google/Protobuf/Internal/EnumDescriptorProto.php            \
-  php/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php \
-  php/src/Google/Protobuf/Internal/EnumOptions.php                    \
-  php/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php       \
-  php/src/Google/Protobuf/Internal/EnumValueOptions.php               \
-  php/src/Google/Protobuf/Internal/ExtensionRangeOptions.php          \
-  php/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php     \
-  php/src/Google/Protobuf/Internal/FieldDescriptorProto.php           \
-  php/src/Google/Protobuf/Internal/FieldDescriptor.php                \
-  php/src/Google/Protobuf/Internal/FieldDescriptorProto.php           \
-  php/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php     \
-  php/src/Google/Protobuf/Internal/FieldDescriptorProto_Type.php      \
-  php/src/Google/Protobuf/Internal/FieldOptions.php                   \
-  php/src/Google/Protobuf/Internal/FieldOptions_CType.php             \
-  php/src/Google/Protobuf/Internal/FieldOptions_JSType.php            \
-  php/src/Google/Protobuf/Internal/FileDescriptor.php                 \
-  php/src/Google/Protobuf/Internal/FileDescriptorProto.php            \
-  php/src/Google/Protobuf/Internal/FileDescriptorSet.php              \
-  php/src/Google/Protobuf/Internal/FileOptions.php                    \
-  php/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php       \
-  php/src/Google/Protobuf/Internal/GPBDecodeException.php             \
-  php/src/Google/Protobuf/Internal/GPBJsonWire.php                    \
-  php/src/Google/Protobuf/Internal/GPBLabel.php                       \
-  php/src/Google/Protobuf/Internal/GPBType.php                        \
-  php/src/Google/Protobuf/Internal/GPBUtil.php                        \
-  php/src/Google/Protobuf/Internal/GPBWire.php                        \
-  php/src/Google/Protobuf/Internal/GPBWireType.php                    \
-  php/src/Google/Protobuf/Internal/GeneratedCodeInfo.php              \
-  php/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php   \
-  php/src/Google/Protobuf/Internal/GetPublicDescriptorTrait.php       \
-  php/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php       \
-  php/src/Google/Protobuf/Internal/MapEntry.php                       \
-  php/src/Google/Protobuf/Internal/MapField.php                       \
-  php/src/Google/Protobuf/Internal/MapFieldIter.php                   \
-  php/src/Google/Protobuf/Internal/Message.php                        \
-  php/src/Google/Protobuf/Internal/MessageBuilderContext.php          \
-  php/src/Google/Protobuf/Internal/MessageOptions.php                 \
-  php/src/Google/Protobuf/Internal/MethodDescriptorProto.php          \
-  php/src/Google/Protobuf/Internal/MethodOptions.php                  \
-  php/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php \
-  php/src/Google/Protobuf/Internal/OneofDescriptor.php                \
-  php/src/Google/Protobuf/Internal/OneofDescriptorProto.php           \
-  php/src/Google/Protobuf/Internal/OneofField.php                     \
-  php/src/Google/Protobuf/Internal/OneofOptions.php                   \
-  php/src/Google/Protobuf/Internal/RawInputStream.php                 \
-  php/src/Google/Protobuf/Internal/RepeatedField.php                  \
-  php/src/Google/Protobuf/Internal/RepeatedFieldIter.php              \
-  php/src/Google/Protobuf/Internal/ServiceDescriptorProto.php         \
-  php/src/Google/Protobuf/Internal/ServiceOptions.php                 \
-  php/src/Google/Protobuf/Internal/SourceCodeInfo.php                 \
-  php/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php        \
-  php/src/Google/Protobuf/Internal/UninterpretedOption.php            \
-  php/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php   \
-  php/src/Google/Protobuf/ListValue.php                               \
-  php/src/Google/Protobuf/Method.php                                  \
-  php/src/Google/Protobuf/Mixin.php                                   \
-  php/src/Google/Protobuf/NullValue.php                               \
-  php/src/Google/Protobuf/OneofDescriptor.php                         \
-  php/src/Google/Protobuf/Option.php                                  \
-  php/src/Google/Protobuf/SourceContext.php                           \
-  php/src/Google/Protobuf/StringValue.php                             \
-  php/src/Google/Protobuf/Struct.php                                  \
-  php/src/Google/Protobuf/Syntax.php                                  \
-  php/src/Google/Protobuf/Timestamp.php                               \
-  php/src/Google/Protobuf/Type.php                                    \
-  php/src/Google/Protobuf/UInt32Value.php                             \
-  php/src/Google/Protobuf/UInt64Value.php                             \
-  php/src/Google/Protobuf/Value.php                                   \
-  php/src/phpdoc.dist.xml                                             \
-  php/tests/array_test.php                                            \
-  php/tests/autoload.php                                              \
-  php/tests/bootstrap_phpunit.php                                     \
-  php/tests/compatibility_test.sh                                     \
-  php/tests/descriptors_test.php                                      \
-  php/tests/encode_decode_test.php                                    \
-  php/tests/gdb_test.sh                                               \
-  php/tests/generated_class_test.php                                  \
-  php/tests/generated_phpdoc_test.php                                 \
-  php/tests/generated_service_test.php                                \
-  php/tests/map_field_test.php                                        \
-  php/tests/memory_leak_test.php                                      \
-  php/tests/php_implementation_test.php                               \
-  php/tests/proto/test.proto                                          \
-  php/tests/proto/test_descriptors.proto                              \
-  php/tests/proto/test_empty_php_namespace.proto                      \
-  php/tests/proto/test_import_descriptor_proto.proto                  \
-  php/tests/proto/test_include.proto                                  \
-  php/tests/proto/test_no_namespace.proto                             \
-  php/tests/proto/test_php_namespace.proto                            \
-  php/tests/proto/test_prefix.proto                                   \
-  php/tests/proto/test_reserved_enum_lower.proto                      \
-  php/tests/proto/test_reserved_enum_upper.proto                      \
-  php/tests/proto/test_reserved_enum_value_lower.proto                \
-  php/tests/proto/test_reserved_enum_value_upper.proto                \
-  php/tests/proto/test_reserved_message_lower.proto                   \
-  php/tests/proto/test_reserved_message_upper.proto                   \
-  php/tests/proto/test_service.proto                                  \
-  php/tests/proto/test_service_namespace.proto                        \
-  php/tests/test.sh                                                   \
-  php/tests/test_base.php                                             \
-  php/tests/test_util.php                                             \
-  php/tests/undefined_test.php                                        \
-  php/tests/well_known_test.php
-
-python_EXTRA_DIST=                                                           \
-  python/MANIFEST.in                                                         \
-  python/google/__init__.py                                                  \
-  python/google/protobuf/__init__.py                                         \
-  python/google/protobuf/descriptor.py                                       \
-  python/google/protobuf/descriptor_database.py                              \
-  python/google/protobuf/descriptor_pool.py                                  \
-  python/google/protobuf/internal/__init__.py                                \
-  python/google/protobuf/internal/_parameterized.py                          \
-  python/google/protobuf/internal/any_test.proto                             \
-  python/google/protobuf/internal/any_test.proto                             \
-  python/google/protobuf/internal/api_implementation.cc                      \
-  python/google/protobuf/internal/api_implementation.py                      \
-  python/google/protobuf/internal/containers.py                              \
-  python/google/protobuf/internal/decoder.py                                 \
-  python/google/protobuf/internal/descriptor_database_test.py                \
-  python/google/protobuf/internal/descriptor_pool_test.py                    \
-  python/google/protobuf/internal/descriptor_pool_test1.proto                \
-  python/google/protobuf/internal/descriptor_pool_test2.proto                \
-  python/google/protobuf/internal/descriptor_test.py                         \
-  python/google/protobuf/internal/encoder.py                                 \
-  python/google/protobuf/internal/enum_type_wrapper.py                       \
-  python/google/protobuf/internal/factory_test1.proto                        \
-  python/google/protobuf/internal/factory_test2.proto                        \
-  python/google/protobuf/internal/file_options_test.proto                    \
-  python/google/protobuf/internal/generator_test.py                          \
-  python/google/protobuf/internal/import_test_package/__init__.py            \
-  python/google/protobuf/internal/import_test_package/inner.proto            \
-  python/google/protobuf/internal/import_test_package/outer.proto            \
-  python/google/protobuf/internal/json_format_test.py                        \
-  python/google/protobuf/internal/message_factory_test.py                    \
-  python/google/protobuf/internal/message_listener.py                        \
-  python/google/protobuf/internal/message_set_extensions.proto               \
-  python/google/protobuf/internal/message_test.py                            \
-  python/google/protobuf/internal/missing_enum_values.proto                  \
-  python/google/protobuf/internal/more_extensions.proto                      \
-  python/google/protobuf/internal/more_extensions_dynamic.proto              \
-  python/google/protobuf/internal/more_messages.proto                        \
-  python/google/protobuf/internal/packed_field_test.proto                    \
-  python/google/protobuf/internal/proto_builder_test.py                      \
-  python/google/protobuf/internal/python_message.py                          \
-  python/google/protobuf/internal/python_protobuf.cc                         \
-  python/google/protobuf/internal/reflection_test.py                         \
-  python/google/protobuf/internal/service_reflection_test.py                 \
-  python/google/protobuf/internal/symbol_database_test.py                    \
-  python/google/protobuf/internal/test_bad_identifiers.proto                 \
-  python/google/protobuf/internal/test_util.py                               \
-  python/google/protobuf/internal/testing_refleaks.py                        \
-  python/google/protobuf/internal/text_encoding_test.py                      \
-  python/google/protobuf/internal/text_format_test.py                        \
-  python/google/protobuf/internal/type_checkers.py                           \
-  python/google/protobuf/internal/unknown_fields_test.py                     \
-  python/google/protobuf/internal/well_known_types.py                        \
-  python/google/protobuf/internal/well_known_types.py                        \
-  python/google/protobuf/internal/well_known_types_test.py                   \
-  python/google/protobuf/internal/well_known_types_test.py                   \
-  python/google/protobuf/internal/wire_format.py                             \
-  python/google/protobuf/internal/wire_format_test.py                        \
-  python/google/protobuf/json_format.py                                      \
-  python/google/protobuf/message.py                                          \
-  python/google/protobuf/message_factory.py                                  \
-  python/google/protobuf/python_protobuf.h                                   \
-  python/google/protobuf/proto_builder.py                                    \
-  python/google/protobuf/pyext/README                                        \
-  python/google/protobuf/pyext/__init__.py                                   \
-  python/google/protobuf/pyext/cpp_message.py                                \
-  python/google/protobuf/pyext/descriptor.cc                                 \
-  python/google/protobuf/pyext/descriptor.h                                  \
-  python/google/protobuf/pyext/descriptor_containers.cc                      \
-  python/google/protobuf/pyext/descriptor_containers.h                       \
-  python/google/protobuf/pyext/descriptor_database.cc                        \
-  python/google/protobuf/pyext/descriptor_database.h                         \
-  python/google/protobuf/pyext/descriptor_pool.cc                            \
-  python/google/protobuf/pyext/descriptor_pool.h                             \
-  python/google/protobuf/pyext/extension_dict.cc                             \
-  python/google/protobuf/pyext/extension_dict.h                              \
-  python/google/protobuf/pyext/map_container.cc                              \
-  python/google/protobuf/pyext/map_container.h                               \
-  python/google/protobuf/pyext/message.cc                                    \
-  python/google/protobuf/pyext/message.h                                     \
-  python/google/protobuf/pyext/message_factory.cc                            \
-  python/google/protobuf/pyext/message_factory.h                             \
-  python/google/protobuf/pyext/message_module.cc                             \
-  python/google/protobuf/pyext/proto2_api_test.proto                         \
-  python/google/protobuf/pyext/python.proto                                  \
-  python/google/protobuf/pyext/repeated_composite_container.cc               \
-  python/google/protobuf/pyext/repeated_composite_container.h                \
-  python/google/protobuf/pyext/repeated_scalar_container.cc                  \
-  python/google/protobuf/pyext/repeated_scalar_container.h                   \
-  python/google/protobuf/pyext/safe_numerics.h                               \
-  python/google/protobuf/pyext/scoped_pyobject_ptr.h                         \
-  python/google/protobuf/reflection.py                                       \
-  python/google/protobuf/service.py                                          \
-  python/google/protobuf/service_reflection.py                               \
-  python/google/protobuf/symbol_database.py                                  \
-  python/google/protobuf/text_encoding.py                                    \
-  python/google/protobuf/text_format.py                                      \
-  python/release.sh                                                          \
-  python/mox.py                                                              \
-  python/setup.cfg                                                           \
-  python/setup.py                                                            \
-  python/stubout.py                                                          \
-  python/tox.ini                                                             \
-  python/README.md
-
-ruby_EXTRA_DIST=                                                             \
-  ruby/Gemfile                                                               \
-  ruby/.gitignore                                                            \
-  ruby/README.md                                                             \
-  ruby/Rakefile                                                              \
-  ruby/compatibility_tests/v3.0.0/tests/test_import.proto                    \
-  ruby/compatibility_tests/v3.0.0/tests/stress.rb                            \
-  ruby/compatibility_tests/v3.0.0/tests/repeated_field_test.rb               \
-  ruby/compatibility_tests/v3.0.0/tests/generated_code_test.rb               \
-  ruby/compatibility_tests/v3.0.0/tests/generated_code.proto                 \
-  ruby/compatibility_tests/v3.0.0/tests/basic.rb                             \
-  ruby/compatibility_tests/v3.0.0/test.sh                                    \
-  ruby/compatibility_tests/v3.0.0/Rakefile                                   \
-  ruby/compatibility_tests/v3.0.0/README.md                                  \
-  ruby/ext/google/protobuf_c/defs.c                                          \
-  ruby/ext/google/protobuf_c/encode_decode.c                                 \
-  ruby/ext/google/protobuf_c/extconf.rb                                      \
-  ruby/ext/google/protobuf_c/map.c                                           \
-  ruby/ext/google/protobuf_c/message.c                                       \
-  ruby/ext/google/protobuf_c/protobuf.c                                      \
-  ruby/ext/google/protobuf_c/protobuf.h                                      \
-  ruby/ext/google/protobuf_c/repeated_field.c                                \
-  ruby/ext/google/protobuf_c/storage.c                                       \
-  ruby/ext/google/protobuf_c/upb.c                                           \
-  ruby/ext/google/protobuf_c/upb.h                                           \
-  ruby/ext/google/protobuf_c/wrap_memcpy.c                                   \
-  ruby/google-protobuf.gemspec                                               \
-  ruby/lib/google/protobuf/message_exts.rb                                   \
-  ruby/lib/google/protobuf/repeated_field.rb                                 \
-  ruby/lib/google/protobuf/well_known_types.rb                               \
-  ruby/lib/google/protobuf.rb                                                \
-  ruby/pom.xml                                                               \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyBuilder.java              \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptor.java           \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyDescriptorPool.java       \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyEnumBuilderContext.java   \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyEnumDescriptor.java       \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyEnum.java                 \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyFieldDescriptor.java      \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java                  \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyMessageBuilderContext.java \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyMessage.java              \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyOneofBuilderContext.java  \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyOneofDescriptor.java      \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyProtobuf.java             \
-  ruby/src/main/java/com/google/protobuf/jruby/RubyRepeatedField.java        \
-  ruby/src/main/java/com/google/protobuf/jruby/SentinelOuterClass.java       \
-  ruby/src/main/java/com/google/protobuf/jruby/Utils.java                    \
-  ruby/src/main/java/google/ProtobufJavaService.java                         \
-  ruby/src/main/sentinel.proto                                               \
-  ruby/tests/basic.rb                                                        \
-  ruby/tests/encode_decode_test.rb                                           \
-  ruby/tests/gc_test.rb                                                      \
-  ruby/tests/repeated_field_test.rb                                          \
-  ruby/tests/stress.rb                                                       \
-  ruby/tests/generated_code.proto                                            \
-  ruby/tests/test_import.proto                                               \
-  ruby/tests/generated_code_test.rb                                          \
-  ruby/tests/well_known_types_test.rb                                        \
-  ruby/travis-test.sh
-
-js_EXTRA_DIST=                                                         \
-  js/README.md                                                         \
-  js/binary/arith.js                                                   \
-  js/binary/arith_test.js                                              \
-  js/binary/constants.js                                               \
-  js/binary/decoder.js                                                 \
-  js/binary/decoder_test.js                                            \
-  js/binary/encoder.js                                                 \
-  js/binary/message_test.js                                            \
-  js/binary/proto_test.js                                              \
-  js/binary/reader.js                                                  \
-  js/binary/reader_test.js                                             \
-  js/binary/utils.js                                                   \
-  js/binary/utils_test.js                                              \
-  js/binary/writer.js                                                  \
-  js/binary/writer_test.js                                             \
-  js/commonjs/export.js                                                \
-  js/commonjs/export_asserts.js                                        \
-  js/commonjs/export_testdeps.js                                       \
-  js/commonjs/import_test.js                                           \
-  js/commonjs/jasmine.json                                             \
-  js/commonjs/rewrite_tests_for_commonjs.js                            \
-  js/commonjs/test6/test6.proto                                        \
-  js/commonjs/test7/test7.proto                                        \
-  js/compatibility_tests/v3.0.0/binary/arith_test.js                   \
-  js/compatibility_tests/v3.0.0/binary/decoder_test.js                 \
-  js/compatibility_tests/v3.0.0/binary/proto_test.js                   \
-  js/compatibility_tests/v3.0.0/binary/reader_test.js                  \
-  js/compatibility_tests/v3.0.0/binary/utils_test.js                   \
-  js/compatibility_tests/v3.0.0/binary/writer_test.js                  \
-  js/compatibility_tests/v3.0.0/commonjs/export_asserts.js             \
-  js/compatibility_tests/v3.0.0/commonjs/export_testdeps.js            \
-  js/compatibility_tests/v3.0.0/commonjs/import_test.js                \
-  js/compatibility_tests/v3.0.0/commonjs/jasmine.json                  \
-  js/compatibility_tests/v3.0.0/commonjs/rewrite_tests_for_commonjs.js \
-  js/compatibility_tests/v3.0.0/commonjs/test6/test6.proto             \
-  js/compatibility_tests/v3.0.0/commonjs/test7/test7.proto             \
-  js/compatibility_tests/v3.0.0/data.proto                             \
-  js/compatibility_tests/v3.0.0/debug_test.js                          \
-  js/compatibility_tests/v3.0.0/jasmine1.json                          \
-  js/compatibility_tests/v3.0.0/jasmine2.json                          \
-  js/compatibility_tests/v3.0.0/jasmine3.json                          \
-  js/compatibility_tests/v3.0.0/message_test.js                        \
-  js/compatibility_tests/v3.0.0/proto3_test.js                         \
-  js/compatibility_tests/v3.0.0/proto3_test.proto                      \
-  js/compatibility_tests/v3.0.0/test2.proto                            \
-  js/compatibility_tests/v3.0.0/test3.proto                            \
-  js/compatibility_tests/v3.0.0/test4.proto                            \
-  js/compatibility_tests/v3.0.0/test5.proto                            \
-  js/compatibility_tests/v3.0.0/testbinary.proto                       \
-  js/compatibility_tests/v3.0.0/testempty.proto                        \
-  js/compatibility_tests/v3.0.0/test.proto                             \
-  js/compatibility_tests/v3.0.0/test.sh                                \
-  js/compatibility_tests/v3.1.0/testempty.proto                        \
-  js/compatibility_tests/v3.1.0/testbinary.proto                       \
-  js/compatibility_tests/v3.1.0/test5.proto                            \
-  js/compatibility_tests/v3.1.0/test4.proto                            \
-  js/compatibility_tests/v3.1.0/test3.proto                            \
-  js/compatibility_tests/v3.1.0/test2.proto                            \
-  js/compatibility_tests/v3.1.0/test.proto                             \
-  js/compatibility_tests/v3.1.0/proto3_test.proto                      \
-  js/compatibility_tests/v3.1.0/proto3_test.js                         \
-  js/compatibility_tests/v3.1.0/message_test.js                        \
-  js/compatibility_tests/v3.1.0/maps_test.js                           \
-  js/compatibility_tests/v3.1.0/debug_test.js                          \
-  js/compatibility_tests/v3.1.0/data.proto                             \
-  js/compatibility_tests/v3.1.0/commonjs/test7/test7.proto             \
-  js/compatibility_tests/v3.1.0/commonjs/test6/test6.proto             \
-  js/compatibility_tests/v3.1.0/binary/writer_test.js                  \
-  js/compatibility_tests/v3.1.0/binary/utils_test.js                   \
-  js/compatibility_tests/v3.1.0/binary/reader_test.js                  \
-  js/compatibility_tests/v3.1.0/binary/proto_test.js                   \
-  js/compatibility_tests/v3.1.0/binary/decoder_test.js                 \
-  js/compatibility_tests/v3.1.0/binary/arith_test.js                   \
-  js/data.proto                                                        \
-  js/debug.js                                                          \
-  js/debug_test.js                                                     \
-  js/gulpfile.js                                                       \
-  js/jasmine.json                                                      \
-  js/map.js                                                            \
-  js/maps_test.js                                                      \
-  js/message.js                                                        \
-  js/message_test.js                                                   \
-  js/node_loader.js                                                    \
-  js/package.json                                                      \
-  js/proto3_test.js                                                    \
-  js/proto3_test.proto                                                 \
-  js/test.proto                                                        \
-  js/test2.proto                                                       \
-  js/test3.proto                                                       \
-  js/test4.proto                                                       \
-  js/test5.proto                                                       \
-  js/test8.proto                                                       \
-  js/test_bootstrap.js                                                 \
-  js/testbinary.proto                                                  \
-  js/testempty.proto
-
-all_EXTRA_DIST=$(csharp_EXTRA_DIST) $(java_EXTRA_DIST) $(javanano_EXTRA_DIST) $(objectivec_EXTRA_DIST) $(php_EXTRA_DIST) $(python_EXTRA_DIST) $(ruby_EXTRA_DIST) $(js_EXTRA_DIST)
-
-EXTRA_DIST = $(@DIST_LANG@_EXTRA_DIST)   \
-  autogen.sh                             \
-  generate_descriptor_proto.sh           \
-  README.md                              \
-  LICENSE                                \
-  CONTRIBUTORS.txt                       \
-  CHANGES.txt                            \
-  update_file_lists.sh                   \
-  BUILD                                  \
-  gmock.BUILD                            \
-  WORKSPACE                              \
-  cmake/CMakeLists.txt                   \
-  cmake/README.md                        \
-  cmake/examples.cmake                   \
-  cmake/extract_includes.bat.in          \
-  cmake/install.cmake                    \
-  cmake/libprotobuf.cmake                \
-  cmake/libprotobuf-lite.cmake           \
-  cmake/libprotoc.cmake                  \
-  cmake/protobuf-config-version.cmake.in \
-  cmake/protobuf-config.cmake.in         \
-  cmake/protobuf-lite.pc.cmake           \
-  cmake/protobuf-module.cmake.in         \
-  cmake/protobuf-options.cmake           \
-  cmake/protobuf.pc.cmake                \
-  cmake/protoc.cmake                     \
-  cmake/tests.cmake                      \
-  editors/README.txt                     \
-  editors/proto.vim                      \
-  editors/protobuf-mode.el               \
-  examples/AddPerson.java                \
-  examples/BUILD                         \
-  examples/CMakeLists.txt                \
-  examples/ListPeople.java               \
-  examples/Makefile                      \
-  examples/README.md                     \
-  examples/WORKSPACE                     \
-  examples/add_person.cc                 \
-  examples/add_person.go                 \
-  examples/add_person.py                 \
-  examples/add_person_test.go            \
-  examples/addressbook.proto             \
-  examples/list_people.cc                \
-  examples/list_people.go                \
-  examples/list_people.py                \
-  examples/list_people_test.go           \
-  protobuf.bzl                           \
-  python/release/wheel/build_wheel_manylinux.sh  \
-  python/release/wheel/Dockerfile                \
-  python/release/wheel/protobuf_optimized_pip.sh \
-  python/release/wheel/README.md         \
-  six.BUILD                              \
-  util/python/BUILD
-
-
-# Deletes all the files generated by autogen.sh.
-MAINTAINERCLEANFILES =   \
-  aclocal.m4             \
-  ar-lib                 \
-  config.guess           \
-  config.sub             \
-  configure              \
-  depcomp                \
-  install-sh             \
-  ltmain.sh              \
-  Makefile.in            \
-  missing                \
-  mkinstalldirs          \
-  config.h.in            \
-  stamp.h.in             \
-  m4/ltsugar.m4          \
-  m4/libtool.m4          \
-  m4/ltversion.m4        \
-  m4/lt~obsolete.m4      \
-  m4/ltoptions.m4

+ 0 - 42
Protobuf.podspec

@@ -1,42 +0,0 @@
-# This file describes to Cocoapods how to integrate the Objective-C runtime into a dependent
-# project.
-# Despite this file being specific to Objective-C, it needs to be on the root of the repository.
-# Otherwise, Cocoapods gives trouble like not picking up the license file correctly, or not letting
-# dependent projects use the :git notation to refer to the library.
-Pod::Spec.new do |s|
-  s.name     = 'Protobuf'
-  s.version  = '3.5.1'
-  s.summary  = 'Protocol Buffers v.3 runtime library for Objective-C.'
-  s.homepage = 'https://github.com/google/protobuf'
-  s.license  = '3-Clause BSD License'
-  s.authors  = { 'The Protocol Buffers contributors' => 'protobuf@googlegroups.com' }
-  s.cocoapods_version = '>= 1.0'
-
-  s.source = { :git => 'https://github.com/google/protobuf.git',
-               :tag => "v#{s.version}" }
-
-  s.source_files = 'objectivec/*.{h,m}',
-                   'objectivec/google/protobuf/Any.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Api.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Duration.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Empty.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/FieldMask.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/SourceContext.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Struct.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Timestamp.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Type.pbobjc.{h,m}',
-                   'objectivec/google/protobuf/Wrappers.pbobjc.{h,m}'
-  # The following would cause duplicate symbol definitions. GPBProtocolBuffers is expected to be
-  # left out, as it's an umbrella implementation file.
-  s.exclude_files = 'objectivec/GPBProtocolBuffers.m'
-
-  # Set a CPP symbol so the code knows to use framework imports.
-  s.user_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1' }
-  s.pod_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1' }
-
-  s.ios.deployment_target = '7.0'
-  s.osx.deployment_target = '10.9'
-  s.tvos.deployment_target = '9.0'
-  s.watchos.deployment_target = '2.0'
-  s.requires_arc = false
-end

+ 0 - 88
README.md

@@ -1,88 +0,0 @@
-Protocol Buffers - Google's data interchange format
-===================================================
-
-[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf) [![Build status](https://ci.appveyor.com/api/projects/status/73ctee6ua4w2ruin?svg=true)](https://ci.appveyor.com/project/protobuf/protobuf) [![Build Status](https://grpc-testing.appspot.com/buildStatus/icon?job=protobuf_branch)](https://grpc-testing.appspot.com/job/protobuf_branch) [![Build Status](https://grpc-testing.appspot.com/job/protobuf_branch_32/badge/icon)](https://grpc-testing.appspot.com/job/protobuf_branch_32) [![Build Status](http://ci.bazel.io/buildStatus/icon?job=protobuf)](http://ci.bazel.io/job/protobuf/)
-
-Copyright 2008 Google Inc.
-
-https://developers.google.com/protocol-buffers/
-
-Overview
---------
-
-Protocol Buffers (a.k.a., protobuf) are Google's language-neutral,
-platform-neutral, extensible mechanism for serializing structured data. You
-can find [protobuf's documentation on the Google Developers site](https://developers.google.com/protocol-buffers/).
-
-This README file contains protobuf installation instructions. To install
-protobuf, you need to install the protocol compiler (used to compile .proto
-files) and the protobuf runtime for your chosen programming language.
-
-Protocol Compiler Installation
-------------------------------
-
-The protocol compiler is written in C++. If you are using C++, please follow
-the [C++ Installation Instructions](src/README.md) to install protoc along
-with the C++ runtime.
-
-For non-C++ users, the simplest way to install the protocol compiler is to
-download a pre-built binary from our release page:
-
-  [https://github.com/google/protobuf/releases](https://github.com/google/protobuf/releases)
-
-In the downloads section of each release, you can find pre-built binaries in
-zip packages: protoc-$VERSION-$PLATFORM.zip. It contains the protoc binary
-as well as a set of standard .proto files distributed along with protobuf.
-
-If you are looking for an old version that is not available in the release
-page, check out the maven repo here:
-
-  [https://repo1.maven.org/maven2/com/google/protobuf/protoc/](https://repo1.maven.org/maven2/com/google/protobuf/protoc/)
-
-These pre-built binaries are only provided for released versions. If you want
-to use the github master version at HEAD, or you need to modify protobuf code,
-or you are using C++, it's recommended to build your own protoc binary from
-source.
-
-If you would like to build protoc binary from source, see the [C++ Installation
-Instructions](src/README.md).
-
-Protobuf Runtime Installation
------------------------------
-
-Protobuf supports several different programming languages. For each programming
-language, you can find instructions in the corresponding source directory about
-how to install protobuf runtime for that specific language:
-
-| Language                             | Source                                                      |
-|--------------------------------------|-------------------------------------------------------------|
-| C++ (include C++ runtime and protoc) | [src](src)                                                  |
-| Java                                 | [java](java)                                                |
-| Python                               | [python](python)                                            |
-| Objective-C                          | [objectivec](objectivec)                                    |
-| C#                                   | [csharp](csharp)                                            |
-| JavaNano                             | [javanano](javanano)                                        |
-| JavaScript                           | [js](js)                                                    |
-| Ruby                                 | [ruby](ruby)                                                |
-| Go                                   | [golang/protobuf](https://github.com/golang/protobuf)       |
-| PHP                                  | [php](php)                                                  |
-| Dart                                 | [dart-lang/protobuf](https://github.com/dart-lang/protobuf) |
-
-Quick Start
------------
-
-The best way to learn how to use protobuf is to follow the tutorials in our
-developer guide:
-
-https://developers.google.com/protocol-buffers/docs/tutorials
-
-If you want to learn from code examples, take a look at the examples in the
-[examples](examples) directory.
-
-Documentation
--------------
-
-The complete documentation for Protocol Buffers is available via the
-web at:
-
-https://developers.google.com/protocol-buffers/

+ 0 - 55
WORKSPACE

@@ -1,55 +0,0 @@
-workspace(name = "com_google_protobuf")
-
-new_git_repository(
-    name = "googletest",
-    build_file = "gmock.BUILD",
-    remote = "https://github.com/google/googletest",
-    tag = "release-1.8.0",
-)
-
-new_http_archive(
-    name = "six_archive",
-    build_file = "six.BUILD",
-    sha256 = "105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a",
-    url = "https://pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz#md5=34eed507548117b2ab523ab14b2f8b55",
-)
-
-bind(
-    name = "python_headers",
-    actual = "//util/python:python_headers",
-)
-
-bind(
-    name = "gtest",
-    actual = "@googletest//:gtest",
-)
-
-bind(
-    name = "gtest_main",
-    actual = "@googletest//:gtest_main",
-)
-
-bind(
-    name = "six",
-    actual = "@six_archive//:six",
-)
-
-maven_jar(
-    name = "guava_maven",
-    artifact = "com.google.guava:guava:18.0",
-)
-
-bind(
-    name = "guava",
-    actual = "@guava_maven//jar",
-)
-
-maven_jar(
-    name = "gson_maven",
-    artifact = "com.google.code.gson:gson:2.7",
-)
-
-bind(
-    name = "gson",
-    actual = "@gson_maven//jar",
-)

+ 0 - 36
appveyor.bat

@@ -1,36 +0,0 @@
-setlocal
-
-IF %language%==cpp GOTO build_cpp
-IF %language%==csharp GOTO build_csharp
-
-echo Unsupported language %language%. Exiting.
-goto :error
-
-:build_cpp
-echo Building C++
-mkdir build_msvc
-cd build_msvc
-cmake -G "%generator%" -Dprotobuf_BUILD_SHARED_LIBS=%BUILD_DLL% -Dprotobuf_UNICODE=%UNICODE% ../cmake
-msbuild protobuf.sln /p:Platform=%vcplatform% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" || goto error
-cd %configuration%
-tests.exe || goto error
-goto :EOF
-
-:build_csharp
-echo Building C#
-cd csharp\src
-REM The platform environment variable is implicitly used by msbuild;
-REM we don't want it.
-set platform=
-dotnet restore
-dotnet build -c %configuration% || goto error
-
-echo Testing C#
-dotnet run -c %configuration% -f netcoreapp1.0 -p Google.Protobuf.Test\Google.Protobuf.Test.csproj || goto error
-dotnet run -c %configuration% -f net451 -p Google.Protobuf.Test\Google.Protobuf.Test.csproj || goto error
-
-goto :EOF
-
-:error
-echo Failed!
-EXIT /b %ERRORLEVEL%

+ 0 - 44
appveyor.yml

@@ -1,44 +0,0 @@
-# Only test one combination: "Visual Studio 12 + Win64 + Debug + DLL". We can
-# test more combinations but AppVeyor just takes too long to finish (each
-# combination takes ~15mins).
-platform:
-  - Win64
-
-configuration:
-  - Debug
-
-environment:
-  matrix:
-    - language: cpp
-      BUILD_DLL: ON
-      UNICODE: ON
-
-    - language: csharp
-      image: Visual Studio 2017
-
-# Our build scripts run tests automatically; we don't want AppVeyor
-# to try to detect them itself.
-test: off
-
-install:
-  - curl -L -o release-1.7.0.zip https://github.com/google/googlemock/archive/release-1.7.0.zip
-  - 7z x release-1.7.0.zip
-  - del /Q release-1.7.0.zip
-  - rename googlemock-release-1.7.0 gmock
-  - curl -L -o release-1.7.0.zip "https://github.com/google/googletest/archive/release-1.7.0.zip"
-  - 7z x release-1.7.0.zip
-  - del /Q release-1.7.0.zip
-  - rename googletest-release-1.7.0 gtest
-  - move gtest gmock
-
-before_build:
-  - if %platform%==Win32 set generator=Visual Studio 12
-  - if %platform%==Win64 set generator=Visual Studio 12 Win64
-  - if %platform%==Win32 set vcplatform=Win32
-  - if %platform%==Win64 set vcplatform=x64
-
-build_script:
-  - CALL appveyor.bat
-
-skip_commits:
-  message: /.*\[skip appveyor\].*/

+ 0 - 53
autogen.sh

@@ -1,53 +0,0 @@
-#!/bin/sh
-
-# Run this script to generate the configure script and other files that will
-# be included in the distribution.  These files are not checked in because they
-# are automatically generated.
-
-set -e
-
-if [ ! -z "$@" ]; then
-  for argument in "$@"; do
-    case $argument in
-	  # make curl silent
-      "-s")
-        curlopts="-s"
-        ;;
-    esac
-  done
-fi
-
-
-# Check that we're being run from the right directory.
-if test ! -f src/google/protobuf/stubs/common.h; then
-  cat >&2 << __EOF__
-Could not find source code.  Make sure you are running this script from the
-root of the distribution tree.
-__EOF__
-  exit 1
-fi
-
-# Check that gmock is present.  Usually it is already there since the
-# directory is set up as an SVN external.
-if test ! -e gmock; then
-  echo "Google Mock not present.  Fetching gmock-1.7.0 from the web..."
-  curl $curlopts -L -O https://github.com/google/googlemock/archive/release-1.7.0.zip
-  unzip -q release-1.7.0.zip
-  rm release-1.7.0.zip
-  mv googlemock-release-1.7.0 gmock
-fi
-
-if test ! -e gmock/gtest; then
-  curl $curlopts -L -O https://github.com/google/googletest/archive/release-1.7.0.zip
-  unzip -q release-1.7.0.zip
-  rm release-1.7.0.zip
-  mv googletest-release-1.7.0 gmock/gtest
-fi
-
-set -ex
-
-# TODO(kenton):  Remove the ",no-obsolete" part and fix the resulting warnings.
-autoreconf -f -i -Wall,no-obsolete
-
-rm -rf autom4te.cache config.h.in~
-exit 0

+ 0 - 247
benchmarks/Makefile.am

@@ -1,247 +0,0 @@
-benchmarks_protoc_inputs =                                                 \
-	benchmarks.proto                                                         \
-	datasets/google_message1/benchmark_message1_proto3.proto
-
-benchmarks_protoc_inputs_proto2 =                                          \
-	datasets/google_message1/benchmark_message1_proto2.proto                 \
-	datasets/google_message2/benchmark_message2.proto                        \
-	datasets/google_message3/benchmark_message3.proto                        \
-	datasets/google_message3/benchmark_message3_1.proto                      \
-	datasets/google_message3/benchmark_message3_2.proto                      \
-	datasets/google_message3/benchmark_message3_3.proto                      \
-	datasets/google_message3/benchmark_message3_4.proto                      \
-	datasets/google_message3/benchmark_message3_5.proto                      \
-	datasets/google_message3/benchmark_message3_6.proto                      \
-	datasets/google_message3/benchmark_message3_7.proto                      \
-	datasets/google_message3/benchmark_message3_8.proto                      \
-	datasets/google_message4/benchmark_message4.proto                        \
-	datasets/google_message4/benchmark_message4_1.proto                      \
-	datasets/google_message4/benchmark_message4_2.proto                      \
-	datasets/google_message4/benchmark_message4_3.proto
-
-make_tmp_dir:
-	mkdir -p 'tmp/java/src/main/java'
-	touch make_tmp_dir
-
-if USE_EXTERNAL_PROTOC
-
-protoc_middleman: make_tmp_dir $(benchmarks_protoc_inputs)
-	$(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=./tmp $(benchmarks_protoc_inputs)
-	touch protoc_middleman
-
-protoc_middleman2: make_tmp_dir $(benchmarks_protoc_inputs_proto2)
-	$(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=./tmp $(benchmarks_protoc_inputs_proto2)
-	touch protoc_middleman2
-
-else
-
-# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is
-# relative to srcdir, which may not be the same as the current directory when
-# building out-of-tree.
-protoc_middleman: make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs)
-	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd/tmp/java/src/main/java --python_out=$$oldpwd/tmp $(benchmarks_protoc_inputs) )
-	touch protoc_middleman
-
-protoc_middleman2:  make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs_proto2) $(well_known_type_protoc_inputs)
-	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd/tmp/java/src/main/java --python_out=$$oldpwd/tmp $(benchmarks_protoc_inputs_proto2) )
-	touch protoc_middleman2
-
-endif
-
-all_data = `find . -type f -name "dataset.*.pb"`
-
-############# CPP RULES ##############
-
-benchmarks_protoc_outputs =                                                \
-	benchmarks.pb.cc                                                         \
-	datasets/google_message1/benchmark_message1_proto3.pb.cc
-  
-benchmarks_protoc_outputs_header =                                         \
-	benchmarks.pb.h                                                          \
-	datasets/google_message1/benchmark_message1_proto3.pb.h
-
-benchmarks_protoc_outputs_proto2_header =                                  \
-	datasets/google_message1/benchmark_message1_proto2.pb.h                  \
-	datasets/google_message2/benchmark_message2.pb.h                         \
-	datasets/google_message3/benchmark_message3.pb.h                         \
-	datasets/google_message3/benchmark_message3_1.pb.h                       \
-	datasets/google_message3/benchmark_message3_2.pb.h                       \
-	datasets/google_message3/benchmark_message3_3.pb.h                       \
-	datasets/google_message3/benchmark_message3_4.pb.h                       \
-	datasets/google_message3/benchmark_message3_5.pb.h                       \
-	datasets/google_message3/benchmark_message3_6.pb.h                       \
-	datasets/google_message3/benchmark_message3_7.pb.h                       \
-	datasets/google_message3/benchmark_message3_8.pb.h                       \
-	datasets/google_message4/benchmark_message4.pb.h                         \
-	datasets/google_message4/benchmark_message4_1.pb.h                       \
-	datasets/google_message4/benchmark_message4_2.pb.h                       \
-	datasets/google_message4/benchmark_message4_3.pb.h
-
-benchmarks_protoc_outputs_proto2 =                                         \
-	datasets/google_message1/benchmark_message1_proto2.pb.cc                 \
-	datasets/google_message2/benchmark_message2.pb.cc                        \
-	datasets/google_message3/benchmark_message3.pb.cc                        \
-	datasets/google_message3/benchmark_message3_1.pb.cc                      \
-	datasets/google_message3/benchmark_message3_2.pb.cc                      \
-	datasets/google_message3/benchmark_message3_3.pb.cc                      \
-	datasets/google_message3/benchmark_message3_4.pb.cc                      \
-	datasets/google_message3/benchmark_message3_5.pb.cc                      \
-	datasets/google_message3/benchmark_message3_6.pb.cc                      \
-	datasets/google_message3/benchmark_message3_7.pb.cc                      \
-	datasets/google_message3/benchmark_message3_8.pb.cc                      \
-	datasets/google_message4/benchmark_message4.pb.cc                        \
-	datasets/google_message4/benchmark_message4_1.pb.cc                      \
-	datasets/google_message4/benchmark_message4_2.pb.cc                      \
-	datasets/google_message4/benchmark_message4_3.pb.cc
-
-
-$(benchmarks_protoc_outputs): protoc_middleman
-$(benchmarks_protoc_outputs_header): protoc_middleman
-$(benchmarks_protoc_outputs_proto2): protoc_middleman2
-$(benchmarks_protoc_outputs_proto2_header): protoc_middleman2
-
-initialize_submodule:
-	oldpwd=`pwd`
-	cd $(top_srcdir)/third_party
-	git submodule update --init -r
-	cd $(top_srcdir)/third_party/benchmark && cmake -DCMAKE_BUILD_TYPE=Release && make
-	cd $$oldpwd
-	touch initialize_submodule
-	
-$(top_srcdir)/src/libprotobuf.la: initialize_submodule
-$(top_srcdir)/third_party/benchmark/src/libbenchmark.a: initialize_submodule
-
-AM_CXXFLAGS = $(NO_OPT_CXXFLAGS) $(PROTOBUF_OPT_FLAG) -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare
-
-bin_PROGRAMS = cpp-benchmark
-
-cpp_benchmark_LDADD = $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a
-cpp_benchmark_SOURCES = cpp_benchmark.cc
-cpp_benchmark_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) -I$(top_srcdir)/third_party/benchmark/include
-# Explicit deps because BUILT_SOURCES are only done before a "make all/check"
-# so a direct "make test_cpp" could fail if parallel enough.
-# See: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html#Recording-Dependencies-manually
-cpp_benchmark-cpp_benchmark.$(OBJEXT): $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2) $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header) $(top_srcdir)/src/libprotobuf.la $(top_srcdir)/third_party/benchmark/src/libbenchmark.a
-nodist_cpp_benchmark_SOURCES =                                             \
-	$(benchmarks_protoc_outputs)                                             \
-	$(benchmarks_protoc_outputs_proto2)                                      \
-	$(benchmarks_protoc_outputs_proto2_header)                               \
-	$(benchmarks_protoc_outputs_header)
-
-cpp: protoc_middleman protoc_middleman2 cpp-benchmark initialize_submodule
-	./cpp-benchmark $(all_data)
-
-############ CPP RULES END ############
-
-############# JAVA RULES ##############
-
-java_benchmark_testing_files =                                      \
-	java/src/main/java/com/google/protobuf/ProtoBench.java            \
-	java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java
-
-javac_middleman: $(java_benchmark_testing_files) protoc_middleman protoc_middleman2
-	cp -r java tmp && cd tmp/java &&  mvn clean compile assembly:single
-	cd ../..
-	@touch javac_middleman
-
-java-benchmark: javac_middleman
-	@echo "Writing shortcut script java-benchmark..."
-	@echo '#! /bin/sh' > java-benchmark
-	@echo 'java -cp '"tmp/java/target/*.jar"' com.google.protobuf.ProtoBench $$@' >> java-benchmark
-	@chmod +x java-benchmark
-
-java: protoc_middleman protoc_middleman2 java-benchmark
-	./java-benchmark $(all_data)
-
-############# JAVA RULES END ##############
-
-
-############# PYTHON RULES ##############
-
-python_add_init: protoc_middleman protoc_middleman2
-	all_file=`find tmp -type f -regex '.*\.py'` &&                   \
-	for file in $${all_file[@]}; do                                  \
-		path="$${file%/*}";                                            \
-		while true; do                                                 \
-			touch "$$path/__init__.py" && chmod +x "$$path/__init__.py"; \
-			if [[ $$path != *"/"* ]]; then break; fi;                    \
-			path=$${path%/*};                                            \
-		done                                                           \
-	done
-
-python_cpp_pkg_flags = `pkg-config --cflags --libs python`
-
-lib_LTLIBRARIES = libbenchmark_messages.la
-libbenchmark_messages_la_SOURCES = python_benchmark_messages.cc
-libbenchmark_messages_la_LIBADD = $(top_srcdir)/src/.libs/libprotobuf.la
-libbenchmark_messages_la_LDFLAGS = -version-info 1:0:0 -export-dynamic
-libbenchmark_messages_la_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) $(python_cpp_pkg_flags)
-libbenchmark_messages_la-libbenchmark_messages_la.$(OBJEXT): $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header) $(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2)
-nodist_libbenchmark_messages_la_SOURCES =                         \
-	$(benchmarks_protoc_outputs)                                    \
-	$(benchmarks_protoc_outputs_proto2)                             \
-	$(benchmarks_protoc_outputs_proto2_header)                      \
-	$(benchmarks_protoc_outputs_header)
-
-python-pure-python-benchmark: python_add_init
-	@echo "Writing shortcut script python-pure-python-benchmark..."
-	@echo '#! /bin/sh' > python-pure-python-benchmark
-	@echo export LD_LIBRARY_PATH=$(top_srcdir)/src/libprotobuf.la >> python-pure-python-benchmark
-	@echo export DYLD_LIBRARY_PATH=$(top_srcdir)/src/libprotobuf.la >> python-pure-python-benchmark
-	@echo export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=\'python\' >> python-pure-python-benchmark
-	@echo cp py_benchmark.py tmp >> python-pure-python-benchmark
-	@echo python tmp/py_benchmark.py false '$$@' >> python-pure-python-benchmark
-	@chmod +x python-pure-python-benchmark
-
-python-cpp-reflection-benchmark: python_add_init
-	@echo "Writing shortcut script python-cpp-reflection-benchmark..."
-	@echo '#! /bin/sh' > python-cpp-reflection-benchmark
-	@echo export LD_LIBRARY_PATH=$(top_srcdir)/src/libprotobuf.la >> python-cpp-reflection-benchmark
-	@echo export DYLD_LIBRARY_PATH=$(top_srcdir)/src/libprotobuf.la >> python-cpp-reflection-benchmark
-	@echo export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=\'cpp\' >> python-cpp-reflection-benchmark
-	@echo cp py_benchmark.py tmp >> python-cpp-reflection-benchmark
-	@echo python tmp/py_benchmark.py false '$$@' >> python-cpp-reflection-benchmark
-	@chmod +x python-cpp-reflection-benchmark
-
-python-cpp-generated-code-benchmark: python_add_init libbenchmark_messages.la
-	@echo "Writing shortcut script python-cpp-generated-code-benchmark..."
-	@echo '#! /bin/sh' > python-cpp-generated-code-benchmark
-	@echo export LD_LIBRARY_PATH=$(top_srcdir)/src/libprotobuf.la >> python-cpp-generated-code-benchmark
-	@echo export DYLD_LIBRARY_PATH=$(top_srcdir)/src/libprotobuf.la >> python-cpp-generated-code-benchmark
-	@echo export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=\'cpp\' >> python-cpp-generated-code-benchmark
-	@echo cp py_benchmark.py tmp >> python-cpp-generated-code-benchmark
-	@echo python tmp/py_benchmark.py true '$$@' >> python-cpp-generated-code-benchmark
-	@chmod +x python-cpp-generated-code-benchmark
-
-python-pure-python: python-pure-python-benchmark
-	./python-pure-python-benchmark $(all_data)
-
-python-cpp-reflection: python-cpp-reflection-benchmark
-	./python-cpp-reflection-benchmark $(all_data)
-
-python-cpp-generated-code: python-cpp-generated-code-benchmark
-	./python-cpp-generated-code-benchmark $(all_data)
-
-############# PYTHON RULES END ##############
-
-MAINTAINERCLEANFILES =                                                     \
-	Makefile.in
-
-CLEANFILES =                                                               \
-	$(benchmarks_protoc_outputs)                                             \
-	$(benchmarks_protoc_outputs_header)                                      \
-	$(benchmarks_protoc_outputs_proto2)                                      \
-	$(benchmarks_protoc_outputs_proto2_header)                               \
-	initialize_submodule                                                     \
-	make_tmp_dir                                                             \
-	protoc_middleman                                                         \
-	protoc_middleman2                                                        \
-	javac_middleman                                                          \
-	java-benchmark                                                           \
-	python_cpp_proto_library                                                 \
-	python-pure-python-benchmark                                             \
-	python-cpp-reflection-benchmark                                          \
-	python-cpp-generated-code-benchmark
-
-clean-local:
-	-rm -rf tmp/*

+ 0 - 145
benchmarks/README.md

@@ -1,145 +0,0 @@
-
-# Protocol Buffers Benchmarks
-
-This directory contains benchmarking schemas and data sets that you
-can use to test a variety of performance scenarios against your
-protobuf language runtime.
-
-## Prerequisite
-
-First, you need to follow the instruction in the root directory's README to
-build your language's protobuf, then:
-
-### CPP
-You need to install [cmake](https://cmake.org/) before building the benchmark.
-
-We are using [google/benchmark](https://github.com/google/benchmark) as the
-benchmark tool for testing cpp. This will be automaticly made during build the
-cpp benchmark.
-
-### Java
-We're using maven to build the java benchmarks, which is the same as to build
-the Java protobuf. There're no other tools need to install. We're using
-[google/caliper](https://github.com/google/caliper) as benchmark tool, which
-can be automaticly included by maven.
-
-### Python
-We're using python C++ API for testing the generated
-CPP proto version of python protobuf, which is also a prerequisite for Python
-protobuf cpp implementation. You need to install the correct version of Python
-C++ extension package before run generated CPP proto version of Python
-protobuf's benchmark. e.g. under Ubuntu, you need to
-
-```
-$ sudo apt-get install python-dev
-$ sudo apt-get install python3-dev
-```
-And you also need to make sure `pkg-config` is installed.
-
-### Big data
-
-There's some optional big testing data which is not included in the directory
-initially, you need to run the following command to download the testing data:
-
-```
-$ ./download_data.sh
-```
-
-After doing this the big data file will automaticly generated in the
-benchmark directory.
-
-## Run instructions
-
-To run all the benchmark dataset:
-
-### Java:
-
-```
-$ make java
-```
-
-### CPP:
-
-```
-$ make cpp
-```
-
-### Python:
-
-We have three versions of python protobuf implementation: pure python, cpp
-reflection and cpp generated code. To run these version benchmark, you need to:
-
-#### Pure Python:
-
-```
-$ make python-pure-python
-```
-
-#### CPP reflection:
-
-```
-$ make python-cpp-reflection
-```
-
-#### CPP generated code:
-
-```
-$ make python-cpp-generated-code
-```
-
-To run a specific dataset:
-
-### Java:
-
-```
-$ make java-benchmark
-$ ./java-benchmark $(specific generated dataset file name) [-- $(caliper option)]
-```
-
-### CPP:
-
-```
-$ make cpp-benchmark
-$ ./cpp-benchmark $(specific generated dataset file name)
-```
-
-### Python:
-
-#### Pure Python:
-
-```
-$ make python-pure-python-benchmark
-$ ./python-pure-python-benchmark $(specific generated dataset file name)
-```
-
-#### CPP reflection:
-
-```
-$ make python-cpp-reflection-benchmark
-$ ./python-cpp-reflection-benchmark $(specific generated dataset file name)
-```
-
-#### CPP generated code:
-
-```
-$ make python-cpp-generated-code-benchmark
-$ ./python-cpp-generated-code-benchmark $(specific generated dataset file name)
-```
-
-## Benchmark datasets
-
-Each data set is in the format of benchmarks.proto:
-
-1. name is the benchmark dataset's name.
-2. message_name is the benchmark's message type full name (including package and message name)
-3. payload is the list of raw data.
-
-The schema for the datasets is described in `benchmarks.proto`.
-
-Benchmark likely want to run several benchmarks against each data set (parse,
-serialize, possibly JSON, possibly using different APIs, etc).
-
-We would like to add more data sets.  In general we will favor data sets
-that make the overall suite diverse without being too large or having
-too many similar tests.  Ideally everyone can run through the entire
-suite without the test run getting too long.

+ 0 - 0
benchmarks/__init__.py


+ 0 - 63
benchmarks/benchmarks.proto

@@ -1,63 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-syntax = "proto3";
-package benchmarks;
-option java_package = "com.google.protobuf.benchmarks";
-
-message BenchmarkDataset {
-  // Name of the benchmark dataset.  This should be unique across all datasets.
-  // Should only contain word characters: [a-zA-Z0-9_]
-  string name = 1;
-
-  // Fully-qualified name of the protobuf message for this dataset.
-  // It will be one of the messages defined benchmark_messages_proto2.proto
-  // or benchmark_messages_proto3.proto.
-  //
-  // Implementations that do not support reflection can implement this with
-  // an explicit "if/else" chain that lists every known message defined
-  // in those files.
-  string message_name = 2;
-
-  // The payload(s) for this dataset.  They should be parsed or serialized
-  // in sequence, in a loop, ie.
-  //
-  //  while (!benchmarkDone) {  // Benchmark runner decides when to exit.
-  //    for (i = 0; i < benchmark.payload.length; i++) {
-  //      parse(benchmark.payload[i])
-  //    }
-  //  }
-  //
-  // This is intended to let datasets include a variety of data to provide
-  // potentially more realistic results than just parsing the same message
-  // over and over.  A single message parsed repeatedly could yield unusually
-  // good branch prediction performance.
-  repeated bytes payload = 3;
-}

+ 0 - 254
benchmarks/cpp_benchmark.cc

@@ -1,254 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include <fstream>
-#include <iostream>
-#include "benchmark/benchmark_api.h"
-#include "benchmarks.pb.h"
-#include "datasets/google_message1/benchmark_message1_proto2.pb.h"
-#include "datasets/google_message1/benchmark_message1_proto3.pb.h"
-#include "datasets/google_message2/benchmark_message2.pb.h"
-#include "datasets/google_message3/benchmark_message3.pb.h"
-#include "datasets/google_message4/benchmark_message4.pb.h"
-
-
-#define PREFIX "dataset."
-#define SUFFIX ".pb"
-
-using benchmarks::BenchmarkDataset;
-using google::protobuf::Arena;
-using google::protobuf::Descriptor;
-using google::protobuf::DescriptorPool;
-using google::protobuf::Message;
-using google::protobuf::MessageFactory;
-
-class Fixture : public benchmark::Fixture {
- public:
-  Fixture(const BenchmarkDataset& dataset, const std::string& suffix) {
-    for (int i = 0; i < dataset.payload_size(); i++) {
-      payloads_.push_back(dataset.payload(i));
-    }
-
-    const Descriptor* d =
-        DescriptorPool::generated_pool()->FindMessageTypeByName(
-            dataset.message_name());
-
-    if (!d) {
-      std::cerr << "Couldn't find message named '" << dataset.message_name()
-                << "\n";
-    }
-
-    prototype_ = MessageFactory::generated_factory()->GetPrototype(d);
-    SetName((dataset.name() + suffix).c_str());
-  }
-
- protected:
-  std::vector<std::string> payloads_;
-  const Message* prototype_;
-};
-
-class WrappingCounter {
- public:
-  WrappingCounter(size_t limit) : value_(0), limit_(limit) {}
-
-  size_t Next() {
-    size_t ret = value_;
-    if (++value_ == limit_) {
-      value_ = 0;
-    }
-    return ret;
-  }
-
- private:
-  size_t value_;
-  size_t limit_;
-};
-
-template <class T>
-class ParseNewFixture : public Fixture {
- public:
-  ParseNewFixture(const BenchmarkDataset& dataset)
-      : Fixture(dataset, "_parse_new") {}
-
-  virtual void BenchmarkCase(benchmark::State& state) {
-    WrappingCounter i(payloads_.size());
-    size_t total = 0;
-
-    while (state.KeepRunning()) {
-      T m;
-      const std::string& payload = payloads_[i.Next()];
-      total += payload.size();
-      m.ParseFromString(payload);
-    }
-
-    state.SetBytesProcessed(total);
-  }
-};
-
-template <class T>
-class ParseNewArenaFixture : public Fixture {
- public:
-  ParseNewArenaFixture(const BenchmarkDataset& dataset)
-      : Fixture(dataset, "_parse_newarena") {}
-
-  virtual void BenchmarkCase(benchmark::State& state) {
-    WrappingCounter i(payloads_.size());
-    size_t total = 0;
-    Arena arena;
-
-    while (state.KeepRunning()) {
-      arena.Reset();
-      Message* m = Arena::CreateMessage<T>(&arena);
-      const std::string& payload = payloads_[i.Next()];
-      total += payload.size();
-      m->ParseFromString(payload);
-    }
-
-    state.SetBytesProcessed(total);
-  }
-};
-
-template <class T>
-class ParseReuseFixture : public Fixture {
- public:
-  ParseReuseFixture(const BenchmarkDataset& dataset)
-      : Fixture(dataset, "_parse_reuse") {}
-
-  virtual void BenchmarkCase(benchmark::State& state) {
-    T m;
-    WrappingCounter i(payloads_.size());
-    size_t total = 0;
-
-    while (state.KeepRunning()) {
-      const std::string& payload = payloads_[i.Next()];
-      total += payload.size();
-      m.ParseFromString(payload);
-    }
-
-    state.SetBytesProcessed(total);
-  }
-};
-
-template <class T>
-class SerializeFixture : public Fixture {
- public:
-  SerializeFixture(const BenchmarkDataset& dataset)
-      : Fixture(dataset, "_serialize") {
-    for (size_t i = 0; i < payloads_.size(); i++) {
-      message_.push_back(new T);
-      message_.back()->ParseFromString(payloads_[i]);
-    }
-  }
-
-  ~SerializeFixture() {
-    for (size_t i = 0; i < message_.size(); i++) {
-      delete message_[i];
-    }
-  }
-
-  virtual void BenchmarkCase(benchmark::State& state) {
-    size_t total = 0;
-    std::string str;
-    WrappingCounter i(payloads_.size());
-
-    while (state.KeepRunning()) {
-      str.clear();
-      message_[i.Next()]->SerializeToString(&str);
-      total += str.size();
-    }
-
-    state.SetBytesProcessed(total);
-  }
-
- private:
-  std::vector<T*> message_;
-};
-
-std::string ReadFile(const std::string& name) {
-  std::ifstream file(name.c_str());
-  GOOGLE_CHECK(file.is_open()) << "Couldn't find file '" << name <<
-                                  "', please make sure you are running "
-                                  "this command from the benchmarks/ "
-                                  "directory.\n";
-  return std::string((std::istreambuf_iterator<char>(file)),
-                     std::istreambuf_iterator<char>());
-}
-
-template <class T>
-void RegisterBenchmarksForType(const BenchmarkDataset& dataset) {
-  ::benchmark::internal::RegisterBenchmarkInternal(
-      new ParseNewFixture<T>(dataset));
-  ::benchmark::internal::RegisterBenchmarkInternal(
-      new ParseReuseFixture<T>(dataset));
-  ::benchmark::internal::RegisterBenchmarkInternal(
-      new ParseNewArenaFixture<T>(dataset));
-  ::benchmark::internal::RegisterBenchmarkInternal(
-      new SerializeFixture<T>(dataset));
-}
-
-void RegisterBenchmarks(const std::string& dataset_bytes) {
-  BenchmarkDataset dataset;
-  GOOGLE_CHECK(dataset.ParseFromString(dataset_bytes));
-
-  if (dataset.message_name() == "benchmarks.proto3.GoogleMessage1") {
-    RegisterBenchmarksForType<benchmarks::proto3::GoogleMessage1>(dataset);
-  } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage1") {
-    RegisterBenchmarksForType<benchmarks::proto2::GoogleMessage1>(dataset);
-  } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage2") {
-    RegisterBenchmarksForType<benchmarks::proto2::GoogleMessage2>(dataset);
-  } else if (dataset.message_name() ==
-      "benchmarks.google_message3.GoogleMessage3") {
-    RegisterBenchmarksForType
-    <benchmarks::google_message3::GoogleMessage3>(dataset);
-  } else if (dataset.message_name() ==
-      "benchmarks.google_message4.GoogleMessage4") {
-    RegisterBenchmarksForType
-    <benchmarks::google_message4::GoogleMessage4>(dataset);
-  } else {
-    std::cerr << "Unknown message type: " << dataset.message_name();
-    exit(1);
-  }
-}
-
-int main(int argc, char *argv[]) {
-  if (argc == 1) {
-    std::cerr << "Usage: ./cpp-benchmark <input data>" << std::endl;
-    std::cerr << "input data is in the format of \"benchmarks.proto\""
-        << std::endl;
-    return 1;
-  } else {
-    for (int i = 1; i < argc; i++) {
-      RegisterBenchmarks(ReadFile(argv[i]));
-    }
-  }
-
-  ::benchmark::Initialize(&argc, argv);
-  ::benchmark::RunSpecifiedBenchmarks();
-}

+ 0 - 78
benchmarks/datasets/google_message1/benchmark_message1_proto2.proto

@@ -1,78 +0,0 @@
-// Benchmark messages for proto2.
-
-syntax = "proto2";
-
-package benchmarks.proto2;
-option java_package = "com.google.protobuf.benchmarks";
-
-// This is the default, but we specify it here explicitly.
-option optimize_for = SPEED;
-
-option cc_enable_arenas = true;
-
-message GoogleMessage1 {
-  required string field1 = 1;
-  optional string field9 = 9;
-  optional string field18 = 18;
-  optional bool field80 = 80 [default = false];
-  optional bool field81 = 81 [default = true];
-  required int32 field2 = 2;
-  required int32 field3 = 3;
-  optional int32 field280 = 280;
-  optional int32 field6 = 6 [default = 0];
-  optional int64 field22 = 22;
-  optional string field4 = 4;
-  repeated fixed64 field5 = 5;
-  optional bool field59 = 59 [default = false];
-  optional string field7 = 7;
-  optional int32 field16 = 16;
-  optional int32 field130 = 130 [default = 0];
-  optional bool field12 = 12 [default = true];
-  optional bool field17 = 17 [default = true];
-  optional bool field13 = 13 [default = true];
-  optional bool field14 = 14 [default = true];
-  optional int32 field104 = 104 [default = 0];
-  optional int32 field100 = 100 [default = 0];
-  optional int32 field101 = 101 [default = 0];
-  optional string field102 = 102;
-  optional string field103 = 103;
-  optional int32 field29 = 29 [default = 0];
-  optional bool field30 = 30 [default = false];
-  optional int32 field60 = 60 [default = -1];
-  optional int32 field271 = 271 [default = -1];
-  optional int32 field272 = 272 [default = -1];
-  optional int32 field150 = 150;
-  optional int32 field23 = 23 [default = 0];
-  optional bool field24 = 24 [default = false];
-  optional int32 field25 = 25 [default = 0];
-  optional GoogleMessage1SubMessage field15 = 15;
-  optional bool field78 = 78;
-  optional int32 field67 = 67 [default = 0];
-  optional int32 field68 = 68;
-  optional int32 field128 = 128 [default = 0];
-  optional string field129 = 129 [default = "xxxxxxxxxxxxxxxxxxxxx"];
-  optional int32 field131 = 131 [default = 0];
-}
-
-message GoogleMessage1SubMessage {
-  optional int32 field1 = 1 [default = 0];
-  optional int32 field2 = 2 [default = 0];
-  optional int32 field3 = 3 [default = 0];
-  optional string field15 = 15;
-  optional bool field12 = 12 [default = true];
-  optional int64 field13 = 13;
-  optional int64 field14 = 14;
-  optional int32 field16 = 16;
-  optional int32 field19 = 19 [default = 2];
-  optional bool field20 = 20 [default = true];
-  optional bool field28 = 28 [default = true];
-  optional fixed64 field21 = 21;
-  optional int32 field22 = 22;
-  optional bool field23 = 23 [default = false];
-  optional bool field206 = 206 [default = false];
-  optional fixed32 field203 = 203;
-  optional int32 field204 = 204;
-  optional string field205 = 205;
-  optional uint64 field207 = 207;
-  optional uint64 field300 = 300;
-}

+ 0 - 78
benchmarks/datasets/google_message1/benchmark_message1_proto3.proto

@@ -1,78 +0,0 @@
-// Benchmark messages for proto3.
-
-syntax = "proto3";
-
-package benchmarks.proto3;
-option java_package = "com.google.protobuf.benchmarks";
-
-// This is the default, but we specify it here explicitly.
-option optimize_for = SPEED;
-
-option cc_enable_arenas = true;
-
-message GoogleMessage1 {
-  string field1 = 1;
-  string field9 = 9;
-  string field18 = 18;
-  bool field80 = 80;
-  bool field81 = 81;
-  int32 field2 = 2;
-  int32 field3 = 3;
-  int32 field280 = 280;
-  int32 field6 = 6;
-  int64 field22 = 22;
-  string field4 = 4;
-  repeated fixed64 field5 = 5;
-  bool field59 = 59;
-  string field7 = 7;
-  int32 field16 = 16;
-  int32 field130 = 130;
-  bool field12 = 12;
-  bool field17 = 17;
-  bool field13 = 13;
-  bool field14 = 14;
-  int32 field104 = 104;
-  int32 field100 = 100;
-  int32 field101 = 101;
-  string field102 = 102;
-  string field103 = 103;
-  int32 field29 = 29;
-  bool field30 = 30;
-  int32 field60 = 60;
-  int32 field271 = 271;
-  int32 field272 = 272;
-  int32 field150 = 150;
-  int32 field23 = 23;
-  bool field24 = 24;
-  int32 field25 = 25;
-  GoogleMessage1SubMessage field15 = 15;
-  bool field78 = 78;
-  int32 field67 = 67;
-  int32 field68 = 68;
-  int32 field128 = 128;
-  string field129 = 129;
-  int32 field131 = 131;
-}
-
-message GoogleMessage1SubMessage {
-  int32 field1 = 1;
-  int32 field2 = 2;
-  int32 field3 = 3;
-  string field15 = 15;
-  bool field12 = 12;
-  int64 field13 = 13;
-  int64 field14 = 14;
-  int32 field16 = 16;
-  int32 field19 = 19;
-  bool field20  = 20;
-  bool field28 = 28;
-  fixed64 field21 = 21;
-  int32 field22 = 22;
-  bool field23 = 23;
-  bool field206 = 206;
-  fixed32 field203 = 203;
-  int32 field204 = 204;
-  string field205 = 205;
-  uint64 field207 = 207;
-  uint64 field300 = 300;
-}

BIN
benchmarks/datasets/google_message1/dataset.google_message1_proto2.pb


BIN
benchmarks/datasets/google_message1/dataset.google_message1_proto3.pb


+ 0 - 76
benchmarks/datasets/google_message2/benchmark_message2.proto

@@ -1,76 +0,0 @@
-// Benchmark messages for proto2.
-
-syntax = "proto2";
-
-package benchmarks.proto2;
-option java_package = "com.google.protobuf.benchmarks";
-
-// This is the default, but we specify it here explicitly.
-option optimize_for = SPEED;
-
-option cc_enable_arenas = true;
-
-message GoogleMessage2 {
-  optional string field1 = 1;
-  optional int64 field3 = 3;
-  optional int64 field4 = 4;
-  optional int64 field30 = 30;
-  optional bool field75 = 75 [default = false];
-  optional string field6 = 6;
-  optional bytes field2 = 2;
-  optional int32 field21 = 21 [default = 0];
-  optional int32 field71 = 71;
-  optional float field25 = 25;
-  optional int32 field109 = 109 [default = 0];
-  optional int32 field210 = 210 [default = 0];
-  optional int32 field211 = 211 [default = 0];
-  optional int32 field212 = 212 [default = 0];
-  optional int32 field213 = 213 [default = 0];
-  optional int32 field216 = 216 [default = 0];
-  optional int32 field217 = 217 [default = 0];
-  optional int32 field218 = 218 [default = 0];
-  optional int32 field220 = 220 [default = 0];
-  optional int32 field221 = 221 [default = 0];
-  optional float field222 = 222 [default = 0.0];
-  optional int32 field63 = 63;
-
-  repeated group Group1 = 10 {
-    required float field11 = 11;
-    optional float field26 = 26;
-    optional string field12 = 12;
-    optional string field13 = 13;
-    repeated string field14 = 14;
-    required uint64 field15 = 15;
-    optional int32 field5 = 5;
-    optional string field27 = 27;
-    optional int32 field28 = 28;
-    optional string field29 = 29;
-    optional string field16 = 16;
-    repeated string field22 = 22;
-    repeated int32 field73 = 73;
-    optional int32 field20 = 20 [default = 0];
-    optional string field24 = 24;
-    optional GoogleMessage2GroupedMessage field31 = 31;
-  }
-  repeated string field128 = 128;
-  optional int64 field131 = 131;
-  repeated string field127 = 127;
-  optional int32 field129 = 129;
-  repeated int64 field130 = 130;
-  optional bool field205 = 205 [default = false];
-  optional bool field206 = 206 [default = false];
-}
-
-message GoogleMessage2GroupedMessage {
-  optional float field1 = 1;
-  optional float field2 = 2;
-  optional float field3 = 3 [default = 0.0];
-  optional bool field4 = 4;
-  optional bool field5 = 5;
-  optional bool field6 = 6 [default = true];
-  optional bool field7 = 7 [default = false];
-  optional float field8 = 8;
-  optional bool field9 = 9;
-  optional float field10 = 10;
-  optional int64 field11 = 11;
-}

BIN
benchmarks/datasets/google_message2/dataset.google_message2.pb


+ 0 - 533
benchmarks/datasets/google_message3/benchmark_message3.proto

@@ -1,533 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_1.proto";
-import "datasets/google_message3/benchmark_message3_2.proto";
-import "datasets/google_message3/benchmark_message3_3.proto";
-import "datasets/google_message3/benchmark_message3_4.proto";
-import "datasets/google_message3/benchmark_message3_5.proto";
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message GoogleMessage3 {
-  optional .benchmarks.google_message3.Message37487 field37519 = 2;
-  optional .benchmarks.google_message3.Message36876 field37520 = 3;
-  optional .benchmarks.google_message3.Message13062 field37521 = 4;
-  optional .benchmarks.google_message3.Message952 field37522 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37523 = 6;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37524 = 7;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37525 = 8;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37526 = 9;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37527 = 10;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37528 = 11;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37529 = 12;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37530 = 13;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37531 = 14;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37532 = 15;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37533 = 16;
-}
-
-message Message1327 {
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field1369 = 1;
-  repeated .benchmarks.google_message3.Message1328 field1370 = 3;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field1371 = 5;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field1372 = 6;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message1327 field1373 = 23104162;
-  }
-}
-
-message Message3672 {
-  optional .benchmarks.google_message3.Enum3476 field3727 = 1;
-  optional int32 field3728 = 11;
-  optional int32 field3729 = 2;
-  repeated group Message3673 = 3 {
-    required .benchmarks.google_message3.Enum3476 field3738 = 4;
-    required int32 field3739 = 5;
-  }
-  repeated group Message3674 = 6 {
-    required .benchmarks.google_message3.Enum3476 field3740 = 7;
-    required int32 field3741 = 8;
-  }
-  optional bool field3732 = 9;
-  optional int32 field3733 = 10;
-  optional .benchmarks.google_message3.Enum3476 field3734 = 20;
-  optional int32 field3735 = 21;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field3736 = 50;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message3672 field3737 = 3144435;
-  }
-}
-
-message Message3804 {
-  required int64 field3818 = 1;
-  required bool field3819 = 2;
-  repeated .benchmarks.google_message3.Enum3805 field3820 = 4;
-  optional int32 field3821 = 5;
-  optional bool field3822 = 6;
-  optional int64 field3823 = 7;
-  optional .benchmarks.google_message3.Enum3783 field3824 = 8;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message3804 field3825 = 59241828;
-  }
-}
-
-message Message6849 {
-  repeated .benchmarks.google_message3.Message6850 field6910 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message6849 field6911 = 107558455;
-  }
-}
-
-message Message6866 {
-  repeated .benchmarks.google_message3.Message6863 field6973 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message6866 field6974 = 22259060;
-  }
-}
-
-message Message6870 {
-  repeated .benchmarks.google_message3.Message6871 field6991 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message6870 field6992 = 90034652;
-  }
-}
-
-message Message7651 {
-  optional string field7685 = 1;
-  optional int64 field7686 = 2;
-  optional int64 field7687 = 3;
-  optional int64 field7688 = 4;
-  optional int32 field7689 = 5;
-  optional int32 field7690 = 6;
-  optional int32 field7691 = 7;
-  optional int32 field7692 = 8;
-  optional int32 field7693 = 9;
-  optional int32 field7694 = 10;
-  optional int32 field7695 = 11;
-  optional int32 field7696 = 12;
-  optional int32 field7697 = 13;
-  optional int32 field7698 = 14;
-  optional int32 field7699 = 15;
-  optional int32 field7700 = 16;
-  optional int32 field7701 = 17;
-  optional int32 field7702 = 18;
-  optional bool field7703 = 19;
-  repeated int32 field7704 = 20;
-  repeated int32 field7705 = 21;
-  repeated string field7706 = 22;
-  repeated string field7707 = 23;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field7708 = 24;
-  optional int32 field7709 = 25;
-  optional int32 field7710 = 26;
-  optional int32 field7711 = 27;
-  optional int32 field7712 = 43;
-  optional int32 field7713 = 28;
-  optional int32 field7714 = 29;
-  repeated .benchmarks.google_message3.Message7547 field7715 = 30;
-  repeated .benchmarks.google_message3.Message7547 field7716 = 31;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field7717 = 32;
-  repeated string field7718 = 33;
-  repeated string field7719 = 34;
-  repeated .benchmarks.google_message3.Message7648 field7720 = 35;
-  optional bool field7721 = 36;
-  optional bool field7722 = 37;
-  optional bool field7723 = 38;
-  optional bool field7724 = 39;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field7725 = 40;
-  optional .benchmarks.google_message3.UnusedEnum field7726 = 41;
-  optional .benchmarks.google_message3.Enum7654 field7727 = 42;
-  optional string field7728 = 44;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field7729 = 45;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message7651 field7730 = 55876009;
-  }
-}
-
-message Message7864 {
-  optional string field7866 = 1;
-  optional string field7867 = 2;
-  repeated .benchmarks.google_message3.Message7865 field7868 = 5;
-  repeated .benchmarks.google_message3.Message7865 field7869 = 6;
-  repeated .benchmarks.google_message3.Message7865 field7870 = 7;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field7871 = 8;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message7864 field7872 = 44542730;
-  }
-}
-
-message Message7929 {
-  optional int64 field7942 = 1;
-  optional int64 field7943 = 4;
-  optional int64 field7944 = 5;
-  optional int64 field7945 = 12;
-  optional int64 field7946 = 13;
-  optional int64 field7947 = 18;
-  optional int64 field7948 = 6;
-  optional int64 field7949 = 7;
-  repeated .benchmarks.google_message3.Message7919 field7950 = 8;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field7951 = 20;
-  repeated .benchmarks.google_message3.Message7920 field7952 = 14;
-  repeated .benchmarks.google_message3.Message7921 field7953 = 15;
-  repeated .benchmarks.google_message3.Message7928 field7954 = 17;
-  optional int64 field7955 = 19;
-  optional bool field7956 = 2;
-  optional int64 field7957 = 3;
-  optional int64 field7958 = 9;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field7959 = 10;
-  repeated bytes field7960 = 11;
-  optional int64 field7961 = 16;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message7929 field7962 = 53392238;
-  }
-}
-
-message Message8508 {
-  repeated .benchmarks.google_message3.Message8511 field8517 = 8;
-  repeated .benchmarks.google_message3.Message8512 field8518 = 9;
-  repeated .benchmarks.google_message3.Message8513 field8519 = 11;
-  optional bool field8520 = 13;
-  optional .benchmarks.google_message3.Message8514 field8521 = 14;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8522 = 15;
-  repeated .benchmarks.google_message3.Message8515 field8523 = 16;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8524 = 17;
-  optional int64 field8525 = 1;
-  optional float field8526 = 2;
-  optional int64 field8527 = 3;
-  optional int64 field8528 = 4;
-  optional int32 field8529 = 5;
-  optional bytes field8530 = 6;
-  repeated bytes field8531 = 7;
-  optional bool field8532 = 10;
-  optional bytes field8533 = 12;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message8508 field8534 = 3811804;
-  }
-}
-
-message Message9122 {
-  optional float field9132 = 1;
-  optional float field9133 = 2;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message9122 field9134 = 120398939;
-  }
-}
-
-message Message10177 {
-  repeated .benchmarks.google_message3.Message10155 field10270 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message10177 field10271 = 26801105;
-  }
-}
-
-message Message10278 {
-  repeated int32 field10286 = 1 [packed = true];
-  repeated int32 field10287 = 2 [packed = true];
-  optional int32 field10288 = 3;
-  extend .benchmarks.google_message3.Message10155 {
-    optional .benchmarks.google_message3.Message10278 field10289 = 29374161;
-  }
-}
-
-message Message10323 {
-  repeated .benchmarks.google_message3.Message10320 field10360 = 1;
-  extend .benchmarks.google_message3.Message10155 {
-    optional .benchmarks.google_message3.Message10323 field10361 = 27922524;
-  }
-}
-
-message Message10324 {
-  repeated .benchmarks.google_message3.Message10322 field10362 = 1;
-  optional .benchmarks.google_message3.Message10321 field10363 = 2;
-  extend .benchmarks.google_message3.Message10155 {
-    optional .benchmarks.google_message3.Message10324 field10364 = 27832297;
-  }
-}
-
-message Message11990 {
-  repeated .benchmarks.google_message3.Message11988 field12030 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message11990 field12031 = 21265426;
-  }
-}
-
-message Message12691 {
-  optional string field12713 = 1;
-  optional int32 field12714 = 2;
-  optional .benchmarks.google_message3.Message12668 field12715 = 3;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message12691 field12716 = 28426536;
-  }
-}
-
-message Message12870 {
-  required int32 field12879 = 1;
-  optional int32 field12880 = 7;
-  required int32 field12881 = 2;
-  optional uint64 field12882 = 3;
-  optional string field12883 = 2001;
-  optional fixed64 field12884 = 4;
-  repeated fixed64 field12885 = 14;
-  optional int32 field12886 = 9;
-  optional int64 field12887 = 18;
-  repeated .benchmarks.google_message3.Message12870 field12888 = 8;
-  optional int32 field12889 = 5;
-  optional uint64 field12890 = 6;
-  optional int32 field12891 = 10;
-  optional int32 field12892 = 11;
-  optional double field12893 = 12;
-  optional .benchmarks.google_message3.Message12825 field12894 = 13;
-  optional double field12895 = 15;
-  optional string field12896 = 16;
-  optional .benchmarks.google_message3.Enum12871 field12897 = 17;
-  optional int32 field12898 = 19;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message12870 field12899 = 5447656;
-  }
-}
-
-message Message13154 {
-  required float field13164 = 1;
-  required float field13165 = 2;
-  extend .benchmarks.google_message3.Message13145 {
-    optional .benchmarks.google_message3.Message13154 field13166 = 47301086;
-  }
-}
-
-message Message16507 {
-  optional bool field16510 = 3;
-  optional bool field16511 = 4;
-  optional bool field16512 = 14;
-  repeated string field16513 = 5;
-  repeated string field16514 = 6;
-  optional string field16515 = 8;
-  repeated int32 field16516 = 9;
-  repeated int32 field16517 = 10;
-  optional int32 field16518 = 7;
-  optional string field16519 = 15;
-  repeated string field16520 = 11;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16521 = 27;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16522 = 22;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16523 = 28;
-  optional string field16524 = 18;
-  optional int32 field16525 = 19;
-  optional int32 field16526 = 20;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field16527 = 23;
-  optional bool field16528 = 24;
-  repeated string field16529 = 25;
-  optional double field16530 = 26;
-  optional .benchmarks.google_message3.Message16478 field16531 = 30;
-  optional bool field16532 = 31;
-  optional string field16533 = 32;
-  optional bool field16534 = 33;
-  optional bool field16535 = 35;
-  optional bool field16536 = 36;
-  optional bool field16537 = 37;
-  optional bool field16538 = 38;
-  optional bool field16539 = 39;
-  optional bool field16540 = 40;
-  repeated string field16541 = 41;
-  extensions 21 to 21;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message16507 field16542 = 5569941;
-  }
-}
-
-message Message16564 {
-  repeated .benchmarks.google_message3.Message16552 field16568 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message16564 field16569 = 25830030;
-  }
-}
-
-message Message16661 {
-  repeated .benchmarks.google_message3.Message16660 field16671 = 1;
-  repeated uint64 field16672 = 2;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message16661 field16673 = 31274398;
-  }
-}
-
-message Message16746 {
-  repeated .benchmarks.google_message3.Message16727 field16806 = 1;
-  optional bool field16807 = 2;
-  optional bool field16808 = 3;
-  repeated .benchmarks.google_message3.Message16725 field16809 = 4;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message16746 field16810 = 28406765;
-  }
-}
-
-message Message17786 {
-  repeated group Message17787 = 1 {
-    required int32 field18177 = 2;
-    required int32 field18178 = 3;
-    optional .benchmarks.google_message3.Message17783 field18179 = 4;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18180 = 5;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18181 = 6;
-    repeated .benchmarks.google_message3.UnusedEmptyMessage field18182 = 8;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18183 = 9;
-    optional .benchmarks.google_message3.Message17726 field18184 = 10;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18185 = 11;
-    optional .benchmarks.google_message3.Message16945 field18186 = 102;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18187 = 12;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18188 = 13;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18189 = 7;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18190 = 100;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18191 = 101;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18192 = 14;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18193 = 19;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18194 = 22;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18195 = 24;
-    optional .benchmarks.google_message3.Enum16925 field18196 = 21;
-    optional bool field18197 = 18;
-    repeated .benchmarks.google_message3.UnusedEnum field18198 = 23;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18199 = 15;
-    optional string field18200 = 16;
-    optional string field18201 = 17;
-    optional bool field18202 = 99;
-  }
-  repeated .benchmarks.google_message3.Message17782 field18175 = 20;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message17786 field18176 = 11823055;
-  }
-}
-
-message Message22857 {
-  repeated .benchmarks.google_message3.Message22853 field22874 = 1;
-  extend .benchmarks.google_message3.Message10155 {
-    optional .benchmarks.google_message3.Message22857 field22875 = 67799715;
-  }
-}
-
-message Message24404 {
-  repeated group Message24405 = 1 {
-    required int32 field24686 = 2;
-    required int32 field24687 = 3;
-    optional .benchmarks.google_message3.Message24317 field24688 = 4;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24689 = 5;
-    optional .benchmarks.google_message3.Message24376 field24690 = 6;
-    optional .benchmarks.google_message3.Message24345 field24691 = 7;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24692 = 8;
-    optional .benchmarks.google_message3.Message24379 field24693 = 9;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24694 = 10;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24695 = 11;
-    optional .benchmarks.google_message3.Message24391 field24696 = 12;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24697 = 13;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24698 = 14;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24699 = 22;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24700 = 23;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24701 = 25;
-    optional .benchmarks.google_message3.Enum16925 field24702 = 18;
-    optional float field24703 = 20;
-    optional bool field24704 = 19;
-    repeated .benchmarks.google_message3.Enum16891 field24705 = 24;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field24706 = 15;
-    optional string field24707 = 16;
-    optional string field24708 = 17;
-    optional float field24709 = 21;
-    optional bool field24710 = 26;
-    optional .benchmarks.google_message3.UnusedEnum field24711 = 27;
-    optional bool field24712 = 28;
-    optional .benchmarks.google_message3.UnusedEnum field24713 = 29;
-    optional bool field24714 = 31;
-    optional bool field24715 = 99;
-    optional int64 field24716 = 32;
-  }
-  optional .benchmarks.google_message3.Message24403 field24684 = 30;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message24404 field24685 = 9129287;
-  }
-}
-
-message Message27300 {
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field27302 = 1;
-  optional string field27303 = 2;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message27300 field27304 = 24956467;
-  }
-}
-
-message Message27453 {
-  optional string field27459 = 15;
-  repeated string field27460 = 1;
-  repeated float field27461 = 6;
-  repeated int32 field27462 = 27;
-  repeated int32 field27463 = 28;
-  repeated .benchmarks.google_message3.Message27454 field27464 = 24;
-  repeated string field27465 = 2;
-  repeated float field27466 = 7;
-  repeated string field27467 = 22;
-  repeated string field27468 = 23;
-  optional string field27469 = 26;
-  repeated .benchmarks.google_message3.Message27357 field27470 = 8;
-  optional .benchmarks.google_message3.Message27360 field27471 = 16;
-  optional string field27472 = 25;
-  optional string field27473 = 11;
-  optional bool field27474 = 13;
-  optional bool field27475 = 14;
-  optional bool field27476 = 17;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field27477 = 12;
-  optional bool field27478 = 34268945;
-  optional bool field27479 = 20;
-  optional string field27480 = 21;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field27481 = 10;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message27453 field27482 = 8086204;
-  }
-}
-
-extend .benchmarks.google_message3.Message16945 {
-  optional string field17026 = 472;
-  repeated string field17027 = 818;
-  optional .benchmarks.google_message3.Message0 field17031 = 215;
-  repeated .benchmarks.google_message3.Message0 field17032 = 292;
-  repeated .benchmarks.google_message3.Message0 field17038 = 234;
-  repeated .benchmarks.google_message3.Message0 field17039 = 235;
-  optional .benchmarks.google_message3.Message0 field17042 = 246;
-  optional string field17043 = 224;
-  optional string field17044 = 225;
-  repeated string field17048 = 63;
-  repeated string field17049 = 64;
-  repeated .benchmarks.google_message3.Message0 field17052 = 233;
-  repeated .benchmarks.google_message3.Message0 field17053 = 66;
-  repeated string field17056 = 275;
-  optional string field17057 = 226;
-  repeated .benchmarks.google_message3.Message0 field17060 = 27;
-  repeated string field17073 = 75;
-  repeated .benchmarks.google_message3.Message0 field17076 = 77;
-  repeated string field17078 = 296;
-  repeated .benchmarks.google_message3.Message0 field17082 = 160;
-  repeated .benchmarks.google_message3.Message0 field17091 = 585;
-  repeated .benchmarks.google_message3.Message0 field17098 = 987;
-  repeated .benchmarks.google_message3.Message0 field17101 = 157;
-  repeated string field17102 = 158;
-  repeated string field17107 = 166;
-  repeated string field17133 = 567;
-  repeated string field17134 = 572;
-  repeated string field17160 = 49;
-  repeated string field17168 = 32;
-  repeated string field17170 = 34;
-  repeated .benchmarks.google_message3.Message0 field17172 = 509;
-  repeated string field17174 = 39;
-  repeated .benchmarks.google_message3.Message0 field17175 = 40;
-  repeated .benchmarks.google_message3.Message0 field17178 = 511;
-  repeated .benchmarks.google_message3.Message0 field17185 = 50;
-  repeated int32 field17207 = 1081;
-  repeated .benchmarks.google_message3.Message0 field17238 = 184;
-  repeated .benchmarks.google_message3.Message0 field17289 = 177;
-  repeated .benchmarks.google_message3.Message0 field17290 = 178;
-  repeated .benchmarks.google_message3.Message0 field17296 = 474;
-  repeated string field17298 = 44;
-  repeated .benchmarks.google_message3.Message0 field17301 = 47;
-  optional .benchmarks.google_message3.Message0 field17412 = 21;
-  repeated .benchmarks.google_message3.Message0 field17438 = 132;
-  repeated .benchmarks.google_message3.Message0 field17458 = 512;
-  repeated string field17460 = 560;
-  repeated string field17466 = 552;
-  repeated .benchmarks.google_message3.Message0 field17617 = 1080;
-  repeated int32 field17618 = 1084;
-}
-

+ 0 - 1279
benchmarks/datasets/google_message3/benchmark_message3_1.proto

@@ -1,1279 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_2.proto";
-import "datasets/google_message3/benchmark_message3_3.proto";
-import "datasets/google_message3/benchmark_message3_5.proto";
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message34390 {
-  repeated .benchmarks.google_message3.Message34387 field34452 = 1;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message34390 field34453 = 92144610;
-  }
-}
-
-message Message34624 {
-  optional .benchmarks.google_message3.Message34621 field34683 = 1;
-  optional .benchmarks.google_message3.Message34621 field34684 = 2;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message34624 field34685 = 18178548;
-  }
-}
-
-message Message34791 {
-  optional fixed64 field34793 = 1;
-  repeated group Message34792 = 2 {
-    required string field34808 = 3;
-    optional string field34809 = 4;
-  }
-  optional int32 field34795 = 5;
-  optional int32 field34796 = 6;
-  optional int32 field34797 = 7;
-  optional int32 field34798 = 8;
-  optional int32 field34799 = 9;
-  optional int32 field34800 = 10;
-  optional bool field34801 = 11;
-  optional float field34802 = 12;
-  optional int32 field34803 = 13;
-  optional string field34804 = 14;
-  optional int64 field34805 = 15;
-  repeated fixed64 field34806 = 17 [packed = true];
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message34791 field34807 = 6330340;
-  }
-}
-
-message Message35483 {
-  optional int32 field35499 = 1;
-  optional string field35500 = 2;
-  optional string field35501 = 3;
-  optional string field35502 = 4;
-  repeated .benchmarks.google_message3.Message35476 field35503 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field35504 = 6;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message35483 field35505 = 7913554;
-  }
-}
-
-message Message35807 {
-  optional int32 field35810 = 1;
-  optional int32 field35811 = 2;
-  optional int32 field35812 = 3;
-  optional int32 field35813 = 4;
-  optional int32 field35814 = 5;
-  optional int32 field35815 = 6;
-  optional int32 field35816 = 7;
-  optional int32 field35817 = 8;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message35807 field35818 = 3803299;
-  }
-}
-
-message Message37487 {
-  optional bytes field37501 = 2;
-  optional bool field37502 = 3;
-}
-
-message Message13062 {
-  optional int64 field13075 = 1;
-  optional string field13076 = 2;
-  optional int32 field13077 = 3;
-  optional string field13078 = 4;
-  optional int32 field13079 = 5;
-}
-
-message Message952 {
-  repeated .benchmarks.google_message3.Message949 field963 = 1;
-}
-
-message Message36876 {
-  optional .benchmarks.google_message3.Message2356 field36980 = 1;
-  repeated group Message36877 = 111 {
-    required string field37044 = 112;
-    optional int32 field37045 = 113;
-    optional bytes field37046 = 114;
-    optional int32 field37047 = 115;
-    optional int32 field37048 = 157;
-  }
-  repeated group Message36878 = 168 {
-  }
-  repeated group Message36879 = 55 {
-    required string field37050 = 56;
-    optional int32 field37051 = 69;
-  }
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field36984 = 78;
-  optional group Message36880 = 137 {
-  }
-  optional uint64 field36986 = 59;
-  optional bytes field36987 = 121;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field36988 = 2;
-  optional .benchmarks.google_message3.Message7029 field36989 = 118;
-  optional .benchmarks.google_message3.Message35573 field36990 = 11;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field36991 = 21;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field36992 = 22;
-  optional float field36993 = 13;
-  optional int32 field36994 = 20;
-  optional bool field36995 = 51;
-  optional bool field36996 = 57;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field36997 = 100;
-  optional int32 field36998 = 47;
-  optional int32 field36999 = 48;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37000 = 68;
-  repeated group Message36881 = 23 {
-  }
-  optional .benchmarks.google_message3.Message4144 field37002 = 125;
-  repeated group Message36882 = 35 {
-  }
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37004 = 49;
-  optional .benchmarks.google_message3.Message18921 field37005 = 52;
-  optional .benchmarks.google_message3.Message36858 field37006 = 46;
-  optional .benchmarks.google_message3.Message18831 field37007 = 54;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37008 = 58;
-  optional .benchmarks.google_message3.Message18283 field37009 = 10;
-  optional string field37010 = 44;
-  optional string field37011 = 103;
-  optional .benchmarks.google_message3.Message0 field37012 = 43;
-  optional .benchmarks.google_message3.Message0 field37013 = 143;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37014 = 53;
-  optional .benchmarks.google_message3.Message36869 field37015 = 15;
-  optional group Message36883 = 3 {
-  }
-  repeated group Message36884 = 16 {
-  }
-  repeated group Message36885 = 27 {
-  }
-  optional group Message36886 = 32 {
-  }
-  repeated .benchmarks.google_message3.UnusedEnum field37020 = 71;
-  repeated int32 field37021 = 70;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37022 = 66;
-  optional .benchmarks.google_message3.Message13090 field37023 = 67;
-  optional group Message36887 = 62 {
-  }
-  repeated .benchmarks.google_message3.Message10155 field37025 = 50;
-  repeated .benchmarks.google_message3.Message11874 field37026 = 151;
-  optional string field37027 = 12;
-  optional int64 field37028 = 72;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37029 = 73;
-  optional .benchmarks.google_message3.Message35546 field37030 = 108;
-  optional group Message36888 = 74 {
-    optional uint64 field37089 = 75;
-    optional bool field37090 = 76;
-    optional uint64 field37091 = 165;
-    optional double field37092 = 166;
-    optional uint64 field37093 = 109;
-    optional bytes field37094 = 122;
-  }
-  repeated .benchmarks.google_message3.Message19255 field37032 = 104;
-  optional .benchmarks.google_message3.Message33968 field37033 = 105;
-  optional bool field37034 = 106;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field37035 = 107;
-  optional .benchmarks.google_message3.Message6644 field37036 = 110;
-  optional bytes field37037 = 133;
-  optional group Message36889 = 116 {
-    optional int64 field37095 = 117;
-    optional string field37096 = 145;
-    optional int32 field37097 = 123;
-    optional bool field37098 = 163;
-    optional int32 field37099 = 164;
-    optional int32 field37100 = 149;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field37101 = 129;
-    optional .benchmarks.google_message3.Message13174 field37102 = 124;
-    optional .benchmarks.google_message3.Message13169 field37103 = 128;
-    optional uint64 field37104 = 132;
-    repeated .benchmarks.google_message3.Enum36890 field37105 = 131;
-    optional bool field37106 = 134;
-    optional bool field37107 = 140;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field37108 = 135;
-    optional float field37109 = 136;
-    optional float field37110 = 156;
-    optional bool field37111 = 142;
-    optional int64 field37112 = 167;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field37113 = 146;
-    optional bool field37114 = 148;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field37115 = 154;
-    optional .benchmarks.google_message3.UnusedEnum field37116 = 158;
-    repeated .benchmarks.google_message3.UnusedEnum field37117 = 159;
-    optional int32 field37118 = 160;
-    repeated string field37119 = 161;
-  }
-  repeated group Message36910 = 119 {
-  }
-  optional group Message36911 = 126 {
-    optional .benchmarks.google_message3.UnusedEmptyMessage field37121 = 127;
-    optional .benchmarks.google_message3.Message35538 field37122 = 130;
-    optional .benchmarks.google_message3.Message35540 field37123 = 144;
-    optional .benchmarks.google_message3.Message35542 field37124 = 150;
-  }
-  optional group Message36912 = 152 {
-    optional .benchmarks.google_message3.Message3901 field37125 = 153;
-    optional .benchmarks.google_message3.Message3901 field37126 = 162;
-  }
-  optional .benchmarks.google_message3.UnusedEmptyMessage field37042 = 155;
-}
-
-message Message1328 {
-}
-
-message Message6850 {
-}
-
-message Message6863 {
-  optional .benchmarks.google_message3.Enum6858 field6931 = 1;
-  optional .benchmarks.google_message3.Enum6858 field6932 = 2;
-  optional .benchmarks.google_message3.UnusedEnum field6933 = 36;
-  optional bool field6934 = 27;
-  optional .benchmarks.google_message3.Message6773 field6935 = 26;
-  optional int32 field6936 = 30;
-  optional int32 field6937 = 37;
-  optional .benchmarks.google_message3.Enum6815 field6938 = 31;
-  optional string field6939 = 3;
-  optional int32 field6940 = 4;
-  optional .benchmarks.google_message3.Enum6822 field6941 = 15;
-  optional bool field6942 = 10;
-  optional bool field6943 = 17;
-  optional float field6944 = 18;
-  optional float field6945 = 19;
-  optional int32 field6946 = 5;
-  optional int32 field6947 = 6;
-  optional bool field6948 = 7;
-  optional int32 field6949 = 12;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6950 = 8;
-  optional uint64 field6951 = 9;
-  optional string field6952 = 11;
-  optional bytes field6953 = 13;
-  optional int32 field6954 = 14;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6955 = 16;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6956 = 22;
-  optional .benchmarks.google_message3.Message3886 field6957 = 38;
-  optional string field6958 = 20;
-  optional uint32 field6959 = 21;
-  optional .benchmarks.google_message3.Message6743 field6960 = 23;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6961 = 29;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6962 = 33;
-  optional bool field6963 = 34;
-}
-
-message Message6871 {
-}
-
-message Message7547 {
-  required bytes field7549 = 1;
-  required int32 field7550 = 2;
-}
-
-message Message7648 {
-  optional string field7669 = 1;
-  optional int32 field7670 = 2;
-  optional int32 field7671 = 3;
-  optional int32 field7672 = 4;
-  optional int32 field7673 = 5;
-  optional int32 field7674 = 6;
-  optional float field7675 = 7;
-  optional bool field7676 = 8;
-  optional bool field7677 = 9;
-  optional bool field7678 = 10;
-  optional bool field7679 = 11;
-  optional bool field7680 = 12;
-}
-
-message Message7865 {
-}
-
-message Message7928 {
-  optional string field7940 = 1;
-  optional int64 field7941 = 2;
-}
-
-message Message7919 {
-  optional fixed64 field7931 = 1;
-  optional int64 field7932 = 2;
-  optional bytes field7933 = 3;
-}
-
-message Message7920 {
-  optional int64 field7934 = 1;
-  optional int64 field7935 = 2;
-}
-
-message Message7921 {
-  optional int32 field7936 = 1;
-  optional int64 field7937 = 2;
-  optional float field7938 = 3;
-  optional .benchmarks.google_message3.UnusedEnum field7939 = 4;
-}
-
-message Message8511 {
-  optional .benchmarks.google_message3.Message8224 field8539 = 1;
-  optional string field8540 = 2;
-  optional bool field8541 = 3;
-  optional int64 field8542 = 4;
-  optional string field8543 = 5;
-}
-
-message Message8512 {
-  optional .benchmarks.google_message3.Message8301 field8544 = 1;
-  optional .benchmarks.google_message3.Message8302 field8545 = 2;
-  optional string field8546 = 3;
-  optional bool field8547 = 4;
-  optional int64 field8548 = 5;
-  optional string field8549 = 6;
-}
-
-message Message8513 {
-  repeated .benchmarks.google_message3.Message8392 field8550 = 1;
-  optional string field8551 = 2;
-  optional bool field8552 = 3;
-  optional string field8553 = 4;
-}
-
-message Message8514 {
-  optional string field8554 = 1;
-  optional int64 field8555 = 2;
-  optional bool field8556 = 3;
-  repeated .benchmarks.google_message3.Message8130 field8557 = 4;
-  optional string field8558 = 5;
-}
-
-message Message8515 {
-  optional .benchmarks.google_message3.Message8479 field8559 = 1;
-  optional .benchmarks.google_message3.Message8478 field8560 = 2;
-  optional string field8561 = 3;
-}
-
-message Message10320 {
-  optional .benchmarks.google_message3.Enum10335 field10347 = 1;
-  repeated .benchmarks.google_message3.Message10319 field10348 = 2;
-  optional int32 field10349 = 3;
-  optional int32 field10350 = 4;
-  optional int32 field10351 = 5;
-  optional int32 field10352 = 6;
-  optional .benchmarks.google_message3.Enum10337 field10353 = 7;
-}
-
-message Message10321 {
-  optional int32 field10354 = 1;
-  optional int32 field10355 = 2;
-  optional uint64 field10356 = 3;
-}
-
-message Message10322 {
-  optional .benchmarks.google_message3.Message4016 field10357 = 1;
-  optional bool field10358 = 2;
-  optional bool field10359 = 3;
-}
-
-message Message11988 {
-  optional string field12021 = 1;
-  optional string field12022 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field12023 = 3;
-  optional .benchmarks.google_message3.Message10155 field12024 = 4;
-}
-
-message Message12668 {
-  repeated .benchmarks.google_message3.Message12669 field12677 = 1;
-  optional int32 field12678 = 2;
-  optional int32 field12679 = 3;
-  optional int32 field12680 = 4;
-}
-
-message Message12825 {
-  repeated .benchmarks.google_message3.Message12818 field12862 = 1;
-  optional int32 field12863 = 2;
-  optional .benchmarks.google_message3.Message12819 field12864 = 3;
-  optional .benchmarks.google_message3.Message12820 field12865 = 4;
-  optional int32 field12866 = 5;
-  repeated .benchmarks.google_message3.Message12821 field12867 = 6;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field12868 = 7;
-}
-
-message Message16478 {
-  repeated .benchmarks.google_message3.Message16479 field16481 = 1;
-  optional bool field16482 = 3;
-  optional int32 field16483 = 2;
-}
-
-message Message16552 {
-  optional fixed64 field16565 = 1;
-  optional int32 field16566 = 2;
-  optional .benchmarks.google_message3.Enum16553 field16567 = 3;
-}
-
-message Message16660 {
-  optional string field16668 = 1;
-  optional string field16669 = 2;
-  optional int32 field16670 = 3;
-}
-
-message Message16727 {
-  required .benchmarks.google_message3.Enum16728 field16782 = 1;
-  required string field16783 = 2;
-  optional string field16784 = 3;
-  optional int32 field16785 = 23;
-  required string field16786 = 4;
-  optional string field16787 = 5;
-  optional string field16788 = 6;
-  required .benchmarks.google_message3.Enum16732 field16789 = 7;
-  optional string field16790 = 8;
-  optional string field16791 = 9;
-  optional string field16792 = 10;
-  optional .benchmarks.google_message3.Enum16738 field16793 = 11;
-  optional int32 field16794 = 12;
-  repeated .benchmarks.google_message3.Message16722 field16795 = 13;
-  optional bool field16796 = 19;
-  optional bool field16797 = 24;
-  optional string field16798 = 14;
-  optional int64 field16799 = 15;
-  optional bool field16800 = 16;
-  optional string field16801 = 17;
-  optional .benchmarks.google_message3.Enum16698 field16802 = 18;
-  optional .benchmarks.google_message3.Message16724 field16803 = 20;
-  optional bool field16804 = 22;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field16805 = 25;
-  extensions 1000 to 536870911;
-}
-
-message Message16725 {
-  optional .benchmarks.google_message3.Enum16728 field16774 = 1;
-  repeated string field16775 = 2;
-}
-
-message Message17726 {
-  optional string field17801 = 1;
-  repeated string field17802 = 2;
-  optional string field17803 = 3;
-  repeated string field17804 = 4;
-  optional string field17805 = 5;
-  repeated string field17806 = 6;
-  optional string field17807 = 7;
-  optional string field17808 = 8;
-  repeated string field17809 = 15;
-  repeated string field17810 = 16;
-  repeated string field17811 = 17;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17812 = 18;
-  optional string field17813 = 9;
-  optional string field17814 = 10;
-  optional string field17815 = 11;
-  optional string field17816 = 12;
-  optional string field17817 = 13;
-  optional string field17818 = 14;
-  optional string field17819 = 19;
-  repeated .benchmarks.google_message3.Message17728 field17820 = 20;
-  repeated .benchmarks.google_message3.Message17728 field17821 = 21;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17822 = 30;
-}
-
-message Message17782 {
-  optional string field18153 = 1;
-  optional string field18154 = 2;
-}
-
-message Message17783 {
-  optional string field18155 = 1;
-  optional string field18156 = 2;
-  optional string field18157 = 3;
-  repeated group Message17784 = 4 {
-    optional string field18162 = 5;
-    optional string field18163 = 6;
-    optional string field18164 = 7;
-    repeated string field18165 = 8;
-    optional string field18166 = 17;
-    optional string field18167 = 18;
-  }
-  repeated group Message17785 = 9 {
-    optional string field18168 = 10;
-    optional string field18169 = 11;
-    optional .benchmarks.google_message3.Message17783 field18170 = 12;
-    optional string field18171 = 13;
-    optional string field18172 = 14;
-    repeated string field18173 = 15;
-  }
-  repeated string field18160 = 16;
-}
-
-message Message16945 {
-  optional string field16946 = 1;
-  optional string field16947 = 2;
-  optional string field16948 = 3;
-  optional string field16949 = 4;
-  optional string field16950 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field16951 = 872;
-  repeated .benchmarks.google_message3.Message0 field16952 = 16;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16953 = 54;
-  repeated .benchmarks.google_message3.Message0 field16954 = 55;
-  repeated string field16955 = 58;
-  repeated string field16956 = 59;
-  repeated string field16957 = 62;
-  repeated string field16958 = 37;
-  repeated string field16959 = 18;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16960 = 38;
-  repeated .benchmarks.google_message3.Message0 field16961 = 67;
-  repeated .benchmarks.google_message3.Message0 field16962 = 130;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16963 = 136;
-  repeated string field16964 = 138;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16965 = 156;
-  repeated string field16966 = 139;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16967 = 126;
-  repeated string field16968 = 152;
-  repeated .benchmarks.google_message3.Message0 field16969 = 183;
-  repeated string field16970 = 168;
-  repeated string field16971 = 212;
-  repeated string field16972 = 213;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16973 = 189;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16974 = 190;
-  repeated string field16975 = 191;
-  repeated string field16976 = 192;
-  repeated .benchmarks.google_message3.Message0 field16977 = 193;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16978 = 194;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16979 = 195;
-  repeated int32 field16980 = 196;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16981 = 95;
-  repeated string field16982 = 96;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16983 = 97;
-  repeated string field16984 = 1086;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16985 = 98;
-  repeated string field16986 = 99;
-  repeated string field16987 = 100;
-  repeated string field16988 = 48;
-  optional string field16989 = 22;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field16990 = 51;
-  repeated string field16991 = 81;
-  repeated string field16992 = 85;
-  repeated string field16993 = 169;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field16994 = 260;
-  optional int32 field16995 = 198;
-  optional int32 field16996 = 204;
-  optional string field16997 = 1087;
-  repeated string field16998 = 197;
-  repeated string field16999 = 206;
-  optional string field17000 = 211;
-  repeated string field17001 = 205;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17002 = 68;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17003 = 69;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17004 = 70;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17005 = 71;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17006 = 72;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17007 = 19;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17008 = 24;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field17009 = 23;
-  repeated .benchmarks.google_message3.Message0 field17010 = 131;
-  repeated string field17011 = 133;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17012 = 142;
-  repeated string field17013 = 143;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field17014 = 153;
-  repeated .benchmarks.google_message3.Message0 field17015 = 170;
-  repeated string field17016 = 171;
-  repeated string field17017 = 172;
-  repeated string field17018 = 173;
-  repeated string field17019 = 174;
-  repeated string field17020 = 175;
-  repeated string field17021 = 186;
-  repeated string field17022 = 101;
-  repeated .benchmarks.google_message3.Message0 field17023 = 102;
-  repeated string field17024 = 274;
-  extensions 17 to 17;
-  extensions 21 to 21;
-  extensions 25 to 25;
-  extensions 27 to 27;
-  extensions 29 to 29;
-  extensions 30 to 30;
-  extensions 31 to 31;
-  extensions 32 to 32;
-  extensions 33 to 33;
-  extensions 34 to 34;
-  extensions 35 to 35;
-  extensions 36 to 36;
-  extensions 39 to 39;
-  extensions 40 to 40;
-  extensions 41 to 41;
-  extensions 42 to 42;
-  extensions 43 to 43;
-  extensions 44 to 44;
-  extensions 45 to 45;
-  extensions 46 to 46;
-  extensions 47 to 47;
-  extensions 49 to 49;
-  extensions 50 to 50;
-  extensions 52 to 52;
-  extensions 53 to 53;
-  extensions 56 to 56;
-  extensions 57 to 57;
-  extensions 60 to 60;
-  extensions 61 to 61;
-  extensions 63 to 63;
-  extensions 64 to 64;
-  extensions 65 to 65;
-  extensions 66 to 66;
-  extensions 73 to 73;
-  extensions 74 to 74;
-  extensions 75 to 75;
-  extensions 76 to 76;
-  extensions 77 to 77;
-  extensions 78 to 78;
-  extensions 79 to 79;
-  extensions 80 to 80;
-  extensions 82 to 82;
-  extensions 83 to 83;
-  extensions 84 to 84;
-  extensions 86 to 86;
-  extensions 87 to 87;
-  extensions 88 to 88;
-  extensions 89 to 89;
-  extensions 90 to 90;
-  extensions 91 to 91;
-  extensions 92 to 92;
-  extensions 93 to 93;
-  extensions 94 to 94;
-  extensions 103 to 103;
-  extensions 104 to 104;
-  extensions 105 to 105;
-  extensions 106 to 106;
-  extensions 107 to 107;
-  extensions 108 to 108;
-  extensions 109 to 109;
-  extensions 110 to 110;
-  extensions 111 to 111;
-  extensions 112 to 112;
-  extensions 113 to 113;
-  extensions 114 to 114;
-  extensions 115 to 115;
-  extensions 116 to 116;
-  extensions 117 to 117;
-  extensions 118 to 118;
-  extensions 119 to 119;
-  extensions 120 to 120;
-  extensions 121 to 121;
-  extensions 122 to 122;
-  extensions 123 to 123;
-  extensions 124 to 124;
-  extensions 125 to 125;
-  extensions 127 to 127;
-  extensions 128 to 128;
-  extensions 129 to 129;
-  extensions 132 to 132;
-  extensions 134 to 134;
-  extensions 135 to 135;
-  extensions 137 to 137;
-  extensions 140 to 140;
-  extensions 141 to 141;
-  extensions 144 to 144;
-  extensions 145 to 145;
-  extensions 146 to 146;
-  extensions 147 to 147;
-  extensions 148 to 148;
-  extensions 149 to 149;
-  extensions 150 to 150;
-  extensions 151 to 151;
-  extensions 154 to 154;
-  extensions 155 to 155;
-  extensions 157 to 157;
-  extensions 158 to 158;
-  extensions 159 to 159;
-  extensions 160 to 160;
-  extensions 161 to 161;
-  extensions 162 to 162;
-  extensions 163 to 163;
-  extensions 164 to 164;
-  extensions 165 to 165;
-  extensions 166 to 166;
-  extensions 167 to 167;
-  extensions 176 to 176;
-  extensions 177 to 177;
-  extensions 178 to 178;
-  extensions 179 to 179;
-  extensions 180 to 180;
-  extensions 181 to 181;
-  extensions 182 to 182;
-  extensions 184 to 184;
-  extensions 185 to 185;
-  extensions 187 to 187;
-  extensions 188 to 188;
-  extensions 199 to 199;
-  extensions 200 to 200;
-  extensions 201 to 201;
-  extensions 202 to 202;
-  extensions 203 to 203;
-  extensions 207 to 207;
-  extensions 208 to 208;
-  extensions 209 to 209;
-  extensions 210 to 210;
-  extensions 214 to 214;
-  extensions 215 to 215;
-  extensions 216 to 216;
-  extensions 217 to 217;
-  extensions 218 to 218;
-  extensions 219 to 219;
-  extensions 220 to 220;
-  extensions 221 to 221;
-  extensions 222 to 222;
-  extensions 223 to 223;
-  extensions 224 to 224;
-  extensions 225 to 225;
-  extensions 226 to 226;
-  extensions 227 to 227;
-  extensions 228 to 228;
-  extensions 229 to 229;
-  extensions 230 to 230;
-  extensions 231 to 231;
-  extensions 232 to 232;
-  extensions 233 to 233;
-  extensions 234 to 234;
-  extensions 235 to 235;
-  extensions 236 to 236;
-  extensions 237 to 237;
-  extensions 238 to 238;
-  extensions 239 to 239;
-  extensions 240 to 240;
-  extensions 241 to 241;
-  extensions 242 to 242;
-  extensions 243 to 243;
-  extensions 244 to 244;
-  extensions 245 to 245;
-  extensions 246 to 246;
-  extensions 247 to 247;
-  extensions 248 to 248;
-  extensions 249 to 249;
-  extensions 250 to 250;
-  extensions 251 to 251;
-  extensions 252 to 252;
-  extensions 253 to 253;
-  extensions 254 to 254;
-  extensions 255 to 255;
-  extensions 256 to 256;
-  extensions 257 to 257;
-  extensions 258 to 258;
-  extensions 259 to 259;
-  extensions 261 to 261;
-  extensions 262 to 262;
-  extensions 263 to 263;
-  extensions 264 to 264;
-  extensions 265 to 265;
-  extensions 266 to 266;
-  extensions 267 to 267;
-  extensions 268 to 268;
-  extensions 269 to 269;
-  extensions 270 to 270;
-  extensions 271 to 271;
-  extensions 272 to 272;
-  extensions 273 to 273;
-  extensions 275 to 275;
-  extensions 276 to 276;
-  extensions 277 to 277;
-  extensions 278 to 278;
-  extensions 279 to 279;
-  extensions 280 to 280;
-  extensions 281 to 281;
-  extensions 282 to 282;
-  extensions 283 to 283;
-  extensions 284 to 284;
-  extensions 285 to 285;
-  extensions 286 to 286;
-  extensions 290 to 290;
-  extensions 291 to 291;
-  extensions 292 to 292;
-  extensions 293 to 293;
-  extensions 294 to 294;
-  extensions 295 to 295;
-  extensions 296 to 296;
-  extensions 297 to 297;
-  extensions 298 to 298;
-  extensions 299 to 299;
-  extensions 300 to 300;
-  extensions 301 to 301;
-  extensions 302 to 302;
-  extensions 303 to 303;
-  extensions 304 to 304;
-  extensions 305 to 305;
-  extensions 306 to 306;
-  extensions 307 to 307;
-  extensions 308 to 308;
-  extensions 309 to 309;
-  extensions 310 to 310;
-  extensions 311 to 311;
-  extensions 312 to 312;
-  extensions 313 to 313;
-  extensions 314 to 314;
-  extensions 315 to 315;
-  extensions 316 to 316;
-  extensions 317 to 317;
-  extensions 318 to 318;
-  extensions 319 to 319;
-  extensions 320 to 320;
-  extensions 321 to 321;
-  extensions 322 to 322;
-  extensions 323 to 323;
-  extensions 324 to 324;
-  extensions 325 to 325;
-  extensions 326 to 326;
-  extensions 327 to 327;
-  extensions 328 to 328;
-  extensions 329 to 329;
-  extensions 330 to 330;
-  extensions 331 to 331;
-  extensions 332 to 332;
-  extensions 333 to 333;
-  extensions 334 to 334;
-  extensions 335 to 335;
-  extensions 336 to 336;
-  extensions 337 to 337;
-  extensions 338 to 338;
-  extensions 339 to 339;
-  extensions 340 to 340;
-  extensions 341 to 341;
-  extensions 342 to 342;
-  extensions 343 to 343;
-  extensions 344 to 344;
-  extensions 345 to 345;
-  extensions 346 to 346;
-  extensions 347 to 347;
-  extensions 348 to 348;
-  extensions 349 to 349;
-  extensions 350 to 350;
-  extensions 351 to 351;
-  extensions 352 to 352;
-  extensions 353 to 353;
-  extensions 354 to 354;
-  extensions 355 to 355;
-  extensions 356 to 356;
-  extensions 357 to 357;
-  extensions 358 to 358;
-  extensions 359 to 359;
-  extensions 360 to 360;
-  extensions 361 to 361;
-  extensions 362 to 362;
-  extensions 363 to 363;
-  extensions 364 to 364;
-  extensions 365 to 365;
-  extensions 366 to 366;
-  extensions 367 to 367;
-  extensions 368 to 368;
-  extensions 369 to 369;
-  extensions 370 to 370;
-  extensions 371 to 371;
-  extensions 372 to 372;
-  extensions 373 to 373;
-  extensions 374 to 374;
-  extensions 375 to 375;
-  extensions 376 to 376;
-  extensions 377 to 377;
-  extensions 378 to 378;
-  extensions 379 to 379;
-  extensions 380 to 380;
-  extensions 381 to 381;
-  extensions 382 to 382;
-  extensions 383 to 383;
-  extensions 384 to 384;
-  extensions 385 to 385;
-  extensions 386 to 386;
-  extensions 387 to 387;
-  extensions 388 to 388;
-  extensions 389 to 389;
-  extensions 390 to 390;
-  extensions 391 to 391;
-  extensions 392 to 392;
-  extensions 393 to 393;
-  extensions 394 to 394;
-  extensions 395 to 395;
-  extensions 396 to 396;
-  extensions 397 to 397;
-  extensions 398 to 398;
-  extensions 399 to 399;
-  extensions 400 to 400;
-  extensions 401 to 401;
-  extensions 402 to 402;
-  extensions 403 to 403;
-  extensions 404 to 404;
-  extensions 405 to 405;
-  extensions 406 to 406;
-  extensions 407 to 407;
-  extensions 408 to 408;
-  extensions 409 to 409;
-  extensions 410 to 410;
-  extensions 411 to 411;
-  extensions 412 to 412;
-  extensions 413 to 413;
-  extensions 414 to 414;
-  extensions 415 to 415;
-  extensions 416 to 416;
-  extensions 417 to 417;
-  extensions 418 to 418;
-  extensions 419 to 419;
-  extensions 420 to 420;
-  extensions 421 to 421;
-  extensions 422 to 422;
-  extensions 423 to 423;
-  extensions 424 to 424;
-  extensions 425 to 425;
-  extensions 426 to 426;
-  extensions 427 to 427;
-  extensions 428 to 428;
-  extensions 429 to 429;
-  extensions 430 to 430;
-  extensions 431 to 431;
-  extensions 432 to 432;
-  extensions 433 to 433;
-  extensions 434 to 434;
-  extensions 435 to 435;
-  extensions 436 to 436;
-  extensions 437 to 437;
-  extensions 438 to 438;
-  extensions 439 to 439;
-  extensions 440 to 440;
-  extensions 441 to 441;
-  extensions 442 to 442;
-  extensions 443 to 443;
-  extensions 444 to 444;
-  extensions 445 to 445;
-  extensions 446 to 446;
-  extensions 447 to 447;
-  extensions 448 to 448;
-  extensions 449 to 449;
-  extensions 450 to 450;
-  extensions 451 to 451;
-  extensions 452 to 452;
-  extensions 453 to 453;
-  extensions 454 to 454;
-  extensions 455 to 455;
-  extensions 456 to 456;
-  extensions 457 to 457;
-  extensions 458 to 458;
-  extensions 459 to 459;
-  extensions 460 to 460;
-  extensions 461 to 461;
-  extensions 462 to 462;
-  extensions 463 to 463;
-  extensions 464 to 464;
-  extensions 465 to 465;
-  extensions 466 to 466;
-  extensions 467 to 467;
-  extensions 468 to 468;
-  extensions 469 to 469;
-  extensions 470 to 470;
-  extensions 471 to 471;
-  extensions 472 to 472;
-  extensions 473 to 473;
-  extensions 474 to 474;
-  extensions 509 to 509;
-  extensions 511 to 511;
-  extensions 512 to 512;
-  extensions 513 to 513;
-  extensions 514 to 514;
-  extensions 515 to 515;
-  extensions 516 to 516;
-  extensions 517 to 517;
-  extensions 518 to 518;
-  extensions 519 to 519;
-  extensions 520 to 520;
-  extensions 521 to 521;
-  extensions 522 to 522;
-  extensions 523 to 523;
-  extensions 524 to 524;
-  extensions 525 to 525;
-  extensions 526 to 526;
-  extensions 527 to 527;
-  extensions 528 to 528;
-  extensions 529 to 529;
-  extensions 530 to 530;
-  extensions 531 to 531;
-  extensions 532 to 532;
-  extensions 533 to 533;
-  extensions 534 to 534;
-  extensions 535 to 535;
-  extensions 536 to 536;
-  extensions 537 to 537;
-  extensions 538 to 538;
-  extensions 539 to 539;
-  extensions 540 to 540;
-  extensions 541 to 541;
-  extensions 542 to 542;
-  extensions 543 to 543;
-  extensions 544 to 544;
-  extensions 545 to 545;
-  extensions 546 to 546;
-  extensions 547 to 547;
-  extensions 548 to 548;
-  extensions 549 to 549;
-  extensions 550 to 550;
-  extensions 551 to 551;
-  extensions 552 to 552;
-  extensions 553 to 553;
-  extensions 554 to 554;
-  extensions 555 to 555;
-  extensions 556 to 556;
-  extensions 557 to 557;
-  extensions 558 to 558;
-  extensions 559 to 559;
-  extensions 560 to 560;
-  extensions 561 to 561;
-  extensions 562 to 562;
-  extensions 563 to 563;
-  extensions 564 to 564;
-  extensions 565 to 565;
-  extensions 566 to 566;
-  extensions 567 to 567;
-  extensions 568 to 568;
-  extensions 569 to 569;
-  extensions 570 to 570;
-  extensions 571 to 571;
-  extensions 572 to 572;
-  extensions 573 to 573;
-  extensions 574 to 574;
-  extensions 575 to 575;
-  extensions 576 to 576;
-  extensions 577 to 577;
-  extensions 578 to 578;
-  extensions 579 to 579;
-  extensions 580 to 580;
-  extensions 581 to 581;
-  extensions 582 to 582;
-  extensions 583 to 583;
-  extensions 584 to 584;
-  extensions 585 to 585;
-  extensions 586 to 586;
-  extensions 587 to 587;
-  extensions 588 to 588;
-  extensions 589 to 589;
-  extensions 590 to 590;
-  extensions 604 to 604;
-  extensions 605 to 605;
-  extensions 606 to 606;
-  extensions 607 to 607;
-  extensions 608 to 608;
-  extensions 609 to 609;
-  extensions 610 to 610;
-  extensions 611 to 611;
-  extensions 612 to 612;
-  extensions 613 to 613;
-  extensions 614 to 614;
-  extensions 615 to 615;
-  extensions 616 to 616;
-  extensions 617 to 617;
-  extensions 618 to 618;
-  extensions 619 to 619;
-  extensions 620 to 620;
-  extensions 621 to 621;
-  extensions 622 to 622;
-  extensions 623 to 623;
-  extensions 624 to 624;
-  extensions 625 to 625;
-  extensions 626 to 626;
-  extensions 627 to 627;
-  extensions 628 to 628;
-  extensions 629 to 629;
-  extensions 813 to 813;
-  extensions 814 to 814;
-  extensions 815 to 815;
-  extensions 816 to 816;
-  extensions 817 to 817;
-  extensions 818 to 818;
-  extensions 819 to 819;
-  extensions 820 to 820;
-  extensions 821 to 821;
-  extensions 822 to 822;
-  extensions 823 to 823;
-  extensions 824 to 824;
-  extensions 827 to 827;
-  extensions 828 to 828;
-  extensions 829 to 829;
-  extensions 830 to 830;
-  extensions 831 to 831;
-  extensions 832 to 832;
-  extensions 833 to 833;
-  extensions 834 to 834;
-  extensions 835 to 835;
-  extensions 836 to 836;
-  extensions 837 to 837;
-  extensions 838 to 838;
-  extensions 839 to 839;
-  extensions 840 to 840;
-  extensions 841 to 841;
-  extensions 842 to 842;
-  extensions 843 to 843;
-  extensions 844 to 844;
-  extensions 845 to 845;
-  extensions 846 to 846;
-  extensions 847 to 847;
-  extensions 848 to 848;
-  extensions 849 to 849;
-  extensions 850 to 850;
-  extensions 851 to 851;
-  extensions 852 to 852;
-  extensions 853 to 853;
-  extensions 854 to 854;
-  extensions 855 to 855;
-  extensions 856 to 856;
-  extensions 857 to 857;
-  extensions 858 to 858;
-  extensions 859 to 859;
-  extensions 860 to 860;
-  extensions 861 to 861;
-  extensions 862 to 862;
-  extensions 863 to 863;
-  extensions 864 to 864;
-  extensions 865 to 865;
-  extensions 866 to 866;
-  extensions 867 to 867;
-  extensions 868 to 868;
-  extensions 869 to 869;
-  extensions 870 to 870;
-  extensions 871 to 871;
-  extensions 880 to 880;
-  extensions 881 to 881;
-  extensions 882 to 882;
-  extensions 883 to 883;
-  extensions 884 to 884;
-  extensions 885 to 885;
-  extensions 886 to 886;
-  extensions 887 to 887;
-  extensions 888 to 888;
-  extensions 890 to 890;
-  extensions 891 to 891;
-  extensions 892 to 892;
-  extensions 912 to 912;
-  extensions 914 to 914;
-  extensions 915 to 915;
-  extensions 916 to 916;
-  extensions 917 to 917;
-  extensions 918 to 918;
-  extensions 919 to 919;
-  extensions 920 to 920;
-  extensions 921 to 921;
-  extensions 922 to 922;
-  extensions 923 to 923;
-  extensions 924 to 924;
-  extensions 925 to 925;
-  extensions 926 to 926;
-  extensions 927 to 927;
-  extensions 928 to 928;
-  extensions 929 to 929;
-  extensions 930 to 930;
-  extensions 931 to 931;
-  extensions 932 to 932;
-  extensions 933 to 933;
-  extensions 934 to 934;
-  extensions 935 to 935;
-  extensions 936 to 936;
-  extensions 937 to 937;
-  extensions 938 to 938;
-  extensions 939 to 939;
-  extensions 940 to 940;
-  extensions 941 to 941;
-  extensions 942 to 942;
-  extensions 943 to 943;
-  extensions 944 to 944;
-  extensions 945 to 945;
-  extensions 946 to 946;
-  extensions 947 to 947;
-  extensions 949 to 949;
-  extensions 950 to 950;
-  extensions 951 to 951;
-  extensions 952 to 952;
-  extensions 954 to 954;
-  extensions 955 to 955;
-  extensions 956 to 956;
-  extensions 957 to 957;
-  extensions 958 to 958;
-  extensions 959 to 959;
-  extensions 960 to 960;
-  extensions 961 to 961;
-  extensions 962 to 962;
-  extensions 963 to 963;
-  extensions 964 to 964;
-  extensions 965 to 965;
-  extensions 966 to 966;
-  extensions 967 to 967;
-  extensions 968 to 968;
-  extensions 969 to 969;
-  extensions 970 to 970;
-  extensions 971 to 971;
-  extensions 972 to 972;
-  extensions 973 to 973;
-  extensions 974 to 974;
-  extensions 975 to 975;
-  extensions 976 to 976;
-  extensions 977 to 977;
-  extensions 978 to 978;
-  extensions 979 to 979;
-  extensions 980 to 980;
-  extensions 981 to 981;
-  extensions 982 to 982;
-  extensions 983 to 983;
-  extensions 984 to 984;
-  extensions 985 to 985;
-  extensions 987 to 987;
-  extensions 988 to 988;
-  extensions 1000 to 1000;
-  extensions 1001 to 1001;
-  extensions 1002 to 1002;
-  extensions 1003 to 1003;
-  extensions 1004 to 1004;
-  extensions 1005 to 1005;
-  extensions 1006 to 1006;
-  extensions 1007 to 1007;
-  extensions 1008 to 1008;
-  extensions 1009 to 1009;
-  extensions 1010 to 1010;
-  extensions 1011 to 1011;
-  extensions 1012 to 1012;
-  extensions 1013 to 1013;
-  extensions 1014 to 1014;
-  extensions 1015 to 1015;
-  extensions 1016 to 1016;
-  extensions 1017 to 1017;
-  extensions 1018 to 1018;
-  extensions 1019 to 1019;
-  extensions 1020 to 1020;
-  extensions 1021 to 1021;
-  extensions 1022 to 1022;
-  extensions 1023 to 1023;
-  extensions 1024 to 1024;
-  extensions 1025 to 1025;
-  extensions 1026 to 1026;
-  extensions 1027 to 1027;
-  extensions 1028 to 1028;
-  extensions 1029 to 1029;
-  extensions 1030 to 1030;
-  extensions 1031 to 1031;
-  extensions 1032 to 1032;
-  extensions 1033 to 1033;
-  extensions 1034 to 1034;
-  extensions 1035 to 1035;
-  extensions 1036 to 1036;
-  extensions 1037 to 1037;
-  extensions 1038 to 1038;
-  extensions 1039 to 1039;
-  extensions 1040 to 1040;
-  extensions 1041 to 1041;
-  extensions 1042 to 1042;
-  extensions 1043 to 1043;
-  extensions 1044 to 1044;
-  extensions 1045 to 1045;
-  extensions 1046 to 1046;
-  extensions 1047 to 1047;
-  extensions 1048 to 1048;
-  extensions 1049 to 1049;
-  extensions 1050 to 1050;
-  extensions 1051 to 1051;
-  extensions 1052 to 1052;
-  extensions 1053 to 1053;
-  extensions 1054 to 1054;
-  extensions 1055 to 1055;
-  extensions 1056 to 1056;
-  extensions 1057 to 1057;
-  extensions 1058 to 1058;
-  extensions 1079 to 1079;
-  extensions 1080 to 1080;
-  extensions 1081 to 1081;
-  extensions 1082 to 1082;
-  extensions 1083 to 1083;
-  extensions 1084 to 1084;
-  extensions 1085 to 1085;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message16945 field17025 = 22068132;
-  }
-}
-

+ 0 - 498
benchmarks/datasets/google_message3/benchmark_message3_2.proto

@@ -1,498 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_3.proto";
-import "datasets/google_message3/benchmark_message3_4.proto";
-import "datasets/google_message3/benchmark_message3_5.proto";
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message22853 {
-  optional .benchmarks.google_message3.Enum22854 field22869 = 1;
-  repeated uint32 field22870 = 2 [packed = true];
-  repeated float field22871 = 3 [packed = true];
-  repeated float field22872 = 5 [packed = true];
-  optional .benchmarks.google_message3.UnusedEmptyMessage field22873 = 4;
-}
-
-message Message24345 {
-  optional string field24533 = 1;
-  optional .benchmarks.google_message3.UnusedEnum field24534 = 22;
-  optional .benchmarks.google_message3.Message24346 field24535 = 2;
-  optional string field24536 = 3;
-  optional string field24537 = 4;
-  optional .benchmarks.google_message3.UnusedEnum field24538 = 23;
-  optional string field24539 = 5;
-  required string field24540 = 6;
-  optional string field24541 = 7;
-  optional string field24542 = 8;
-  optional .benchmarks.google_message3.Message24316 field24543 = 9;
-  optional .benchmarks.google_message3.Message24376 field24544 = 10;
-  optional string field24545 = 11;
-  optional string field24546 = 19;
-  optional string field24547 = 20;
-  optional string field24548 = 21;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24549 = 12;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24550 = 13;
-  repeated string field24551 = 14;
-  optional string field24552 = 15;
-  optional int32 field24553 = 18;
-  optional .benchmarks.google_message3.Message24379 field24554 = 16;
-  optional string field24555 = 17;
-  repeated .benchmarks.google_message3.Message24356 field24556 = 24;
-  repeated .benchmarks.google_message3.Message24366 field24557 = 25;
-}
-
-message Message24403 {
-  optional .benchmarks.google_message3.Message24401 field24681 = 1;
-  optional .benchmarks.google_message3.Message24402 field24682 = 2;
-}
-
-message Message24391 {
-  optional string field24631 = 1;
-  optional string field24632 = 2;
-  repeated string field24633 = 3;
-  optional string field24634 = 4;
-  repeated string field24635 = 5;
-  repeated string field24636 = 16;
-  optional string field24637 = 17;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24638 = 25;
-  optional string field24639 = 7;
-  optional string field24640 = 18;
-  optional string field24641 = 19;
-  optional string field24642 = 20;
-  optional int32 field24643 = 24;
-  optional .benchmarks.google_message3.Message24379 field24644 = 8;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24645 = 9;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24646 = 10;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24647 = 11;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24648 = 12;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24649 = 13;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24650 = 14;
-  optional string field24651 = 21;
-  optional int32 field24652 = 22;
-  optional int32 field24653 = 23;
-  repeated string field24654 = 15;
-  repeated string field24655 = 6;
-}
-
-message Message27454 {
-}
-
-message Message27357 {
-  optional string field27410 = 1;
-  optional float field27411 = 2;
-  optional string field27412 = 3;
-  optional bool field27413 = 4;
-  optional bool field27414 = 5;
-}
-
-message Message27360 {
-  optional .benchmarks.google_message3.Message27358 field27426 = 1;
-  optional .benchmarks.google_message3.Enum27361 field27427 = 2;
-  optional .benchmarks.google_message3.Message27358 field27428 = 3;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field27429 = 4;
-}
-
-message Message34387 {
-  optional string field34446 = 1;
-  repeated .benchmarks.google_message3.Message34381 field34447 = 2;
-  optional .benchmarks.google_message3.UnusedEnum field34448 = 3;
-  optional .benchmarks.google_message3.Enum34388 field34449 = 4;
-  optional int64 field34450 = 5;
-}
-
-message Message34621 {
-  optional double field34651 = 1;
-  optional double field34652 = 2;
-  optional double field34653 = 3;
-  optional double field34654 = 4;
-  optional double field34655 = 11;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34656 = 13;
-  optional .benchmarks.google_message3.Message34619 field34657 = 14;
-  optional string field34658 = 5;
-  optional string field34659 = 9;
-  optional double field34660 = 12;
-  optional bytes field34661 = 19;
-  optional string field34662 = 15;
-  optional string field34663 = 16;
-  optional string field34664 = 17;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34665 = 18;
-  optional .benchmarks.google_message3.Message34621 field34666 = 20;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field34667 = 100;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34668 = 101;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message34621 field34669 = 17562023;
-  }
-}
-
-message Message35476 {
-  optional string field35484 = 1;
-  optional string field35485 = 2;
-  optional string field35486 = 3;
-  optional .benchmarks.google_message3.Enum35477 field35487 = 4;
-  optional float field35488 = 5;
-  optional float field35489 = 6;
-  optional float field35490 = 7;
-  optional float field35491 = 8;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field35492 = 9;
-  optional int32 field35493 = 10;
-  optional int32 field35494 = 11;
-  optional int32 field35495 = 12;
-  optional string field35496 = 13;
-  optional string field35497 = 14;
-}
-
-message Message949 {
-  optional string field955 = 1;
-  optional int64 field956 = 2;
-  optional int64 field957 = 3;
-  optional .benchmarks.google_message3.Message730 field958 = 4;
-  repeated string field959 = 5;
-  optional string field960 = 6;
-  optional bool field961 = 7;
-}
-
-message Message36869 {
-  optional int32 field36970 = 1;
-  optional int32 field36971 = 2;
-}
-
-message Message33968 {
-  repeated group Message33969 = 1 {
-  }
-  repeated .benchmarks.google_message3.Message33958 field33989 = 3;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field33990 = 106;
-  optional bool field33991 = 108;
-  optional .benchmarks.google_message3.UnusedEnum field33992 = 107;
-}
-
-message Message6644 {
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6701 = 8;
-  optional string field6702 = 1;
-  optional double field6703 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6704 = 9;
-  optional bytes field6705 = 3;
-  optional bytes field6706 = 19;
-  optional .benchmarks.google_message3.Message6637 field6707 = 4;
-  repeated .benchmarks.google_message3.Message6126 field6708 = 18;
-  optional bool field6709 = 6;
-  optional .benchmarks.google_message3.Message6643 field6710 = 10;
-  optional string field6711 = 12;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6712 = 14;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6713 = 15;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6714 = 16;
-  optional int32 field6715 = 17;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6716 = 20;
-}
-
-message Message18831 {
-  repeated group Message18832 = 1 {
-    optional int32 field18836 = 2;
-    optional string field18837 = 5;
-    optional float field18838 = 3;
-    optional float field18839 = 9;
-    optional int32 field18840 = 11;
-    repeated uint64 field18841 = 4;
-    repeated group Message18833 = 6 {
-      required uint64 field18843 = 7;
-      optional string field18844 = 8;
-      optional float field18845 = 10;
-      optional int32 field18846 = 12;
-      optional bool field18847 = 13;
-    }
-  }
-}
-
-message Message13090 {
-  optional .benchmarks.google_message3.Message13083 field13141 = 1;
-  optional .benchmarks.google_message3.Message13088 field13142 = 2;
-}
-
-message Message11874 {
-  optional .benchmarks.google_message3.Message10391 field11888 = 3;
-  optional string field11889 = 4;
-  optional .benchmarks.google_message3.Message11873 field11890 = 6;
-  optional bool field11891 = 7;
-  extensions 1 to 1;
-  extensions 2 to 2;
-  extensions 5 to 5;
-}
-
-message Message4144 {
-  repeated group Message4145 = 1 {
-    required .benchmarks.google_message3.Enum4146 field4165 = 2;
-    required int32 field4166 = 3;
-    optional .benchmarks.google_message3.Enum4160 field4167 = 9;
-    optional bytes field4168 = 4;
-    optional .benchmarks.google_message3.Enum4152 field4169 = 5;
-    optional string field4170 = 6;
-  }
-}
-
-message Message35573 {
-  optional fixed64 field35695 = 16;
-  optional string field35696 = 1000;
-  optional string field35697 = 1004;
-  optional int32 field35698 = 1003;
-  repeated group Message35574 = 1012 {
-  }
-  optional int64 field35700 = 1011;
-  optional int64 field35701 = 1005;
-  optional int64 field35702 = 1006;
-  optional int64 field35703 = 1007;
-  optional int64 field35704 = 1008;
-  repeated group Message35575 = 1 {
-    optional int64 field35709 = 2;
-    optional string field35710 = 3;
-    optional string field35711 = 19;
-    optional int32 field35712 = 20;
-    optional int32 field35713 = 21;
-    optional int32 field35714 = 22;
-    optional bool field35715 = 23;
-    optional int32 field35716 = 47;
-    optional int32 field35717 = 48;
-    optional bool field35718 = 24;
-    optional fixed64 field35719 = 25;
-    optional bytes field35720 = 52;
-    optional int32 field35721 = 18;
-    optional fixed32 field35722 = 43;
-    optional bool field35723 = 26;
-    optional int32 field35724 = 27;
-    optional int32 field35725 = 17;
-    optional bool field35726 = 45;
-    repeated int32 field35727 = 33;
-    repeated int32 field35728 = 58;
-    optional float field35729 = 34;
-    optional float field35730 = 1009;
-    optional int32 field35731 = 28;
-    repeated fixed64 field35732 = 1001;
-    repeated fixed64 field35733 = 1002;
-    optional int32 field35734 = 44;
-    optional int32 field35735 = 50;
-    optional int32 field35736 = 36;
-    optional int32 field35737 = 40;
-    optional bool field35738 = 1016;
-    optional bool field35739 = 1010;
-    optional int32 field35740 = 37;
-    optional int32 field35741 = 38;
-    optional string field35742 = 46;
-    optional uint32 field35743 = 60;
-    repeated bytes field35744 = 56;
-    optional .benchmarks.google_message3.Message0 field35745 = 57;
-    required group Message35576 = 4 {
-      optional fixed64 field35747 = 5;
-      optional int32 field35748 = 6;
-      optional int32 field35749 = 49;
-      optional int32 field35750 = 7;
-      optional uint32 field35751 = 59;
-      optional int32 field35752 = 14;
-      optional int32 field35753 = 15;
-      optional int32 field35754 = 35;
-      optional bytes field35755 = 53;
-      optional int32 field35756 = 8;
-      optional string field35757 = 9;
-      optional fixed64 field35758 = 10;
-      optional int32 field35759 = 11;
-      optional int32 field35760 = 12;
-      optional int32 field35761 = 41;
-      optional int32 field35762 = 30;
-      optional int32 field35763 = 31;
-      optional int32 field35764 = 13;
-      optional bytes field35765 = 39;
-      optional string field35766 = 29;
-      optional int32 field35767 = 42;
-      repeated int32 field35768 = 32;
-      repeated int32 field35769 = 51;
-      optional int64 field35770 = 54;
-      optional .benchmarks.google_message3.Message0 field35771 = 55;
-    }
-  }
-}
-
-message Message36858 {
-  repeated int32 field36956 = 1;
-  repeated string field36957 = 2;
-  repeated string field36958 = 12;
-  optional int32 field36959 = 3;
-  optional int32 field36960 = 4;
-  optional int32 field36961 = 14;
-  optional string field36962 = 11;
-  optional bool field36963 = 5;
-  optional bool field36964 = 13;
-  optional int64 field36965 = 6;
-  optional .benchmarks.google_message3.Message35506 field36966 = 7;
-  repeated group Message36859 = 8 {
-    required .benchmarks.google_message3.Enum36860 field36968 = 9;
-    optional float field36969 = 10;
-  }
-}
-
-message Message13174 {
-  required int32 field13237 = 6;
-  optional int32 field13238 = 3;
-  required int32 field13239 = 4;
-  optional int32 field13240 = 8;
-  optional double field13241 = 5;
-  optional double field13242 = 7;
-  optional int32 field13243 = 17;
-  optional int32 field13244 = 19;
-  optional double field13245 = 20;
-  optional int32 field13246 = 9;
-  optional double field13247 = 10;
-  optional int32 field13248 = 11;
-  optional .benchmarks.google_message3.Message13151 field13249 = 21;
-  optional int32 field13250 = 1;
-  optional double field13251 = 2;
-  optional double field13252 = 15;
-  optional double field13253 = 16;
-  optional double field13254 = 12;
-  optional double field13255 = 13;
-  optional double field13256 = 14;
-  optional int32 field13257 = 18;
-}
-
-message Message18283 {
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18478 = 1;
-  optional int32 field18479 = 4;
-  optional int32 field18480 = 106;
-  optional int32 field18481 = 107;
-  optional int32 field18482 = 108;
-  optional int32 field18483 = 109;
-  optional int32 field18484 = 105;
-  optional int32 field18485 = 113;
-  optional int32 field18486 = 114;
-  optional int32 field18487 = 124;
-  optional int32 field18488 = 125;
-  optional int32 field18489 = 128;
-  optional int32 field18490 = 135;
-  optional bool field18491 = 166;
-  optional bool field18492 = 136;
-  optional int32 field18493 = 140;
-  optional int32 field18494 = 171;
-  optional int32 field18495 = 148;
-  optional int32 field18496 = 145;
-  optional float field18497 = 117;
-  optional int32 field18498 = 146;
-  optional string field18499 = 3;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18500 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18501 = 6;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18502 = 9;
-  optional .benchmarks.google_message3.Message18253 field18503 = 155;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18504 = 184;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18505 = 163;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18506 = 16;
-  repeated int32 field18507 = 20;
-  repeated int32 field18508 = 7;
-  repeated string field18509 = 194;
-  optional bytes field18510 = 30;
-  optional int32 field18511 = 31;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18512 = 178;
-  optional string field18513 = 8;
-  optional float field18514 = 2;
-  optional float field18515 = 100;
-  optional float field18516 = 101;
-  optional float field18517 = 102;
-  optional int32 field18518 = 103;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field18519 = 104;
-  optional int32 field18520 = 110;
-  optional int32 field18521 = 112;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18522 = 111;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18523 = 115;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18524 = 119;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18525 = 127;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18526 = 185;
-  optional int32 field18527 = 120;
-  optional int32 field18528 = 132;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18529 = 126;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18530 = 129;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18531 = 131;
-  optional fixed64 field18532 = 150;
-  optional int32 field18533 = 133;
-  optional int32 field18534 = 134;
-  optional int32 field18535 = 139;
-  optional fixed64 field18536 = 137;
-  optional fixed64 field18537 = 138;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18538 = 141;
-  optional int32 field18539 = 142;
-  optional int32 field18540 = 181;
-  optional .benchmarks.google_message3.Message16816 field18541 = 143;
-  optional .benchmarks.google_message3.Message16685 field18542 = 154;
-  optional int32 field18543 = 144;
-  optional int64 field18544 = 147;
-  optional int64 field18545 = 149;
-  optional int32 field18546 = 151;
-  optional int32 field18547 = 152;
-  optional int32 field18548 = 153;
-  optional float field18549 = 161;
-  optional .benchmarks.google_message3.Message0 field18550 = 123;
-  repeated int64 field18551 = 156;
-  optional int32 field18552 = 157;
-  repeated fixed64 field18553 = 188;
-  optional int32 field18554 = 158;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18555 = 159;
-  optional bool field18556 = 160;
-  optional uint64 field18557 = 162;
-  optional int32 field18558 = 164;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18559 = 10;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18560 = 167;
-  optional int32 field18561 = 168;
-  repeated fixed64 field18562 = 169;
-  repeated string field18563 = 170;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18564 = 172;
-  optional int64 field18565 = 173;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18566 = 174;
-  optional int64 field18567 = 175;
-  optional uint32 field18568 = 189;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18569 = 176;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18570 = 177;
-  optional uint32 field18571 = 179;
-  optional uint32 field18572 = 180;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18573 = 182;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18574 = 183;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18575 = 121;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18576 = 186;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18577 = 187;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18578 = 190;
-  optional int32 field18579 = 191;
-  optional float field18580 = 192;
-  optional bool field18581 = 193;
-  extensions 116 to 116;
-  extensions 118 to 118;
-  extensions 130 to 130;
-  extensions 165 to 165;
-}
-
-message Message13169 {
-  repeated .benchmarks.google_message3.Message13168 field13223 = 1;
-  required .benchmarks.google_message3.Message13167 field13224 = 2;
-  optional string field13225 = 3;
-}
-
-message Message19255 {
-  optional string field19257 = 1;
-}
-
-message Message35542 {
-  optional bool field35543 = 1;
-  optional bool field35544 = 2;
-  optional bool field35545 = 3;
-}
-
-message Message3901 {
-  optional int32 field3990 = 1;
-  optional int32 field3991 = 2;
-  optional int32 field3992 = 3;
-  optional int32 field3993 = 4;
-  optional int32 field3994 = 7;
-  optional int32 field3995 = 8;
-  optional int32 field3996 = 9;
-  optional int32 field3997 = 10;
-  optional int32 field3998 = 11;
-  optional int32 field3999 = 12;
-  optional .benchmarks.google_message3.UnusedEnum field4000 = 6;
-  optional int32 field4001 = 5;
-}
-

+ 0 - 465
benchmarks/datasets/google_message3/benchmark_message3_3.proto

@@ -1,465 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_4.proto";
-import "datasets/google_message3/benchmark_message3_5.proto";
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message35546 {
-  optional int64 field35556 = 1;
-  optional int32 field35557 = 2;
-  optional bool field35558 = 3;
-  optional int64 field35559 = 13;
-  optional group Message35547 = 4 {
-    required int32 field35569 = 5;
-    required int32 field35570 = 6;
-  }
-  optional group Message35548 = 10 {
-    required int64 field35571 = 11;
-    required int64 field35572 = 12;
-  }
-  optional bool field35562 = 14;
-  optional bool field35563 = 15;
-  optional int32 field35564 = 16;
-  optional bool field35565 = 17;
-  optional bool field35566 = 18;
-  optional string field35567 = 100;
-}
-
-message Message2356 {
-  optional .benchmarks.google_message3.Message1374 field2368 = 121;
-  optional uint64 field2369 = 1;
-  optional int32 field2370 = 2;
-  optional int32 field2371 = 17;
-  required string field2372 = 3;
-  optional int32 field2373 = 7;
-  optional bytes field2374 = 8;
-  optional string field2375 = 4;
-  optional string field2376 = 101;
-  optional int32 field2377 = 102;
-  optional int32 field2378 = 103;
-  optional int32 field2379 = 104;
-  optional int32 field2380 = 113;
-  optional int32 field2381 = 114;
-  optional int32 field2382 = 115;
-  optional int32 field2383 = 117;
-  optional int32 field2384 = 118;
-  optional int32 field2385 = 119;
-  optional int32 field2386 = 105;
-  optional bytes field2387 = 5;
-  optional group Message2357 = 6 {
-    optional int64 field2399 = 9;
-    optional int32 field2400 = 10;
-    optional int32 field2401 = 11;
-    optional int32 field2402 = 12;
-    optional int32 field2403 = 13;
-    optional int32 field2404 = 116;
-    optional int32 field2405 = 106;
-    required bytes field2406 = 14;
-    optional int32 field2407 = 45;
-    optional int32 field2408 = 112;
-    optional bool field2409 = 122;
-    optional bytes field2410 = 124;
-  }
-  optional string field2389 = 120;
-  optional group Message2358 = 107 {
-  }
-  repeated group Message2359 = 40 {
-    optional string field2413 = 41;
-    optional string field2414 = 42;
-    optional string field2415 = 43;
-    optional string field2416 = 44;
-    optional int32 field2417 = 46;
-    optional string field2418 = 47;
-    optional float field2419 = 110;
-    optional float field2420 = 111;
-  }
-  optional int32 field2392 = 50;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field2393 = 60;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field2394 = 70;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field2395 = 80;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field2396 = 90;
-  optional string field2397 = 100;
-  optional string field2398 = 123;
-}
-
-message Message7029 {
-  required int32 field7183 = 1;
-  optional int32 field7184 = 2;
-  optional int32 field7185 = 3;
-  optional int32 field7186 = 4;
-  optional int32 field7187 = 5;
-  optional int32 field7188 = 6;
-  optional int32 field7189 = 17;
-  optional int32 field7190 = 18;
-  optional int32 field7191 = 49;
-  optional int32 field7192 = 28;
-  optional int32 field7193 = 33;
-  optional int32 field7194 = 25;
-  optional int32 field7195 = 26;
-  optional int32 field7196 = 40;
-  optional int32 field7197 = 41;
-  optional int32 field7198 = 42;
-  optional int32 field7199 = 43;
-  optional int32 field7200 = 19;
-  optional int32 field7201 = 7;
-  optional int32 field7202 = 8;
-  optional int32 field7203 = 9;
-  optional int32 field7204 = 10;
-  optional int32 field7205 = 11;
-  optional int32 field7206 = 12;
-  repeated group Message7030 = 13 {
-    optional string field7226 = 14;
-    optional string field7227 = 15;
-    optional int64 field7228 = 16;
-  }
-  repeated group Message7031 = 21 {
-    optional string field7229 = 22;
-    optional int32 field7230 = 23;
-    optional int32 field7231 = 24;
-    optional int32 field7232 = 30;
-    optional int32 field7233 = 31;
-    optional int32 field7234 = 35;
-  }
-  optional int32 field7209 = 20;
-  optional float field7210 = 27;
-  optional int32 field7211 = 29;
-  optional int32 field7212 = 32;
-  optional string field7213 = 48;
-  optional bool field7214 = 34;
-  optional int32 field7215 = 36;
-  optional float field7216 = 37;
-  optional bool field7217 = 38;
-  optional bool field7218 = 39;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field7219 = 44;
-  optional int32 field7220 = 45;
-  optional int32 field7221 = 46;
-  optional int32 field7222 = 47;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field7223 = 50;
-  optional int32 field7224 = 51;
-}
-
-message Message35538 {
-  required int64 field35539 = 1;
-}
-
-message Message18921 {
-  optional string field18946 = 1;
-  optional fixed64 field18947 = 2;
-  optional int32 field18948 = 3;
-  optional double field18949 = 4;
-  optional bool field18950 = 17;
-  optional bool field18951 = 23;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field18952 = 24;
-  repeated group Message18922 = 5 {
-    optional uint64 field18959 = 6;
-    optional string field18960 = 13;
-    optional bool field18961 = 21;
-    optional bool field18962 = 33;
-    optional int32 field18963 = 7;
-    optional int32 field18964 = 8;
-    optional string field18965 = 9;
-    optional .benchmarks.google_message3.Message18856 field18966 = 10;
-    optional uint64 field18967 = 34;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18968 = 11;
-    optional uint64 field18969 = 35;
-    optional float field18970 = 12;
-    repeated string field18971 = 14;
-    optional bool field18972 = 15;
-    optional bool field18973 = 16;
-    optional float field18974 = 22;
-    optional int32 field18975 = 18;
-    optional int32 field18976 = 19;
-    optional int32 field18977 = 20;
-    optional .benchmarks.google_message3.UnusedEmptyMessage field18978 = 25;
-    optional .benchmarks.google_message3.UnusedEnum field18979 = 26;
-    repeated string field18980 = 27;
-    optional float field18981 = 28;
-  }
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field18954 = 29;
-  repeated .benchmarks.google_message3.Message18943 field18955 = 30;
-  repeated .benchmarks.google_message3.Message18944 field18956 = 31;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field18957 = 32;
-}
-
-message Message35540 {
-  optional bool field35541 = 1;
-}
-
-message Message3886 {
-  repeated group Message3887 = 1 {
-    required string field3932 = 2;
-    optional string field3933 = 9;
-    optional .benchmarks.google_message3.Message3850 field3934 = 3;
-    optional bytes field3935 = 8;
-  }
-}
-
-message Message6743 {
-  optional .benchmarks.google_message3.Message6721 field6759 = 1;
-  optional .benchmarks.google_message3.Message6723 field6760 = 2;
-  optional .benchmarks.google_message3.Message6723 field6761 = 8;
-  optional .benchmarks.google_message3.Message6725 field6762 = 3;
-  optional .benchmarks.google_message3.Message6726 field6763 = 4;
-  optional .benchmarks.google_message3.Message6733 field6764 = 5;
-  optional .benchmarks.google_message3.Message6734 field6765 = 6;
-  optional .benchmarks.google_message3.Message6742 field6766 = 7;
-}
-
-message Message6773 {
-  optional .benchmarks.google_message3.Enum6769 field6794 = 1;
-  optional int32 field6795 = 9;
-  optional .benchmarks.google_message3.UnusedEnum field6796 = 10;
-  optional int32 field6797 = 11;
-  optional int32 field6798 = 2;
-  optional .benchmarks.google_message3.Enum6774 field6799 = 3;
-  optional double field6800 = 5;
-  optional double field6801 = 7;
-  optional double field6802 = 8;
-  optional .benchmarks.google_message3.Enum6782 field6803 = 6;
-}
-
-message Message8224 {
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8255 = 1;
-  optional .benchmarks.google_message3.Message8184 field8256 = 2;
-  optional .benchmarks.google_message3.Message7966 field8257 = 3;
-  optional string field8258 = 4;
-  optional string field8259 = 5;
-  optional bool field8260 = 6;
-  optional int64 field8261 = 7;
-  optional string field8262 = 8;
-  optional int64 field8263 = 9;
-  optional double field8264 = 10;
-  optional int64 field8265 = 11;
-  repeated string field8266 = 12;
-  optional int64 field8267 = 13;
-  optional int32 field8268 = 14;
-  optional int32 field8269 = 15;
-  optional int64 field8270 = 16;
-  optional double field8271 = 17;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8272 = 18;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8273 = 19;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8274 = 20;
-  optional bool field8275 = 21;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8276 = 22;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8277 = 23;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8278 = 24;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8279 = 25;
-  optional bool field8280 = 26;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8281 = 27;
-}
-
-message Message8392 {
-  optional string field8395 = 1;
-  optional string field8396 = 2;
-  optional .benchmarks.google_message3.Message7966 field8397 = 3;
-  optional string field8398 = 4;
-  optional string field8399 = 5;
-  optional string field8400 = 6;
-  optional string field8401 = 7;
-  optional string field8402 = 8;
-  optional string field8403 = 9;
-}
-
-message Message8130 {
-  optional string field8156 = 1;
-  optional string field8157 = 2;
-  optional string field8158 = 4;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8159 = 6;
-  repeated string field8160 = 7;
-  optional int64 field8161 = 8;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8162 = 9;
-  optional string field8163 = 10;
-  optional string field8164 = 11;
-  optional string field8165 = 12;
-  optional string field8166 = 13;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8167 = 14;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8168 = 15;
-  optional string field8169 = 16;
-  optional .benchmarks.google_message3.UnusedEnum field8170 = 17;
-  optional .benchmarks.google_message3.UnusedEnum field8171 = 18;
-  optional bool field8172 = 19;
-  optional bool field8173 = 20;
-  optional double field8174 = 21;
-  optional int32 field8175 = 22;
-  optional int32 field8176 = 23;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8177 = 24;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8178 = 25;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8179 = 26;
-}
-
-message Message8478 {
-  optional string field8489 = 7;
-  optional .benchmarks.google_message3.Message7966 field8490 = 1;
-  optional .benchmarks.google_message3.Message8476 field8491 = 2;
-  optional int64 field8492 = 3;
-  optional .benchmarks.google_message3.Message8476 field8493 = 4;
-  repeated .benchmarks.google_message3.Message8477 field8494 = 5;
-  optional .benchmarks.google_message3.Message8454 field8495 = 6;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8496 = 8;
-}
-
-message Message8479 {
-  optional .benchmarks.google_message3.Message8475 field8497 = 1;
-  optional .benchmarks.google_message3.Message7966 field8498 = 2;
-  optional .benchmarks.google_message3.Message8476 field8499 = 3;
-  optional .benchmarks.google_message3.Message8476 field8500 = 4;
-  optional string field8501 = 6;
-  optional string field8502 = 7;
-  optional .benchmarks.google_message3.Message7966 field8503 = 8;
-  optional .benchmarks.google_message3.Message8455 field8504 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8505 = 9;
-}
-
-message Message10319 {
-  optional .benchmarks.google_message3.Enum10325 field10340 = 1;
-  optional int32 field10341 = 4;
-  optional int32 field10342 = 5;
-  optional bytes field10343 = 3;
-  optional string field10344 = 2;
-  optional string field10345 = 6;
-  optional string field10346 = 7;
-}
-
-message Message4016 {
-  required int32 field4017 = 1;
-  required int32 field4018 = 2;
-  required int32 field4019 = 3;
-  required int32 field4020 = 4;
-}
-
-message Message12669 {
-  optional .benchmarks.google_message3.Message12559 field12681 = 1;
-  optional float field12682 = 2;
-  optional bool field12683 = 3;
-  optional .benchmarks.google_message3.Enum12670 field12684 = 4;
-}
-
-message Message12819 {
-  optional double field12834 = 1;
-  optional double field12835 = 2;
-  optional double field12836 = 3;
-  optional double field12837 = 4;
-  optional double field12838 = 5;
-  optional double field12839 = 6;
-}
-
-message Message12820 {
-  optional int32 field12840 = 1;
-  optional int32 field12841 = 2;
-  optional int32 field12842 = 3;
-  optional int32 field12843 = 8;
-  optional int32 field12844 = 4;
-  optional int32 field12845 = 5;
-  optional int32 field12846 = 6;
-  optional int32 field12847 = 7;
-}
-
-message Message12821 {
-  optional int32 field12848 = 1;
-  optional int32 field12849 = 2;
-  optional int32 field12850 = 3;
-  optional int32 field12851 = 4;
-  optional int32 field12852 = 5;
-}
-
-message Message12818 {
-  optional uint64 field12829 = 1;
-  optional int32 field12830 = 2;
-  optional int32 field12831 = 3;
-  optional int32 field12832 = 5;
-  repeated .benchmarks.google_message3.Message12817 field12833 = 4;
-}
-
-message Message16479 {
-  optional .benchmarks.google_message3.Message16480 field16484 = 1;
-  optional int32 field16485 = 5;
-  optional float field16486 = 2;
-  optional uint32 field16487 = 4;
-  optional bool field16488 = 3;
-  optional uint32 field16489 = 6;
-}
-
-message Message16722 {
-  optional string field16752 = 1;
-  optional string field16753 = 2;
-  optional string field16754 = 3;
-  optional int32 field16755 = 5;
-  optional string field16756 = 4;
-}
-
-message Message16724 {
-  optional int64 field16761 = 1;
-  optional float field16762 = 2;
-  optional int64 field16763 = 3;
-  optional int64 field16764 = 4;
-  optional bool field16765 = 5;
-  repeated string field16766 = 6;
-  repeated string field16767 = 7;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field16768 = 8;
-  optional bool field16769 = 9;
-  optional uint32 field16770 = 10;
-  optional .benchmarks.google_message3.Enum16728 field16771 = 11;
-  repeated int32 field16772 = 12;
-  optional bool field16773 = 13;
-}
-
-message Message17728 {
-}
-
-message Message24356 {
-  optional string field24559 = 1;
-  optional string field24560 = 2;
-  optional int32 field24561 = 14;
-  optional string field24562 = 3;
-  optional string field24563 = 4;
-  optional string field24564 = 5;
-  optional .benchmarks.google_message3.UnusedEnum field24565 = 13;
-  optional string field24566 = 6;
-  optional .benchmarks.google_message3.Enum24361 field24567 = 12;
-  optional string field24568 = 7;
-  optional string field24569 = 8;
-  optional string field24570 = 9;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24571 = 10;
-  repeated string field24572 = 11;
-  repeated string field24573 = 15;
-}
-
-message Message24376 {
-  optional string field24589 = 1;
-  optional string field24590 = 2;
-  optional string field24591 = 3;
-  required .benchmarks.google_message3.Message24377 field24592 = 4;
-  optional .benchmarks.google_message3.Message24317 field24593 = 5;
-  optional string field24594 = 6;
-  optional .benchmarks.google_message3.Message24378 field24595 = 7;
-  repeated string field24596 = 8;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24597 = 14;
-  repeated string field24598 = 9;
-  repeated string field24599 = 10;
-  repeated string field24600 = 11;
-  optional string field24601 = 12;
-  repeated string field24602 = 13;
-}
-
-message Message24366 {
-  optional string field24574 = 1;
-  optional string field24575 = 2;
-  optional string field24576 = 3;
-  optional int32 field24577 = 10;
-  optional string field24578 = 13;
-  optional string field24579 = 4;
-  optional string field24580 = 5;
-  optional .benchmarks.google_message3.UnusedEnum field24581 = 9;
-  optional string field24582 = 14;
-  optional .benchmarks.google_message3.UnusedEnum field24583 = 15;
-  optional string field24584 = 6;
-  optional string field24585 = 12;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24586 = 7;
-  repeated string field24587 = 8;
-  repeated string field24588 = 11;
-}
-

+ 0 - 490
benchmarks/datasets/google_message3/benchmark_message3_4.proto

@@ -1,490 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_5.proto";
-import "datasets/google_message3/benchmark_message3_6.proto";
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message24346 {
-}
-
-message Message24401 {
-  optional .benchmarks.google_message3.Message24400 field24679 = 1;
-}
-
-message Message24402 {
-  optional .benchmarks.google_message3.Message24400 field24680 = 1;
-}
-
-message Message24379 {
-  optional string field24603 = 1;
-  optional string field24604 = 2;
-  optional string field24605 = 3;
-  required .benchmarks.google_message3.Message24380 field24606 = 4;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24607 = 5;
-  optional string field24608 = 6;
-  optional .benchmarks.google_message3.Message24381 field24609 = 7;
-  repeated string field24610 = 8;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24611 = 17;
-  repeated string field24612 = 9;
-  repeated string field24613 = 10;
-  repeated string field24614 = 11;
-  optional string field24615 = 14;
-  optional string field24616 = 12;
-  optional string field24617 = 16;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24618 = 13;
-  repeated string field24619 = 15;
-  repeated string field24620 = 18;
-}
-
-message Message27358 {
-  optional int32 field27415 = 1;
-  optional int32 field27416 = 2;
-}
-
-message Message34381 {
-  optional string field34398 = 1;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34399 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34400 = 3;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34401 = 4;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34402 = 5;
-  optional bool field34403 = 6;
-  optional bool field34404 = 7;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34405 = 8;
-  optional bool field34406 = 9;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34407 = 10;
-}
-
-message Message34619 {
-  optional double field34641 = 1;
-  optional double field34642 = 2;
-  optional double field34643 = 3;
-  optional double field34644 = 4;
-  optional double field34645 = 11;
-  optional double field34646 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field34647 = 100;
-}
-
-message Message730 {
-  optional string field897 = 19;
-  repeated string field898 = 27;
-  repeated string field899 = 28;
-  repeated string field900 = 21;
-  optional string field901 = 30;
-  repeated uint32 field902 = 20;
-  repeated uint32 field903 = 32;
-  repeated string field904 = 16;
-  repeated .benchmarks.google_message3.Message697 field905 = 6;
-  repeated .benchmarks.google_message3.Message704 field906 = 7;
-  repeated string field907 = 18;
-  repeated .benchmarks.google_message3.Message703 field908 = 8;
-  repeated string field909 = 9;
-  optional .benchmarks.google_message3.Message716 field910 = 10;
-  optional .benchmarks.google_message3.Message718 field911 = 11;
-  optional bool field912 = 14;
-  repeated .benchmarks.google_message3.Message715 field913 = 4;
-  repeated string field914 = 17;
-  repeated string field915 = 23;
-  repeated .benchmarks.google_message3.Message719 field916 = 24;
-  repeated .benchmarks.google_message3.Message728 field917 = 26;
-  repeated .benchmarks.google_message3.Message702 field918 = 35;
-  optional string field919 = 36;
-  repeated string field920 = 37;
-  optional int64 field921 = 38;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field922 = 39;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field923 = 1;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field924 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field925 = 3;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field926 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field927 = 13;
-  repeated string field928 = 22;
-  optional bytes field929 = 31;
-  extensions 25 to 25;
-  extensions 29 to 29;
-  extensions 34 to 34;
-  extensions 15 to 15;
-}
-
-message Message33958 {
-  optional string field33977 = 1;
-  optional string field33978 = 9;
-  repeated group Message33959 = 2 {
-    required string field33982 = 3;
-    optional string field33983 = 4;
-    optional string field33984 = 5;
-    optional fixed64 field33985 = 8;
-    optional bool field33986 = 10;
-    optional .benchmarks.google_message3.Message0 field33987 = 6;
-  }
-  optional .benchmarks.google_message3.Enum33960 field33980 = 7;
-  extend .benchmarks.google_message3.Message0 {
-    optional .benchmarks.google_message3.Message33958 field33981 = 10747482;
-  }
-}
-
-message Message6637 {
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6670 = 2;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field6671 = 1;
-  optional int32 field6672 = 3;
-  repeated string field6673 = 4;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6674 = 5;
-}
-
-message Message6643 {
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6683 = 3;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6684 = 4;
-  optional double field6685 = 5;
-  optional double field6686 = 6;
-  optional int32 field6687 = 1;
-  optional int32 field6688 = 2;
-  optional double field6689 = 9;
-  optional bytes field6690 = 10;
-  optional int32 field6691 = 11;
-  optional bool field6692 = 12;
-  optional bool field6693 = 13;
-  optional .benchmarks.google_message3.Message6578 field6694 = 15;
-  optional .benchmarks.google_message3.UnusedEnum field6695 = 16;
-  optional int64 field6696 = 17;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field6697 = 22;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6698 = 19;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6699 = 20;
-  optional int32 field6700 = 21;
-}
-
-message Message6126 {
-  required string field6152 = 1;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field6153 = 9;
-  optional int32 field6154 = 14;
-  optional bytes field6155 = 10;
-  optional .benchmarks.google_message3.Message6024 field6156 = 12;
-  optional int32 field6157 = 4;
-  optional string field6158 = 5;
-  optional int32 field6159 = 6;
-  repeated int32 field6160 = 2;
-  repeated int32 field6161 = 3;
-  repeated .benchmarks.google_message3.Message6052 field6162 = 7;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field6163 = 11;
-  optional .benchmarks.google_message3.Enum6065 field6164 = 15;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field6165 = 8;
-  optional bool field6166 = 13;
-  optional bool field6167 = 16;
-  optional bool field6168 = 18;
-  repeated .benchmarks.google_message3.Message6054 field6169 = 17;
-  optional int32 field6170 = 19;
-}
-
-message Message13083 {
-  optional float field13096 = 1;
-  repeated group Message13084 = 2 {
-    required float field13107 = 3;
-    required int32 field13108 = 4;
-    optional float field13109 = 5;
-    repeated .benchmarks.google_message3.Enum13092 field13110 = 6;
-  }
-  optional float field13098 = 44;
-  optional float field13099 = 45;
-  optional uint64 field13100 = 46;
-  optional float field13101 = 47;
-  optional group Message13085 = 16 {
-  }
-  repeated group Message13086 = 23 {
-  }
-  repeated group Message13087 = 29 {
-  }
-  optional .benchmarks.google_message3.UnusedEmptyMessage field13105 = 43;
-}
-
-message Message13088 {
-  repeated group Message13089 = 1 {
-    required string field13139 = 2;
-    optional float field13140 = 3;
-  }
-  optional int64 field13136 = 4;
-  optional bool field13137 = 5;
-}
-
-message Message10391 {
-  optional .benchmarks.google_message3.Enum10392 field10411 = 1;
-  optional .benchmarks.google_message3.UnusedEnum field10412 = 2;
-  optional int64 field10413 = 3;
-  optional string field10414 = 4;
-  optional string field10415 = 5;
-  optional bytes field10416 = 6;
-  optional bool field10417 = 8;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field10418 = 9;
-  optional bool field10419 = 10;
-}
-
-message Message11873 {
-  optional string field11876 = 1;
-  optional string field11877 = 4;
-  optional .benchmarks.google_message3.Message10573 field11878 = 5;
-  optional .benchmarks.google_message3.Message10582 field11879 = 6;
-  optional .benchmarks.google_message3.Message10824 field11880 = 7;
-  optional .benchmarks.google_message3.Message10773 field11881 = 12;
-  optional .benchmarks.google_message3.Message11866 field11882 = 8;
-  optional .benchmarks.google_message3.Message10818 field11883 = 13;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field11884 = 16;
-  optional .benchmarks.google_message3.Message10155 field11885 = 11;
-  optional .benchmarks.google_message3.Message10469 field11886 = 14;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field11887 = 15;
-  extensions 9 to 9;
-  extensions 10 to 10;
-}
-
-message Message35506 {
-  optional int32 field35524 = 1;
-  optional string field35525 = 2;
-  optional .benchmarks.google_message3.Enum35507 field35526 = 3;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field35527 = 4;
-}
-
-message Message13151 {
-  repeated .benchmarks.google_message3.Message13145 field13158 = 1;
-}
-
-message Message18253 {
-  repeated group Message18254 = 1 {
-    required fixed64 field18362 = 2;
-    required double field18363 = 3;
-  }
-}
-
-message Message16685 {
-  repeated .benchmarks.google_message3.Message16686 field16694 = 2;
-}
-
-message Message16816 {
-  optional float field16826 = 1;
-  optional .benchmarks.google_message3.Enum16819 field16827 = 2;
-  optional float field16828 = 3;
-  repeated group Message16817 = 4 {
-  }
-  optional bool field16830 = 7;
-  optional bool field16831 = 8;
-  repeated group Message16818 = 12 {
-  }
-  optional string field16833 = 10;
-  optional bool field16834 = 13;
-  optional bool field16835 = 14;
-}
-
-message Message13168 {
-  required int32 field13212 = 1;
-  optional fixed64 field13213 = 7;
-  optional bool field13214 = 8;
-  optional fixed64 field13215 = 10;
-  optional bool field13216 = 11;
-  optional .benchmarks.google_message3.Message12796 field13217 = 9;
-  required double field13218 = 2;
-  required bool field13219 = 3;
-  optional int32 field13220 = 4;
-  required bool field13221 = 5;
-  optional int32 field13222 = 6;
-}
-
-message Message13167 {
-  required int32 field13199 = 1;
-  optional int32 field13200 = 2;
-  optional int32 field13201 = 3;
-  optional bool field13202 = 8;
-  optional fixed64 field13203 = 12;
-  optional bool field13204 = 13;
-  optional .benchmarks.google_message3.Message12796 field13205 = 11;
-  optional fixed64 field13206 = 9;
-  optional bool field13207 = 10;
-  repeated int32 field13208 = 4;
-  optional int32 field13209 = 5;
-  optional int32 field13210 = 6;
-  optional int32 field13211 = 7;
-}
-
-message Message1374 {
-  required string field1375 = 1;
-  optional string field1376 = 2;
-}
-
-message Message18943 {
-}
-
-message Message18944 {
-}
-
-message Message18856 {
-  optional string field18857 = 1;
-  optional string field18858 = 2;
-  optional bool field18859 = 31;
-  optional string field18860 = 26;
-  optional string field18861 = 3;
-  optional string field18862 = 4;
-  optional string field18863 = 5;
-  optional string field18864 = 17;
-  optional string field18865 = 6;
-  optional string field18866 = 7;
-  optional string field18867 = 8;
-  optional string field18868 = 9;
-  optional string field18869 = 10;
-  optional string field18870 = 11;
-  optional string field18871 = 21;
-  optional string field18872 = 18;
-  optional string field18873 = 19;
-  optional string field18874 = 20;
-  optional string field18875 = 22;
-  optional string field18876 = 23;
-  optional string field18877 = 24;
-  optional string field18878 = 25;
-  optional string field18879 = 12;
-  optional string field18880 = 13;
-  optional string field18881 = 29;
-  optional string field18882 = 30;
-  optional string field18883 = 15;
-  optional string field18884 = 16;
-  repeated string field18885 = 14;
-  optional string field18886 = 27;
-  optional string field18887 = 28;
-}
-
-message Message3850 {
-  optional .benchmarks.google_message3.Enum3851 field3924 = 2;
-  optional bool field3925 = 12;
-  optional int32 field3926 = 4;
-  optional bool field3927 = 10;
-  optional bool field3928 = 13;
-  optional bool field3929 = 14;
-}
-
-message Message6721 {
-  optional .benchmarks.google_message3.Message6722 field6744 = 1;
-  optional bool field6745 = 2;
-  optional bool field6746 = 3;
-  optional bool field6747 = 4;
-}
-
-message Message6742 {
-  optional bool field6758 = 1;
-}
-
-message Message6726 {
-  optional int64 field6752 = 1;
-  repeated .benchmarks.google_message3.Message6727 field6753 = 2;
-}
-
-message Message6733 {
-  optional int64 field6754 = 1;
-  optional int64 field6755 = 2;
-  optional bool field6756 = 3;
-}
-
-message Message6723 {
-  optional int64 field6748 = 1;
-  repeated .benchmarks.google_message3.Message6724 field6749 = 2;
-}
-
-message Message6725 {
-  optional int32 field6750 = 1;
-  optional int32 field6751 = 2;
-}
-
-message Message6734 {
-  repeated .benchmarks.google_message3.Message6735 field6757 = 1;
-}
-
-message Message8184 {
-  optional .benchmarks.google_message3.Message7966 field8228 = 1;
-  optional bool field8229 = 2;
-  repeated .benchmarks.google_message3.Message8183 field8230 = 3;
-}
-
-message Message8477 {
-  optional .benchmarks.google_message3.Message7966 field8486 = 1;
-  optional int64 field8487 = 2;
-  optional string field8488 = 3;
-}
-
-message Message8454 {
-  optional .benchmarks.google_message3.Message8449 field8465 = 1;
-  optional int64 field8466 = 3;
-  optional int32 field8467 = 4;
-  optional bool field8468 = 5;
-  extend .benchmarks.google_message3.Message8301 {
-    optional .benchmarks.google_message3.Message8454 field8469 = 66;
-  }
-}
-
-message Message8476 {
-  optional string field8483 = 1;
-  optional string field8484 = 2;
-  optional string field8485 = 3;
-}
-
-message Message8455 {
-  optional .benchmarks.google_message3.Message8449 field8470 = 1;
-  repeated .benchmarks.google_message3.Message8456 field8471 = 2;
-  optional .benchmarks.google_message3.Message8457 field8472 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8473 = 6;
-  extend .benchmarks.google_message3.Message8302 {
-    optional .benchmarks.google_message3.Message8455 field8474 = 66;
-  }
-}
-
-message Message8475 {
-  optional string field8481 = 1;
-  optional int64 field8482 = 2;
-}
-
-message Message12559 {
-}
-
-message Message12817 {
-  optional int32 field12826 = 1;
-  optional int32 field12827 = 2;
-  optional int32 field12828 = 3;
-}
-
-message Message16480 {
-  optional .benchmarks.google_message3.Message13358 field16490 = 1;
-  optional .benchmarks.google_message3.Enum16042 field16491 = 2;
-  optional .benchmarks.google_message3.Message13912 field16492 = 3;
-  optional string field16493 = 4;
-  optional string field16494 = 5;
-  optional string field16495 = 6;
-  optional string field16496 = 7;
-  optional .benchmarks.google_message3.Message13358 field16497 = 8;
-  optional fixed32 field16498 = 9;
-}
-
-message Message24317 {
-  optional string field24446 = 1;
-  optional .benchmarks.google_message3.Message24312 field24447 = 2;
-  repeated .benchmarks.google_message3.Message24315 field24448 = 3;
-  repeated .benchmarks.google_message3.Message24313 field24449 = 4;
-  repeated .benchmarks.google_message3.Message24316 field24450 = 5;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field24451 = 6;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field24452 = 7;
-  repeated string field24453 = 8;
-  repeated string field24454 = 9;
-  repeated string field24455 = 10;
-  repeated string field24456 = 28;
-  optional string field24457 = 11;
-  optional string field24458 = 12;
-  optional string field24459 = 13;
-  optional string field24460 = 14;
-  repeated string field24461 = 15;
-  optional string field24462 = 16;
-  repeated string field24463 = 17;
-  repeated string field24464 = 18;
-  repeated string field24465 = 19;
-  repeated string field24466 = 20;
-  repeated string field24467 = 21;
-  repeated string field24468 = 22;
-  repeated string field24469 = 23;
-  repeated string field24470 = 24;
-  optional string field24471 = 25;
-  optional string field24472 = 26;
-  repeated string field24473 = 27;
-  optional bool field24474 = 40;
-}
-

+ 0 - 472
benchmarks/datasets/google_message3/benchmark_message3_5.proto

@@ -1,472 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_6.proto";
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message24377 {
-}
-
-message Message24378 {
-}
-
-message Message24400 {
-  optional int32 field24674 = 1;
-  optional int32 field24675 = 2;
-  optional int32 field24676 = 3;
-  optional int32 field24677 = 4;
-  optional int32 field24678 = 5;
-}
-
-message Message24380 {
-}
-
-message Message24381 {
-}
-
-message Message719 {
-  repeated string field881 = 1;
-  repeated string field882 = 2;
-  repeated string field883 = 3;
-  optional .benchmarks.google_message3.Enum720 field884 = 4;
-}
-
-message Message728 {
-  required string field887 = 1;
-  repeated string field888 = 2;
-  repeated .benchmarks.google_message3.Message703 field889 = 3;
-  repeated .benchmarks.google_message3.Message715 field890 = 4;
-  repeated string field891 = 5;
-  repeated string field892 = 6;
-  optional .benchmarks.google_message3.Message718 field893 = 7;
-  optional .benchmarks.google_message3.Message716 field894 = 8;
-  repeated string field895 = 9;
-  extensions 10 to 10;
-  extensions 11 to 11;
-  extensions 12 to 12;
-}
-
-message Message704 {
-  optional string field800 = 1;
-  optional string field801 = 7;
-  optional string field802 = 2;
-  optional string field803 = 3;
-  optional string field804 = 4;
-  optional string field805 = 5;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field806 = 6;
-}
-
-message Message697 {
-  optional string field743 = 7;
-  repeated string field744 = 1;
-  repeated string field745 = 2;
-  repeated string field746 = 33;
-  repeated string field747 = 29;
-  repeated string field748 = 30;
-  repeated string field749 = 31;
-  repeated string field750 = 32;
-  repeated string field751 = 13;
-  repeated string field752 = 6;
-  repeated string field753 = 3;
-  repeated string field754 = 14;
-  repeated string field755 = 15;
-  repeated string field756 = 16;
-  repeated string field757 = 4;
-  repeated string field758 = 34;
-  repeated string field759 = 35;
-  repeated string field760 = 5;
-  repeated string field761 = 17;
-  repeated string field762 = 18;
-  repeated string field763 = 19;
-  optional bool field764 = 36;
-  repeated string field765 = 8;
-  repeated string field766 = 9;
-  optional string field767 = 27;
-  optional bool field768 = 25;
-  optional .benchmarks.google_message3.Message700 field769 = 10;
-  optional bool field770 = 11;
-  optional bool field771 = 24;
-  repeated string field772 = 12;
-  repeated string field773 = 20;
-  repeated string field774 = 21;
-  repeated string field775 = 22;
-  repeated .benchmarks.google_message3.Message699 field776 = 23;
-  repeated .benchmarks.google_message3.Message698 field777 = 37;
-  optional int64 field778 = 38;
-  extensions 28 to 28;
-  extensions 26 to 26;
-}
-
-message Message0 {
-  option message_set_wire_format = true;
-  extensions 4 to 2147483646;
-}
-
-message Message6578 {
-  optional .benchmarks.google_message3.Enum6579 field6632 = 1;
-  optional .benchmarks.google_message3.Enum6588 field6633 = 2;
-}
-
-message Message6024 {
-  optional .benchmarks.google_message3.Enum6025 field6048 = 1;
-  optional string field6049 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field6050 = 3;
-}
-
-message Message6052 {
-  required string field6084 = 1;
-  required bytes field6085 = 2;
-}
-
-message Message6054 {
-  required string field6089 = 1;
-  optional string field6090 = 2;
-}
-
-message Message10573 {
-  repeated .benchmarks.google_message3.Message10576 field10580 = 1;
-  optional string field10581 = 2;
-  extensions 10000 to 536870911;
-}
-
-message Message10824 {
-  required string field10825 = 1;
-  optional int32 field10826 = 2;
-}
-
-message Message10582 {
-  required bool field10583 = 1;
-  required double field10584 = 2;
-  optional bool field10585 = 3;
-  optional double field10586 = 4;
-  optional double field10587 = 5;
-  optional bool field10588 = 6;
-}
-
-message Message10155 {
-  required int32 field10195 = 1;
-  required int32 field10196 = 2;
-  optional .benchmarks.google_message3.Enum10157 field10197 = 59;
-  optional int32 field10198 = 18;
-  optional int32 field10199 = 19;
-  optional int32 field10200 = 21;
-  repeated group Message10156 = 50 {
-    optional .benchmarks.google_message3.Enum8862 field10266 = 51;
-    optional int32 field10267 = 52;
-    optional int32 field10268 = 53;
-    optional int32 field10269 = 54;
-  }
-  optional int32 field10202 = 3;
-  optional int32 field10203 = 4;
-  optional int32 field10204 = 5;
-  optional bool field10205 = 84;
-  optional bool field10206 = 33;
-  optional int32 field10207 = 75;
-  optional float field10208 = 26;
-  optional int32 field10209 = 27;
-  optional int32 field10210 = 49;
-  optional int32 field10211 = 10;
-  optional float field10212 = 78;
-  optional .benchmarks.google_message3.Message9151 field10213 = 91;
-  optional int32 field10214 = 11;
-  optional int32 field10215 = 12;
-  optional float field10216 = 41;
-  optional .benchmarks.google_message3.Message10154 field10217 = 61;
-  optional int32 field10218 = 23;
-  optional bytes field10219 = 24;
-  optional int32 field10220 = 65;
-  repeated bytes field10221 = 66;
-  optional int32 field10222 = 70;
-  optional bytes field10223 = 71;
-  repeated fixed64 field10224 = 73;
-  optional float field10225 = 29;
-  optional int32 field10226 = 30;
-  optional float field10227 = 31;
-  optional int32 field10228 = 32;
-  optional float field10229 = 34;
-  optional int32 field10230 = 35;
-  optional string field10231 = 22;
-  optional fixed64 field10232 = 13;
-  optional fixed64 field10233 = 20;
-  optional bool field10234 = 79;
-  repeated .benchmarks.google_message3.Enum10167 field10235 = 80 [packed = true];
-  optional int32 field10236 = 14;
-  optional int32 field10237 = 15;
-  optional int32 field10238 = 28;
-  repeated string field10239 = 16;
-  optional .benchmarks.google_message3.Message9182 field10240 = 17;
-  optional int32 field10241 = 63;
-  optional float field10242 = 64;
-  optional float field10243 = 37;
-  repeated float field10244 = 43;
-  optional int32 field10245 = 44;
-  optional .benchmarks.google_message3.Message9242 field10246 = 45;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field10247 = 46;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field10248 = 62;
-  optional .benchmarks.google_message3.Message8944 field10249 = 48;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field10250 = 87;
-  optional int32 field10251 = 58;
-  optional int32 field10252 = 92;
-  optional .benchmarks.google_message3.Message9123 field10253 = 93;
-  optional .benchmarks.google_message3.Message9160 field10254 = 60;
-  optional .benchmarks.google_message3.Message8890 field10255 = 67;
-  optional string field10256 = 69;
-  optional int64 field10257 = 74;
-  optional float field10258 = 82;
-  optional float field10259 = 85;
-  optional float field10260 = 86;
-  optional int64 field10261 = 83;
-  optional string field10262 = 77;
-  optional bool field10263 = 88;
-  repeated .benchmarks.google_message3.Message9628 field10264 = 94;
-  extensions 57 to 57;
-  extensions 1000 to 536870911;
-}
-
-message Message11866 {
-  required .benchmarks.google_message3.Message11014 field11868 = 1;
-  optional bool field11869 = 2;
-  optional double field11870 = 3;
-  optional double field11871 = 4;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field11872 = 5;
-}
-
-message Message10469 {
-  optional string field10473 = 1;
-  optional float field10474 = 2;
-  optional int32 field10475 = 3;
-  optional int32 field10476 = 4;
-  optional int32 field10477 = 5;
-  optional bool field10478 = 6;
-  optional bool field10479 = 7;
-  optional int32 field10480 = 8;
-  optional float field10481 = 9;
-}
-
-message Message10818 {
-  optional .benchmarks.google_message3.Message10800 field10819 = 1;
-  optional .benchmarks.google_message3.Message10801 field10820 = 2;
-}
-
-message Message10773 {
-  optional bool field10774 = 9;
-  optional bool field10775 = 1;
-  optional bool field10776 = 23;
-  optional bool field10777 = 2;
-  optional bool field10778 = 3;
-  optional int32 field10779 = 4;
-  optional int32 field10780 = 5;
-  optional int32 field10781 = 6;
-  optional int32 field10782 = 7;
-  optional int32 field10783 = 8;
-  optional int32 field10784 = 10;
-  optional .benchmarks.google_message3.Message10749 field10785 = 11;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field10786 = 12;
-  optional bool field10787 = 13;
-  optional bool field10788 = 15;
-  optional bool field10789 = 16;
-  optional int32 field10790 = 17;
-  optional int32 field10791 = 18;
-  optional bool field10792 = 19;
-  optional bool field10793 = 20;
-  optional bool field10794 = 21;
-  optional .benchmarks.google_message3.UnusedEnum field10795 = 14;
-  optional .benchmarks.google_message3.UnusedEnum field10796 = 22;
-}
-
-message Message13145 {
-  required .benchmarks.google_message3.Enum13146 field13155 = 1;
-  optional float field13156 = 2;
-  optional float field13157 = 3;
-  extensions 1000 to 536870911;
-}
-
-message Message16686 {
-}
-
-message Message12796 {
-  repeated fixed64 field12800 = 1;
-  optional uint64 field12801 = 2;
-}
-
-message Message6722 {
-}
-
-message Message6727 {
-}
-
-message Message6724 {
-}
-
-message Message6735 {
-}
-
-message Message8183 {
-  optional string field8226 = 1;
-  optional string field8227 = 2;
-}
-
-message Message8301 {
-  optional string field8328 = 1;
-  optional .benchmarks.google_message3.Message7966 field8329 = 2;
-  optional string field8330 = 3;
-  optional string field8331 = 4;
-  repeated .benchmarks.google_message3.Message8290 field8332 = 5;
-  optional .benchmarks.google_message3.Message7966 field8333 = 6;
-  repeated .benchmarks.google_message3.Message8298 field8334 = 7;
-  optional .benchmarks.google_message3.Message8300 field8335 = 8;
-  optional int64 field8336 = 9;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8337 = 10;
-  optional .benchmarks.google_message3.Message7965 field8338 = 11;
-  extensions 64 to 536870911;
-}
-
-message Message8456 {
-}
-
-message Message8302 {
-  optional string field8339 = 1;
-  optional .benchmarks.google_message3.Message7966 field8340 = 2;
-  optional string field8341 = 3;
-  optional string field8342 = 4;
-  optional string field8343 = 5;
-  optional string field8344 = 6;
-  optional string field8345 = 7;
-  optional int64 field8346 = 8;
-  optional int64 field8347 = 9;
-  repeated .benchmarks.google_message3.Message8290 field8348 = 10;
-  optional string field8349 = 11;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8350 = 12;
-  optional .benchmarks.google_message3.Message8291 field8351 = 13;
-  optional int64 field8352 = 14;
-  optional .benchmarks.google_message3.Message8296 field8353 = 15;
-  optional string field8354 = 16;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field8355 = 17;
-  repeated int32 field8356 = 18;
-  repeated int32 field8357 = 19;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field8358 = 20;
-  optional .benchmarks.google_message3.Message7965 field8359 = 21;
-  extensions 64 to 536870911;
-}
-
-message Message8457 {
-}
-
-message Message8449 {
-  optional string field8458 = 1;
-  optional bool field8459 = 2;
-  optional .benchmarks.google_message3.Enum8450 field8460 = 3;
-  repeated string field8461 = 4;
-  optional string field8462 = 5;
-  optional string field8463 = 6;
-  optional .benchmarks.google_message3.Message7966 field8464 = 7;
-}
-
-message Message13358 {
-  required fixed64 field13359 = 1;
-  required fixed64 field13360 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field13361 = 3;
-}
-
-message Message13912 {
-  required fixed32 field13913 = 1;
-  required fixed32 field13914 = 2;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field13915 = 500;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field13916 = 15;
-}
-
-message Message24316 {
-  repeated string field24443 = 1;
-  repeated string field24444 = 2;
-  repeated string field24445 = 3;
-}
-
-message Message24312 {
-  optional string field24421 = 1;
-  optional string field24422 = 2;
-  repeated string field24423 = 3;
-  repeated string field24424 = 4;
-  repeated string field24425 = 5;
-  repeated string field24426 = 6;
-}
-
-message Message24313 {
-  optional string field24427 = 1;
-  optional string field24428 = 2;
-  repeated string field24429 = 3;
-  optional string field24430 = 4;
-  optional string field24431 = 5;
-  optional string field24432 = 6;
-  optional string field24433 = 7;
-  repeated string field24434 = 8;
-  optional string field24435 = 9;
-  repeated string field24436 = 10;
-}
-
-message Message24315 {
-  required string field24440 = 1;
-  repeated string field24441 = 2;
-  repeated string field24442 = 3;
-}
-
-message Message716 {
-  required string field872 = 1;
-  required int32 field873 = 2;
-  optional bool field874 = 3;
-  optional .benchmarks.google_message3.Message717 field875 = 4;
-}
-
-message Message718 {
-  repeated string field878 = 1;
-  repeated string field879 = 2;
-  optional string field880 = 3;
-}
-
-message Message703 {
-  required string field795 = 1;
-  repeated string field796 = 2;
-  repeated string field797 = 3;
-  optional string field798 = 4;
-  repeated string field799 = 5;
-}
-
-message Message715 {
-  required string field859 = 1;
-  optional string field860 = 7;
-  repeated .benchmarks.google_message3.Message707 field861 = 2;
-  repeated .benchmarks.google_message3.Message708 field862 = 3;
-  repeated .benchmarks.google_message3.Message711 field863 = 4;
-  repeated .benchmarks.google_message3.Message712 field864 = 5;
-  repeated .benchmarks.google_message3.Message713 field865 = 6;
-  repeated .benchmarks.google_message3.Message714 field866 = 8;
-  repeated .benchmarks.google_message3.Message710 field867 = 9;
-  repeated .benchmarks.google_message3.Message709 field868 = 10;
-  repeated .benchmarks.google_message3.Message705 field869 = 11;
-  repeated .benchmarks.google_message3.Message702 field870 = 12;
-  repeated .benchmarks.google_message3.Message706 field871 = 13;
-}
-
-message Message700 {
-  repeated string field789 = 1;
-  repeated string field790 = 2;
-}
-
-message Message699 {
-  required string field787 = 1;
-  repeated string field788 = 2;
-}
-
-message Message698 {
-  optional string field779 = 1;
-  optional string field780 = 2;
-  optional string field781 = 3;
-  optional string field782 = 4;
-  optional uint64 field783 = 5;
-  optional uint32 field784 = 6;
-  optional int64 field785 = 7;
-  repeated string field786 = 8;
-}
-

+ 0 - 453
benchmarks/datasets/google_message3/benchmark_message3_6.proto

@@ -1,453 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message3/benchmark_message3_7.proto";
-import "datasets/google_message3/benchmark_message3_8.proto";
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message10576 {
-}
-
-message Message10154 {
-  optional bytes field10192 = 1;
-  optional int32 field10193 = 2;
-}
-
-message Message8944 {
-  optional string field9045 = 2;
-  optional string field9046 = 3;
-  optional string field9047 = 23;
-  optional string field9048 = 52;
-  optional int32 field9049 = 53;
-  optional int32 field9050 = 54;
-  optional float field9051 = 55;
-  optional float field9052 = 56;
-  optional string field9053 = 57;
-  optional int64 field9054 = 1;
-  optional bool field9055 = 4;
-  optional int32 field9056 = 5;
-  optional int32 field9057 = 6;
-  optional int32 field9058 = 7;
-  optional float field9059 = 8;
-  optional float field9060 = 11;
-  optional float field9061 = 9;
-  optional float field9062 = 10;
-  optional float field9063 = 13;
-  optional bool field9064 = 14;
-  optional float field9065 = 70;
-  optional int32 field9066 = 71;
-  optional .benchmarks.google_message3.Enum8945 field9067 = 15;
-  optional int32 field9068 = 16;
-  optional int32 field9069 = 17;
-  optional float field9070 = 18;
-  optional float field9071 = 19;
-  optional int32 field9072 = 28;
-  optional int32 field9073 = 29;
-  optional float field9074 = 60;
-  optional float field9075 = 61;
-  optional int32 field9076 = 72;
-  optional int32 field9077 = 73;
-  optional .benchmarks.google_message3.Enum8951 field9078 = 62;
-  optional string field9079 = 20;
-  optional string field9080 = 21;
-  optional string field9081 = 22;
-  optional double field9082 = 31;
-  optional double field9083 = 32;
-  optional double field9084 = 33;
-  optional double field9085 = 36;
-  optional .benchmarks.google_message3.UnusedEnum field9086 = 37;
-  optional double field9087 = 38;
-  optional double field9088 = 39;
-  optional double field9089 = 63;
-  optional double field9090 = 64;
-  optional double field9091 = 65;
-  optional double field9092 = 34;
-  optional .benchmarks.google_message3.UnusedEnum field9093 = 35;
-  optional .benchmarks.google_message3.UnusedEnum field9094 = 66;
-  optional string field9095 = 40;
-  optional string field9096 = 41;
-  optional string field9097 = 42;
-  optional string field9098 = 43;
-  optional string field9099 = 44;
-  optional string field9100 = 45;
-  optional string field9101 = 46;
-  optional string field9102 = 47;
-  optional string field9103 = 48;
-  optional string field9104 = 49;
-  optional .benchmarks.google_message3.Message8939 field9105 = 100;
-  optional int64 field9106 = 101;
-}
-
-message Message9182 {
-  optional string field9205 = 1;
-  optional string field9206 = 2;
-  optional float field9207 = 16;
-  optional int32 field9208 = 17;
-  optional int32 field9209 = 27;
-  optional int32 field9210 = 7;
-  optional int32 field9211 = 8;
-  optional float field9212 = 26;
-  optional float field9213 = 22;
-  optional bool field9214 = 28;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field9215 = 21;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field9216 = 25;
-  repeated .benchmarks.google_message3.Message9181 field9217 = 29;
-  optional bool field9218 = 18;
-  optional bool field9219 = 19;
-  optional bool field9220 = 20;
-  optional .benchmarks.google_message3.Message9164 field9221 = 30;
-  optional .benchmarks.google_message3.Message9165 field9222 = 31;
-  optional .benchmarks.google_message3.Message9166 field9223 = 32;
-  optional float field9224 = 33;
-  optional .benchmarks.google_message3.Message9151 field9225 = 34;
-  optional float field9226 = 35;
-  optional float field9227 = 36;
-  optional float field9228 = 37;
-  optional float field9229 = 38;
-  optional float field9230 = 39;
-  extensions 3 to 6;
-  extensions 9 to 15;
-  extensions 23 to 23;
-  extensions 24 to 24;
-  extensions 1000 to 536870911;
-}
-
-message Message9160 {
-  optional int32 field9161 = 1;
-  optional bytes field9162 = 2;
-}
-
-message Message9242 {
-  repeated .benchmarks.google_message3.Enum9243 field9327 = 1;
-}
-
-message Message8890 {
-  repeated .benchmarks.google_message3.Message8888 field8916 = 1;
-}
-
-message Message9123 {
-  optional float field9135 = 1;
-}
-
-message Message9628 {
-  optional .benchmarks.google_message3.Message9627 field9673 = 1;
-  optional string field9674 = 2;
-  repeated int32 field9675 = 3;
-  optional int32 field9676 = 4;
-}
-
-message Message11014 {
-  optional int32 field11780 = 40;
-  optional string field11781 = 46;
-  optional bool field11782 = 47;
-  optional .benchmarks.google_message3.Enum11107 field11783 = 1;
-  optional int32 field11784 = 2;
-  optional double field11785 = 4;
-  optional int32 field11786 = 5;
-  optional int32 field11787 = 6;
-  optional double field11788 = 7;
-  optional double field11789 = 8;
-  optional int64 field11790 = 9;
-  optional bool field11791 = 10;
-  optional int64 field11792 = 28;
-  optional bool field11793 = 37;
-  optional .benchmarks.google_message3.Enum11541 field11794 = 44;
-  optional double field11795 = 49;
-  optional double field11796 = 51;
-  optional int64 field11797 = 54;
-  optional int64 field11798 = 55;
-  optional .benchmarks.google_message3.UnusedEnum field11799 = 57;
-  optional .benchmarks.google_message3.Enum11468 field11800 = 58;
-  optional int32 field11801 = 59;
-  optional .benchmarks.google_message3.UnusedEnum field11802 = 60;
-  optional int32 field11803 = 61;
-  optional int32 field11804 = 62;
-  optional int32 field11805 = 69;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field11806 = 68;
-  repeated .benchmarks.google_message3.Message11018 field11807 = 71;
-  optional bool field11808 = 50;
-  optional bool field11809 = 56;
-  optional bool field11810 = 66;
-  optional bool field11811 = 63;
-  optional bool field11812 = 64;
-  optional bool field11813 = 65;
-  optional bool field11814 = 67;
-  optional .benchmarks.google_message3.Enum11107 field11815 = 15;
-  optional int64 field11816 = 16;
-  optional double field11817 = 17;
-  optional int64 field11818 = 18;
-  optional int32 field11819 = 19;
-  optional int64 field11820 = 20;
-  optional int32 field11821 = 42;
-  optional int64 field11822 = 52;
-  optional int64 field11823 = 53;
-  optional int64 field11824 = 41;
-  optional double field11825 = 48;
-  repeated .benchmarks.google_message3.Message11020 field11826 = 70;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field11827 = 72;
-  optional double field11828 = 25;
-  optional string field11829 = 26;
-  optional int64 field11830 = 27;
-  optional int64 field11831 = 32;
-  optional uint64 field11832 = 33;
-  optional bool field11833 = 29;
-  optional bool field11834 = 34;
-  optional string field11835 = 30;
-  optional int32 field11836 = 3;
-  optional int32 field11837 = 31;
-  optional int32 field11838 = 73;
-  optional int32 field11839 = 35;
-  optional .benchmarks.google_message3.Enum11022 field11840 = 36;
-  optional .benchmarks.google_message3.Message11013 field11841 = 38;
-  optional double field11842 = 39;
-  optional int32 field11843 = 45;
-  optional bool field11844 = 74;
-}
-
-message Message10801 {
-  optional .benchmarks.google_message3.Message10800 field10812 = 1;
-  repeated .benchmarks.google_message3.Message10802 field10813 = 2;
-  optional int32 field10814 = 3;
-}
-
-message Message10749 {
-  repeated .benchmarks.google_message3.Message10748 field10754 = 1;
-}
-
-message Message8298 {
-  optional .benchmarks.google_message3.Message7966 field8321 = 1;
-  optional int64 field8322 = 2;
-  optional string field8323 = 3;
-}
-
-message Message8300 {
-  optional string field8326 = 1;
-  optional .benchmarks.google_message3.Message7966 field8327 = 2;
-}
-
-message Message8291 {
-  optional string field8306 = 1;
-  optional int32 field8307 = 2;
-  optional string field8308 = 3;
-  optional string field8309 = 4;
-  optional .benchmarks.google_message3.Enum8292 field8310 = 5;
-}
-
-message Message8296 {
-  optional .benchmarks.google_message3.Message7966 field8311 = 1;
-  optional string field8312 = 2;
-  optional .benchmarks.google_message3.Message7966 field8313 = 3;
-  optional int32 field8314 = 4;
-  optional int32 field8315 = 5;
-  optional string field8316 = 6;
-}
-
-message Message7965 {
-  optional int32 field7967 = 1;
-  optional int32 field7968 = 2;
-}
-
-message Message8290 {
-  optional string field8304 = 1;
-  optional string field8305 = 2;
-}
-
-message Message717 {
-  repeated string field876 = 1;
-  optional double field877 = 2;
-}
-
-message Message713 {
-  required .benchmarks.google_message3.Message708 field852 = 1;
-  repeated string field853 = 2;
-}
-
-message Message705 {
-  required string field807 = 1;
-  optional string field808 = 2;
-  optional string field809 = 3;
-  optional bool field810 = 4;
-  optional string field811 = 5;
-  optional string field812 = 6;
-  repeated string field813 = 7;
-}
-
-message Message709 {
-  repeated string field829 = 1;
-  repeated string field830 = 2;
-  repeated string field831 = 3;
-  repeated string field832 = 4;
-  repeated string field833 = 5;
-}
-
-message Message702 {
-  optional string field793 = 1;
-  optional string field794 = 2;
-}
-
-message Message714 {
-  optional string field854 = 1;
-  optional string field855 = 2;
-  optional string field856 = 3;
-  optional string field857 = 4;
-  optional uint32 field858 = 5;
-}
-
-message Message710 {
-  repeated string field834 = 1;
-  optional string field835 = 2;
-  optional string field836 = 3;
-  repeated string field837 = 4;
-  repeated string field838 = 5;
-}
-
-message Message706 {
-  repeated string field814 = 1;
-  optional string field815 = 2;
-  repeated string field816 = 3;
-  repeated string field817 = 4;
-}
-
-message Message707 {
-  required string field818 = 1;
-  required string field819 = 2;
-  required string field820 = 3;
-  optional bool field821 = 4;
-  repeated string field822 = 5;
-}
-
-message Message711 {
-  optional .benchmarks.google_message3.UnusedEmptyMessage field839 = 1;
-  repeated string field840 = 4;
-  repeated string field841 = 2;
-  repeated string field842 = 3;
-}
-
-message Message712 {
-  repeated string field843 = 1;
-  required string field844 = 2;
-  optional string field845 = 3;
-  repeated string field846 = 4;
-  repeated string field847 = 5;
-  optional string field848 = 6;
-  repeated string field849 = 7;
-  optional string field850 = 8;
-  optional string field851 = 9;
-}
-
-message Message8939 {
-  optional string field9010 = 1;
-  optional string field9011 = 2;
-  optional string field9012 = 3;
-  repeated string field9013 = 4;
-  optional string field9014 = 5;
-  repeated group Message8940 = 11 {
-  }
-  optional int64 field9016 = 21;
-  optional int64 field9017 = 22;
-  optional int64 field9018 = 23;
-  optional group Message8941 = 31 {
-    optional string field9033 = 32;
-    optional string field9034 = 33;
-    optional string field9035 = 34;
-    optional string field9036 = 35;
-    optional string field9037 = 36;
-    optional string field9038 = 37;
-  }
-  optional .benchmarks.google_message3.Message8942 field9020 = 38;
-  repeated .benchmarks.google_message3.UnusedEmptyMessage field9021 = 39;
-  repeated string field9022 = 41;
-  optional string field9023 = 42;
-  optional string field9024 = 43;
-  optional string field9025 = 44;
-  optional string field9026 = 45;
-  optional string field9027 = 46;
-  optional string field9028 = 47;
-  optional .benchmarks.google_message3.UnusedEnum field9029 = 48;
-  optional .benchmarks.google_message3.UnusedEnum field9030 = 49;
-  optional group Message8943 = 51 {
-    optional string field9039 = 1;
-    optional string field9040 = 2;
-    optional string field9041 = 3;
-    optional string field9042 = 4;
-    optional string field9043 = 5;
-    optional string field9044 = 6;
-  }
-}
-
-message Message9181 {
-  optional string field9204 = 1;
-}
-
-message Message9164 {
-  optional int32 field9168 = 1;
-  optional int32 field9169 = 2;
-  optional int32 field9170 = 3;
-}
-
-message Message9165 {
-  optional float field9171 = 1;
-  optional float field9172 = 2;
-}
-
-message Message9166 {
-  optional float field9173 = 1;
-  optional int32 field9174 = 2;
-}
-
-message Message9151 {
-  optional double field9152 = 1;
-  optional double field9153 = 2;
-  optional float field9154 = 3;
-  optional float field9155 = 4;
-  optional float field9156 = 5;
-  optional float field9157 = 6;
-  optional float field9158 = 7;
-  optional float field9159 = 8;
-}
-
-message Message8888 {
-  optional int32 field8908 = 1;
-  optional .benchmarks.google_message3.Enum8900 field8909 = 4;
-  repeated int32 field8910 = 2 [packed = true];
-  optional bytes field8911 = 3;
-}
-
-message Message9627 {
-  required int32 field9668 = 1;
-  required int32 field9669 = 2;
-  required int32 field9670 = 3;
-  required int32 field9671 = 4;
-  optional float field9672 = 5;
-}
-
-message Message11020 {
-}
-
-message Message11013 {
-  optional bytes field11757 = 19;
-  optional bytes field11758 = 1;
-  optional bytes field11759 = 2;
-  optional bytes field11760 = 3;
-  optional bytes field11761 = 4;
-  optional bytes field11762 = 5;
-  optional bytes field11763 = 6;
-  optional bytes field11764 = 7;
-  optional bytes field11765 = 8;
-  optional bytes field11766 = 9;
-  optional bytes field11767 = 10;
-  optional bytes field11768 = 11;
-  optional bytes field11769 = 12;
-  optional bytes field11770 = 13;
-  optional bytes field11771 = 14;
-  optional bytes field11772 = 15;
-  optional bytes field11773 = 16;
-  optional bytes field11774 = 17;
-  optional bytes field11775 = 18;
-  optional bytes field11776 = 20;
-  optional bytes field11777 = 21;
-  optional .benchmarks.google_message3.UnusedEmptyMessage field11778 = 23;
-  repeated .benchmarks.google_message3.Message11011 field11779 = 22;
-}
-

+ 0 - 55
benchmarks/datasets/google_message3/benchmark_message3_7.proto

@@ -1,55 +0,0 @@
-syntax = "proto2";
-
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-message Message11018 {
-}
-
-message Message10800 {
-  optional string field10808 = 1;
-  optional int64 field10809 = 2;
-  optional bool field10810 = 3;
-  optional float field10811 = 4;
-}
-
-message Message10802 {
-}
-
-message Message10748 {
-  optional string field10750 = 1;
-  optional int32 field10751 = 2;
-  optional int32 field10752 = 3;
-  optional int32 field10753 = 4;
-}
-
-message Message7966 {
-  optional string field7969 = 1;
-  optional bool field7970 = 2;
-}
-
-message Message708 {
-  optional .benchmarks.google_message3.Message741 field823 = 1;
-  repeated string field824 = 6;
-  optional string field825 = 2;
-  optional string field826 = 3;
-  repeated string field827 = 4;
-  repeated string field828 = 5;
-}
-
-message Message8942 {
-}
-
-message Message11011 {
-  required bytes field11752 = 1;
-  required bytes field11753 = 2;
-}
-
-message UnusedEmptyMessage {
-}
-
-message Message741 {
-  repeated string field936 = 1;
-}
-

+ 0 - 1899
benchmarks/datasets/google_message3/benchmark_message3_8.proto

@@ -1,1899 +0,0 @@
-syntax = "proto2";
-
-package benchmarks.google_message3;
-
-option cc_enable_arenas = true;
-
-enum Enum720 {
-  ENUM_VALUE721 = 1;
-  ENUM_VALUE722 = 2;
-}
-
-enum Enum3476 {
-  ENUM_VALUE3477 = 0;
-  ENUM_VALUE3478 = 1;
-  ENUM_VALUE3479 = 2;
-  ENUM_VALUE3480 = 3;
-  ENUM_VALUE3481 = 4;
-  ENUM_VALUE3482 = 5;
-  ENUM_VALUE3483 = 6;
-  ENUM_VALUE3484 = 7;
-  ENUM_VALUE3485 = 8;
-  ENUM_VALUE3486 = 9;
-  ENUM_VALUE3487 = 10;
-  ENUM_VALUE3488 = 11;
-  ENUM_VALUE3489 = 12;
-  ENUM_VALUE3490 = 13;
-  ENUM_VALUE3491 = 14;
-  ENUM_VALUE3492 = 15;
-  ENUM_VALUE3493 = 16;
-  ENUM_VALUE3494 = 17;
-  ENUM_VALUE3495 = 18;
-  ENUM_VALUE3496 = 19;
-  ENUM_VALUE3497 = 20;
-  ENUM_VALUE3498 = 21;
-  ENUM_VALUE3499 = 22;
-  ENUM_VALUE3500 = 23;
-  ENUM_VALUE3501 = 24;
-  ENUM_VALUE3502 = 25;
-  ENUM_VALUE3503 = 26;
-  ENUM_VALUE3504 = 27;
-  ENUM_VALUE3505 = 28;
-  ENUM_VALUE3506 = 29;
-  ENUM_VALUE3507 = 30;
-  ENUM_VALUE3508 = 31;
-  ENUM_VALUE3509 = 32;
-  ENUM_VALUE3510 = 33;
-  ENUM_VALUE3511 = 34;
-  ENUM_VALUE3512 = 35;
-  ENUM_VALUE3513 = 36;
-  ENUM_VALUE3514 = 37;
-  ENUM_VALUE3515 = 38;
-  ENUM_VALUE3516 = 39;
-  ENUM_VALUE3517 = 40;
-  ENUM_VALUE3518 = 41;
-  ENUM_VALUE3519 = 42;
-  ENUM_VALUE3520 = 43;
-  ENUM_VALUE3521 = 44;
-  ENUM_VALUE3522 = 45;
-  ENUM_VALUE3523 = 46;
-  ENUM_VALUE3524 = 47;
-  ENUM_VALUE3525 = 48;
-  ENUM_VALUE3526 = 49;
-  ENUM_VALUE3527 = 50;
-  ENUM_VALUE3528 = 51;
-  ENUM_VALUE3529 = 52;
-  ENUM_VALUE3530 = 53;
-  ENUM_VALUE3531 = 54;
-  ENUM_VALUE3532 = 55;
-  ENUM_VALUE3533 = 56;
-  ENUM_VALUE3534 = 57;
-  ENUM_VALUE3535 = 58;
-  ENUM_VALUE3536 = 59;
-  ENUM_VALUE3537 = 60;
-  ENUM_VALUE3538 = 61;
-  ENUM_VALUE3539 = 62;
-  ENUM_VALUE3540 = 63;
-  ENUM_VALUE3541 = 64;
-  ENUM_VALUE3542 = 65;
-  ENUM_VALUE3543 = 66;
-  ENUM_VALUE3544 = 67;
-  ENUM_VALUE3545 = 68;
-  ENUM_VALUE3546 = 69;
-  ENUM_VALUE3547 = 70;
-  ENUM_VALUE3548 = 71;
-  ENUM_VALUE3549 = 72;
-  ENUM_VALUE3550 = 73;
-  ENUM_VALUE3551 = 74;
-  ENUM_VALUE3552 = 75;
-  ENUM_VALUE3553 = 76;
-  ENUM_VALUE3554 = 77;
-  ENUM_VALUE3555 = 78;
-  ENUM_VALUE3556 = 79;
-  ENUM_VALUE3557 = 80;
-  ENUM_VALUE3558 = 81;
-  ENUM_VALUE3559 = 82;
-  ENUM_VALUE3560 = 83;
-  ENUM_VALUE3561 = 84;
-  ENUM_VALUE3562 = 85;
-  ENUM_VALUE3563 = 86;
-  ENUM_VALUE3564 = 87;
-  ENUM_VALUE3565 = 88;
-  ENUM_VALUE3566 = 89;
-  ENUM_VALUE3567 = 90;
-  ENUM_VALUE3568 = 91;
-  ENUM_VALUE3569 = 92;
-  ENUM_VALUE3570 = 93;
-  ENUM_VALUE3571 = 94;
-  ENUM_VALUE3572 = 95;
-  ENUM_VALUE3573 = 96;
-  ENUM_VALUE3574 = 97;
-  ENUM_VALUE3575 = 98;
-  ENUM_VALUE3576 = 99;
-  ENUM_VALUE3577 = 100;
-  ENUM_VALUE3578 = 101;
-  ENUM_VALUE3579 = 102;
-  ENUM_VALUE3580 = 103;
-  ENUM_VALUE3581 = 104;
-  ENUM_VALUE3582 = 105;
-  ENUM_VALUE3583 = 106;
-  ENUM_VALUE3584 = 107;
-  ENUM_VALUE3585 = 108;
-  ENUM_VALUE3586 = 109;
-  ENUM_VALUE3587 = 110;
-  ENUM_VALUE3588 = 111;
-  ENUM_VALUE3589 = 112;
-  ENUM_VALUE3590 = 113;
-  ENUM_VALUE3591 = 114;
-  ENUM_VALUE3592 = 115;
-  ENUM_VALUE3593 = 116;
-  ENUM_VALUE3594 = 117;
-  ENUM_VALUE3595 = 118;
-  ENUM_VALUE3596 = 119;
-  ENUM_VALUE3597 = 120;
-  ENUM_VALUE3598 = 121;
-  ENUM_VALUE3599 = 122;
-  ENUM_VALUE3600 = 123;
-  ENUM_VALUE3601 = 124;
-  ENUM_VALUE3602 = 125;
-  ENUM_VALUE3603 = 126;
-  ENUM_VALUE3604 = 127;
-  ENUM_VALUE3605 = 128;
-  ENUM_VALUE3606 = 129;
-  ENUM_VALUE3607 = 130;
-  ENUM_VALUE3608 = 131;
-  ENUM_VALUE3609 = 132;
-  ENUM_VALUE3610 = 133;
-  ENUM_VALUE3611 = 134;
-  ENUM_VALUE3612 = 135;
-  ENUM_VALUE3613 = 136;
-  ENUM_VALUE3614 = 137;
-  ENUM_VALUE3615 = 138;
-  ENUM_VALUE3616 = 139;
-  ENUM_VALUE3617 = 140;
-  ENUM_VALUE3618 = 141;
-  ENUM_VALUE3619 = 142;
-  ENUM_VALUE3620 = 143;
-  ENUM_VALUE3621 = 144;
-  ENUM_VALUE3622 = 145;
-  ENUM_VALUE3623 = 146;
-  ENUM_VALUE3624 = 147;
-  ENUM_VALUE3625 = 148;
-  ENUM_VALUE3626 = 149;
-  ENUM_VALUE3627 = 150;
-  ENUM_VALUE3628 = 151;
-  ENUM_VALUE3629 = 152;
-  ENUM_VALUE3630 = 153;
-  ENUM_VALUE3631 = 154;
-  ENUM_VALUE3632 = 155;
-  ENUM_VALUE3633 = 156;
-  ENUM_VALUE3634 = 157;
-  ENUM_VALUE3635 = 158;
-  ENUM_VALUE3636 = 159;
-  ENUM_VALUE3637 = 160;
-  ENUM_VALUE3638 = 161;
-  ENUM_VALUE3639 = 162;
-  ENUM_VALUE3640 = 163;
-  ENUM_VALUE3641 = 164;
-  ENUM_VALUE3642 = 165;
-  ENUM_VALUE3643 = 166;
-  ENUM_VALUE3644 = 167;
-  ENUM_VALUE3645 = 168;
-  ENUM_VALUE3646 = 169;
-  ENUM_VALUE3647 = 170;
-  ENUM_VALUE3648 = 171;
-  ENUM_VALUE3649 = 172;
-  ENUM_VALUE3650 = 173;
-  ENUM_VALUE3651 = 174;
-  ENUM_VALUE3652 = 175;
-  ENUM_VALUE3653 = 176;
-  ENUM_VALUE3654 = 177;
-  ENUM_VALUE3655 = 178;
-  ENUM_VALUE3656 = 179;
-  ENUM_VALUE3657 = 180;
-  ENUM_VALUE3658 = 181;
-  ENUM_VALUE3659 = 182;
-  ENUM_VALUE3660 = 183;
-}
-
-enum Enum3805 {
-  ENUM_VALUE3806 = 0;
-  ENUM_VALUE3807 = 1;
-  ENUM_VALUE3808 = 2;
-  ENUM_VALUE3809 = 3;
-  ENUM_VALUE3810 = 4;
-  ENUM_VALUE3811 = 5;
-  ENUM_VALUE3812 = 6;
-  ENUM_VALUE3813 = 7;
-  ENUM_VALUE3814 = 8;
-  ENUM_VALUE3815 = 9;
-  ENUM_VALUE3816 = 11;
-  ENUM_VALUE3817 = 10;
-}
-
-enum Enum3783 {
-  ENUM_VALUE3784 = 0;
-  ENUM_VALUE3785 = 1;
-  ENUM_VALUE3786 = 2;
-  ENUM_VALUE3787 = 3;
-  ENUM_VALUE3788 = 4;
-  ENUM_VALUE3789 = 5;
-  ENUM_VALUE3790 = 6;
-  ENUM_VALUE3791 = 7;
-  ENUM_VALUE3792 = 8;
-  ENUM_VALUE3793 = 9;
-  ENUM_VALUE3794 = 10;
-  ENUM_VALUE3795 = 11;
-  ENUM_VALUE3796 = 12;
-  ENUM_VALUE3797 = 13;
-  ENUM_VALUE3798 = 14;
-  ENUM_VALUE3799 = 15;
-  ENUM_VALUE3800 = 16;
-  ENUM_VALUE3801 = 20;
-  ENUM_VALUE3802 = 21;
-  ENUM_VALUE3803 = 50;
-}
-
-enum Enum3851 {
-  ENUM_VALUE3852 = 0;
-  ENUM_VALUE3853 = 1;
-  ENUM_VALUE3854 = 2;
-  ENUM_VALUE3855 = 3;
-  ENUM_VALUE3856 = 4;
-  ENUM_VALUE3857 = 5;
-  ENUM_VALUE3858 = 6;
-  ENUM_VALUE3859 = 7;
-  ENUM_VALUE3860 = 8;
-  ENUM_VALUE3861 = 9;
-  ENUM_VALUE3862 = 10;
-  ENUM_VALUE3863 = 11;
-  ENUM_VALUE3864 = 12;
-  ENUM_VALUE3865 = 13;
-  ENUM_VALUE3866 = 14;
-  ENUM_VALUE3867 = 15;
-  ENUM_VALUE3868 = 16;
-  ENUM_VALUE3869 = 17;
-}
-
-enum UnusedEnum {
-  UNUSED_ENUM_VALUE1 = 0;
-  UNUSED_ENUM_VALUE2 = 1;
-}
-
-enum Enum4146 {
-  ENUM_VALUE4147 = 0;
-  ENUM_VALUE4148 = 1;
-  ENUM_VALUE4149 = 2;
-  ENUM_VALUE4150 = 3;
-  ENUM_VALUE4151 = 4;
-}
-
-enum Enum4160 {
-  ENUM_VALUE4161 = 0;
-  ENUM_VALUE4162 = 1;
-}
-
-enum Enum4152 {
-  ENUM_VALUE4153 = 0;
-  ENUM_VALUE4154 = 1;
-  ENUM_VALUE4155 = 2;
-  ENUM_VALUE4156 = 3;
-  ENUM_VALUE4157 = 4;
-  ENUM_VALUE4158 = 5;
-  ENUM_VALUE4159 = 6;
-}
-
-enum Enum6025 {
-  ENUM_VALUE6026 = 0;
-  ENUM_VALUE6027 = 1;
-  ENUM_VALUE6028 = 2;
-  ENUM_VALUE6029 = 3;
-  ENUM_VALUE6030 = 4;
-  ENUM_VALUE6031 = 5;
-  ENUM_VALUE6032 = 6;
-  ENUM_VALUE6033 = 7;
-  ENUM_VALUE6034 = 8;
-  ENUM_VALUE6035 = 9;
-  ENUM_VALUE6036 = 10;
-  ENUM_VALUE6037 = 11;
-  ENUM_VALUE6038 = 12;
-  ENUM_VALUE6039 = 13;
-  ENUM_VALUE6040 = 14;
-  ENUM_VALUE6041 = 15;
-  ENUM_VALUE6042 = 16;
-  ENUM_VALUE6043 = 17;
-  ENUM_VALUE6044 = 18;
-  ENUM_VALUE6045 = 19;
-  ENUM_VALUE6046 = 20;
-  ENUM_VALUE6047 = 21;
-}
-
-enum Enum6065 {
-  ENUM_VALUE6066 = 0;
-  ENUM_VALUE6067 = 1;
-  ENUM_VALUE6068 = 2;
-  ENUM_VALUE6069 = 3;
-  ENUM_VALUE6070 = 4;
-  ENUM_VALUE6071 = 5;
-  ENUM_VALUE6072 = 6;
-  ENUM_VALUE6073 = 7;
-  ENUM_VALUE6074 = 8;
-  ENUM_VALUE6075 = 9;
-  ENUM_VALUE6076 = 10;
-  ENUM_VALUE6077 = 11;
-  ENUM_VALUE6078 = 12;
-  ENUM_VALUE6079 = 13;
-  ENUM_VALUE6080 = 14;
-}
-
-enum Enum6579 {
-  ENUM_VALUE6580 = 0;
-  ENUM_VALUE6581 = 2;
-  ENUM_VALUE6582 = 3;
-  ENUM_VALUE6583 = 5;
-  ENUM_VALUE6584 = 10;
-  ENUM_VALUE6585 = 15;
-  ENUM_VALUE6586 = 25;
-  ENUM_VALUE6587 = 30;
-}
-
-enum Enum6588 {
-  ENUM_VALUE6589 = 0;
-  ENUM_VALUE6590 = 1;
-  ENUM_VALUE6591 = 2;
-  ENUM_VALUE6592 = 3;
-  ENUM_VALUE6593 = 4;
-  ENUM_VALUE6594 = 5;
-  ENUM_VALUE6595 = 6;
-  ENUM_VALUE6596 = 7;
-  ENUM_VALUE6597 = 8;
-  ENUM_VALUE6598 = 9;
-  ENUM_VALUE6599 = 10;
-  ENUM_VALUE6600 = 11;
-  ENUM_VALUE6601 = 12;
-  ENUM_VALUE6602 = 13;
-  ENUM_VALUE6603 = 14;
-  ENUM_VALUE6604 = 15;
-  ENUM_VALUE6605 = 16;
-  ENUM_VALUE6606 = 17;
-  ENUM_VALUE6607 = 19;
-  ENUM_VALUE6608 = 20;
-  ENUM_VALUE6609 = 21;
-  ENUM_VALUE6610 = 22;
-  ENUM_VALUE6611 = 23;
-  ENUM_VALUE6612 = 24;
-  ENUM_VALUE6613 = 25;
-  ENUM_VALUE6614 = 26;
-  ENUM_VALUE6615 = 27;
-  ENUM_VALUE6616 = 28;
-  ENUM_VALUE6617 = 29;
-  ENUM_VALUE6618 = 30;
-  ENUM_VALUE6619 = 31;
-  ENUM_VALUE6620 = 32;
-  ENUM_VALUE6621 = 33;
-  ENUM_VALUE6622 = 34;
-}
-
-enum Enum6769 {
-  ENUM_VALUE6770 = 0;
-  ENUM_VALUE6771 = 1;
-  ENUM_VALUE6772 = 2;
-}
-
-enum Enum6774 {
-  ENUM_VALUE6775 = 0;
-  ENUM_VALUE6776 = 1;
-  ENUM_VALUE6777 = 2;
-  ENUM_VALUE6778 = 3;
-  ENUM_VALUE6779 = 4;
-  ENUM_VALUE6780 = 5;
-  ENUM_VALUE6781 = 6;
-}
-
-enum Enum6782 {
-  ENUM_VALUE6783 = 0;
-  ENUM_VALUE6784 = 1;
-  ENUM_VALUE6785 = 2;
-  ENUM_VALUE6786 = 3;
-  ENUM_VALUE6787 = 4;
-  ENUM_VALUE6788 = 5;
-}
-
-enum Enum6858 {
-  ENUM_VALUE6859 = 1;
-  ENUM_VALUE6860 = 2;
-  ENUM_VALUE6861 = 3;
-  ENUM_VALUE6862 = 4;
-}
-
-enum Enum6815 {
-  ENUM_VALUE6816 = 0;
-  ENUM_VALUE6817 = 1;
-  ENUM_VALUE6818 = 2;
-  ENUM_VALUE6819 = 3;
-  ENUM_VALUE6820 = 4;
-  ENUM_VALUE6821 = 5;
-}
-
-enum Enum6822 {
-  ENUM_VALUE6823 = 0;
-  ENUM_VALUE6824 = 1;
-  ENUM_VALUE6825 = 2;
-  ENUM_VALUE6826 = 3;
-}
-
-enum Enum7654 {
-  ENUM_VALUE7655 = 1;
-  ENUM_VALUE7656 = 2;
-  ENUM_VALUE7657 = 3;
-}
-
-enum Enum8292 {
-  ENUM_VALUE8293 = 0;
-  ENUM_VALUE8294 = 1;
-  ENUM_VALUE8295 = 2;
-}
-
-enum Enum8450 {
-  ENUM_VALUE8451 = 0;
-  ENUM_VALUE8452 = 1;
-  ENUM_VALUE8453 = 2;
-}
-
-enum Enum8900 {
-  ENUM_VALUE8901 = 0;
-  ENUM_VALUE8902 = 1;
-  ENUM_VALUE8903 = 2;
-  ENUM_VALUE8904 = 3;
-  ENUM_VALUE8905 = 4;
-}
-
-enum Enum8945 {
-  ENUM_VALUE8946 = 0;
-  ENUM_VALUE8947 = 1;
-  ENUM_VALUE8948 = 2;
-  ENUM_VALUE8949 = 3;
-  ENUM_VALUE8950 = 4;
-}
-
-enum Enum8951 {
-  ENUM_VALUE8952 = 1;
-  ENUM_VALUE8953 = 2;
-  ENUM_VALUE8954 = 3;
-  ENUM_VALUE8955 = 4;
-  ENUM_VALUE8956 = 5;
-  ENUM_VALUE8957 = 6;
-  ENUM_VALUE8958 = 7;
-  ENUM_VALUE8959 = 8;
-}
-
-enum Enum9243 {
-  ENUM_VALUE9244 = -1;
-  ENUM_VALUE9245 = 0;
-  ENUM_VALUE9246 = 1;
-  ENUM_VALUE9247 = 2;
-  ENUM_VALUE9248 = 3;
-  ENUM_VALUE9249 = 4;
-  ENUM_VALUE9250 = 5;
-  ENUM_VALUE9251 = 6;
-  ENUM_VALUE9252 = 7;
-  ENUM_VALUE9253 = 8;
-  ENUM_VALUE9254 = 9;
-  ENUM_VALUE9255 = 10;
-  ENUM_VALUE9256 = 11;
-  ENUM_VALUE9257 = 12;
-  ENUM_VALUE9258 = 13;
-  ENUM_VALUE9259 = 14;
-  ENUM_VALUE9260 = 15;
-  ENUM_VALUE9261 = 16;
-  ENUM_VALUE9262 = 17;
-  ENUM_VALUE9263 = 71;
-  ENUM_VALUE9264 = 72;
-  ENUM_VALUE9265 = 73;
-  ENUM_VALUE9266 = 74;
-  ENUM_VALUE9267 = 18;
-  ENUM_VALUE9268 = 20;
-  ENUM_VALUE9269 = 21;
-  ENUM_VALUE9270 = 22;
-  ENUM_VALUE9271 = 23;
-  ENUM_VALUE9272 = 61;
-  ENUM_VALUE9273 = 62;
-  ENUM_VALUE9274 = 63;
-  ENUM_VALUE9275 = 64;
-  ENUM_VALUE9276 = 66;
-  ENUM_VALUE9277 = 67;
-  ENUM_VALUE9278 = 24;
-  ENUM_VALUE9279 = 25;
-  ENUM_VALUE9280 = 26;
-  ENUM_VALUE9281 = 27;
-  ENUM_VALUE9282 = 28;
-  ENUM_VALUE9283 = 29;
-  ENUM_VALUE9284 = 30;
-  ENUM_VALUE9285 = 31;
-  ENUM_VALUE9286 = 32;
-  ENUM_VALUE9287 = 33;
-  ENUM_VALUE9288 = 34;
-  ENUM_VALUE9289 = 35;
-  ENUM_VALUE9290 = 36;
-  ENUM_VALUE9291 = 37;
-  ENUM_VALUE9292 = 38;
-  ENUM_VALUE9293 = 39;
-  ENUM_VALUE9294 = 40;
-  ENUM_VALUE9295 = 41;
-  ENUM_VALUE9296 = 42;
-  ENUM_VALUE9297 = 43;
-  ENUM_VALUE9298 = 44;
-  ENUM_VALUE9299 = 45;
-  ENUM_VALUE9300 = 46;
-  ENUM_VALUE9301 = 47;
-  ENUM_VALUE9302 = 48;
-  ENUM_VALUE9303 = 49;
-  ENUM_VALUE9304 = 50;
-  ENUM_VALUE9305 = 51;
-  ENUM_VALUE9306 = 52;
-  ENUM_VALUE9307 = 53;
-  ENUM_VALUE9308 = 54;
-  ENUM_VALUE9309 = 55;
-  ENUM_VALUE9310 = 56;
-  ENUM_VALUE9311 = 57;
-  ENUM_VALUE9312 = 58;
-  ENUM_VALUE9313 = 59;
-  ENUM_VALUE9314 = 60;
-  ENUM_VALUE9315 = 68;
-  ENUM_VALUE9316 = 69;
-  ENUM_VALUE9317 = 70;
-  ENUM_VALUE9318 = 1000;
-  ENUM_VALUE9319 = 1001;
-  ENUM_VALUE9320 = 1002;
-  ENUM_VALUE9321 = 1003;
-  ENUM_VALUE9322 = 1004;
-  ENUM_VALUE9323 = 1005;
-  ENUM_VALUE9324 = 1006;
-  ENUM_VALUE9325 = 1007;
-  ENUM_VALUE9326 = 65;
-}
-
-enum Enum10157 {
-  ENUM_VALUE10158 = 0;
-  ENUM_VALUE10159 = 1;
-  ENUM_VALUE10160 = 2;
-  ENUM_VALUE10161 = 3;
-  ENUM_VALUE10162 = 4;
-  ENUM_VALUE10163 = 5;
-  ENUM_VALUE10164 = 6;
-  ENUM_VALUE10165 = 7;
-  ENUM_VALUE10166 = 8;
-}
-
-enum Enum10167 {
-  ENUM_VALUE10168 = 0;
-  ENUM_VALUE10169 = 1;
-  ENUM_VALUE10170 = 2;
-  ENUM_VALUE10171 = 3;
-  ENUM_VALUE10172 = 4;
-  ENUM_VALUE10173 = 5;
-  ENUM_VALUE10174 = 6;
-  ENUM_VALUE10175 = 7;
-  ENUM_VALUE10176 = 8;
-}
-
-enum Enum8862 {
-  ENUM_VALUE8863 = 0;
-  ENUM_VALUE8864 = 1;
-  ENUM_VALUE8865 = 2;
-  ENUM_VALUE8866 = 3;
-  ENUM_VALUE8867 = 4;
-  ENUM_VALUE8868 = 5;
-  ENUM_VALUE8869 = 6;
-  ENUM_VALUE8870 = 7;
-  ENUM_VALUE8871 = 13;
-  ENUM_VALUE8872 = 14;
-  ENUM_VALUE8873 = 8;
-  ENUM_VALUE8874 = 9;
-  ENUM_VALUE8875 = 10;
-  ENUM_VALUE8876 = 11;
-  ENUM_VALUE8877 = 12;
-  ENUM_VALUE8878 = 15;
-}
-
-enum Enum10325 {
-  ENUM_VALUE10326 = 0;
-  ENUM_VALUE10327 = 1;
-  ENUM_VALUE10328 = 2;
-  ENUM_VALUE10329 = 3;
-  ENUM_VALUE10330 = 4;
-  ENUM_VALUE10331 = 5;
-  ENUM_VALUE10332 = 6;
-  ENUM_VALUE10333 = 7;
-  ENUM_VALUE10334 = 8;
-}
-
-enum Enum10335 {
-  ENUM_VALUE10336 = 0;
-}
-
-enum Enum10337 {
-  ENUM_VALUE10338 = 0;
-  ENUM_VALUE10339 = 1;
-}
-
-enum Enum10392 {
-  ENUM_VALUE10393 = 0;
-  ENUM_VALUE10394 = 1;
-  ENUM_VALUE10395 = 2;
-  ENUM_VALUE10396 = 3;
-  ENUM_VALUE10397 = 4;
-  ENUM_VALUE10398 = 5;
-  ENUM_VALUE10399 = 6;
-  ENUM_VALUE10400 = 7;
-  ENUM_VALUE10401 = 8;
-  ENUM_VALUE10402 = 15;
-  ENUM_VALUE10403 = 9;
-  ENUM_VALUE10404 = 10;
-  ENUM_VALUE10405 = 11;
-  ENUM_VALUE10406 = 12;
-  ENUM_VALUE10407 = 13;
-  ENUM_VALUE10408 = 14;
-  ENUM_VALUE10409 = 101;
-  ENUM_VALUE10410 = 102;
-}
-
-enum Enum11107 {
-  ENUM_VALUE11108 = 0;
-  ENUM_VALUE11109 = 1;
-  ENUM_VALUE11110 = 2;
-  ENUM_VALUE11111 = 3;
-  ENUM_VALUE11112 = 4;
-  ENUM_VALUE11113 = 5;
-  ENUM_VALUE11114 = 6;
-  ENUM_VALUE11115 = 7;
-  ENUM_VALUE11116 = 8;
-  ENUM_VALUE11117 = 9;
-  ENUM_VALUE11118 = 10;
-  ENUM_VALUE11119 = 11;
-  ENUM_VALUE11120 = 12;
-  ENUM_VALUE11121 = 13;
-  ENUM_VALUE11122 = 14;
-  ENUM_VALUE11123 = 15;
-  ENUM_VALUE11124 = 16;
-  ENUM_VALUE11125 = 17;
-  ENUM_VALUE11126 = 18;
-  ENUM_VALUE11127 = 19;
-  ENUM_VALUE11128 = 20;
-  ENUM_VALUE11129 = 21;
-  ENUM_VALUE11130 = 22;
-  ENUM_VALUE11131 = 23;
-  ENUM_VALUE11132 = 24;
-  ENUM_VALUE11133 = 25;
-  ENUM_VALUE11134 = 26;
-  ENUM_VALUE11135 = 27;
-  ENUM_VALUE11136 = 28;
-  ENUM_VALUE11137 = 29;
-  ENUM_VALUE11138 = 30;
-  ENUM_VALUE11139 = 31;
-  ENUM_VALUE11140 = 32;
-  ENUM_VALUE11141 = 33;
-  ENUM_VALUE11142 = 34;
-  ENUM_VALUE11143 = 35;
-  ENUM_VALUE11144 = 36;
-  ENUM_VALUE11145 = 37;
-  ENUM_VALUE11146 = 38;
-  ENUM_VALUE11147 = 39;
-  ENUM_VALUE11148 = 40;
-  ENUM_VALUE11149 = 41;
-  ENUM_VALUE11150 = 42;
-  ENUM_VALUE11151 = 43;
-  ENUM_VALUE11152 = 44;
-  ENUM_VALUE11153 = 45;
-  ENUM_VALUE11154 = 46;
-  ENUM_VALUE11155 = 47;
-  ENUM_VALUE11156 = 48;
-  ENUM_VALUE11157 = 49;
-  ENUM_VALUE11158 = 50;
-  ENUM_VALUE11159 = 51;
-  ENUM_VALUE11160 = 52;
-  ENUM_VALUE11161 = 53;
-  ENUM_VALUE11162 = 54;
-  ENUM_VALUE11163 = 55;
-  ENUM_VALUE11164 = 56;
-  ENUM_VALUE11165 = 57;
-  ENUM_VALUE11166 = 58;
-  ENUM_VALUE11167 = 59;
-  ENUM_VALUE11168 = 60;
-  ENUM_VALUE11169 = 61;
-  ENUM_VALUE11170 = 62;
-  ENUM_VALUE11171 = 63;
-  ENUM_VALUE11172 = 64;
-  ENUM_VALUE11173 = 65;
-  ENUM_VALUE11174 = 66;
-  ENUM_VALUE11175 = 67;
-  ENUM_VALUE11176 = 68;
-  ENUM_VALUE11177 = 69;
-  ENUM_VALUE11178 = 70;
-  ENUM_VALUE11179 = 71;
-  ENUM_VALUE11180 = 72;
-  ENUM_VALUE11181 = 73;
-  ENUM_VALUE11182 = 74;
-  ENUM_VALUE11183 = 75;
-  ENUM_VALUE11184 = 76;
-  ENUM_VALUE11185 = 77;
-  ENUM_VALUE11186 = 78;
-  ENUM_VALUE11187 = 79;
-  ENUM_VALUE11188 = 80;
-  ENUM_VALUE11189 = 81;
-  ENUM_VALUE11190 = 82;
-  ENUM_VALUE11191 = 83;
-  ENUM_VALUE11192 = 84;
-  ENUM_VALUE11193 = 85;
-  ENUM_VALUE11194 = 86;
-  ENUM_VALUE11195 = 87;
-  ENUM_VALUE11196 = 88;
-  ENUM_VALUE11197 = 89;
-  ENUM_VALUE11198 = 90;
-  ENUM_VALUE11199 = 91;
-  ENUM_VALUE11200 = 92;
-  ENUM_VALUE11201 = 93;
-  ENUM_VALUE11202 = 94;
-  ENUM_VALUE11203 = 95;
-  ENUM_VALUE11204 = 96;
-  ENUM_VALUE11205 = 97;
-  ENUM_VALUE11206 = 98;
-  ENUM_VALUE11207 = 99;
-  ENUM_VALUE11208 = 100;
-  ENUM_VALUE11209 = 101;
-  ENUM_VALUE11210 = 102;
-  ENUM_VALUE11211 = 103;
-  ENUM_VALUE11212 = 104;
-  ENUM_VALUE11213 = 105;
-  ENUM_VALUE11214 = 106;
-  ENUM_VALUE11215 = 107;
-  ENUM_VALUE11216 = 108;
-  ENUM_VALUE11217 = 109;
-  ENUM_VALUE11218 = 110;
-  ENUM_VALUE11219 = 111;
-  ENUM_VALUE11220 = 112;
-  ENUM_VALUE11221 = 113;
-  ENUM_VALUE11222 = 114;
-  ENUM_VALUE11223 = 115;
-  ENUM_VALUE11224 = 116;
-  ENUM_VALUE11225 = 117;
-  ENUM_VALUE11226 = 118;
-  ENUM_VALUE11227 = 119;
-  ENUM_VALUE11228 = 120;
-  ENUM_VALUE11229 = 121;
-  ENUM_VALUE11230 = 122;
-  ENUM_VALUE11231 = 123;
-  ENUM_VALUE11232 = 124;
-  ENUM_VALUE11233 = 125;
-  ENUM_VALUE11234 = 126;
-  ENUM_VALUE11235 = 127;
-  ENUM_VALUE11236 = 128;
-  ENUM_VALUE11237 = 129;
-  ENUM_VALUE11238 = 130;
-  ENUM_VALUE11239 = 131;
-  ENUM_VALUE11240 = 132;
-  ENUM_VALUE11241 = 133;
-  ENUM_VALUE11242 = 134;
-  ENUM_VALUE11243 = 135;
-  ENUM_VALUE11244 = 136;
-  ENUM_VALUE11245 = 137;
-  ENUM_VALUE11246 = 138;
-  ENUM_VALUE11247 = 139;
-  ENUM_VALUE11248 = 140;
-  ENUM_VALUE11249 = 141;
-  ENUM_VALUE11250 = 142;
-  ENUM_VALUE11251 = 143;
-  ENUM_VALUE11252 = 144;
-  ENUM_VALUE11253 = 145;
-  ENUM_VALUE11254 = 146;
-  ENUM_VALUE11255 = 147;
-  ENUM_VALUE11256 = 148;
-  ENUM_VALUE11257 = 149;
-  ENUM_VALUE11258 = 150;
-  ENUM_VALUE11259 = 151;
-  ENUM_VALUE11260 = 152;
-  ENUM_VALUE11261 = 153;
-  ENUM_VALUE11262 = 154;
-  ENUM_VALUE11263 = 155;
-  ENUM_VALUE11264 = 156;
-  ENUM_VALUE11265 = 157;
-  ENUM_VALUE11266 = 158;
-  ENUM_VALUE11267 = 159;
-  ENUM_VALUE11268 = 160;
-  ENUM_VALUE11269 = 161;
-  ENUM_VALUE11270 = 163;
-  ENUM_VALUE11271 = 164;
-  ENUM_VALUE11272 = 165;
-  ENUM_VALUE11273 = 166;
-  ENUM_VALUE11274 = 167;
-  ENUM_VALUE11275 = 168;
-  ENUM_VALUE11276 = 169;
-  ENUM_VALUE11277 = 170;
-  ENUM_VALUE11278 = 171;
-  ENUM_VALUE11279 = 172;
-  ENUM_VALUE11280 = 173;
-  ENUM_VALUE11281 = 174;
-  ENUM_VALUE11282 = 175;
-  ENUM_VALUE11283 = 176;
-  ENUM_VALUE11284 = 177;
-  ENUM_VALUE11285 = 178;
-  ENUM_VALUE11286 = 179;
-  ENUM_VALUE11287 = 180;
-  ENUM_VALUE11288 = 181;
-  ENUM_VALUE11289 = 182;
-  ENUM_VALUE11290 = 183;
-  ENUM_VALUE11291 = 184;
-  ENUM_VALUE11292 = 185;
-  ENUM_VALUE11293 = 187;
-  ENUM_VALUE11294 = 188;
-  ENUM_VALUE11295 = 189;
-  ENUM_VALUE11296 = 190;
-  ENUM_VALUE11297 = 191;
-  ENUM_VALUE11298 = 192;
-  ENUM_VALUE11299 = 193;
-  ENUM_VALUE11300 = 194;
-  ENUM_VALUE11301 = 195;
-  ENUM_VALUE11302 = 196;
-  ENUM_VALUE11303 = 197;
-  ENUM_VALUE11304 = 198;
-  ENUM_VALUE11305 = 65535;
-  ENUM_VALUE11306 = 65536;
-  ENUM_VALUE11307 = 65537;
-  ENUM_VALUE11308 = 65538;
-  ENUM_VALUE11309 = 65539;
-  ENUM_VALUE11310 = 65540;
-  ENUM_VALUE11311 = 65541;
-  ENUM_VALUE11312 = 65542;
-  ENUM_VALUE11313 = 65543;
-  ENUM_VALUE11314 = 65544;
-  ENUM_VALUE11315 = 65545;
-  ENUM_VALUE11316 = 65546;
-  ENUM_VALUE11317 = 65547;
-  ENUM_VALUE11318 = 65548;
-  ENUM_VALUE11319 = 65549;
-  ENUM_VALUE11320 = 65550;
-  ENUM_VALUE11321 = 65551;
-  ENUM_VALUE11322 = 65552;
-  ENUM_VALUE11323 = 65553;
-  ENUM_VALUE11324 = 65554;
-  ENUM_VALUE11325 = 65555;
-  ENUM_VALUE11326 = 65556;
-  ENUM_VALUE11327 = 65557;
-  ENUM_VALUE11328 = 65558;
-  ENUM_VALUE11329 = 65559;
-  ENUM_VALUE11330 = 65560;
-  ENUM_VALUE11331 = 65561;
-  ENUM_VALUE11332 = 65562;
-  ENUM_VALUE11333 = 65563;
-  ENUM_VALUE11334 = 69632;
-  ENUM_VALUE11335 = 69633;
-  ENUM_VALUE11336 = 69634;
-  ENUM_VALUE11337 = 69635;
-  ENUM_VALUE11338 = 69636;
-  ENUM_VALUE11339 = 69637;
-  ENUM_VALUE11340 = 69638;
-  ENUM_VALUE11341 = 69639;
-  ENUM_VALUE11342 = 69640;
-  ENUM_VALUE11343 = 69641;
-  ENUM_VALUE11344 = 69642;
-  ENUM_VALUE11345 = 69643;
-  ENUM_VALUE11346 = 69644;
-  ENUM_VALUE11347 = 69645;
-  ENUM_VALUE11348 = 69646;
-  ENUM_VALUE11349 = 69647;
-  ENUM_VALUE11350 = 69648;
-  ENUM_VALUE11351 = 69649;
-  ENUM_VALUE11352 = 69650;
-  ENUM_VALUE11353 = 69651;
-  ENUM_VALUE11354 = 69652;
-  ENUM_VALUE11355 = 69653;
-  ENUM_VALUE11356 = 69654;
-  ENUM_VALUE11357 = 69655;
-  ENUM_VALUE11358 = 69656;
-  ENUM_VALUE11359 = 69657;
-  ENUM_VALUE11360 = 69658;
-  ENUM_VALUE11361 = 69659;
-  ENUM_VALUE11362 = 69660;
-  ENUM_VALUE11363 = 69661;
-  ENUM_VALUE11364 = 69662;
-  ENUM_VALUE11365 = 73728;
-  ENUM_VALUE11366 = 73729;
-  ENUM_VALUE11367 = 77824;
-  ENUM_VALUE11368 = 77825;
-  ENUM_VALUE11369 = 81920;
-  ENUM_VALUE11370 = 81921;
-  ENUM_VALUE11371 = 81922;
-  ENUM_VALUE11372 = 81923;
-  ENUM_VALUE11373 = 86016;
-  ENUM_VALUE11374 = 86017;
-  ENUM_VALUE11375 = 86018;
-  ENUM_VALUE11376 = 86019;
-  ENUM_VALUE11377 = 86020;
-  ENUM_VALUE11378 = 86021;
-  ENUM_VALUE11379 = 86022;
-  ENUM_VALUE11380 = 86023;
-  ENUM_VALUE11381 = 86024;
-  ENUM_VALUE11382 = 86025;
-  ENUM_VALUE11383 = 86026;
-  ENUM_VALUE11384 = 86027;
-  ENUM_VALUE11385 = 86028;
-  ENUM_VALUE11386 = 86029;
-  ENUM_VALUE11387 = 86030;
-  ENUM_VALUE11388 = 86031;
-  ENUM_VALUE11389 = 86032;
-  ENUM_VALUE11390 = 86033;
-  ENUM_VALUE11391 = 86034;
-  ENUM_VALUE11392 = 86035;
-  ENUM_VALUE11393 = 86036;
-  ENUM_VALUE11394 = 86037;
-  ENUM_VALUE11395 = 86038;
-  ENUM_VALUE11396 = 86039;
-  ENUM_VALUE11397 = 86040;
-  ENUM_VALUE11398 = 86041;
-  ENUM_VALUE11399 = 86042;
-  ENUM_VALUE11400 = 86043;
-  ENUM_VALUE11401 = 86044;
-  ENUM_VALUE11402 = 86045;
-  ENUM_VALUE11403 = 86046;
-  ENUM_VALUE11404 = 86047;
-  ENUM_VALUE11405 = 86048;
-  ENUM_VALUE11406 = 86049;
-  ENUM_VALUE11407 = 86050;
-  ENUM_VALUE11408 = 86051;
-  ENUM_VALUE11409 = 86052;
-  ENUM_VALUE11410 = 86053;
-  ENUM_VALUE11411 = 86054;
-  ENUM_VALUE11412 = 86055;
-  ENUM_VALUE11413 = 86056;
-  ENUM_VALUE11414 = 86057;
-  ENUM_VALUE11415 = 86058;
-  ENUM_VALUE11416 = 86059;
-  ENUM_VALUE11417 = 86060;
-  ENUM_VALUE11418 = 86061;
-  ENUM_VALUE11419 = 86062;
-  ENUM_VALUE11420 = 86063;
-  ENUM_VALUE11421 = 86064;
-  ENUM_VALUE11422 = 86065;
-  ENUM_VALUE11423 = 86066;
-  ENUM_VALUE11424 = 86067;
-  ENUM_VALUE11425 = 86068;
-  ENUM_VALUE11426 = 86069;
-  ENUM_VALUE11427 = 86070;
-  ENUM_VALUE11428 = 86071;
-  ENUM_VALUE11429 = 86072;
-  ENUM_VALUE11430 = 86073;
-  ENUM_VALUE11431 = 86074;
-  ENUM_VALUE11432 = 86077;
-  ENUM_VALUE11433 = 86078;
-  ENUM_VALUE11434 = 86079;
-  ENUM_VALUE11435 = 86080;
-  ENUM_VALUE11436 = 86081;
-  ENUM_VALUE11437 = 86082;
-  ENUM_VALUE11438 = 86083;
-  ENUM_VALUE11439 = 86084;
-  ENUM_VALUE11440 = 90112;
-  ENUM_VALUE11441 = 94208;
-  ENUM_VALUE11442 = 94209;
-  ENUM_VALUE11443 = 94210;
-  ENUM_VALUE11444 = 94211;
-  ENUM_VALUE11445 = 94212;
-  ENUM_VALUE11446 = 94213;
-  ENUM_VALUE11447 = 94214;
-  ENUM_VALUE11448 = 94215;
-  ENUM_VALUE11449 = 94216;
-  ENUM_VALUE11450 = 94217;
-  ENUM_VALUE11451 = 94218;
-  ENUM_VALUE11452 = 94219;
-  ENUM_VALUE11453 = 94220;
-  ENUM_VALUE11454 = 94221;
-  ENUM_VALUE11455 = 94222;
-  ENUM_VALUE11456 = 94223;
-  ENUM_VALUE11457 = 94224;
-  ENUM_VALUE11458 = 98304;
-  ENUM_VALUE11459 = 98305;
-  ENUM_VALUE11460 = 98306;
-  ENUM_VALUE11461 = 98307;
-  ENUM_VALUE11462 = 98308;
-  ENUM_VALUE11463 = 102400;
-  ENUM_VALUE11464 = 131072;
-  ENUM_VALUE11465 = 131073;
-  ENUM_VALUE11466 = 135168;
-  ENUM_VALUE11467 = 9439507;
-}
-
-enum Enum11541 {
-  ENUM_VALUE11542 = -1;
-  ENUM_VALUE11543 = 0;
-  ENUM_VALUE11544 = 1;
-  ENUM_VALUE11545 = 2;
-  ENUM_VALUE11546 = 3;
-  ENUM_VALUE11547 = 4;
-  ENUM_VALUE11548 = 5;
-  ENUM_VALUE11549 = 6;
-  ENUM_VALUE11550 = 7;
-  ENUM_VALUE11551 = 8;
-  ENUM_VALUE11552 = 9;
-  ENUM_VALUE11553 = 10;
-  ENUM_VALUE11554 = 11;
-  ENUM_VALUE11555 = 12;
-  ENUM_VALUE11556 = 13;
-  ENUM_VALUE11557 = 14;
-  ENUM_VALUE11558 = 15;
-  ENUM_VALUE11559 = 16;
-  ENUM_VALUE11560 = 17;
-  ENUM_VALUE11561 = 18;
-  ENUM_VALUE11562 = 19;
-  ENUM_VALUE11563 = 20;
-  ENUM_VALUE11564 = 21;
-  ENUM_VALUE11565 = 22;
-  ENUM_VALUE11566 = 23;
-  ENUM_VALUE11567 = 24;
-  ENUM_VALUE11568 = 25;
-  ENUM_VALUE11569 = 26;
-  ENUM_VALUE11570 = 27;
-  ENUM_VALUE11571 = 28;
-  ENUM_VALUE11572 = 29;
-  ENUM_VALUE11573 = 30;
-  ENUM_VALUE11574 = 31;
-  ENUM_VALUE11575 = 32;
-  ENUM_VALUE11576 = 33;
-  ENUM_VALUE11577 = 34;
-  ENUM_VALUE11578 = 35;
-  ENUM_VALUE11579 = 36;
-  ENUM_VALUE11580 = 37;
-  ENUM_VALUE11581 = 38;
-  ENUM_VALUE11582 = 39;
-  ENUM_VALUE11583 = 40;
-  ENUM_VALUE11584 = 41;
-  ENUM_VALUE11585 = 42;
-  ENUM_VALUE11586 = 43;
-  ENUM_VALUE11587 = 44;
-  ENUM_VALUE11588 = 45;
-  ENUM_VALUE11589 = 46;
-  ENUM_VALUE11590 = 47;
-  ENUM_VALUE11591 = 48;
-  ENUM_VALUE11592 = 49;
-  ENUM_VALUE11593 = 50;
-  ENUM_VALUE11594 = 51;
-  ENUM_VALUE11595 = 52;
-  ENUM_VALUE11596 = 53;
-  ENUM_VALUE11597 = 54;
-  ENUM_VALUE11598 = 55;
-  ENUM_VALUE11599 = 56;
-  ENUM_VALUE11600 = 57;
-  ENUM_VALUE11601 = 58;
-  ENUM_VALUE11602 = 59;
-  ENUM_VALUE11603 = 60;
-  ENUM_VALUE11604 = 61;
-  ENUM_VALUE11605 = 62;
-  ENUM_VALUE11606 = 63;
-  ENUM_VALUE11607 = 64;
-  ENUM_VALUE11608 = 65;
-  ENUM_VALUE11609 = 66;
-  ENUM_VALUE11610 = 67;
-  ENUM_VALUE11611 = 68;
-  ENUM_VALUE11612 = 69;
-  ENUM_VALUE11613 = 70;
-  ENUM_VALUE11614 = 71;
-  ENUM_VALUE11615 = 72;
-  ENUM_VALUE11616 = 73;
-  ENUM_VALUE11617 = 74;
-  ENUM_VALUE11618 = 75;
-  ENUM_VALUE11619 = 76;
-  ENUM_VALUE11620 = 77;
-  ENUM_VALUE11621 = 78;
-  ENUM_VALUE11622 = 79;
-  ENUM_VALUE11623 = 80;
-  ENUM_VALUE11624 = 81;
-  ENUM_VALUE11625 = 82;
-  ENUM_VALUE11626 = 83;
-  ENUM_VALUE11627 = 84;
-  ENUM_VALUE11628 = 85;
-  ENUM_VALUE11629 = 86;
-  ENUM_VALUE11630 = 87;
-  ENUM_VALUE11631 = 88;
-  ENUM_VALUE11632 = 89;
-  ENUM_VALUE11633 = 90;
-  ENUM_VALUE11634 = 91;
-  ENUM_VALUE11635 = 92;
-  ENUM_VALUE11636 = 93;
-  ENUM_VALUE11637 = 94;
-  ENUM_VALUE11638 = 95;
-  ENUM_VALUE11639 = 96;
-  ENUM_VALUE11640 = 97;
-  ENUM_VALUE11641 = 98;
-  ENUM_VALUE11642 = 99;
-  ENUM_VALUE11643 = 100;
-  ENUM_VALUE11644 = 101;
-  ENUM_VALUE11645 = 102;
-  ENUM_VALUE11646 = 103;
-  ENUM_VALUE11647 = 104;
-  ENUM_VALUE11648 = 105;
-  ENUM_VALUE11649 = 106;
-  ENUM_VALUE11650 = 107;
-  ENUM_VALUE11651 = 108;
-  ENUM_VALUE11652 = 109;
-  ENUM_VALUE11653 = 110;
-  ENUM_VALUE11654 = 111;
-  ENUM_VALUE11655 = 112;
-  ENUM_VALUE11656 = 113;
-  ENUM_VALUE11657 = 114;
-  ENUM_VALUE11658 = 115;
-  ENUM_VALUE11659 = 116;
-  ENUM_VALUE11660 = 117;
-  ENUM_VALUE11661 = 118;
-  ENUM_VALUE11662 = 119;
-  ENUM_VALUE11663 = 120;
-  ENUM_VALUE11664 = 121;
-  ENUM_VALUE11665 = 122;
-  ENUM_VALUE11666 = 123;
-  ENUM_VALUE11667 = 124;
-  ENUM_VALUE11668 = 125;
-  ENUM_VALUE11669 = 126;
-  ENUM_VALUE11670 = 127;
-  ENUM_VALUE11671 = 128;
-  ENUM_VALUE11672 = 129;
-  ENUM_VALUE11673 = 130;
-  ENUM_VALUE11674 = 131;
-  ENUM_VALUE11675 = 132;
-  ENUM_VALUE11676 = 133;
-  ENUM_VALUE11677 = 134;
-  ENUM_VALUE11678 = 135;
-  ENUM_VALUE11679 = 136;
-  ENUM_VALUE11680 = 137;
-  ENUM_VALUE11681 = 138;
-  ENUM_VALUE11682 = 139;
-  ENUM_VALUE11683 = 140;
-  ENUM_VALUE11684 = 141;
-  ENUM_VALUE11685 = 142;
-  ENUM_VALUE11686 = 143;
-  ENUM_VALUE11687 = 144;
-  ENUM_VALUE11688 = 145;
-  ENUM_VALUE11689 = 146;
-  ENUM_VALUE11690 = 147;
-  ENUM_VALUE11691 = 148;
-  ENUM_VALUE11692 = 149;
-  ENUM_VALUE11693 = 150;
-  ENUM_VALUE11694 = 151;
-  ENUM_VALUE11695 = 152;
-  ENUM_VALUE11696 = 153;
-  ENUM_VALUE11697 = 154;
-  ENUM_VALUE11698 = 155;
-  ENUM_VALUE11699 = 156;
-  ENUM_VALUE11700 = 157;
-  ENUM_VALUE11701 = 158;
-  ENUM_VALUE11702 = 159;
-  ENUM_VALUE11703 = 160;
-  ENUM_VALUE11704 = 161;
-  ENUM_VALUE11705 = 162;
-  ENUM_VALUE11706 = 163;
-  ENUM_VALUE11707 = 164;
-  ENUM_VALUE11708 = 165;
-  ENUM_VALUE11709 = 166;
-  ENUM_VALUE11710 = 167;
-  ENUM_VALUE11711 = 168;
-  ENUM_VALUE11712 = 169;
-  ENUM_VALUE11713 = 170;
-  ENUM_VALUE11714 = 171;
-  ENUM_VALUE11715 = 172;
-  ENUM_VALUE11716 = 173;
-  ENUM_VALUE11717 = 174;
-  ENUM_VALUE11718 = 175;
-  ENUM_VALUE11719 = 176;
-  ENUM_VALUE11720 = 177;
-  ENUM_VALUE11721 = 178;
-  ENUM_VALUE11722 = 179;
-  ENUM_VALUE11723 = 180;
-  ENUM_VALUE11724 = 181;
-  ENUM_VALUE11725 = 182;
-  ENUM_VALUE11726 = 183;
-  ENUM_VALUE11727 = 184;
-  ENUM_VALUE11728 = 185;
-  ENUM_VALUE11729 = 186;
-  ENUM_VALUE11730 = 187;
-  ENUM_VALUE11731 = 188;
-  ENUM_VALUE11732 = 16777215;
-}
-
-enum Enum11468 {
-  ENUM_VALUE11469 = -99;
-  ENUM_VALUE11470 = 0;
-  ENUM_VALUE11471 = 1;
-  ENUM_VALUE11472 = 2;
-  ENUM_VALUE11473 = 3;
-  ENUM_VALUE11474 = 4;
-  ENUM_VALUE11475 = 28;
-  ENUM_VALUE11476 = 22;
-  ENUM_VALUE11477 = 38;
-  ENUM_VALUE11478 = 512;
-  ENUM_VALUE11479 = 2048;
-  ENUM_VALUE11480 = 66;
-  ENUM_VALUE11481 = 578;
-  ENUM_VALUE11482 = 77;
-  ENUM_VALUE11483 = 88;
-  ENUM_VALUE11484 = 100;
-  ENUM_VALUE11485 = 110;
-  ENUM_VALUE11486 = 2158;
-  ENUM_VALUE11487 = 122;
-  ENUM_VALUE11488 = 2170;
-  ENUM_VALUE11489 = 144;
-  ENUM_VALUE11490 = 244;
-  ENUM_VALUE11491 = 2292;
-  ENUM_VALUE11492 = 44;
-}
-
-enum Enum11022 {
-  ENUM_VALUE11023 = 0;
-  ENUM_VALUE11024 = 1;
-  ENUM_VALUE11025 = 2;
-  ENUM_VALUE11026 = 3;
-  ENUM_VALUE11027 = 4;
-  ENUM_VALUE11028 = 5;
-  ENUM_VALUE11029 = 6;
-  ENUM_VALUE11030 = 7;
-  ENUM_VALUE11031 = 8;
-  ENUM_VALUE11032 = 9;
-  ENUM_VALUE11033 = 10;
-  ENUM_VALUE11034 = 11;
-  ENUM_VALUE11035 = 12;
-  ENUM_VALUE11036 = 13;
-  ENUM_VALUE11037 = 14;
-  ENUM_VALUE11038 = 15;
-  ENUM_VALUE11039 = 16;
-  ENUM_VALUE11040 = 17;
-  ENUM_VALUE11041 = 18;
-  ENUM_VALUE11042 = 19;
-  ENUM_VALUE11043 = 20;
-  ENUM_VALUE11044 = 21;
-  ENUM_VALUE11045 = 22;
-  ENUM_VALUE11046 = 23;
-  ENUM_VALUE11047 = 24;
-  ENUM_VALUE11048 = 25;
-  ENUM_VALUE11049 = 26;
-  ENUM_VALUE11050 = 27;
-  ENUM_VALUE11051 = 28;
-  ENUM_VALUE11052 = 29;
-  ENUM_VALUE11053 = 30;
-  ENUM_VALUE11054 = 31;
-  ENUM_VALUE11055 = 32;
-  ENUM_VALUE11056 = 33;
-  ENUM_VALUE11057 = 34;
-  ENUM_VALUE11058 = 35;
-  ENUM_VALUE11059 = 36;
-  ENUM_VALUE11060 = 37;
-  ENUM_VALUE11061 = 38;
-  ENUM_VALUE11062 = 39;
-  ENUM_VALUE11063 = 40;
-  ENUM_VALUE11064 = 41;
-  ENUM_VALUE11065 = 42;
-  ENUM_VALUE11066 = 43;
-  ENUM_VALUE11067 = 44;
-  ENUM_VALUE11068 = 45;
-  ENUM_VALUE11069 = 46;
-  ENUM_VALUE11070 = 47;
-  ENUM_VALUE11071 = 48;
-  ENUM_VALUE11072 = 49;
-  ENUM_VALUE11073 = 50;
-  ENUM_VALUE11074 = 51;
-  ENUM_VALUE11075 = 52;
-  ENUM_VALUE11076 = 53;
-  ENUM_VALUE11077 = 54;
-  ENUM_VALUE11078 = 55;
-  ENUM_VALUE11079 = 56;
-  ENUM_VALUE11080 = 57;
-  ENUM_VALUE11081 = 58;
-  ENUM_VALUE11082 = 59;
-  ENUM_VALUE11083 = 60;
-  ENUM_VALUE11084 = 61;
-  ENUM_VALUE11085 = 62;
-  ENUM_VALUE11086 = 63;
-  ENUM_VALUE11087 = 64;
-  ENUM_VALUE11088 = 65;
-  ENUM_VALUE11089 = 66;
-  ENUM_VALUE11090 = 67;
-  ENUM_VALUE11091 = 68;
-  ENUM_VALUE11092 = 69;
-  ENUM_VALUE11093 = 70;
-  ENUM_VALUE11094 = 71;
-  ENUM_VALUE11095 = 72;
-  ENUM_VALUE11096 = 73;
-  ENUM_VALUE11097 = 74;
-  ENUM_VALUE11098 = 75;
-  ENUM_VALUE11099 = 76;
-  ENUM_VALUE11100 = 77;
-  ENUM_VALUE11101 = 78;
-  ENUM_VALUE11102 = 79;
-  ENUM_VALUE11103 = 80;
-  ENUM_VALUE11104 = 81;
-  ENUM_VALUE11105 = 82;
-  ENUM_VALUE11106 = 83;
-}
-
-enum Enum12670 {
-  ENUM_VALUE12671 = 0;
-  ENUM_VALUE12672 = 1;
-  ENUM_VALUE12673 = 2;
-}
-
-enum Enum12871 {
-  ENUM_VALUE12872 = 1;
-  ENUM_VALUE12873 = 2;
-  ENUM_VALUE12874 = 3;
-  ENUM_VALUE12875 = 4;
-  ENUM_VALUE12876 = 5;
-  ENUM_VALUE12877 = 6;
-}
-
-enum Enum13092 {
-  ENUM_VALUE13093 = 1;
-  ENUM_VALUE13094 = 2;
-  ENUM_VALUE13095 = 3;
-}
-
-enum Enum13146 {
-  ENUM_VALUE13147 = 0;
-  ENUM_VALUE13148 = 1;
-  ENUM_VALUE13149 = 2;
-  ENUM_VALUE13150 = 3;
-}
-
-enum Enum16042 {
-  ENUM_VALUE16043 = 0;
-  ENUM_VALUE16044 = 1;
-  ENUM_VALUE16045 = 17;
-  ENUM_VALUE16046 = 273;
-  ENUM_VALUE16047 = 274;
-  ENUM_VALUE16048 = 4385;
-  ENUM_VALUE16049 = 4386;
-  ENUM_VALUE16050 = 4387;
-  ENUM_VALUE16051 = 4388;
-  ENUM_VALUE16052 = 4389;
-  ENUM_VALUE16053 = 4390;
-  ENUM_VALUE16054 = 4391;
-  ENUM_VALUE16055 = 4392;
-  ENUM_VALUE16056 = 4393;
-  ENUM_VALUE16057 = 276;
-  ENUM_VALUE16058 = 277;
-  ENUM_VALUE16059 = 18;
-  ENUM_VALUE16060 = 289;
-  ENUM_VALUE16061 = 291;
-  ENUM_VALUE16062 = 4657;
-  ENUM_VALUE16063 = 74513;
-  ENUM_VALUE16064 = 4658;
-  ENUM_VALUE16065 = 4659;
-  ENUM_VALUE16066 = 4660;
-  ENUM_VALUE16067 = 4661;
-  ENUM_VALUE16068 = 4662;
-  ENUM_VALUE16069 = 4663;
-  ENUM_VALUE16070 = 4664;
-  ENUM_VALUE16071 = 292;
-  ENUM_VALUE16072 = 4673;
-  ENUM_VALUE16073 = 4674;
-  ENUM_VALUE16074 = 293;
-  ENUM_VALUE16075 = 19;
-  ENUM_VALUE16076 = 20;
-  ENUM_VALUE16077 = 321;
-  ENUM_VALUE16078 = 5137;
-  ENUM_VALUE16079 = 5138;
-  ENUM_VALUE16080 = 5139;
-  ENUM_VALUE16081 = 5140;
-  ENUM_VALUE16082 = 5141;
-  ENUM_VALUE16083 = 5142;
-  ENUM_VALUE16084 = 82273;
-  ENUM_VALUE16085 = 82274;
-  ENUM_VALUE16086 = 82275;
-  ENUM_VALUE16087 = 82276;
-  ENUM_VALUE16088 = 82277;
-  ENUM_VALUE16089 = 82278;
-  ENUM_VALUE16090 = 5143;
-  ENUM_VALUE16091 = 5144;
-  ENUM_VALUE16092 = 5145;
-  ENUM_VALUE16093 = 5146;
-  ENUM_VALUE16094 = 82337;
-  ENUM_VALUE16095 = 5147;
-  ENUM_VALUE16096 = 5148;
-  ENUM_VALUE16097 = 322;
-  ENUM_VALUE16098 = 323;
-  ENUM_VALUE16099 = 324;
-  ENUM_VALUE16100 = 325;
-  ENUM_VALUE16101 = 326;
-  ENUM_VALUE16102 = 327;
-  ENUM_VALUE16103 = 328;
-  ENUM_VALUE16104 = 21;
-  ENUM_VALUE16105 = 337;
-  ENUM_VALUE16106 = 22;
-  ENUM_VALUE16107 = 23;
-  ENUM_VALUE16108 = 24;
-  ENUM_VALUE16109 = 2;
-  ENUM_VALUE16110 = 33;
-  ENUM_VALUE16111 = 34;
-  ENUM_VALUE16112 = 545;
-  ENUM_VALUE16113 = 8721;
-  ENUM_VALUE16114 = 8723;
-  ENUM_VALUE16115 = 8724;
-  ENUM_VALUE16116 = 546;
-  ENUM_VALUE16117 = 8739;
-  ENUM_VALUE16118 = 8740;
-  ENUM_VALUE16119 = 547;
-  ENUM_VALUE16120 = 548;
-  ENUM_VALUE16121 = 549;
-  ENUM_VALUE16122 = 550;
-  ENUM_VALUE16123 = 551;
-  ENUM_VALUE16124 = 552;
-  ENUM_VALUE16125 = 553;
-  ENUM_VALUE16126 = 35;
-  ENUM_VALUE16127 = 36;
-  ENUM_VALUE16128 = 37;
-  ENUM_VALUE16129 = 593;
-  ENUM_VALUE16130 = 594;
-  ENUM_VALUE16131 = 595;
-  ENUM_VALUE16132 = 596;
-  ENUM_VALUE16133 = 597;
-  ENUM_VALUE16134 = 38;
-  ENUM_VALUE16135 = 609;
-  ENUM_VALUE16136 = 610;
-  ENUM_VALUE16137 = 617;
-  ENUM_VALUE16138 = 614;
-  ENUM_VALUE16139 = 615;
-  ENUM_VALUE16140 = 616;
-  ENUM_VALUE16141 = 618;
-  ENUM_VALUE16142 = 620;
-  ENUM_VALUE16143 = 9937;
-  ENUM_VALUE16144 = 9938;
-  ENUM_VALUE16145 = 9939;
-  ENUM_VALUE16146 = 9940;
-  ENUM_VALUE16147 = 9941;
-  ENUM_VALUE16148 = 39;
-  ENUM_VALUE16149 = 40;
-  ENUM_VALUE16150 = 41;
-  ENUM_VALUE16151 = 42;
-  ENUM_VALUE16152 = 43;
-  ENUM_VALUE16153 = 44;
-  ENUM_VALUE16154 = 45;
-  ENUM_VALUE16155 = 11793;
-  ENUM_VALUE16156 = 3;
-  ENUM_VALUE16157 = 49;
-  ENUM_VALUE16158 = 50;
-  ENUM_VALUE16159 = 51;
-  ENUM_VALUE16160 = 817;
-  ENUM_VALUE16161 = 818;
-  ENUM_VALUE16162 = 819;
-  ENUM_VALUE16163 = 52;
-  ENUM_VALUE16164 = 833;
-  ENUM_VALUE16165 = 53;
-  ENUM_VALUE16166 = 54;
-  ENUM_VALUE16167 = 4;
-  ENUM_VALUE16168 = 1041;
-  ENUM_VALUE16169 = 16657;
-  ENUM_VALUE16170 = 16658;
-  ENUM_VALUE16171 = 16659;
-  ENUM_VALUE16172 = 16660;
-  ENUM_VALUE16173 = 16661;
-  ENUM_VALUE16174 = 1042;
-  ENUM_VALUE16175 = 16673;
-  ENUM_VALUE16176 = 1043;
-  ENUM_VALUE16177 = 16689;
-  ENUM_VALUE16178 = 16690;
-  ENUM_VALUE16179 = 16691;
-  ENUM_VALUE16180 = 16692;
-  ENUM_VALUE16181 = 16693;
-  ENUM_VALUE16182 = 16694;
-  ENUM_VALUE16183 = 16695;
-  ENUM_VALUE16184 = 1044;
-  ENUM_VALUE16185 = 16705;
-  ENUM_VALUE16186 = 16706;
-  ENUM_VALUE16187 = 16707;
-  ENUM_VALUE16188 = 16708;
-  ENUM_VALUE16189 = 16709;
-  ENUM_VALUE16190 = 16710;
-  ENUM_VALUE16191 = 16711;
-  ENUM_VALUE16192 = 16712;
-  ENUM_VALUE16193 = 16713;
-  ENUM_VALUE16194 = 1046;
-  ENUM_VALUE16195 = 16737;
-  ENUM_VALUE16196 = 1047;
-  ENUM_VALUE16197 = 16753;
-  ENUM_VALUE16198 = 268049;
-  ENUM_VALUE16199 = 268050;
-  ENUM_VALUE16200 = 268051;
-  ENUM_VALUE16201 = 268052;
-  ENUM_VALUE16202 = 1048;
-  ENUM_VALUE16203 = 16769;
-  ENUM_VALUE16204 = 16770;
-  ENUM_VALUE16205 = 16771;
-  ENUM_VALUE16206 = 16772;
-  ENUM_VALUE16207 = 16773;
-  ENUM_VALUE16208 = 1049;
-  ENUM_VALUE16209 = 1056;
-  ENUM_VALUE16210 = 1058;
-  ENUM_VALUE16211 = 1059;
-  ENUM_VALUE16212 = 1060;
-  ENUM_VALUE16213 = 1061;
-  ENUM_VALUE16214 = 5;
-  ENUM_VALUE16215 = 6;
-  ENUM_VALUE16216 = 97;
-  ENUM_VALUE16217 = 98;
-  ENUM_VALUE16218 = 99;
-  ENUM_VALUE16219 = 100;
-  ENUM_VALUE16220 = 101;
-  ENUM_VALUE16221 = 102;
-  ENUM_VALUE16222 = 103;
-  ENUM_VALUE16223 = 104;
-  ENUM_VALUE16224 = 105;
-  ENUM_VALUE16225 = 106;
-  ENUM_VALUE16226 = 108;
-  ENUM_VALUE16227 = 1729;
-  ENUM_VALUE16228 = 1730;
-  ENUM_VALUE16229 = 1731;
-  ENUM_VALUE16230 = 7;
-  ENUM_VALUE16231 = 8;
-  ENUM_VALUE16232 = 9;
-  ENUM_VALUE16233 = 10;
-  ENUM_VALUE16234 = 161;
-  ENUM_VALUE16235 = 2577;
-  ENUM_VALUE16236 = 41233;
-  ENUM_VALUE16237 = 41234;
-  ENUM_VALUE16238 = 2578;
-  ENUM_VALUE16239 = 2579;
-  ENUM_VALUE16240 = 41265;
-  ENUM_VALUE16241 = 2580;
-  ENUM_VALUE16242 = 2581;
-  ENUM_VALUE16243 = 41297;
-  ENUM_VALUE16244 = 41298;
-  ENUM_VALUE16245 = 41299;
-  ENUM_VALUE16246 = 41300;
-  ENUM_VALUE16247 = 2582;
-  ENUM_VALUE16248 = 2583;
-  ENUM_VALUE16249 = 2584;
-  ENUM_VALUE16250 = 162;
-  ENUM_VALUE16251 = 2593;
-  ENUM_VALUE16252 = 41489;
-  ENUM_VALUE16253 = 663825;
-  ENUM_VALUE16254 = 663826;
-  ENUM_VALUE16255 = 41490;
-  ENUM_VALUE16256 = 41491;
-  ENUM_VALUE16257 = 41492;
-  ENUM_VALUE16258 = 663873;
-  ENUM_VALUE16259 = 2594;
-  ENUM_VALUE16260 = 41505;
-  ENUM_VALUE16261 = 41506;
-  ENUM_VALUE16262 = 41507;
-  ENUM_VALUE16263 = 2595;
-  ENUM_VALUE16264 = 41521;
-  ENUM_VALUE16265 = 41522;
-  ENUM_VALUE16266 = 41523;
-  ENUM_VALUE16267 = 41524;
-  ENUM_VALUE16268 = 41525;
-  ENUM_VALUE16269 = 664401;
-  ENUM_VALUE16270 = 664402;
-  ENUM_VALUE16271 = 41526;
-  ENUM_VALUE16272 = 41527;
-  ENUM_VALUE16273 = 2596;
-  ENUM_VALUE16274 = 2597;
-  ENUM_VALUE16275 = 2598;
-  ENUM_VALUE16276 = 41569;
-  ENUM_VALUE16277 = 41570;
-  ENUM_VALUE16278 = 41571;
-  ENUM_VALUE16279 = 41572;
-  ENUM_VALUE16280 = 41573;
-  ENUM_VALUE16281 = 665169;
-  ENUM_VALUE16282 = 665170;
-  ENUM_VALUE16283 = 665171;
-  ENUM_VALUE16284 = 665172;
-  ENUM_VALUE16285 = 2599;
-  ENUM_VALUE16286 = 2600;
-  ENUM_VALUE16287 = 2601;
-  ENUM_VALUE16288 = 2603;
-  ENUM_VALUE16289 = 2604;
-  ENUM_VALUE16290 = 163;
-  ENUM_VALUE16291 = 2608;
-  ENUM_VALUE16292 = 2609;
-  ENUM_VALUE16293 = 2610;
-  ENUM_VALUE16294 = 2611;
-  ENUM_VALUE16295 = 2612;
-  ENUM_VALUE16296 = 164;
-  ENUM_VALUE16297 = 2625;
-  ENUM_VALUE16298 = 2626;
-  ENUM_VALUE16299 = 42017;
-  ENUM_VALUE16300 = 42018;
-  ENUM_VALUE16301 = 42019;
-  ENUM_VALUE16302 = 2627;
-  ENUM_VALUE16303 = 2628;
-  ENUM_VALUE16304 = 165;
-  ENUM_VALUE16305 = 2641;
-  ENUM_VALUE16306 = 42257;
-  ENUM_VALUE16307 = 42258;
-  ENUM_VALUE16308 = 2642;
-  ENUM_VALUE16309 = 2643;
-  ENUM_VALUE16310 = 2644;
-  ENUM_VALUE16311 = 2646;
-  ENUM_VALUE16312 = 2647;
-  ENUM_VALUE16313 = 42353;
-  ENUM_VALUE16314 = 2648;
-  ENUM_VALUE16315 = 2649;
-  ENUM_VALUE16316 = 2650;
-  ENUM_VALUE16317 = 2651;
-  ENUM_VALUE16318 = 2652;
-  ENUM_VALUE16319 = 2653;
-  ENUM_VALUE16320 = 2654;
-  ENUM_VALUE16321 = 42481;
-  ENUM_VALUE16322 = 42482;
-  ENUM_VALUE16323 = 42483;
-  ENUM_VALUE16324 = 166;
-  ENUM_VALUE16325 = 2657;
-  ENUM_VALUE16326 = 2658;
-  ENUM_VALUE16327 = 42529;
-  ENUM_VALUE16328 = 2659;
-  ENUM_VALUE16329 = 2660;
-  ENUM_VALUE16330 = 2661;
-  ENUM_VALUE16331 = 2662;
-  ENUM_VALUE16332 = 2663;
-  ENUM_VALUE16333 = 42609;
-  ENUM_VALUE16334 = 2664;
-  ENUM_VALUE16335 = 2665;
-  ENUM_VALUE16336 = 42753;
-  ENUM_VALUE16337 = 42754;
-  ENUM_VALUE16338 = 42755;
-  ENUM_VALUE16339 = 11;
-  ENUM_VALUE16340 = 177;
-  ENUM_VALUE16341 = 2833;
-  ENUM_VALUE16342 = 179;
-  ENUM_VALUE16343 = 180;
-  ENUM_VALUE16344 = 2881;
-  ENUM_VALUE16345 = 182;
-  ENUM_VALUE16346 = 183;
-  ENUM_VALUE16347 = 12;
-  ENUM_VALUE16348 = 3089;
-  ENUM_VALUE16349 = 194;
-  ENUM_VALUE16350 = 195;
-  ENUM_VALUE16351 = 196;
-  ENUM_VALUE16352 = 198;
-  ENUM_VALUE16353 = 3169;
-  ENUM_VALUE16354 = 199;
-  ENUM_VALUE16355 = 200;
-  ENUM_VALUE16356 = 208;
-  ENUM_VALUE16357 = 3329;
-  ENUM_VALUE16358 = 3330;
-  ENUM_VALUE16359 = 3331;
-  ENUM_VALUE16360 = 209;
-  ENUM_VALUE16361 = 210;
-  ENUM_VALUE16362 = 211;
-  ENUM_VALUE16363 = 3377;
-  ENUM_VALUE16364 = 3378;
-  ENUM_VALUE16365 = 3379;
-  ENUM_VALUE16366 = 3380;
-  ENUM_VALUE16367 = 3381;
-  ENUM_VALUE16368 = 865809;
-  ENUM_VALUE16369 = 865810;
-  ENUM_VALUE16370 = 865811;
-  ENUM_VALUE16371 = 865812;
-  ENUM_VALUE16372 = 865813;
-  ENUM_VALUE16373 = 865814;
-  ENUM_VALUE16374 = 865815;
-  ENUM_VALUE16375 = 865816;
-  ENUM_VALUE16376 = 865817;
-  ENUM_VALUE16377 = 865818;
-  ENUM_VALUE16378 = 865819;
-  ENUM_VALUE16379 = 865820;
-  ENUM_VALUE16380 = 865821;
-  ENUM_VALUE16381 = 865822;
-  ENUM_VALUE16382 = 865823;
-  ENUM_VALUE16383 = 865824;
-  ENUM_VALUE16384 = 865825;
-  ENUM_VALUE16385 = 865826;
-  ENUM_VALUE16386 = 865827;
-  ENUM_VALUE16387 = 865828;
-  ENUM_VALUE16388 = 865829;
-  ENUM_VALUE16389 = 212;
-  ENUM_VALUE16390 = 3393;
-  ENUM_VALUE16391 = 3394;
-  ENUM_VALUE16392 = 3395;
-  ENUM_VALUE16393 = 213;
-  ENUM_VALUE16394 = 214;
-  ENUM_VALUE16395 = 215;
-  ENUM_VALUE16396 = 3441;
-  ENUM_VALUE16397 = 3442;
-  ENUM_VALUE16398 = 216;
-  ENUM_VALUE16399 = 217;
-  ENUM_VALUE16400 = 3473;
-  ENUM_VALUE16401 = 3474;
-  ENUM_VALUE16402 = 3475;
-  ENUM_VALUE16403 = 254;
-  ENUM_VALUE16404 = 255;
-}
-
-enum Enum16553 {
-  ENUM_VALUE16554 = 0;
-  ENUM_VALUE16555 = 1;
-  ENUM_VALUE16556 = 2;
-  ENUM_VALUE16557 = 3;
-  ENUM_VALUE16558 = 4;
-  ENUM_VALUE16559 = 5;
-  ENUM_VALUE16560 = 6;
-  ENUM_VALUE16561 = 7;
-  ENUM_VALUE16562 = 8;
-  ENUM_VALUE16563 = 9;
-}
-
-enum Enum16728 {
-  ENUM_VALUE16729 = 1;
-  ENUM_VALUE16730 = 2;
-  ENUM_VALUE16731 = 3;
-}
-
-enum Enum16732 {
-  ENUM_VALUE16733 = 1;
-  ENUM_VALUE16734 = 2;
-  ENUM_VALUE16735 = 3;
-  ENUM_VALUE16736 = 4;
-  ENUM_VALUE16737 = 5;
-}
-
-enum Enum16738 {
-  ENUM_VALUE16739 = 1;
-  ENUM_VALUE16740 = 2;
-  ENUM_VALUE16741 = 3;
-  ENUM_VALUE16742 = 4;
-  ENUM_VALUE16743 = 5;
-  ENUM_VALUE16744 = 6;
-  ENUM_VALUE16745 = 7;
-}
-
-enum Enum16698 {
-  ENUM_VALUE16699 = -1;
-  ENUM_VALUE16700 = 100;
-  ENUM_VALUE16701 = 2;
-  ENUM_VALUE16702 = 0;
-  ENUM_VALUE16703 = 1;
-  ENUM_VALUE16704 = 4;
-  ENUM_VALUE16705 = 11;
-  ENUM_VALUE16706 = 12;
-  ENUM_VALUE16707 = 3;
-  ENUM_VALUE16708 = 5;
-  ENUM_VALUE16709 = 6;
-  ENUM_VALUE16710 = 7;
-  ENUM_VALUE16711 = 8;
-  ENUM_VALUE16712 = 9;
-  ENUM_VALUE16713 = 10;
-  ENUM_VALUE16714 = 13;
-  ENUM_VALUE16715 = 14;
-  ENUM_VALUE16716 = 15;
-  ENUM_VALUE16717 = 16;
-  ENUM_VALUE16718 = 18;
-  ENUM_VALUE16719 = 17;
-  ENUM_VALUE16720 = 19;
-  ENUM_VALUE16721 = 20;
-}
-
-enum Enum16819 {
-  ENUM_VALUE16820 = 0;
-  ENUM_VALUE16821 = 1;
-  ENUM_VALUE16822 = 2;
-  ENUM_VALUE16823 = 3;
-  ENUM_VALUE16824 = 4;
-  ENUM_VALUE16825 = 5;
-}
-
-enum Enum16925 {
-  ENUM_VALUE16926 = 0;
-  ENUM_VALUE16927 = 1;
-  ENUM_VALUE16928 = 2;
-  ENUM_VALUE16929 = 3;
-  ENUM_VALUE16930 = 4;
-  ENUM_VALUE16931 = 5;
-  ENUM_VALUE16932 = 6;
-  ENUM_VALUE16933 = 7;
-  ENUM_VALUE16934 = 8;
-  ENUM_VALUE16935 = 9;
-  ENUM_VALUE16936 = 10;
-  ENUM_VALUE16937 = 11;
-  ENUM_VALUE16938 = 12;
-  ENUM_VALUE16939 = 13;
-}
-
-enum Enum22854 {
-  ENUM_VALUE22855 = 0;
-  ENUM_VALUE22856 = 1;
-}
-
-enum Enum24361 {
-  ENUM_VALUE24362 = 0;
-  ENUM_VALUE24363 = 1;
-  ENUM_VALUE24364 = 2;
-  ENUM_VALUE24365 = 3;
-}
-
-enum Enum16891 {
-  ENUM_VALUE16892 = 0;
-  ENUM_VALUE16893 = 1;
-  ENUM_VALUE16894 = 2;
-  ENUM_VALUE16895 = 3;
-  ENUM_VALUE16896 = 4;
-  ENUM_VALUE16897 = 5;
-  ENUM_VALUE16898 = 6;
-  ENUM_VALUE16899 = 7;
-  ENUM_VALUE16900 = 8;
-  ENUM_VALUE16901 = 9;
-  ENUM_VALUE16902 = 10;
-  ENUM_VALUE16903 = 11;
-  ENUM_VALUE16904 = 12;
-  ENUM_VALUE16905 = 13;
-  ENUM_VALUE16906 = 14;
-  ENUM_VALUE16907 = 15;
-  ENUM_VALUE16908 = 16;
-  ENUM_VALUE16909 = 17;
-  ENUM_VALUE16910 = 18;
-  ENUM_VALUE16911 = 19;
-  ENUM_VALUE16912 = 20;
-  ENUM_VALUE16913 = 21;
-  ENUM_VALUE16914 = 22;
-  ENUM_VALUE16915 = 23;
-  ENUM_VALUE16916 = 24;
-  ENUM_VALUE16917 = 25;
-  ENUM_VALUE16918 = 26;
-  ENUM_VALUE16919 = 27;
-  ENUM_VALUE16920 = 28;
-  ENUM_VALUE16921 = 29;
-  ENUM_VALUE16922 = 30;
-  ENUM_VALUE16923 = 31;
-}
-
-enum Enum27361 {
-  ENUM_VALUE27362 = 0;
-  ENUM_VALUE27363 = 1;
-  ENUM_VALUE27364 = 2;
-  ENUM_VALUE27365 = 3;
-  ENUM_VALUE27366 = 4;
-}
-
-enum Enum33960 {
-  ENUM_VALUE33961 = 0;
-  ENUM_VALUE33962 = 1;
-  ENUM_VALUE33963 = 2;
-  ENUM_VALUE33964 = 3;
-  ENUM_VALUE33965 = 4;
-  ENUM_VALUE33966 = 5;
-  ENUM_VALUE33967 = 6;
-}
-
-enum Enum34388 {
-  ENUM_VALUE34389 = 1;
-}
-
-enum Enum35477 {
-  ENUM_VALUE35478 = 4;
-  ENUM_VALUE35479 = 3;
-  ENUM_VALUE35480 = 2;
-  ENUM_VALUE35481 = 1;
-  ENUM_VALUE35482 = 0;
-}
-
-enum Enum35507 {
-  ENUM_VALUE35508 = 0;
-  ENUM_VALUE35509 = 1;
-  ENUM_VALUE35510 = 2;
-  ENUM_VALUE35511 = 3;
-  ENUM_VALUE35512 = 4;
-  ENUM_VALUE35513 = 5;
-  ENUM_VALUE35514 = 6;
-  ENUM_VALUE35515 = 7;
-  ENUM_VALUE35516 = 8;
-  ENUM_VALUE35517 = 9;
-}
-
-enum Enum36860 {
-  ENUM_VALUE36861 = 0;
-  ENUM_VALUE36862 = 1;
-  ENUM_VALUE36863 = 2;
-  ENUM_VALUE36864 = 3;
-  ENUM_VALUE36865 = 4;
-  ENUM_VALUE36866 = 5;
-  ENUM_VALUE36867 = 6;
-  ENUM_VALUE36868 = 7;
-}
-
-enum Enum36890 {
-  ENUM_VALUE36891 = 0;
-  ENUM_VALUE36892 = 1;
-}
-

+ 0 - 453
benchmarks/datasets/google_message4/benchmark_message4.proto

@@ -1,453 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message4/benchmark_message4_1.proto";
-import "datasets/google_message4/benchmark_message4_2.proto";
-import "datasets/google_message4/benchmark_message4_3.proto";
-package benchmarks.google_message4;
-
-option cc_enable_arenas = true;
-
-message GoogleMessage4 {
-  optional int32 field37503 = 1;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37504 = 2;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37505 = 3;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37506 = 4;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37507 = 5;
-  optional .benchmarks.google_message4.Message37489 field37508 = 6;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37509 = 7;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37510 = 8;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37511 = 9;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37512 = 10;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37513 = 11;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37514 = 12;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37515 = 13;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37516 = 14;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37517 = 15;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37518 = 16;
-}
-
-message Message37489 {
-  optional .benchmarks.google_message4.Message2517 field37534 = 3;
-  optional .benchmarks.google_message4.Message7330 field37535 = 4;
-  optional .benchmarks.google_message4.Message8815 field37536 = 6;
-  optional .benchmarks.google_message4.Message8817 field37537 = 7;
-  optional .benchmarks.google_message4.Message8835 field37538 = 8;
-  optional .benchmarks.google_message4.Message8848 field37539 = 9;
-  optional .benchmarks.google_message4.Message8856 field37540 = 11;
-  optional .benchmarks.google_message4.Message12717 field37541 = 15;
-  optional .benchmarks.google_message4.Message12748 field37542 = 20;
-  optional .benchmarks.google_message4.Message7319 field37543 = 22;
-  optional .benchmarks.google_message4.Message12908 field37544 = 24;
-  optional .benchmarks.google_message4.Message12910 field37545 = 25;
-  optional .benchmarks.google_message4.Message12960 field37546 = 30;
-  optional .benchmarks.google_message4.Message176 field37547 = 33;
-  optional .benchmarks.google_message4.Message13000 field37548 = 34;
-  optional .benchmarks.google_message4.Message13035 field37549 = 35;
-  optional .benchmarks.google_message4.Message37331 field37550 = 36;
-  optional .benchmarks.google_message4.Message37329 field37551 = 37;
-  optional .benchmarks.google_message4.Message37327 field37552 = 38;
-  optional .benchmarks.google_message4.Message37333 field37553 = 39;
-  optional .benchmarks.google_message4.Message37335 field37554 = 40;
-}
-
-message Message7319 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7321 = 1;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7322 = 7;
-}
-
-message Message12717 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12719 = 1;
-  optional string field12720 = 2;
-  optional uint32 field12721 = 3;
-  optional .benchmarks.google_message4.Message11976 field12722 = 4;
-  repeated .benchmarks.google_message4.Message11948 field12723 = 5;
-  optional .benchmarks.google_message4.Message11947 field12724 = 6;
-  optional .benchmarks.google_message4.Message12687 field12725 = 7;
-  repeated .benchmarks.google_message4.Message11948 field12726 = 8;
-  optional int64 field12727 = 9;
-}
-
-message Message37331 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37367 = 4;
-  required .benchmarks.google_message4.Message37326 field37368 = 1;
-  required int64 field37369 = 2;
-  required bytes field37370 = 3;
-}
-
-message Message8815 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8819 = 1;
-  repeated .benchmarks.google_message4.Message8768 field8820 = 2;
-  optional bool field8821 = 3;
-}
-
-message Message7330 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7332 = 1;
-  optional .benchmarks.google_message4.Message3069 field7333 = 2;
-  optional .benchmarks.google_message4.Message7320 field7334 = 3;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7335 = 4;
-  optional bool field7336 = 5;
-  optional int64 field7337 = 6;
-}
-
-message Message12960 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12962 = 1;
-  optional .benchmarks.google_message4.Message12948 field12963 = 2;
-}
-
-message Message176 {
-  required string field408 = 1;
-  optional int32 field409 = 4;
-  optional string field410 = 50;
-  optional int32 field411 = 2;
-  optional uint64 field412 = 47;
-  optional string field413 = 56;
-  optional int32 field414 = 24;
-  optional string field415 = 21;
-  optional bytes field416 = 3;
-  optional string field417 = 57;
-  optional int32 field418 = 51;
-  optional float field419 = 7;
-  optional bool field420 = 5;
-  optional bool field421 = 28;
-  optional int32 field422 = 6;
-  repeated int32 field423 = 40;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field424 = 41;
-  optional bool field425 = 25;
-  optional uint64 field426 = 26;
-  optional int32 field427 = 38;
-  optional bytes field428 = 15;
-  optional bytes field429 = 55;
-  optional bytes field430 = 16;
-  optional bytes field431 = 23;
-  optional bool field432 = 33;
-  optional bytes field433 = 31;
-  optional bytes field434 = 32;
-  optional int32 field435 = 36;
-  optional uint64 field436 = 17;
-  optional int32 field437 = 45;
-  optional uint64 field438 = 18;
-  optional string field439 = 46;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field440 = 64;
-  optional int32 field441 = 39;
-  optional uint64 field442 = 48;
-  optional bytes field443 = 19;
-  optional bytes field444 = 42;
-  optional bytes field445 = 43;
-  optional string field446 = 44;
-  optional string field447 = 49;
-  optional int64 field448 = 20;
-  optional bool field449 = 53;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field450 = 54;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field451 = 22;
-  optional .benchmarks.google_message4.UnusedEnum field452 = 27;
-  optional int32 field453 = 29;
-  optional int32 field454 = 30;
-  optional .benchmarks.google_message4.UnusedEnum field455 = 37;
-  optional .benchmarks.google_message4.UnusedEnum field456 = 34;
-  optional int32 field457 = 35;
-  repeated group Message178 = 101 {
-  }
-  optional bool field459 = 52;
-  optional uint64 field460 = 58;
-  optional uint64 field461 = 59;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field462 = 60;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field463 = 61;
-  optional .benchmarks.google_message4.UnusedEnum field464 = 62;
-  repeated string field465 = 63;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field466 = 65;
-}
-
-message Message8817 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8825 = 1;
-  repeated .benchmarks.google_message4.Message8768 field8826 = 2;
-  optional string field8827 = 3;
-}
-
-message Message8835 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8837 = 1;
-  repeated string field8838 = 2;
-  optional .benchmarks.google_message4.UnusedEnum field8839 = 3;
-}
-
-message Message37333 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37372 = 3;
-  required .benchmarks.google_message4.Message37326 field37373 = 1;
-  optional uint64 field37374 = 2;
-}
-
-message Message13000 {
-  optional int64 field13015 = 1;
-  repeated .benchmarks.google_message4.Message12979 field13016 = 2;
-}
-
-message Message37335 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37376 = 4;
-  required .benchmarks.google_message4.Message37326 field37377 = 1;
-  required .benchmarks.google_message4.Message37173 field37378 = 2;
-  optional uint64 field37379 = 3;
-}
-
-message Message8848 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8850 = 1;
-  optional string field8851 = 2;
-  optional bytes field8852 = 3;
-}
-
-message Message13035 {
-  optional int64 field13058 = 1;
-  repeated int64 field13059 = 2;
-}
-
-message Message8856 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8858 = 1;
-  optional string field8859 = 2;
-}
-
-message Message12908 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12912 = 1;
-  optional string field12913 = 2;
-  optional .benchmarks.google_message4.Message12799 field12914 = 3;
-  optional int64 field12915 = 4;
-  optional .benchmarks.google_message4.Message3804 field12916 = 5;
-  optional .benchmarks.google_message4.Message12870 field12917 = 6;
-}
-
-message Message12910 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12920 = 1;
-  optional .benchmarks.google_message4.Message12818 field12921 = 2;
-  repeated .benchmarks.google_message4.Message12903 field12922 = 3;
-}
-
-message Message37327 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37347 = 11;
-  required .benchmarks.google_message4.Message37326 field37348 = 1;
-  optional bool field37349 = 2;
-  optional bool field37350 = 3;
-  optional bool field37351 = 4;
-  optional bool field37352 = 5;
-  optional bool field37353 = 6;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37354 = 7;
-  optional uint64 field37355 = 8;
-  optional bool field37356 = 9;
-  optional bool field37357 = 10;
-}
-
-message Message37329 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37359 = 6;
-  required .benchmarks.google_message4.Message37326 field37360 = 1;
-  required int64 field37361 = 2;
-  required int64 field37362 = 3;
-  optional bool field37363 = 4;
-}
-
-message Message2517 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field2519 = 1;
-  optional .benchmarks.google_message4.Message2356 field2520 = 2;
-  optional .benchmarks.google_message4.Message0 field2521 = 3;
-  optional .benchmarks.google_message4.Message2463 field2522 = 4;
-  repeated .benchmarks.google_message4.Message971 field2523 = 5;
-}
-
-message Message12748 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12754 = 1;
-  optional string field12755 = 2;
-  optional string field12756 = 3;
-  optional .benchmarks.google_message4.Enum12735 field12757 = 4;
-}
-
-message Message12687 {
-  repeated .benchmarks.google_message4.Message12686 field12701 = 1;
-}
-
-message Message11948 {
-  optional string field11954 = 1;
-  repeated .benchmarks.google_message4.Message11949 field11955 = 2;
-  optional bool field11956 = 3;
-}
-
-message Message11976 {
-  repeated .benchmarks.google_message4.Message11975 field12002 = 1;
-}
-
-message Message7320 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7323 = 1;
-  optional .benchmarks.google_message4.Message7287 field7324 = 8;
-}
-
-message Message3069 {
-  optional .benchmarks.google_message4.Message3061 field3374 = 1;
-  optional bytes field3375 = 2;
-  repeated group Message3070 = 3 {
-    required .benchmarks.google_message4.Enum3071 field3378 = 4;
-    required bytes field3379 = 5;
-  }
-  extensions 10000 to 536870911;
-}
-
-message Message12948 {
-  repeated .benchmarks.google_message4.Message12949 field12958 = 1;
-}
-
-message Message8768 {
-  optional string field8782 = 1;
-  optional .benchmarks.google_message4.Message8572 field8783 = 2;
-  optional bool field8784 = 3;
-  repeated .benchmarks.google_message4.Message8774 field8785 = 4;
-  optional int64 field8786 = 5;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8787 = 6;
-  optional string field8788 = 7;
-}
-
-message Message12979 {
-  required bytes field12981 = 1;
-  repeated string field12982 = 2;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12983 = 3;
-  optional int64 field12984 = 4;
-  optional string field12985 = 5;
-  optional int32 field12986 = 6;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12987 = 7;
-}
-
-message Message37173 {
-  optional string field37252 = 1;
-  optional int64 field37253 = 2;
-  optional .benchmarks.google_message4.UnusedEnum field37254 = 4;
-  optional bool field37255 = 5;
-  optional bool field37256 = 6;
-  optional bool field37257 = 7;
-  optional string field37258 = 8;
-  optional string field37259 = 9;
-  optional uint32 field37260 = 10;
-  optional fixed32 field37261 = 11;
-  optional string field37262 = 12;
-  optional string field37263 = 13;
-  optional string field37264 = 14;
-  optional int32 field37265 = 15;
-  optional int64 field37266 = 16;
-  optional int64 field37267 = 17;
-  optional int32 field37268 = 18;
-  optional int32 field37269 = 19;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37270 = 20;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37271 = 21;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37272 = 22;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37273 = 23;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field37274 = 24;
-  optional string field37275 = 25;
-  optional bool field37276 = 26;
-}
-
-message Message12799 {
-  required string field12809 = 1;
-  repeated fixed64 field12810 = 2;
-  repeated .benchmarks.google_message4.Message12776 field12811 = 8;
-  repeated int32 field12812 = 4;
-  repeated .benchmarks.google_message4.Message12798 field12813 = 5;
-  required int32 field12814 = 3;
-  optional int32 field12815 = 6;
-  optional .benchmarks.google_message4.Message12797 field12816 = 7;
-}
-
-message Message12870 {
-  required int32 field12879 = 1;
-  optional int32 field12880 = 7;
-  required int32 field12881 = 2;
-  optional uint64 field12882 = 3;
-  optional string field12883 = 2001;
-  optional fixed64 field12884 = 4;
-  repeated fixed64 field12885 = 14;
-  optional int32 field12886 = 9;
-  optional int64 field12887 = 18;
-  repeated .benchmarks.google_message4.Message12870 field12888 = 8;
-  optional int32 field12889 = 5;
-  optional uint64 field12890 = 6;
-  optional int32 field12891 = 10;
-  optional int32 field12892 = 11;
-  optional double field12893 = 12;
-  optional .benchmarks.google_message4.Message12825 field12894 = 13;
-  optional double field12895 = 15;
-  optional string field12896 = 16;
-  optional .benchmarks.google_message4.Enum12871 field12897 = 17;
-  optional int32 field12898 = 19;
-}
-
-message Message3804 {
-  required int64 field3818 = 1;
-  required bool field3819 = 2;
-  repeated .benchmarks.google_message4.Enum3805 field3820 = 4;
-  optional int32 field3821 = 5;
-  optional bool field3822 = 6;
-  optional int64 field3823 = 7;
-  optional .benchmarks.google_message4.Enum3783 field3824 = 8;
-}
-
-message Message12903 {
-  optional string field12905 = 1;
-  optional .benchmarks.google_message4.Message8587 field12906 = 2;
-  repeated .benchmarks.google_message4.Message8590 field12907 = 3;
-}
-
-message Message37326 {
-  required string field37345 = 1;
-  optional string field37346 = 2;
-}
-
-message Message2356 {
-  optional .benchmarks.google_message4.Message1374 field2368 = 121;
-  optional uint64 field2369 = 1;
-  optional int32 field2370 = 2;
-  optional int32 field2371 = 17;
-  required string field2372 = 3;
-  optional int32 field2373 = 7;
-  optional bytes field2374 = 8;
-  optional string field2375 = 4;
-  optional string field2376 = 101;
-  optional int32 field2377 = 102;
-  optional int32 field2378 = 103;
-  optional int32 field2379 = 104;
-  optional int32 field2380 = 113;
-  optional int32 field2381 = 114;
-  optional int32 field2382 = 115;
-  optional int32 field2383 = 117;
-  optional int32 field2384 = 118;
-  optional int32 field2385 = 119;
-  optional int32 field2386 = 105;
-  optional bytes field2387 = 5;
-  optional group Message2357 = 6 {
-    optional int64 field2399 = 9;
-    optional int32 field2400 = 10;
-    optional int32 field2401 = 11;
-    optional int32 field2402 = 12;
-    optional int32 field2403 = 13;
-    optional int32 field2404 = 116;
-    optional int32 field2405 = 106;
-    required bytes field2406 = 14;
-    optional int32 field2407 = 45;
-    optional int32 field2408 = 112;
-    optional bool field2409 = 122;
-    optional bytes field2410 = 124;
-  }
-  optional string field2389 = 120;
-  optional group Message2358 = 107 {
-  }
-  repeated group Message2359 = 40 {
-  }
-  optional int32 field2392 = 50;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field2393 = 60;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field2394 = 70;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field2395 = 80;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field2396 = 90;
-  optional string field2397 = 100;
-  optional string field2398 = 123;
-}
-
-message Message0 {
-  option message_set_wire_format = true;
-  extensions 4 to 2147483646;
-}
-
-message Message971 {
-  optional string field972 = 1;
-  optional int32 field973 = 2;
-  optional bool field974 = 3;
-}
-

+ 0 - 473
benchmarks/datasets/google_message4/benchmark_message4_1.proto

@@ -1,473 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message4/benchmark_message4_2.proto";
-import "datasets/google_message4/benchmark_message4_3.proto";
-package benchmarks.google_message4;
-
-option cc_enable_arenas = true;
-
-message Message2463 {
-  repeated .benchmarks.google_message4.Message2462 field2498 = 1;
-}
-
-message Message12686 {
-  optional string field12699 = 1;
-  optional .benchmarks.google_message4.Message12685 field12700 = 2;
-}
-
-message Message11949 {
-}
-
-message Message11975 {
-  optional string field11992 = 1;
-  optional int32 field11993 = 2;
-  repeated .benchmarks.google_message4.Message10320 field11994 = 3;
-  optional .benchmarks.google_message4.Message11947 field11995 = 4;
-  optional .benchmarks.google_message4.Message11920 field11996 = 5;
-  optional bool field11997 = 6;
-  repeated string field11998 = 7;
-  optional float field11999 = 8;
-  repeated .benchmarks.google_message4.UnusedEnum field12000 = 9;
-  optional int32 field12001 = 11;
-}
-
-message Message7287 {
-  optional .benchmarks.google_message4.Message6133 field7311 = 1;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7312 = 8;
-  optional string field7313 = 3;
-  optional .benchmarks.google_message4.Message6643 field7314 = 4;
-  optional .benchmarks.google_message4.Enum7288 field7315 = 5;
-  optional bytes field7316 = 6;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7317 = 7;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7318 = 9;
-}
-
-message Message3061 {
-  optional string field3286 = 2;
-  optional int32 field3287 = 77;
-  optional string field3288 = 49;
-  required .benchmarks.google_message4.Message3046 field3289 = 3;
-  optional .benchmarks.google_message4.Message3046 field3290 = 58;
-  optional group Message3062 = 4 {
-    required int32 field3335 = 5;
-    optional int32 field3336 = 6;
-    optional int32 field3337 = 7;
-  }
-  optional .benchmarks.google_message4.Message3060 field3292 = 104;
-  optional int64 field3293 = 32;
-  optional int32 field3294 = 41;
-  optional group Message3063 = 13 {
-    required int32 field3338 = 14;
-    optional .benchmarks.google_message4.Enum2851 field3339 = 18;
-    optional int64 field3340 = 15;
-    optional int64 field3341 = 23;
-  }
-  optional .benchmarks.google_message4.Enum2834 field3296 = 94;
-  optional bool field3297 = 25;
-  optional bool field3298 = 50;
-  optional string field3299 = 89;
-  optional string field3300 = 91;
-  optional string field3301 = 105;
-  optional .benchmarks.google_message4.Message3050 field3302 = 53;
-  optional fixed64 field3303 = 51;
-  optional fixed64 field3304 = 106;
-  optional int32 field3305 = 60;
-  optional string field3306 = 44;
-  optional bytes field3307 = 81;
-  optional string field3308 = 70;
-  optional bytes field3309 = 45;
-  optional .benchmarks.google_message4.Enum2806 field3310 = 71;
-  optional int32 field3311 = 72;
-  optional bytes field3312 = 78;
-  optional int32 field3313 = 20;
-  repeated group Message3064 = 8 {
-    required .benchmarks.google_message4.Enum2602 field3342 = 9;
-    optional int32 field3343 = 92;
-    optional string field3344 = 10;
-    optional bytes field3345 = 11;
-    optional int32 field3346 = 12;
-    optional .benchmarks.google_message4.Message3060 field3347 = 98;
-    optional .benchmarks.google_message4.UnusedEmptyMessage field3348 = 82;
-    optional .benchmarks.google_message4.Message3050 field3349 = 80;
-    optional fixed64 field3350 = 52;
-    optional int32 field3351 = 33;
-    optional string field3352 = 42;
-    optional string field3353 = 69;
-    optional bytes field3354 = 43;
-    optional .benchmarks.google_message4.Enum2806 field3355 = 73;
-    optional int32 field3356 = 74;
-    optional int32 field3357 = 90;
-    optional bytes field3358 = 79;
-    optional int32 field3359 = 19;
-    optional .benchmarks.google_message4.Enum2834 field3360 = 95;
-  }
-  optional .benchmarks.google_message4.UnusedEmptyMessage field3315 = 39;
-  optional int32 field3316 = 76;
-  optional group Message3065 = 63 {
-  }
-  optional .benchmarks.google_message4.Enum2806 field3318 = 54;
-  optional int32 field3319 = 46;
-  repeated string field3320 = 24;
-  optional fixed32 field3321 = 38;
-  optional bytes field3322 = 99;
-  optional fixed64 field3323 = 1;
-  optional fixed64 field3324 = 97;
-  repeated .benchmarks.google_message4.Message3040 field3325 = 16;
-  repeated .benchmarks.google_message4.Message3041 field3326 = 61;
-  optional group Message3066 = 21 {
-    optional int32 field3366 = 22;
-    optional int32 field3367 = 55;
-    optional int32 field3368 = 88;
-    optional int32 field3369 = 56;
-    optional int32 field3370 = 75;
-    optional int32 field3371 = 57;
-    optional .benchmarks.google_message4.UnusedEmptyMessage field3372 = 85;
-    optional .benchmarks.google_message4.UnusedEmptyMessage field3373 = 96;
-  }
-  optional .benchmarks.google_message4.UnusedEmptyMessage field3328 = 47;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field3329 = 48;
-  optional fixed64 field3330 = 40;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field3331 = 86;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field3332 = 59;
-  optional int32 field3333 = 17;
-}
-
-message Message12949 {
-}
-
-message Message8572 {
-  optional bytes field8647 = 1;
-  optional bytes field8648 = 3;
-  optional .benchmarks.google_message4.Message3886 field8649 = 4;
-  optional .benchmarks.google_message4.Message3919 field8650 = 57;
-  optional bool field8651 = 5;
-  optional int32 field8652 = 6;
-  optional int32 field8653 = 49;
-  optional .benchmarks.google_message4.Message7905 field8654 = 7;
-  optional int32 field8655 = 10;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8656 = 11;
-  optional bool field8657 = 35;
-  optional bytes field8658 = 12;
-  optional string field8659 = 14;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8660 = 13;
-  optional bytes field8661 = 15;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8662 = 17;
-  optional int32 field8663 = 18;
-  optional int32 field8664 = 19;
-  optional bool field8665 = 20;
-  optional .benchmarks.google_message4.Enum3476 field8666 = 31;
-  optional bool field8667 = 36;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8668 = 39;
-  optional bytes field8669 = 22;
-  optional int32 field8670 = 24;
-  optional .benchmarks.google_message4.Message3052 field8671 = 25;
-  optional bytes field8672 = 26;
-  optional bytes field8673 = 28;
-  optional int32 field8674 = 29;
-  optional bytes field8675 = 30;
-  optional bytes field8676 = 32;
-  optional string field8677 = 33;
-  optional int32 field8678 = 34;
-  optional int32 field8679 = 37;
-  optional double field8680 = 38;
-  optional double field8681 = 42;
-  optional .benchmarks.google_message4.Message3922 field8682 = 40;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8683 = 43;
-  optional int64 field8684 = 44;
-  optional .benchmarks.google_message4.Message7929 field8685 = 45;
-  optional uint64 field8686 = 46;
-  optional uint32 field8687 = 48;
-  optional .benchmarks.google_message4.Message7843 field8688 = 47;
-  optional .benchmarks.google_message4.Message7864 field8689 = 50;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8690 = 52;
-  optional bool field8691 = 58;
-  optional bool field8692 = 54;
-  optional string field8693 = 55;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8694 = 41;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field8695 = 53;
-  optional .benchmarks.google_message4.Message8575 field8696 = 61;
-}
-
-message Message8774 {
-  optional string field8810 = 1;
-  optional string field8811 = 2;
-  optional string field8812 = 3;
-  optional string field8813 = 4;
-  optional string field8814 = 5;
-}
-
-message Message12776 {
-  optional string field12786 = 1;
-  optional fixed64 field12787 = 11;
-  optional int32 field12788 = 6;
-  optional int32 field12789 = 13;
-  optional int32 field12790 = 14;
-  optional int32 field12791 = 15;
-  optional int32 field12792 = 16;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12793 = 8;
-  optional .benchmarks.google_message4.Message12774 field12794 = 10;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field12795 = 12;
-  extensions 2 to 2;
-  extensions 3 to 3;
-  extensions 4 to 4;
-  extensions 5 to 5;
-  extensions 7 to 7;
-  extensions 9 to 9;
-}
-
-message Message12798 {
-  optional int32 field12805 = 1;
-  optional int32 field12806 = 2;
-  optional .benchmarks.google_message4.Message12774 field12807 = 6;
-  optional bool field12808 = 7;
-}
-
-message Message12797 {
-  optional .benchmarks.google_message4.Message12796 field12802 = 1;
-  repeated .benchmarks.google_message4.Message12796 field12803 = 2;
-  optional string field12804 = 3;
-}
-
-message Message12825 {
-  repeated .benchmarks.google_message4.Message12818 field12862 = 1;
-  optional int32 field12863 = 2;
-  optional .benchmarks.google_message4.Message12819 field12864 = 3;
-  optional .benchmarks.google_message4.Message12820 field12865 = 4;
-  optional int32 field12866 = 5;
-  repeated .benchmarks.google_message4.Message12821 field12867 = 6;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field12868 = 7;
-}
-
-message Message8590 {
-}
-
-message Message8587 {
-}
-
-message Message1374 {
-  required string field1375 = 1;
-  optional string field1376 = 2;
-}
-
-message Message2462 {
-  required bytes field2496 = 1;
-  required double field2497 = 2;
-}
-
-message Message12685 {
-  repeated string field12692 = 1;
-  repeated string field12693 = 2;
-  optional int64 field12694 = 3;
-  optional uint32 field12695 = 4;
-  repeated string field12696 = 5;
-  optional string field12697 = 6;
-  optional string field12698 = 7;
-}
-
-message Message10320 {
-  optional .benchmarks.google_message4.Enum10335 field10347 = 1;
-  repeated .benchmarks.google_message4.Message10319 field10348 = 2;
-  optional int32 field10349 = 3;
-  optional int32 field10350 = 4;
-  optional int32 field10351 = 5;
-  optional int32 field10352 = 6;
-  optional .benchmarks.google_message4.Enum10337 field10353 = 7;
-}
-
-message Message11947 {
-  optional uint32 field11951 = 1;
-  optional bool field11952 = 2;
-  optional int32 field11953 = 3;
-}
-
-message Message11920 {
-  optional .benchmarks.google_message4.Enum11901 field11945 = 1;
-  optional .benchmarks.google_message4.UnusedEnum field11946 = 2;
-}
-
-message Message6643 {
-  optional .benchmarks.google_message4.UnusedEmptyMessage field6683 = 3;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field6684 = 4;
-  optional double field6685 = 5;
-  optional double field6686 = 6;
-  optional int32 field6687 = 1;
-  optional int32 field6688 = 2;
-  optional double field6689 = 9;
-  optional bytes field6690 = 10;
-  optional int32 field6691 = 11;
-  optional bool field6692 = 12;
-  optional bool field6693 = 13;
-  optional .benchmarks.google_message4.Message6578 field6694 = 15;
-  optional .benchmarks.google_message4.UnusedEnum field6695 = 16;
-  optional int64 field6696 = 17;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field6697 = 22;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field6698 = 19;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field6699 = 20;
-  optional int32 field6700 = 21;
-}
-
-message Message6133 {
-  optional .benchmarks.google_message4.Message4016 field6173 = 12;
-  optional double field6174 = 16;
-  required string field6175 = 1;
-  required string field6176 = 2;
-  required string field6177 = 3;
-  optional string field6178 = 4;
-  optional string field6179 = 8;
-  repeated .benchmarks.google_message4.Message6109 field6180 = 5;
-  repeated .benchmarks.google_message4.Message5908 field6181 = 13;
-  repeated .benchmarks.google_message4.Message6107 field6182 = 7;
-  repeated .benchmarks.google_message4.Message6126 field6183 = 9;
-  repeated .benchmarks.google_message4.Message6129 field6184 = 15;
-  optional int32 field6185 = 10;
-  optional int32 field6186 = 11;
-  optional .benchmarks.google_message4.Message4016 field6187 = 17;
-  optional double field6188 = 14;
-  optional double field6189 = 18;
-  optional string field6190 = 19;
-  optional string field6191 = 20;
-  repeated .benchmarks.google_message4.Message5881 field6192 = 21;
-}
-
-message Message6109 {
-  optional string field6140 = 1;
-  required .benchmarks.google_message4.Enum6111 field6141 = 2;
-  optional int32 field6142 = 9;
-  optional string field6143 = 3;
-  repeated .benchmarks.google_message4.Message6110 field6144 = 4;
-  repeated int32 field6145 = 7;
-  repeated int32 field6146 = 8;
-  optional .benchmarks.google_message4.Message6133 field6147 = 10;
-  repeated int32 field6148 = 11;
-  optional string field6149 = 12;
-  optional string field6150 = 13;
-  optional bool field6151 = 14;
-  extensions 1000 to 536870911;
-}
-
-message Message3046 {
-  required .benchmarks.google_message4.Enum2593 field3222 = 1;
-  optional int32 field3223 = 4;
-}
-
-message Message3060 {
-  optional int64 field3283 = 1;
-  optional int64 field3284 = 2;
-  optional int64 field3285 = 3;
-}
-
-message Message3041 {
-  optional string field3214 = 1;
-  optional int32 field3215 = 2;
-}
-
-message Message3040 {
-  required fixed64 field3209 = 1;
-  repeated fixed64 field3210 = 4;
-  optional int32 field3211 = 5;
-  optional fixed64 field3212 = 2;
-  required string field3213 = 3;
-}
-
-message Message3050 {
-  optional bytes field3245 = 5;
-  optional int32 field3246 = 2;
-  optional bytes field3247 = 6;
-  optional int32 field3248 = 4;
-  optional fixed32 field3249 = 1;
-  optional fixed32 field3250 = 3;
-}
-
-message Message7905 {
-  optional int32 field7911 = 1;
-  optional bool field7912 = 2;
-  optional bytes field7913 = 3;
-  optional int32 field7914 = 4;
-  optional int32 field7915 = 5;
-  optional bytes field7916 = 6;
-  optional int32 field7917 = 7;
-}
-
-message Message3886 {
-  repeated group Message3887 = 1 {
-    required string field3932 = 2;
-    optional string field3933 = 9;
-    optional .benchmarks.google_message4.Message3850 field3934 = 3;
-    optional bytes field3935 = 8;
-  }
-}
-
-message Message7864 {
-  optional string field7866 = 1;
-  optional string field7867 = 2;
-  repeated .benchmarks.google_message4.Message7865 field7868 = 5;
-  repeated .benchmarks.google_message4.Message7865 field7869 = 6;
-  repeated .benchmarks.google_message4.Message7865 field7870 = 7;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field7871 = 8;
-}
-
-message Message3922 {
-  optional uint64 field4012 = 1;
-}
-
-message Message3052 {
-  repeated string field3254 = 1;
-  repeated string field3255 = 2;
-  repeated bytes field3256 = 3;
-  repeated string field3257 = 4;
-  optional bool field3258 = 5;
-  optional int32 field3259 = 6;
-  optional int32 field3260 = 7;
-  optional string field3261 = 8;
-  optional string field3262 = 9;
-}
-
-message Message8575 {
-}
-
-message Message7843 {
-  optional bool field7844 = 5;
-  optional int32 field7845 = 1;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7846 = 22;
-  repeated int32 field7847 = 3;
-  repeated string field7848 = 11;
-  optional .benchmarks.google_message4.UnusedEnum field7849 = 15;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7850 = 6;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7851 = 14;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7852 = 10;
-  optional .benchmarks.google_message4.Message7511 field7853 = 13;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7854 = 16;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7855 = 17;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7856 = 19;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field7857 = 18;
-  optional .benchmarks.google_message4.UnusedEnum field7858 = 20;
-  optional int32 field7859 = 2;
-}
-
-message Message3919 {
-  repeated .benchmarks.google_message4.Message3920 field4009 = 1;
-}
-
-message Message7929 {
-  optional int64 field7942 = 1;
-  optional int64 field7943 = 4;
-  optional int64 field7944 = 5;
-  optional int64 field7945 = 12;
-  optional int64 field7946 = 13;
-  optional int64 field7947 = 18;
-  optional int64 field7948 = 6;
-  optional int64 field7949 = 7;
-  repeated .benchmarks.google_message4.Message7919 field7950 = 8;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field7951 = 20;
-  repeated .benchmarks.google_message4.Message7920 field7952 = 14;
-  repeated .benchmarks.google_message4.Message7921 field7953 = 15;
-  repeated .benchmarks.google_message4.Message7928 field7954 = 17;
-  optional int64 field7955 = 19;
-  optional bool field7956 = 2;
-  optional int64 field7957 = 3;
-  optional int64 field7958 = 9;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field7959 = 10;
-  repeated bytes field7960 = 11;
-  optional int64 field7961 = 16;
-}
-

+ 0 - 291
benchmarks/datasets/google_message4/benchmark_message4_2.proto

@@ -1,291 +0,0 @@
-syntax = "proto2";
-
-import "datasets/google_message4/benchmark_message4_3.proto";
-package benchmarks.google_message4;
-
-option cc_enable_arenas = true;
-
-message Message12774 {
-  optional uint32 field12777 = 1;
-  optional uint32 field12778 = 2;
-  optional uint32 field12779 = 3;
-  optional uint32 field12780 = 4;
-  optional uint32 field12781 = 5;
-  optional bool field12782 = 6;
-}
-
-message Message12796 {
-  repeated fixed64 field12800 = 1;
-  optional uint64 field12801 = 2;
-}
-
-message Message12821 {
-  optional int32 field12848 = 1;
-  optional int32 field12849 = 2;
-  optional int32 field12850 = 3;
-  optional int32 field12851 = 4;
-  optional int32 field12852 = 5;
-}
-
-message Message12820 {
-  optional int32 field12840 = 1;
-  optional int32 field12841 = 2;
-  optional int32 field12842 = 3;
-  optional int32 field12843 = 8;
-  optional int32 field12844 = 4;
-  optional int32 field12845 = 5;
-  optional int32 field12846 = 6;
-  optional int32 field12847 = 7;
-}
-
-message Message12819 {
-  optional double field12834 = 1;
-  optional double field12835 = 2;
-  optional double field12836 = 3;
-  optional double field12837 = 4;
-  optional double field12838 = 5;
-  optional double field12839 = 6;
-}
-
-message Message12818 {
-  optional uint64 field12829 = 1;
-  optional int32 field12830 = 2;
-  optional int32 field12831 = 3;
-  optional int32 field12832 = 5;
-  repeated .benchmarks.google_message4.Message12817 field12833 = 4;
-}
-
-message Message10319 {
-  optional .benchmarks.google_message4.Enum10325 field10340 = 1;
-  optional int32 field10341 = 4;
-  optional int32 field10342 = 5;
-  optional bytes field10343 = 3;
-  optional string field10344 = 2;
-  optional string field10345 = 6;
-  optional string field10346 = 7;
-}
-
-message Message6578 {
-  optional .benchmarks.google_message4.Enum6579 field6632 = 1;
-  optional .benchmarks.google_message4.Enum6588 field6633 = 2;
-}
-
-message Message6126 {
-  required string field6152 = 1;
-  repeated .benchmarks.google_message4.Message6127 field6153 = 9;
-  optional int32 field6154 = 14;
-  optional bytes field6155 = 10;
-  optional .benchmarks.google_message4.Message6024 field6156 = 12;
-  optional int32 field6157 = 4;
-  optional string field6158 = 5;
-  optional int32 field6159 = 6;
-  repeated int32 field6160 = 2;
-  repeated int32 field6161 = 3;
-  repeated .benchmarks.google_message4.Message6052 field6162 = 7;
-  repeated .benchmarks.google_message4.UnusedEmptyMessage field6163 = 11;
-  optional .benchmarks.google_message4.Enum6065 field6164 = 15;
-  repeated .benchmarks.google_message4.Message6127 field6165 = 8;
-  optional bool field6166 = 13;
-  optional bool field6167 = 16;
-  optional bool field6168 = 18;
-  repeated .benchmarks.google_message4.Message6054 field6169 = 17;
-  optional int32 field6170 = 19;
-}
-
-message Message5881 {
-  required double field5897 = 1;
-  optional string field5898 = 5;
-  optional .benchmarks.google_message4.Message5861 field5899 = 2;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field5900 = 3;
-  optional .benchmarks.google_message4.Message5867 field5901 = 4;
-  optional .benchmarks.google_message4.Message5880 field5902 = 6;
-}
-
-message Message6110 {
-}
-
-message Message6107 {
-  optional .benchmarks.google_message4.Message4016 field6134 = 1;
-  optional int32 field6135 = 2;
-  optional string field6136 = 3;
-  repeated int32 field6137 = 4;
-  optional int32 field6138 = 5;
-  repeated .benchmarks.google_message4.Message6108 field6139 = 6;
-}
-
-message Message6129 {
-  required .benchmarks.google_message4.Enum6130 field6171 = 1;
-  required string field6172 = 2;
-}
-
-message Message5908 {
-  optional string field5971 = 1;
-  optional int32 field5972 = 2;
-  optional int32 field5973 = 3;
-  optional .benchmarks.google_message4.Enum5909 field5974 = 45;
-  optional .benchmarks.google_message4.Enum5912 field5975 = 4;
-  optional fixed32 field5976 = 50;
-  optional fixed32 field5977 = 5;
-  optional fixed32 field5978 = 6;
-  optional string field5979 = 7;
-  optional .benchmarks.google_message4.Enum5915 field5980 = 8;
-  optional .benchmarks.google_message4.Message5903 field5981 = 9;
-  optional .benchmarks.google_message4.Message5903 field5982 = 10;
-  optional .benchmarks.google_message4.Enum5920 field5983 = 11;
-  optional .benchmarks.google_message4.Enum5923 field5984 = 40;
-  optional .benchmarks.google_message4.Message5903 field5985 = 41;
-  optional .benchmarks.google_message4.Message5903 field5986 = 42;
-  optional .benchmarks.google_message4.Enum5928 field5987 = 47;
-  optional bool field5988 = 48;
-  repeated fixed32 field5989 = 49;
-  optional string field5990 = 12;
-  optional .benchmarks.google_message4.Message5903 field5991 = 13;
-  optional .benchmarks.google_message4.Message5903 field5992 = 14;
-  optional .benchmarks.google_message4.Message5903 field5993 = 15;
-  optional .benchmarks.google_message4.Message5903 field5994 = 16;
-  optional .benchmarks.google_message4.Message5903 field5995 = 32;
-  optional .benchmarks.google_message4.Message5903 field5996 = 33;
-  optional .benchmarks.google_message4.Message5903 field5997 = 34;
-  optional .benchmarks.google_message4.Message5903 field5998 = 35;
-  optional .benchmarks.google_message4.Enum5931 field5999 = 17;
-  optional .benchmarks.google_message4.Enum5935 field6000 = 18;
-  optional .benchmarks.google_message4.Enum5939 field6001 = 36;
-  optional .benchmarks.google_message4.Enum5939 field6002 = 37;
-  repeated int32 field6003 = 19;
-  optional uint32 field6004 = 20;
-  optional uint32 field6005 = 21;
-  optional uint32 field6006 = 22;
-  optional uint32 field6007 = 23;
-  optional .benchmarks.google_message4.Enum5946 field6008 = 24;
-  optional .benchmarks.google_message4.Enum5946 field6009 = 25;
-  optional .benchmarks.google_message4.Enum5946 field6010 = 26;
-  optional .benchmarks.google_message4.Enum5946 field6011 = 27;
-  optional fixed32 field6012 = 28;
-  optional fixed32 field6013 = 29;
-  optional fixed32 field6014 = 30;
-  optional fixed32 field6015 = 31;
-  optional int32 field6016 = 38;
-  optional float field6017 = 39;
-  optional .benchmarks.google_message4.Enum5957 field6018 = 43;
-  optional .benchmarks.google_message4.Message5907 field6019 = 44;
-  optional .benchmarks.google_message4.Enum5962 field6020 = 46;
-}
-
-message Message3850 {
-  optional .benchmarks.google_message4.Enum3851 field3924 = 2;
-  optional bool field3925 = 12;
-  optional int32 field3926 = 4;
-  optional bool field3927 = 10;
-  optional bool field3928 = 13;
-  optional bool field3929 = 14;
-}
-
-message Message7865 {
-}
-
-message Message7511 {
-  optional bool field7523 = 1;
-  optional .benchmarks.google_message4.Enum7512 field7524 = 2;
-  optional int32 field7525 = 3;
-  optional int32 field7526 = 4;
-  optional bool field7527 = 5;
-  optional int32 field7528 = 6;
-  optional int32 field7529 = 7;
-}
-
-message Message3920 {
-}
-
-message Message7928 {
-  optional string field7940 = 1;
-  optional int64 field7941 = 2;
-}
-
-message Message7921 {
-  optional int32 field7936 = 1;
-  optional int64 field7937 = 2;
-  optional float field7938 = 3;
-  optional .benchmarks.google_message4.Enum7922 field7939 = 4;
-}
-
-message Message7920 {
-  optional int64 field7934 = 1;
-  optional int64 field7935 = 2;
-}
-
-message Message7919 {
-  optional fixed64 field7931 = 1;
-  optional int64 field7932 = 2;
-  optional bytes field7933 = 3;
-}
-
-message Message12817 {
-  optional int32 field12826 = 1;
-  optional int32 field12827 = 2;
-  optional int32 field12828 = 3;
-}
-
-message Message6054 {
-  required string field6089 = 1;
-  optional string field6090 = 2;
-}
-
-message Message6127 {
-}
-
-message Message6052 {
-  required string field6084 = 1;
-  required bytes field6085 = 2;
-}
-
-message Message6024 {
-  optional .benchmarks.google_message4.Enum6025 field6048 = 1;
-  optional string field6049 = 2;
-  optional .benchmarks.google_message4.UnusedEmptyMessage field6050 = 3;
-}
-
-message Message5861 {
-  required .benchmarks.google_message4.Enum5862 field5882 = 1;
-  required string field5883 = 2;
-  optional bool field5884 = 3;
-  optional string field5885 = 4;
-}
-
-message Message5880 {
-  optional string field5896 = 1;
-}
-
-message Message5867 {
-  optional .benchmarks.google_message4.Enum5868 field5890 = 1;
-  optional string field5891 = 2;
-  optional .benchmarks.google_message4.Enum5873 field5892 = 3;
-  optional int32 field5893 = 4;
-  optional .benchmarks.google_message4.UnusedEnum field5894 = 5;
-  optional bool field5895 = 6;
-}
-
-message Message4016 {
-  required int32 field4017 = 1;
-  required int32 field4018 = 2;
-  required int32 field4019 = 3;
-  required int32 field4020 = 4;
-}
-
-message Message6108 {
-}
-
-message Message5907 {
-  optional .benchmarks.google_message4.Message5903 field5967 = 1;
-  optional .benchmarks.google_message4.Message5903 field5968 = 2;
-  optional .benchmarks.google_message4.Message5903 field5969 = 3;
-  optional .benchmarks.google_message4.Message5903 field5970 = 4;
-}
-
-message UnusedEmptyMessage {
-}
-
-message Message5903 {
-  required int32 field5965 = 1;
-  optional .benchmarks.google_message4.Enum5904 field5966 = 2;
-}
-

+ 0 - 750
benchmarks/datasets/google_message4/benchmark_message4_3.proto

@@ -1,750 +0,0 @@
-syntax = "proto2";
-
-package benchmarks.google_message4;
-
-option cc_enable_arenas = true;
-
-enum UnusedEnum {
-  UNUSED_ENUM_VALUE1 = 0;
-  UNUSED_ENUM_VALUE2 = 1;
-}
-
-enum Enum2593 {
-  ENUM_VALUE2594 = 0;
-  ENUM_VALUE2595 = 1;
-  ENUM_VALUE2596 = 2;
-  ENUM_VALUE2597 = 3;
-  ENUM_VALUE2598 = 4;
-  ENUM_VALUE2599 = 5;
-  ENUM_VALUE2600 = 6;
-  ENUM_VALUE2601 = 7;
-}
-
-enum Enum2834 {
-  ENUM_VALUE2835 = 0;
-  ENUM_VALUE2836 = 1;
-  ENUM_VALUE2837 = 2;
-}
-
-enum Enum2806 {
-  ENUM_VALUE2807 = 0;
-  ENUM_VALUE2808 = 1;
-  ENUM_VALUE2809 = 2;
-  ENUM_VALUE2810 = 3;
-  ENUM_VALUE2811 = 4;
-  ENUM_VALUE2812 = 5;
-  ENUM_VALUE2813 = 6;
-  ENUM_VALUE2814 = 7;
-  ENUM_VALUE2815 = 8;
-  ENUM_VALUE2816 = 9;
-  ENUM_VALUE2817 = 10;
-  ENUM_VALUE2818 = 11;
-  ENUM_VALUE2819 = 12;
-  ENUM_VALUE2820 = 13;
-  ENUM_VALUE2821 = 14;
-}
-
-enum Enum2851 {
-  option allow_alias = true;
-  ENUM_VALUE2852 = 0;
-  ENUM_VALUE2853 = 0;
-  ENUM_VALUE2854 = 1;
-  ENUM_VALUE2855 = 2;
-  ENUM_VALUE2856 = 3;
-  ENUM_VALUE2857 = 4;
-  ENUM_VALUE2858 = 5;
-  ENUM_VALUE2859 = 6;
-  ENUM_VALUE2860 = 7;
-  ENUM_VALUE2861 = 8;
-  ENUM_VALUE2862 = 9;
-  ENUM_VALUE2863 = 10;
-  ENUM_VALUE2864 = 11;
-  ENUM_VALUE2865 = 12;
-  ENUM_VALUE2866 = 13;
-  ENUM_VALUE2867 = 14;
-  ENUM_VALUE2868 = 15;
-  ENUM_VALUE2869 = 16;
-  ENUM_VALUE2870 = 17;
-  ENUM_VALUE2871 = 18;
-  ENUM_VALUE2872 = 19;
-  ENUM_VALUE2873 = 20;
-  ENUM_VALUE2874 = 21;
-  ENUM_VALUE2875 = 22;
-  ENUM_VALUE2876 = 23;
-  ENUM_VALUE2877 = 24;
-  ENUM_VALUE2878 = 25;
-  ENUM_VALUE2879 = 26;
-  ENUM_VALUE2880 = 27;
-  ENUM_VALUE2881 = 28;
-  ENUM_VALUE2882 = 29;
-  ENUM_VALUE2883 = 30;
-  ENUM_VALUE2884 = 31;
-  ENUM_VALUE2885 = 32;
-  ENUM_VALUE2886 = 33;
-  ENUM_VALUE2887 = 34;
-  ENUM_VALUE2888 = 35;
-  ENUM_VALUE2889 = 36;
-  ENUM_VALUE2890 = 37;
-  ENUM_VALUE2891 = 38;
-  ENUM_VALUE2892 = 39;
-  ENUM_VALUE2893 = 40;
-  ENUM_VALUE2894 = 41;
-  ENUM_VALUE2895 = 42;
-  ENUM_VALUE2896 = 43;
-  ENUM_VALUE2897 = 44;
-  ENUM_VALUE2898 = 45;
-  ENUM_VALUE2899 = 46;
-  ENUM_VALUE2900 = 47;
-  ENUM_VALUE2901 = 48;
-  ENUM_VALUE2902 = 49;
-  ENUM_VALUE2903 = 50;
-  ENUM_VALUE2904 = 51;
-  ENUM_VALUE2905 = 52;
-  ENUM_VALUE2906 = 53;
-  ENUM_VALUE2907 = 54;
-  ENUM_VALUE2908 = 55;
-  ENUM_VALUE2909 = 56;
-  ENUM_VALUE2910 = 57;
-  ENUM_VALUE2911 = 58;
-  ENUM_VALUE2912 = 59;
-  ENUM_VALUE2913 = 60;
-  ENUM_VALUE2914 = 61;
-  ENUM_VALUE2915 = 62;
-  ENUM_VALUE2916 = 63;
-  ENUM_VALUE2917 = 64;
-  ENUM_VALUE2918 = 65;
-  ENUM_VALUE2919 = 66;
-  ENUM_VALUE2920 = 67;
-  ENUM_VALUE2921 = 68;
-  ENUM_VALUE2922 = 69;
-  ENUM_VALUE2923 = 70;
-  ENUM_VALUE2924 = 71;
-  ENUM_VALUE2925 = 72;
-  ENUM_VALUE2926 = 73;
-  ENUM_VALUE2927 = 74;
-  ENUM_VALUE2928 = 75;
-  ENUM_VALUE2929 = 76;
-  ENUM_VALUE2930 = 77;
-  ENUM_VALUE2931 = 78;
-  ENUM_VALUE2932 = 79;
-  ENUM_VALUE2933 = 80;
-  ENUM_VALUE2934 = 81;
-  ENUM_VALUE2935 = 82;
-  ENUM_VALUE2936 = 83;
-  ENUM_VALUE2937 = 84;
-  ENUM_VALUE2938 = 85;
-  ENUM_VALUE2939 = 86;
-  ENUM_VALUE2940 = 87;
-  ENUM_VALUE2941 = 88;
-  ENUM_VALUE2942 = 89;
-  ENUM_VALUE2943 = 90;
-  ENUM_VALUE2944 = 91;
-  ENUM_VALUE2945 = 92;
-  ENUM_VALUE2946 = 93;
-  ENUM_VALUE2947 = 94;
-  ENUM_VALUE2948 = 95;
-  ENUM_VALUE2949 = 96;
-  ENUM_VALUE2950 = 97;
-  ENUM_VALUE2951 = 98;
-  ENUM_VALUE2952 = 99;
-  ENUM_VALUE2953 = 100;
-  ENUM_VALUE2954 = 101;
-  ENUM_VALUE2955 = 102;
-  ENUM_VALUE2956 = 103;
-  ENUM_VALUE2957 = 104;
-  ENUM_VALUE2958 = 105;
-  ENUM_VALUE2959 = 106;
-  ENUM_VALUE2960 = 107;
-  ENUM_VALUE2961 = 108;
-  ENUM_VALUE2962 = 109;
-  ENUM_VALUE2963 = 110;
-  ENUM_VALUE2964 = 111;
-  ENUM_VALUE2965 = 112;
-  ENUM_VALUE2966 = 113;
-  ENUM_VALUE2967 = 114;
-  ENUM_VALUE2968 = 115;
-  ENUM_VALUE2969 = 116;
-  ENUM_VALUE2970 = 117;
-  ENUM_VALUE2971 = 118;
-  ENUM_VALUE2972 = 119;
-}
-
-enum Enum2602 {
-  ENUM_VALUE2603 = 0;
-  ENUM_VALUE2604 = 1;
-  ENUM_VALUE2605 = 2;
-  ENUM_VALUE2606 = 3;
-  ENUM_VALUE2607 = 4;
-  ENUM_VALUE2608 = 5;
-  ENUM_VALUE2609 = 6;
-  ENUM_VALUE2610 = 7;
-  ENUM_VALUE2611 = 8;
-  ENUM_VALUE2612 = 9;
-  ENUM_VALUE2613 = 10;
-  ENUM_VALUE2614 = 11;
-}
-
-enum Enum3071 {
-  ENUM_VALUE3072 = 1;
-  ENUM_VALUE3073 = 2;
-  ENUM_VALUE3074 = 3;
-  ENUM_VALUE3075 = 4;
-  ENUM_VALUE3076 = 5;
-  ENUM_VALUE3077 = 6;
-  ENUM_VALUE3078 = 7;
-  ENUM_VALUE3079 = 8;
-  ENUM_VALUE3080 = 9;
-  ENUM_VALUE3081 = 10;
-  ENUM_VALUE3082 = 11;
-  ENUM_VALUE3083 = 12;
-  ENUM_VALUE3084 = 13;
-  ENUM_VALUE3085 = 14;
-  ENUM_VALUE3086 = 15;
-  ENUM_VALUE3087 = 16;
-  ENUM_VALUE3088 = 17;
-  ENUM_VALUE3089 = 18;
-  ENUM_VALUE3090 = 19;
-  ENUM_VALUE3091 = 20;
-  ENUM_VALUE3092 = 21;
-  ENUM_VALUE3093 = 22;
-  ENUM_VALUE3094 = 23;
-  ENUM_VALUE3095 = 24;
-  ENUM_VALUE3096 = 25;
-  ENUM_VALUE3097 = 26;
-  ENUM_VALUE3098 = 27;
-  ENUM_VALUE3099 = 28;
-}
-
-enum Enum3805 {
-  ENUM_VALUE3806 = 0;
-  ENUM_VALUE3807 = 1;
-  ENUM_VALUE3808 = 2;
-  ENUM_VALUE3809 = 3;
-  ENUM_VALUE3810 = 4;
-  ENUM_VALUE3811 = 5;
-  ENUM_VALUE3812 = 6;
-  ENUM_VALUE3813 = 7;
-  ENUM_VALUE3814 = 8;
-  ENUM_VALUE3815 = 9;
-  ENUM_VALUE3816 = 11;
-  ENUM_VALUE3817 = 10;
-}
-
-enum Enum3783 {
-  ENUM_VALUE3784 = 0;
-  ENUM_VALUE3785 = 1;
-  ENUM_VALUE3786 = 2;
-  ENUM_VALUE3787 = 3;
-  ENUM_VALUE3788 = 4;
-  ENUM_VALUE3789 = 5;
-  ENUM_VALUE3790 = 6;
-  ENUM_VALUE3791 = 7;
-  ENUM_VALUE3792 = 8;
-  ENUM_VALUE3793 = 9;
-  ENUM_VALUE3794 = 10;
-  ENUM_VALUE3795 = 11;
-  ENUM_VALUE3796 = 12;
-  ENUM_VALUE3797 = 13;
-  ENUM_VALUE3798 = 14;
-  ENUM_VALUE3799 = 15;
-  ENUM_VALUE3800 = 16;
-  ENUM_VALUE3801 = 20;
-  ENUM_VALUE3802 = 21;
-  ENUM_VALUE3803 = 50;
-}
-
-enum Enum3851 {
-  ENUM_VALUE3852 = 0;
-  ENUM_VALUE3853 = 1;
-  ENUM_VALUE3854 = 2;
-  ENUM_VALUE3855 = 3;
-  ENUM_VALUE3856 = 4;
-  ENUM_VALUE3857 = 5;
-  ENUM_VALUE3858 = 6;
-  ENUM_VALUE3859 = 7;
-  ENUM_VALUE3860 = 8;
-  ENUM_VALUE3861 = 9;
-  ENUM_VALUE3862 = 10;
-  ENUM_VALUE3863 = 11;
-  ENUM_VALUE3864 = 12;
-  ENUM_VALUE3865 = 13;
-  ENUM_VALUE3866 = 14;
-  ENUM_VALUE3867 = 15;
-  ENUM_VALUE3868 = 16;
-  ENUM_VALUE3869 = 17;
-}
-
-enum Enum5862 {
-  ENUM_VALUE5863 = 1;
-  ENUM_VALUE5864 = 2;
-  ENUM_VALUE5865 = 3;
-}
-
-enum Enum5868 {
-  ENUM_VALUE5869 = 0;
-  ENUM_VALUE5870 = 1;
-  ENUM_VALUE5871 = 2;
-  ENUM_VALUE5872 = 3;
-}
-
-enum Enum5873 {
-  ENUM_VALUE5874 = 0;
-  ENUM_VALUE5875 = 1;
-  ENUM_VALUE5876 = 2;
-}
-
-enum Enum5904 {
-  ENUM_VALUE5905 = 0;
-  ENUM_VALUE5906 = 1;
-}
-
-enum Enum5909 {
-  ENUM_VALUE5910 = 0;
-  ENUM_VALUE5911 = 1;
-}
-
-enum Enum5912 {
-  ENUM_VALUE5913 = 0;
-  ENUM_VALUE5914 = 1;
-}
-
-enum Enum5915 {
-  ENUM_VALUE5916 = 0;
-  ENUM_VALUE5917 = 1;
-  ENUM_VALUE5918 = 2;
-  ENUM_VALUE5919 = 3;
-}
-
-enum Enum5920 {
-  ENUM_VALUE5921 = 0;
-  ENUM_VALUE5922 = 1;
-}
-
-enum Enum5923 {
-  ENUM_VALUE5924 = 0;
-  ENUM_VALUE5925 = 1;
-  ENUM_VALUE5926 = 2;
-  ENUM_VALUE5927 = 3;
-}
-
-enum Enum5928 {
-  ENUM_VALUE5929 = 0;
-  ENUM_VALUE5930 = 1;
-}
-
-enum Enum5931 {
-  ENUM_VALUE5932 = 0;
-  ENUM_VALUE5933 = 1;
-  ENUM_VALUE5934 = 2;
-}
-
-enum Enum5935 {
-  ENUM_VALUE5936 = 0;
-  ENUM_VALUE5937 = 1;
-  ENUM_VALUE5938 = 2;
-}
-
-enum Enum5939 {
-  ENUM_VALUE5940 = 0;
-  ENUM_VALUE5941 = 1;
-  ENUM_VALUE5942 = 2;
-  ENUM_VALUE5943 = 3;
-  ENUM_VALUE5944 = 4;
-  ENUM_VALUE5945 = 5;
-}
-
-enum Enum5946 {
-  ENUM_VALUE5947 = 0;
-  ENUM_VALUE5948 = 1;
-  ENUM_VALUE5949 = 2;
-  ENUM_VALUE5950 = 3;
-  ENUM_VALUE5951 = 4;
-  ENUM_VALUE5952 = 5;
-  ENUM_VALUE5953 = 6;
-  ENUM_VALUE5954 = 7;
-  ENUM_VALUE5955 = 8;
-  ENUM_VALUE5956 = 9;
-}
-
-enum Enum5957 {
-  ENUM_VALUE5958 = 0;
-  ENUM_VALUE5959 = 1;
-  ENUM_VALUE5960 = 2;
-  ENUM_VALUE5961 = 3;
-}
-
-enum Enum5962 {
-  ENUM_VALUE5963 = 0;
-  ENUM_VALUE5964 = 1;
-}
-
-enum Enum6025 {
-  ENUM_VALUE6026 = 0;
-  ENUM_VALUE6027 = 1;
-  ENUM_VALUE6028 = 2;
-  ENUM_VALUE6029 = 3;
-  ENUM_VALUE6030 = 4;
-  ENUM_VALUE6031 = 5;
-  ENUM_VALUE6032 = 6;
-  ENUM_VALUE6033 = 7;
-  ENUM_VALUE6034 = 8;
-  ENUM_VALUE6035 = 9;
-  ENUM_VALUE6036 = 10;
-  ENUM_VALUE6037 = 11;
-  ENUM_VALUE6038 = 12;
-  ENUM_VALUE6039 = 13;
-  ENUM_VALUE6040 = 14;
-  ENUM_VALUE6041 = 15;
-  ENUM_VALUE6042 = 16;
-  ENUM_VALUE6043 = 17;
-  ENUM_VALUE6044 = 18;
-  ENUM_VALUE6045 = 19;
-  ENUM_VALUE6046 = 20;
-  ENUM_VALUE6047 = 21;
-}
-
-enum Enum6111 {
-  ENUM_VALUE6112 = 1;
-  ENUM_VALUE6113 = 2;
-  ENUM_VALUE6114 = 3;
-  ENUM_VALUE6115 = 4;
-  ENUM_VALUE6116 = 5;
-  ENUM_VALUE6117 = 6;
-  ENUM_VALUE6118 = 7;
-  ENUM_VALUE6119 = 8;
-  ENUM_VALUE6120 = 9;
-  ENUM_VALUE6121 = 10;
-  ENUM_VALUE6122 = 11;
-  ENUM_VALUE6123 = 12;
-  ENUM_VALUE6124 = 13;
-  ENUM_VALUE6125 = 14;
-}
-
-enum Enum6065 {
-  ENUM_VALUE6066 = 0;
-  ENUM_VALUE6067 = 1;
-  ENUM_VALUE6068 = 2;
-  ENUM_VALUE6069 = 3;
-  ENUM_VALUE6070 = 4;
-  ENUM_VALUE6071 = 5;
-  ENUM_VALUE6072 = 6;
-  ENUM_VALUE6073 = 7;
-  ENUM_VALUE6074 = 8;
-  ENUM_VALUE6075 = 9;
-  ENUM_VALUE6076 = 10;
-  ENUM_VALUE6077 = 11;
-  ENUM_VALUE6078 = 12;
-  ENUM_VALUE6079 = 13;
-  ENUM_VALUE6080 = 14;
-}
-
-enum Enum6130 {
-  ENUM_VALUE6131 = 0;
-  ENUM_VALUE6132 = 1;
-}
-
-enum Enum6579 {
-  ENUM_VALUE6580 = 0;
-  ENUM_VALUE6581 = 2;
-  ENUM_VALUE6582 = 3;
-  ENUM_VALUE6583 = 5;
-  ENUM_VALUE6584 = 10;
-  ENUM_VALUE6585 = 15;
-  ENUM_VALUE6586 = 25;
-  ENUM_VALUE6587 = 30;
-}
-
-enum Enum6588 {
-  ENUM_VALUE6589 = 0;
-  ENUM_VALUE6590 = 1;
-  ENUM_VALUE6591 = 2;
-  ENUM_VALUE6592 = 3;
-  ENUM_VALUE6593 = 4;
-  ENUM_VALUE6594 = 5;
-  ENUM_VALUE6595 = 6;
-  ENUM_VALUE6596 = 7;
-  ENUM_VALUE6597 = 8;
-  ENUM_VALUE6598 = 9;
-  ENUM_VALUE6599 = 10;
-  ENUM_VALUE6600 = 11;
-  ENUM_VALUE6601 = 12;
-  ENUM_VALUE6602 = 13;
-  ENUM_VALUE6603 = 14;
-  ENUM_VALUE6604 = 15;
-  ENUM_VALUE6605 = 16;
-  ENUM_VALUE6606 = 17;
-  ENUM_VALUE6607 = 19;
-  ENUM_VALUE6608 = 20;
-  ENUM_VALUE6609 = 21;
-  ENUM_VALUE6610 = 22;
-  ENUM_VALUE6611 = 23;
-  ENUM_VALUE6612 = 24;
-  ENUM_VALUE6613 = 25;
-  ENUM_VALUE6614 = 26;
-  ENUM_VALUE6615 = 27;
-  ENUM_VALUE6616 = 28;
-  ENUM_VALUE6617 = 29;
-  ENUM_VALUE6618 = 30;
-  ENUM_VALUE6619 = 31;
-  ENUM_VALUE6620 = 32;
-  ENUM_VALUE6621 = 33;
-  ENUM_VALUE6622 = 34;
-}
-
-enum Enum7288 {
-  ENUM_VALUE7289 = 0;
-  ENUM_VALUE7290 = 1;
-  ENUM_VALUE7291 = 2;
-  ENUM_VALUE7292 = 3;
-}
-
-enum Enum7512 {
-  ENUM_VALUE7513 = 0;
-  ENUM_VALUE7514 = 1;
-  ENUM_VALUE7515 = 2;
-  ENUM_VALUE7516 = 3;
-  ENUM_VALUE7517 = 4;
-  ENUM_VALUE7518 = 5;
-  ENUM_VALUE7519 = 6;
-  ENUM_VALUE7520 = 7;
-}
-
-enum Enum7922 {
-  ENUM_VALUE7923 = 1;
-  ENUM_VALUE7924 = 2;
-  ENUM_VALUE7925 = 3;
-  ENUM_VALUE7926 = 4;
-  ENUM_VALUE7927 = 5;
-}
-
-enum Enum3476 {
-  ENUM_VALUE3477 = 0;
-  ENUM_VALUE3478 = 1;
-  ENUM_VALUE3479 = 2;
-  ENUM_VALUE3480 = 3;
-  ENUM_VALUE3481 = 4;
-  ENUM_VALUE3482 = 5;
-  ENUM_VALUE3483 = 6;
-  ENUM_VALUE3484 = 7;
-  ENUM_VALUE3485 = 8;
-  ENUM_VALUE3486 = 9;
-  ENUM_VALUE3487 = 10;
-  ENUM_VALUE3488 = 11;
-  ENUM_VALUE3489 = 12;
-  ENUM_VALUE3490 = 13;
-  ENUM_VALUE3491 = 14;
-  ENUM_VALUE3492 = 15;
-  ENUM_VALUE3493 = 16;
-  ENUM_VALUE3494 = 17;
-  ENUM_VALUE3495 = 18;
-  ENUM_VALUE3496 = 19;
-  ENUM_VALUE3497 = 20;
-  ENUM_VALUE3498 = 21;
-  ENUM_VALUE3499 = 22;
-  ENUM_VALUE3500 = 23;
-  ENUM_VALUE3501 = 24;
-  ENUM_VALUE3502 = 25;
-  ENUM_VALUE3503 = 26;
-  ENUM_VALUE3504 = 27;
-  ENUM_VALUE3505 = 28;
-  ENUM_VALUE3506 = 29;
-  ENUM_VALUE3507 = 30;
-  ENUM_VALUE3508 = 31;
-  ENUM_VALUE3509 = 32;
-  ENUM_VALUE3510 = 33;
-  ENUM_VALUE3511 = 34;
-  ENUM_VALUE3512 = 35;
-  ENUM_VALUE3513 = 36;
-  ENUM_VALUE3514 = 37;
-  ENUM_VALUE3515 = 38;
-  ENUM_VALUE3516 = 39;
-  ENUM_VALUE3517 = 40;
-  ENUM_VALUE3518 = 41;
-  ENUM_VALUE3519 = 42;
-  ENUM_VALUE3520 = 43;
-  ENUM_VALUE3521 = 44;
-  ENUM_VALUE3522 = 45;
-  ENUM_VALUE3523 = 46;
-  ENUM_VALUE3524 = 47;
-  ENUM_VALUE3525 = 48;
-  ENUM_VALUE3526 = 49;
-  ENUM_VALUE3527 = 50;
-  ENUM_VALUE3528 = 51;
-  ENUM_VALUE3529 = 52;
-  ENUM_VALUE3530 = 53;
-  ENUM_VALUE3531 = 54;
-  ENUM_VALUE3532 = 55;
-  ENUM_VALUE3533 = 56;
-  ENUM_VALUE3534 = 57;
-  ENUM_VALUE3535 = 58;
-  ENUM_VALUE3536 = 59;
-  ENUM_VALUE3537 = 60;
-  ENUM_VALUE3538 = 61;
-  ENUM_VALUE3539 = 62;
-  ENUM_VALUE3540 = 63;
-  ENUM_VALUE3541 = 64;
-  ENUM_VALUE3542 = 65;
-  ENUM_VALUE3543 = 66;
-  ENUM_VALUE3544 = 67;
-  ENUM_VALUE3545 = 68;
-  ENUM_VALUE3546 = 69;
-  ENUM_VALUE3547 = 70;
-  ENUM_VALUE3548 = 71;
-  ENUM_VALUE3549 = 72;
-  ENUM_VALUE3550 = 73;
-  ENUM_VALUE3551 = 74;
-  ENUM_VALUE3552 = 75;
-  ENUM_VALUE3553 = 76;
-  ENUM_VALUE3554 = 77;
-  ENUM_VALUE3555 = 78;
-  ENUM_VALUE3556 = 79;
-  ENUM_VALUE3557 = 80;
-  ENUM_VALUE3558 = 81;
-  ENUM_VALUE3559 = 82;
-  ENUM_VALUE3560 = 83;
-  ENUM_VALUE3561 = 84;
-  ENUM_VALUE3562 = 85;
-  ENUM_VALUE3563 = 86;
-  ENUM_VALUE3564 = 87;
-  ENUM_VALUE3565 = 88;
-  ENUM_VALUE3566 = 89;
-  ENUM_VALUE3567 = 90;
-  ENUM_VALUE3568 = 91;
-  ENUM_VALUE3569 = 92;
-  ENUM_VALUE3570 = 93;
-  ENUM_VALUE3571 = 94;
-  ENUM_VALUE3572 = 95;
-  ENUM_VALUE3573 = 96;
-  ENUM_VALUE3574 = 97;
-  ENUM_VALUE3575 = 98;
-  ENUM_VALUE3576 = 99;
-  ENUM_VALUE3577 = 100;
-  ENUM_VALUE3578 = 101;
-  ENUM_VALUE3579 = 102;
-  ENUM_VALUE3580 = 103;
-  ENUM_VALUE3581 = 104;
-  ENUM_VALUE3582 = 105;
-  ENUM_VALUE3583 = 106;
-  ENUM_VALUE3584 = 107;
-  ENUM_VALUE3585 = 108;
-  ENUM_VALUE3586 = 109;
-  ENUM_VALUE3587 = 110;
-  ENUM_VALUE3588 = 111;
-  ENUM_VALUE3589 = 112;
-  ENUM_VALUE3590 = 113;
-  ENUM_VALUE3591 = 114;
-  ENUM_VALUE3592 = 115;
-  ENUM_VALUE3593 = 116;
-  ENUM_VALUE3594 = 117;
-  ENUM_VALUE3595 = 118;
-  ENUM_VALUE3596 = 119;
-  ENUM_VALUE3597 = 120;
-  ENUM_VALUE3598 = 121;
-  ENUM_VALUE3599 = 122;
-  ENUM_VALUE3600 = 123;
-  ENUM_VALUE3601 = 124;
-  ENUM_VALUE3602 = 125;
-  ENUM_VALUE3603 = 126;
-  ENUM_VALUE3604 = 127;
-  ENUM_VALUE3605 = 128;
-  ENUM_VALUE3606 = 129;
-  ENUM_VALUE3607 = 130;
-  ENUM_VALUE3608 = 131;
-  ENUM_VALUE3609 = 132;
-  ENUM_VALUE3610 = 133;
-  ENUM_VALUE3611 = 134;
-  ENUM_VALUE3612 = 135;
-  ENUM_VALUE3613 = 136;
-  ENUM_VALUE3614 = 137;
-  ENUM_VALUE3615 = 138;
-  ENUM_VALUE3616 = 139;
-  ENUM_VALUE3617 = 140;
-  ENUM_VALUE3618 = 141;
-  ENUM_VALUE3619 = 142;
-  ENUM_VALUE3620 = 143;
-  ENUM_VALUE3621 = 144;
-  ENUM_VALUE3622 = 145;
-  ENUM_VALUE3623 = 146;
-  ENUM_VALUE3624 = 147;
-  ENUM_VALUE3625 = 148;
-  ENUM_VALUE3626 = 149;
-  ENUM_VALUE3627 = 150;
-  ENUM_VALUE3628 = 151;
-  ENUM_VALUE3629 = 152;
-  ENUM_VALUE3630 = 153;
-  ENUM_VALUE3631 = 154;
-  ENUM_VALUE3632 = 155;
-  ENUM_VALUE3633 = 156;
-  ENUM_VALUE3634 = 157;
-  ENUM_VALUE3635 = 158;
-  ENUM_VALUE3636 = 159;
-  ENUM_VALUE3637 = 160;
-  ENUM_VALUE3638 = 161;
-  ENUM_VALUE3639 = 162;
-  ENUM_VALUE3640 = 163;
-  ENUM_VALUE3641 = 164;
-  ENUM_VALUE3642 = 165;
-  ENUM_VALUE3643 = 166;
-  ENUM_VALUE3644 = 167;
-  ENUM_VALUE3645 = 168;
-  ENUM_VALUE3646 = 169;
-  ENUM_VALUE3647 = 170;
-  ENUM_VALUE3648 = 171;
-  ENUM_VALUE3649 = 172;
-  ENUM_VALUE3650 = 173;
-  ENUM_VALUE3651 = 174;
-  ENUM_VALUE3652 = 175;
-  ENUM_VALUE3653 = 176;
-  ENUM_VALUE3654 = 177;
-  ENUM_VALUE3655 = 178;
-  ENUM_VALUE3656 = 179;
-  ENUM_VALUE3657 = 180;
-  ENUM_VALUE3658 = 181;
-  ENUM_VALUE3659 = 182;
-  ENUM_VALUE3660 = 183;
-}
-
-enum Enum10325 {
-  ENUM_VALUE10326 = 0;
-  ENUM_VALUE10327 = 1;
-  ENUM_VALUE10328 = 2;
-  ENUM_VALUE10329 = 3;
-  ENUM_VALUE10330 = 4;
-  ENUM_VALUE10331 = 5;
-  ENUM_VALUE10332 = 6;
-  ENUM_VALUE10333 = 7;
-  ENUM_VALUE10334 = 8;
-}
-
-enum Enum10335 {
-  ENUM_VALUE10336 = 0;
-}
-
-enum Enum10337 {
-  ENUM_VALUE10338 = 0;
-  ENUM_VALUE10339 = 1;
-}
-
-enum Enum11901 {
-  ENUM_VALUE11902 = 0;
-  ENUM_VALUE11903 = 1;
-  ENUM_VALUE11904 = 2;
-  ENUM_VALUE11905 = 3;
-}
-
-enum Enum12735 {
-  ENUM_VALUE12736 = 0;
-  ENUM_VALUE12737 = 1;
-  ENUM_VALUE12738 = 2;
-  ENUM_VALUE12739 = 3;
-}
-
-enum Enum12871 {
-  ENUM_VALUE12872 = 1;
-  ENUM_VALUE12873 = 2;
-  ENUM_VALUE12874 = 3;
-  ENUM_VALUE12875 = 4;
-  ENUM_VALUE12876 = 5;
-  ENUM_VALUE12877 = 6;
-}
-

+ 0 - 5
benchmarks/download_data.sh

@@ -1,5 +0,0 @@
-#! /bin/sh
-
-curl -O https://storage.googleapis.com/protobuf_opensource_benchmark_data/datasets.tar.gz
-tar -zvxf datasets.tar.gz
-

+ 0 - 138
benchmarks/google_size.proto

@@ -1,138 +0,0 @@
-syntax = "proto2";
-
-package benchmarks;
-
-option java_outer_classname = "GoogleSize";
-option optimize_for = CODE_SIZE;
-
-message SizeMessage1 {
-  required string field1 = 1;
-  optional string field9 = 9;
-  optional string field18 = 18;
-  optional bool field80 = 80 [default=false];
-  optional bool field81 = 81 [default=true];
-  required int32 field2 = 2;
-  required int32 field3 = 3;
-  optional int32 field280 = 280;
-  optional int32 field6 = 6 [default=0];
-  optional int64 field22 = 22;
-  optional string field4 = 4;
-  repeated fixed64 field5 = 5;
-  optional bool field59 = 59 [default=false];
-  optional string field7 = 7;
-  optional int32 field16 = 16;
-  optional int32 field130 = 130 [default=0];
-  optional bool field12 = 12 [default=true];
-  optional bool field17 = 17 [default=true];
-  optional bool field13 = 13 [default=true];
-  optional bool field14 = 14 [default=true];
-  optional int32 field104 = 104 [default=0];
-  optional int32 field100 = 100 [default=0];
-  optional int32 field101 = 101 [default=0];
-  optional string field102 = 102;
-  optional string field103 = 103;
-  optional int32 field29 = 29 [default=0];
-  optional bool field30 = 30 [default=false];
-  optional int32 field60 = 60 [default=-1];
-  optional int32 field271 = 271 [default=-1];
-  optional int32 field272 = 272 [default=-1];
-  optional int32 field150 = 150;
-  optional int32 field23 = 23 [default=0];
-  optional bool field24 = 24 [default=false];
-  optional int32 field25 = 25 [default=0];
-  optional SizeMessage1SubMessage field15 = 15;
-  optional bool field78 = 78;
-  optional int32 field67 = 67 [default=0];
-  optional int32 field68 = 68;
-  optional int32 field128 = 128 [default=0];
-  optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
-  optional int32 field131 = 131 [default=0];
-}
-
-message SizeMessage1SubMessage {
-  optional int32 field1 = 1 [default=0];
-  optional int32 field2 = 2 [default=0];
-  optional int32 field3 = 3 [default=0];
-  optional string field15 = 15;
-  optional bool field12 = 12 [default=true];
-  optional int64 field13 = 13;
-  optional int64 field14 = 14;
-  optional int32 field16 = 16;
-  optional int32 field19 = 19 [default=2];
-  optional bool field20  = 20 [default=true];
-  optional bool field28 = 28 [default=true];
-  optional fixed64 field21 = 21;
-  optional int32 field22 = 22;
-  optional bool field23 = 23 [ default=false ];
-  optional bool field206 = 206 [default=false];
-  optional fixed32 field203 = 203;
-  optional int32 field204 = 204;
-  optional string field205 = 205;
-  optional uint64 field207 = 207;
-  optional uint64 field300 = 300;
-}
-
-message SizeMessage2 {
-  optional string field1 = 1;
-  optional int64 field3 = 3;
-  optional int64 field4 = 4;
-  optional int64 field30 = 30;
-  optional bool field75  = 75 [default=false];
-  optional string field6 = 6;
-  optional bytes field2 = 2;
-  optional int32 field21 = 21 [default=0];
-  optional int32 field71 = 71;
-  optional float field25 = 25;
-  optional int32 field109 = 109 [default=0];
-  optional int32 field210 = 210 [default=0];
-  optional int32 field211 = 211 [default=0];
-  optional int32 field212 = 212 [default=0];
-  optional int32 field213 = 213 [default=0];
-  optional int32 field216 = 216 [default=0];
-  optional int32 field217 = 217 [default=0];
-  optional int32 field218 = 218 [default=0];
-  optional int32 field220 = 220 [default=0];
-  optional int32 field221 = 221 [default=0];
-  optional float field222 = 222 [default=0.0];
-  optional int32 field63 = 63;
-
-  repeated group Group1 = 10 {
-    required float field11 = 11;
-    optional float field26 = 26;
-    optional string field12 = 12;
-    optional string field13 = 13;
-    repeated string field14 = 14;
-    required uint64 field15 = 15;
-    optional int32 field5 = 5;
-    optional string field27 = 27;
-    optional int32 field28 = 28;
-    optional string field29 = 29;
-    optional string field16 = 16;
-    repeated string field22 = 22;
-    repeated int32 field73 = 73;
-    optional int32 field20 = 20 [default=0];
-    optional string field24 = 24;
-    optional SizeMessage2GroupedMessage field31 = 31;
-  }
-  repeated string field128 = 128;
-  optional int64 field131 = 131;
-  repeated string field127 = 127;
-  optional int32 field129 = 129;
-  repeated int64 field130 = 130;
-  optional bool field205 = 205 [default=false];
-  optional bool field206 = 206 [default=false];
-}
-
-message SizeMessage2GroupedMessage {
-  optional float field1 = 1;
-  optional float field2 = 2;
-  optional float field3 = 3 [default=0.0];
-  optional bool field4 = 4;
-  optional bool field5 = 5;
-  optional bool field6 = 6 [default=true];
-  optional bool field7 = 7 [default=false];
-  optional float field8 = 8;
-  optional bool field9 = 9;
-  optional float field10 = 10;
-  optional int64 field11 = 11;
-}

+ 0 - 95
benchmarks/java/pom.xml

@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>protobuf-java-benchmark</artifactId>
-  <groupId>com.google.protobuf</groupId>
-  <version>1.0.0</version>
-  <name>Protocol Buffers [Benchmark]</name>
-  <description>The benchmark tools for Protobuf Java.</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-      <version>3.5.0</version>
-    </dependency>
-    <dependency>
-      <groupId>com.google.caliper</groupId>
-      <artifactId>caliper</artifactId>
-      <version>1.0-beta-2</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-assembly-plugin</artifactId>
-          <version>2.4.1</version>
-          <configuration>
-            <!-- get all project dependencies -->
-            <descriptorRefs>
-              <descriptorRef>jar-with-dependencies</descriptorRef>
-            </descriptorRefs>
-            <!-- MainClass in mainfest make a executable jar -->
-            <archive>
-              <manifest>
-                <mainClass>com.mkyong.core.utils.App</mainClass>
-              </manifest>
-            </archive>
-          </configuration>
-          <executions>
-            <execution>
-              <id>make-assembly</id>
-              <!-- bind to the packaging phase -->
-              <phase>package</phase>
-              <goals>
-                <goal>single</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.5.1</version>
-          <configuration>
-            <source>1.8</source>
-            <target>1.8</target>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <version>2.5</version>
-          <configuration>
-            <archive>
-              <manifest>
-                <addClasspath>true</addClasspath>
-                <mainClass>com.google.protocolbuffers.ProtoBench</mainClass>
-              </manifest>
-            </archive>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-source-plugin</artifactId>
-          <version>2.4</version>
-          <executions>
-            <execution>
-              <id>attach-sources</id>
-              <goals>
-                <goal>jar-no-fork</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-</project>
-

+ 0 - 180
benchmarks/java/src/main/java/com/google/protobuf/ProtoBench.java

@@ -1,180 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2009 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-package com.google.protobuf;
-
-import com.google.caliper.BeforeExperiment;
-import com.google.caliper.Benchmark;
-import com.google.caliper.Param;
-import com.google.caliper.runner.CaliperMain;
-import com.google.protobuf.ByteString;
-import com.google.protobuf.CodedInputStream;
-import com.google.protobuf.CodedOutputStream;
-import com.google.protobuf.ExtensionRegistry;
-import com.google.protobuf.Message;
-import com.google.protobuf.benchmarks.Benchmarks.BenchmarkDataset;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.RandomAccessFile;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
-
-
-public class ProtoBench {
-
-  private ProtoBench() {
-    // Prevent instantiation
-  }
-    
-  public static void main(String[] args) {
-    if (args.length < 1) {
-      System.err.println("Usage: ./java-benchmark <input data>");
-      System.err.println("input data is in the format of \"benchmarks.proto\"");
-      System.exit(1);
-    }
-    boolean success = true;
-    for (int i = 0; i < args.length; i++) {
-      success &= runTest(args[i]);
-    }
-    System.exit(success ? 0 : 1);
-  }
-  
- 
-  /**
-   * Runs a single test with specific test data. Error messages are displayed to stderr, 
-   * and the return value indicates general success/failure.
-   */
-  public static boolean runTest(String file) {
-    byte[] inputData;
-    BenchmarkDataset benchmarkDataset;
-    try {
-      inputData = readAllBytes(file);
-      benchmarkDataset = BenchmarkDataset.parseFrom(inputData);
-    } catch (IOException e) {
-      System.err.println("Unable to get input data");
-      return false;
-    }
-    List<String> argsList = getCaliperOption(benchmarkDataset);
-    if (argsList == null) {
-      System.err.println("Unable to get default message " + benchmarkDataset.getMessageName());
-      return false;
-    }
-    argsList.add("-DdataFile=" + file);
-    argsList.add("com.google.protobuf.ProtoBenchCaliper");
-    
-    try {
-      String args[] = new String[argsList.size()];
-      argsList.toArray(args);
-      CaliperMain.exitlessMain(args,
-          new PrintWriter(System.out, true), new PrintWriter(System.err, true));
-    } catch (Exception e) {
-      System.err.println("Error: " + e.getMessage());
-      System.err.println("Detailed exception information:");
-      e.printStackTrace(System.err);
-      return false;
-    }
-    try {
-      double mininumScale = 0;
-      // If the file not exist, this will throw IOException, which won't print the warning 
-      // information below.
-      Scanner scanner = new Scanner(new String(readAllBytes("JavaBenchmarkWarning.txt")));
-      while (scanner.hasNext()) {
-        mininumScale = Math.max(mininumScale, scanner.nextDouble());
-      }
-      scanner.close();
-      
-      System.out.println(
-         "WARNING: This benchmark's whole iterations are not enough, consider to config caliper to "
-        + "run for more time to make the result more convincing. You may change the configure "
-        + "code in com.google.protobuf.ProtoBench.getCaliperOption() of benchmark " 
-        + benchmarkDataset.getMessageName()
-        + " to run for more time. e.g. Change the value of "
-        + "instrument.runtime.options.timingInterval or value of "
-        + "instrument.runtime.options.measurements to be at least "
-        + Math.round(mininumScale * 10 + 1) / 10.0 
-        + " times of before, then build and run the benchmark again\n");
-      Files.deleteIfExists(Paths.get("JavaBenchmarkWarning.txt"));
-    } catch (IOException e) {
-      // The IOException here should be file not found, which means there's no warning generated by
-      // The benchmark, so this IOException should be discarded.
-    }
-    return true;
-  }
-  
-  
-  private static List<String> getCaliperOption(final BenchmarkDataset benchmarkDataset) {
-    List<String> temp = new ArrayList<String>();
-    if (benchmarkDataset.getMessageName().equals("benchmarks.proto3.GoogleMessage1")) {
-      temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE1_PROTO3");
-    } else if (benchmarkDataset.getMessageName().equals("benchmarks.proto2.GoogleMessage1")) {
-      temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE1_PROTO2");
-    } else if (benchmarkDataset.getMessageName().equals("benchmarks.proto2.GoogleMessage2")) {
-      temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE2");
-    } else if (benchmarkDataset.getMessageName().
-        equals("benchmarks.google_message3.GoogleMessage3")) {
-      temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE3");
-      temp.add("-Cinstrument.runtime.options.timingInterval=3000ms");
-      temp.add("-Cinstrument.runtime.options.measurements=20");
-    } else if (benchmarkDataset.getMessageName().
-        equals("benchmarks.google_message4.GoogleMessage4")) {
-      temp.add("-DbenchmarkMessageType=GOOGLE_MESSAGE4");
-      temp.add("-Cinstrument.runtime.options.timingInterval=1500ms");
-      temp.add("-Cinstrument.runtime.options.measurements=20");
-    } else {
-      return null;
-    }
-    
-    temp.add("-i");
-    temp.add("runtime");
-    temp.add("-b");
-    String benchmarkNames = "serializeToByteString,serializeToByteArray,serializeToMemoryStream"
-       + ",deserializeFromByteString,deserializeFromByteArray,deserializeFromMemoryStream";
-    temp.add(benchmarkNames);
-    
-    return temp;
-  }
-  
-  public static byte[] readAllBytes(String filename) throws IOException {
-    RandomAccessFile file = new RandomAccessFile(new File(filename), "r");
-    byte[] content = new byte[(int) file.length()];
-    file.readFully(content);
-    return content;
-  }
-}

+ 0 - 197
benchmarks/java/src/main/java/com/google/protobuf/ProtoBenchCaliper.java

@@ -1,197 +0,0 @@
-
-package com.google.protobuf;
-
-import com.google.caliper.BeforeExperiment;
-import com.google.caliper.AfterExperiment;
-import com.google.caliper.Benchmark;
-import com.google.caliper.Param;
-import com.google.protobuf.ByteString;
-import com.google.protobuf.CodedOutputStream;
-import com.google.protobuf.ExtensionRegistry;
-import com.google.protobuf.Message;
-import com.google.protobuf.benchmarks.Benchmarks.BenchmarkDataset;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.BufferedWriter;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ProtoBenchCaliper {
-  public enum BenchmarkMessageType {
-    GOOGLE_MESSAGE1_PROTO3 {
-      @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
-      @Override
-      Message getDefaultInstance() {
-        return com.google.protobuf.benchmarks.BenchmarkMessage1Proto3.GoogleMessage1
-            .getDefaultInstance();
-      }
-    },
-    GOOGLE_MESSAGE1_PROTO2 {
-      @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
-      @Override
-      Message getDefaultInstance() {
-        return com.google.protobuf.benchmarks.BenchmarkMessage1Proto2.GoogleMessage1
-            .getDefaultInstance();
-      }
-    },
-    GOOGLE_MESSAGE2 {
-      @Override ExtensionRegistry getExtensionRegistry() { return ExtensionRegistry.newInstance(); }
-      @Override
-      Message getDefaultInstance() {
-        return com.google.protobuf.benchmarks.BenchmarkMessage2.GoogleMessage2.getDefaultInstance();
-      }
-    },
-    GOOGLE_MESSAGE3 {
-      @Override
-      ExtensionRegistry getExtensionRegistry() {
-        ExtensionRegistry extensions = ExtensionRegistry.newInstance();
-        benchmarks.google_message3.BenchmarkMessage38.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage37.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage36.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage35.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage34.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage33.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage32.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage31.registerAllExtensions(extensions);
-        benchmarks.google_message3.BenchmarkMessage3.registerAllExtensions(extensions);
-        return extensions;
-      }
-      @Override
-      Message getDefaultInstance() {
-        return benchmarks.google_message3.BenchmarkMessage3.GoogleMessage3.getDefaultInstance();
-      }
-    },
-    GOOGLE_MESSAGE4 {
-      @Override
-      ExtensionRegistry getExtensionRegistry() {
-        ExtensionRegistry extensions = ExtensionRegistry.newInstance();
-        benchmarks.google_message4.BenchmarkMessage43.registerAllExtensions(extensions);
-        benchmarks.google_message4.BenchmarkMessage42.registerAllExtensions(extensions);
-        benchmarks.google_message4.BenchmarkMessage41.registerAllExtensions(extensions);
-        benchmarks.google_message4.BenchmarkMessage4.registerAllExtensions(extensions);
-        return extensions;
-      }
-      @Override
-      Message getDefaultInstance() {
-        return benchmarks.google_message4.BenchmarkMessage4.GoogleMessage4.getDefaultInstance();
-      }
-    };
-    
-    abstract ExtensionRegistry getExtensionRegistry();
-    abstract Message getDefaultInstance();
-  }
-  
-  @Param 
-  private BenchmarkMessageType benchmarkMessageType;
-  @Param
-  private String dataFile;
-  
-  private byte[] inputData;
-  private BenchmarkDataset benchmarkDataset;
-  private Message defaultMessage;
-  private ExtensionRegistry extensions;
-  private List<byte[]> inputDataList;
-  private List<ByteArrayInputStream> inputStreamList;
-  private List<ByteString> inputStringList;
-  private List<Message> sampleMessageList;
-  private long counter;
-  
-  @BeforeExperiment
-  void setUp() throws IOException {
-    inputData = ProtoBench.readAllBytes(dataFile);
-    benchmarkDataset = BenchmarkDataset.parseFrom(inputData);
-    defaultMessage = benchmarkMessageType.getDefaultInstance();
-    extensions = benchmarkMessageType.getExtensionRegistry();
-    inputDataList = new ArrayList<byte[]>();
-    inputStreamList = new ArrayList<ByteArrayInputStream>();
-    inputStringList = new ArrayList<ByteString>();
-    sampleMessageList = new ArrayList<Message>();
-    
-    for (int i = 0; i < benchmarkDataset.getPayloadCount(); i++) {
-      byte[] singleInputData = benchmarkDataset.getPayload(i).toByteArray();
-      inputDataList.add(benchmarkDataset.getPayload(i).toByteArray());
-      inputStreamList.add(new ByteArrayInputStream(
-          benchmarkDataset.getPayload(i).toByteArray()));
-      inputStringList.add(benchmarkDataset.getPayload(i));
-      sampleMessageList.add(
-          defaultMessage.newBuilderForType().mergeFrom(singleInputData, extensions).build());
-    }
-    
-    counter = 0;
-  }
-  
-  
-  @Benchmark
-  void serializeToByteString(int reps) throws IOException {
-    for (int i = 0; i < reps; i++) {
-      sampleMessageList.get((int) (counter % sampleMessageList.size())).toByteString();
-      counter++;
-    }
-  }
-  
-  @Benchmark
-  void serializeToByteArray(int reps) throws IOException {
-    for (int i = 0; i < reps; i++) {
-      sampleMessageList.get((int) (counter % sampleMessageList.size())).toByteArray();
-      counter++;
-    }
-  }
-  
-  @Benchmark
-  void serializeToMemoryStream(int reps) throws IOException {
-    for (int i = 0; i < reps; i++) {
-      ByteArrayOutputStream output = new ByteArrayOutputStream();
-      sampleMessageList.get((int) (counter % sampleMessageList.size())).writeTo(output);
-      counter++;
-    }
-  }
-  
-  @Benchmark
-  void deserializeFromByteString(int reps) throws IOException {
-    for (int i = 0; i < reps; i++) {
-      benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
-          inputStringList.get((int) (counter % inputStringList.size())), extensions);
-      counter++;
-    }
-  }
-  
-  @Benchmark
-  void deserializeFromByteArray(int reps) throws IOException {
-    for (int i = 0; i < reps; i++) {
-      benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
-          inputDataList.get((int) (counter % inputDataList.size())), extensions);
-      counter++;
-    }
-  }
-  
-  @Benchmark
-  void deserializeFromMemoryStream(int reps) throws IOException {
-    for (int i = 0; i < reps; i++) {
-      benchmarkMessageType.getDefaultInstance().getParserForType().parseFrom(
-          inputStreamList.get((int) (counter % inputStreamList.size())), extensions);
-      inputStreamList.get((int) (counter % inputStreamList.size())).reset();
-      counter++;
-    }
-  }
-  
-  @AfterExperiment
-  void checkCounter() throws IOException {
-    if (counter == 1) {
-      // Dry run
-      return;
-    }
-    if (benchmarkDataset.getPayloadCount() != 1 
-        && counter < benchmarkDataset.getPayloadCount() * 10L) {
-      BufferedWriter writer = new BufferedWriter(new FileWriter("JavaBenchmarkWarning.txt", true));
-      // If the total number of non-warmup reps is smaller than 100 times of the total number of 
-      // datasets, then output the scale that need to multiply to the configuration (either extend
-      // the running time for one timingInterval or run for more measurements). 
-      writer.append(1.0 * benchmarkDataset.getPayloadCount() * 10L / counter + " ");
-      writer.close();
-    }
-  }
-}

+ 0 - 117
benchmarks/py_benchmark.py

@@ -1,117 +0,0 @@
-import sys
-import os
-import timeit
-import math
-import fnmatch
-
-# BEGIN CPP GENERATED MESSAGE
-# CPP generated code must be linked before importing the generated Python code
-# for the descriptor can be found in the pool
-if len(sys.argv) < 2:
-  raise IOError("Need string argument \"true\" or \"false\" for whether to use cpp generated code")
-if sys.argv[1] == "true":
-  sys.path.append( os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) + "/.libs" )
-  import libbenchmark_messages
-  sys.path.append( os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) + "/tmp" )
-elif sys.argv[1] != "false":
-  raise IOError("Need string argument \"true\" or \"false\" for whether to use cpp generated code")
-# END CPP GENERATED MESSAGE
-
-import datasets.google_message1.benchmark_message1_proto2_pb2 as benchmark_message1_proto2_pb2
-import datasets.google_message1.benchmark_message1_proto3_pb2 as benchmark_message1_proto3_pb2
-import datasets.google_message2.benchmark_message2_pb2 as benchmark_message2_pb2
-import datasets.google_message3.benchmark_message3_pb2 as benchmark_message3_pb2
-import datasets.google_message4.benchmark_message4_pb2 as benchmark_message4_pb2
-import benchmarks_pb2 as benchmarks_pb2
-
-
-def run_one_test(filename):
-  data = open(os.path.dirname(sys.argv[0]) + "/../" + filename).read()
-  benchmark_dataset = benchmarks_pb2.BenchmarkDataset()
-  benchmark_dataset.ParseFromString(data)
-  benchmark_util = Benchmark(full_iteration=len(benchmark_dataset.payload),
-                             module="py_benchmark",
-                             setup_method="init")
-  print "Message %s of dataset file %s" % \
-    (benchmark_dataset.message_name, filename)
-  benchmark_util.set_test_method("parse_from_benchmark")
-  print benchmark_util.run_benchmark(setup_method_args='"%s"' % (filename))
-  benchmark_util.set_test_method("serialize_to_benchmark")
-  print benchmark_util.run_benchmark(setup_method_args='"%s"' % (filename))
-  print ""
-
-def init(filename):
-  global benchmark_dataset, message_class, message_list, counter
-  message_list=[]
-  counter = 0
-  data = open(os.path.dirname(sys.argv[0]) + "/../" + filename).read()
-  benchmark_dataset = benchmarks_pb2.BenchmarkDataset()
-  benchmark_dataset.ParseFromString(data)
-
-  if benchmark_dataset.message_name == "benchmarks.proto3.GoogleMessage1":
-    message_class = benchmark_message1_proto3_pb2.GoogleMessage1
-  elif benchmark_dataset.message_name == "benchmarks.proto2.GoogleMessage1":
-    message_class = benchmark_message1_proto2_pb2.GoogleMessage1
-  elif benchmark_dataset.message_name == "benchmarks.proto2.GoogleMessage2":
-    message_class = benchmark_message2_pb2.GoogleMessage2
-  elif benchmark_dataset.message_name == "benchmarks.google_message3.GoogleMessage3":
-    message_class = benchmark_message3_pb2.GoogleMessage3
-  elif benchmark_dataset.message_name == "benchmarks.google_message4.GoogleMessage4":
-    message_class = benchmark_message4_pb2.GoogleMessage4
-  else:
-    raise IOError("Message %s not found!" % (benchmark_dataset.message_name))
-
-  for one_payload in benchmark_dataset.payload:
-    temp = message_class()
-    temp.ParseFromString(one_payload)
-    message_list.append(temp)
-
-def parse_from_benchmark():
-  global counter, message_class, benchmark_dataset
-  m = message_class().ParseFromString(benchmark_dataset.payload[counter % len(benchmark_dataset.payload)])
-  counter = counter + 1
-
-def serialize_to_benchmark():
-  global counter, message_list, message_class
-  s = message_list[counter % len(benchmark_dataset.payload)].SerializeToString()
-  counter = counter + 1
-
-
-class Benchmark:
-  def __init__(self, module=None, test_method=None,
-               setup_method=None, full_iteration = 1):
-    self.full_iteration = full_iteration
-    self.module = module
-    self.test_method = test_method
-    self.setup_method = setup_method
-
-  def set_test_method(self, test_method):
-    self.test_method = test_method
-
-  def full_setup_code(self, setup_method_args=''):
-    setup_code = ""
-    setup_code += "from %s import %s\n" % (self.module, self.test_method)
-    setup_code += "from %s import %s\n" % (self.module, self.setup_method)
-    setup_code += "%s(%s)\n" % (self.setup_method, setup_method_args)
-    return setup_code
-
-  def dry_run(self, test_method_args='', setup_method_args=''):
-    return timeit.timeit(stmt="%s(%s)" % (self.test_method, test_method_args),
-                         setup=self.full_setup_code(setup_method_args),
-                         number=self.full_iteration);
-
-  def run_benchmark(self, test_method_args='', setup_method_args=''):
-    reps = self.full_iteration;
-    t = self.dry_run(test_method_args, setup_method_args);
-    if t < 3 :
-      reps = int(math.ceil(3 / t)) * self.full_iteration
-    t = timeit.timeit(stmt="%s(%s)" % (self.test_method, test_method_args),
-                      setup=self.full_setup_code(setup_method_args),
-                      number=reps);
-    return "Average time for %s: %.2f ns" % \
-      (self.test_method, 1.0 * t / reps * (10 ** 9))
-
-
-if __name__ == "__main__":
-  for i in range(2, len(sys.argv)):
-    run_one_test(sys.argv[i])

+ 0 - 29
benchmarks/python_benchmark_messages.cc

@@ -1,29 +0,0 @@
-#include <Python.h>
-
-#include "benchmarks.pb.h"
-#include "datasets/google_message1/benchmark_message1_proto2.pb.h"
-#include "datasets/google_message1/benchmark_message1_proto3.pb.h"
-#include "datasets/google_message2/benchmark_message2.pb.h"
-#include "datasets/google_message3/benchmark_message3.pb.h"
-#include "datasets/google_message4/benchmark_message4.pb.h"
-
-static PyMethodDef python_benchmark_methods[] = {
-    {NULL, NULL, 0, NULL}        /* Sentinel */
-};
-
-
-PyMODINIT_FUNC
-initlibbenchmark_messages() {
-  benchmarks::BenchmarkDataset().descriptor();
-  benchmarks::proto3::GoogleMessage1().descriptor();
-  benchmarks::proto2::GoogleMessage1().descriptor();
-  benchmarks::proto2::GoogleMessage2().descriptor();
-  benchmarks::google_message3::GoogleMessage3().descriptor();
-  benchmarks::google_message4::GoogleMessage4().descriptor();
-
-  PyObject *m;
-
-  m = Py_InitModule("libbenchmark_messages", python_benchmark_methods);
-  if (m == NULL)
-      return;
-}

+ 0 - 205
cmake/CMakeLists.txt

@@ -1,205 +0,0 @@
-# Minimum CMake required
-cmake_minimum_required(VERSION 2.8.12)
-
-if(protobuf_VERBOSE)
-  message(STATUS "Protocol Buffers Configuring...")
-endif()
-
-# CMake policies
-cmake_policy(SET CMP0022 NEW)
-
-# Project
-project(protobuf C CXX)
-
-# Options
-option(protobuf_BUILD_TESTS "Build tests" ON)
-option(protobuf_BUILD_EXAMPLES "Build examples" OFF)
-option(protobuf_BUILD_PROTOC_BINARIES "Build libprotoc and protoc compiler" ON)
-if (BUILD_SHARED_LIBS)
-  set(protobuf_BUILD_SHARED_LIBS_DEFAULT ON)
-else (BUILD_SHARED_LIBS)
-  set(protobuf_BUILD_SHARED_LIBS_DEFAULT OFF)
-endif (BUILD_SHARED_LIBS)
-option(protobuf_BUILD_SHARED_LIBS "Build Shared Libraries" ${protobuf_BUILD_SHARED_LIBS_DEFAULT})
-include(CMakeDependentOption)
-cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" ON
-  "NOT protobuf_BUILD_SHARED_LIBS" OFF)
-if (MSVC)
-  set(protobuf_WITH_ZLIB_DEFAULT OFF)
-else (MSVC)
-  set(protobuf_WITH_ZLIB_DEFAULT ON)
-endif (MSVC)
-option(protobuf_WITH_ZLIB "Build with zlib support" ${protobuf_WITH_ZLIB_DEFAULT})
-set(protobuf_DEBUG_POSTFIX "d"
-  CACHE STRING "Default debug postfix")
-mark_as_advanced(protobuf_DEBUG_POSTFIX)
-# User options
-include(protobuf-options.cmake)
-
-# Path to main configure script
-set(protobuf_CONFIGURE_SCRIPT "../configure.ac")
-
-# Parse configure script
-set(protobuf_AC_INIT_REGEX
-  "^AC_INIT\\(\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\]\\)$")
-file(STRINGS "${protobuf_CONFIGURE_SCRIPT}" protobuf_AC_INIT_LINE
-  LIMIT_COUNT 1 REGEX "^AC_INIT")
-# Description
-string(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\1"
-    protobuf_DESCRIPTION    "${protobuf_AC_INIT_LINE}")
-# Version
-string(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\2"
-    protobuf_VERSION_STRING "${protobuf_AC_INIT_LINE}")
-# Contact
-string(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\3"
-    protobuf_CONTACT        "${protobuf_AC_INIT_LINE}")
-# Parse version tweaks
-set(protobuf_VERSION_REGEX "^([0-9]+)\\.([0-9]+)\\.([0-9]+)-?(.*)$")
-string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\1"
-  protobuf_VERSION_MAJOR "${protobuf_VERSION_STRING}")
-string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\2"
-  protobuf_VERSION_MINOR "${protobuf_VERSION_STRING}")
-string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\3"
-  protobuf_VERSION_PATCH "${protobuf_VERSION_STRING}")
-string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\4"
-  protobuf_VERSION_PRERELEASE "${protobuf_VERSION_STRING}")
-
-# Package version
-set(protobuf_VERSION
-  "${protobuf_VERSION_MAJOR}.${protobuf_VERSION_MINOR}.${protobuf_VERSION_PATCH}")
-
-if(protobuf_VERSION_PRERELEASE)
-  set(protobuf_VERSION "${protobuf_VERSION}-${protobuf_VERSION_PRERELEASE}")
-endif()
-
-if(protobuf_VERBOSE)
-  message(STATUS "Configuration script parsing status [")
-  message(STATUS "  Description : ${protobuf_DESCRIPTION}")
-  message(STATUS "  Version     : ${protobuf_VERSION} (${protobuf_VERSION_STRING})")
-  message(STATUS "  Contact     : ${protobuf_CONTACT}")
-  message(STATUS "]")
-endif()
-
-add_definitions(-DGOOGLE_PROTOBUF_CMAKE_BUILD)
-
-find_package(Threads REQUIRED)
-if (CMAKE_USE_PTHREADS_INIT)
-  add_definitions(-DHAVE_PTHREAD)
-endif (CMAKE_USE_PTHREADS_INIT)
-
-set(_protobuf_FIND_ZLIB)
-if (protobuf_WITH_ZLIB)
-  find_package(ZLIB)
-  if (ZLIB_FOUND)
-    set(HAVE_ZLIB 1)
-    # FindZLIB module define ZLIB_INCLUDE_DIRS variable
-    # Set ZLIB_INCLUDE_DIRECTORIES for compatible
-    set(ZLIB_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRECTORIES} ${ZLIB_INCLUDE_DIRS})
-    # Using imported target if exists
-    if (TARGET ZLIB::ZLIB)
-      set(ZLIB_LIBRARIES ZLIB::ZLIB)
-      set(_protobuf_FIND_ZLIB "if(NOT ZLIB_FOUND)\n  find_package(ZLIB)\nendif()")
-    endif (TARGET ZLIB::ZLIB)
-  else (ZLIB_FOUND)
-    set(HAVE_ZLIB 0)
-    # Explicitly set these to empty (override NOT_FOUND) so cmake doesn't
-    # complain when we use them later.
-    set(ZLIB_INCLUDE_DIRECTORIES)
-    set(ZLIB_LIBRARIES)
-  endif (ZLIB_FOUND)
-endif (protobuf_WITH_ZLIB)
-
-if (HAVE_ZLIB)
-  add_definitions(-DHAVE_ZLIB)
-endif (HAVE_ZLIB)
-
-if (protobuf_BUILD_SHARED_LIBS)
-  set(protobuf_SHARED_OR_STATIC "SHARED")
-else (protobuf_BUILD_SHARED_LIBS)
-  set(protobuf_SHARED_OR_STATIC "STATIC")
-  # In case we are building static libraries, link also the runtime library statically
-  # so that MSVCR*.DLL is not required at runtime.
-  # https://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
-  # This is achieved by replacing msvc option /MD with /MT and /MDd with /MTd
-  # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F
-  if (MSVC AND protobuf_MSVC_STATIC_RUNTIME)
-    foreach(flag_var
-        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
-        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
-      if(${flag_var} MATCHES "/MD")
-        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
-      endif(${flag_var} MATCHES "/MD")
-    endforeach(flag_var)
-  endif (MSVC AND protobuf_MSVC_STATIC_RUNTIME)
-endif (protobuf_BUILD_SHARED_LIBS)
-
-if (MSVC)
-  # Build with multiple processes
-  add_definitions(/MP)
-  # MSVC warning suppressions
-  add_definitions(
-    /wd4018 # 'expression' : signed/unsigned mismatch
-    /wd4065 # switch statement contains 'default' but no 'case' labels
-    /wd4146 # unary minus operator applied to unsigned type, result still unsigned
-    /wd4244 # 'conversion' conversion from 'type1' to 'type2', possible loss of data
-    /wd4251 # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
-    /wd4267 # 'var' : conversion from 'size_t' to 'type', possible loss of data
-    /wd4305 # 'identifier' : truncation from 'type1' to 'type2'
-    /wd4307 # 'operator' : integral constant overflow
-    /wd4309 # 'conversion' : truncation of constant value
-    /wd4334 # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)
-    /wd4355 # 'this' : used in base member initializer list
-    /wd4506 # no definition for inline function 'function'
-    /wd4800 # 'type' : forcing value to bool 'true' or 'false' (performance warning)
-    /wd4996 # The compiler encountered a deprecated declaration.
-  )
-  # Allow big object
-  add_definitions(/bigobj)
-  string(REPLACE "/" "\\" PROTOBUF_SOURCE_WIN32_PATH ${protobuf_SOURCE_DIR})
-  string(REPLACE "/" "\\" PROTOBUF_BINARY_WIN32_PATH ${protobuf_BINARY_DIR})
-  configure_file(extract_includes.bat.in extract_includes.bat)
-  
-  # Suppress linker warnings about files with no symbols defined.
-  set(CMAKE_STATIC_LINKER_FLAGS /ignore:4221)
-endif (MSVC)
-
-get_filename_component(protobuf_source_dir ${protobuf_SOURCE_DIR} PATH)
-
-include_directories(
-  ${ZLIB_INCLUDE_DIRECTORIES}
-  ${protobuf_BINARY_DIR}
-  ${protobuf_source_dir}/src)
-
-if (MSVC)
-  # Add the "lib" prefix for generated .lib outputs.
-  set(LIB_PREFIX lib)
-else (MSVC)
-  # When building with "make", "lib" prefix will be added automatically by
-  # the build tool.
-  set(LIB_PREFIX)
-endif (MSVC)
-
-if (protobuf_UNICODE)
-  add_definitions(-DUNICODE -D_UNICODE)
-endif (protobuf_UNICODE)
-
-include(libprotobuf-lite.cmake)
-include(libprotobuf.cmake)
-if (protobuf_BUILD_PROTOC_BINARIES)
-  include(libprotoc.cmake)
-  include(protoc.cmake)
-endif (protobuf_BUILD_PROTOC_BINARIES)
-
-if (protobuf_BUILD_TESTS)
-  include(tests.cmake)
-endif (protobuf_BUILD_TESTS)
-
-include(install.cmake)
-
-if (protobuf_BUILD_EXAMPLES)
-  include(examples.cmake)
-endif (protobuf_BUILD_EXAMPLES)
-
-if(protobuf_VERBOSE)
-    message(STATUS "Protocol Buffers Configuring done")
-endif()

+ 0 - 336
cmake/README.md

@@ -1,336 +0,0 @@
-This directory contains *CMake* files that can be used to build protobuf
-with *MSVC* on *Windows*. You can build the project from *Command Prompt*
-and using an *Visual Studio* IDE.
-
-You need to have [CMake](http://www.cmake.org), [Visual Studio](https://www.visualstudio.com)
-and optionally [Git](http://git-scm.com) installed on your computer before proceeding.
-
-Most of the instructions will be given to the *Сommand Prompt*, but the same
-actions can be performed using appropriate GUI tools.
-
-Environment Setup
-=================
-
-Open the appropriate *Command Prompt* from the *Start* menu.
-
-For example *VS2013 x64 Native Tools Command Prompt*:
-
-    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64>
-
-Change to your working directory:
-
-    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64>cd C:\Path\to
-    C:\Path\to>
-
-Where *C:\Path\to* is path to your real working directory.
-
-Create a folder where protobuf headers/libraries/binaries will be installed after built:
-
-    C:\Path\to>mkdir install
-
-If *cmake* command is not available from *Command Prompt*, add it to system *PATH* variable:
-
-    C:\Path\to>set PATH=%PATH%;C:\Program Files (x86)\CMake\bin
-
-If *git* command is not available from *Command Prompt*, add it to system *PATH* variable:
-
-    C:\Path\to>set PATH=%PATH%;C:\Program Files\Git\cmd
-
-Good. Now you are ready to continue.
-
-Getting Sources
-===============
-
-You can get the latest stable source packages from the
-[releases](https://github.com/google/protobuf/releases) page.
-Or you can type:
-
-     C:\Path\to> git clone -b [release_tag] https://github.com/google/protobuf.git
-
-Where *[release_tag]* is a git tag like *v3.0.0-beta-1* or a branch name like *master*
-if you want to get the latest code.
-
-Go to the project folder:
-
-     C:\Path\to>cd protobuf
-     C:\Path\to\protobuf>
-
-Protobuf unit-tests require gmock to build. If you download protobuf source code
-from the *releases* page, the *gmock* directory should already be there. If you checkout
-the code via `git clone`, this *gmock* directory won't exist and you will have to
-download it manually or skip building protobuf unit-tests.
-
-You can download gmock as follows:
-
-     C:\Path\to\protobuf>git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock
-
-Then go to *gmock* folder and download gtest:
-
-     C:\Path\to\protobuf>cd gmock
-     C:\Path\to\protobuf\gmock>git clone -b release-1.7.0 https://github.com/google/googletest.git gtest
-
-If you absolutely don't want to build and run protobuf unit-tests, skip
-this steps and use protobuf at your own risk.
-
-Now go to *cmake* folder in protobuf sources:
-
-     C:\Path\to\protobuf\gmock>cd ..\cmake
-     C:\Path\to\protobuf\cmake>
-
-Good. Now you are ready to *CMake* configuration.
-
-CMake Configuration
-===================
-
-*CMake* supports a lot of different
-[generators](http://www.cmake.org/cmake/help/latest/manual/cmake-generators.7.html)
-for various native build systems.
-We are only interested in
-[Makefile](http://www.cmake.org/cmake/help/latest/manual/cmake-generators.7.html#makefile-generators)
-and
-[Visual Studio](http://www.cmake.org/cmake/help/latest/manual/cmake-generators.7.html#visual-studio-generators)
-generators.
-
-We will use shadow building to separate the temporary files from the protobuf source code.
-
-Create a temporary *build* folder and change your working directory to it:
-
-     C:\Path\to\protobuf\cmake>mkdir build & cd build
-     C:\Path\to\protobuf\cmake\build>
-
-The *Makefile* generator can build the project in only one configuration, so you need to build
-a separate folder for each configuration.
-
-To start using a *Release* configuration:
-
-     C:\Path\to\protobuf\cmake\build>mkdir release & cd release
-     C:\Path\to\protobuf\cmake\build\release>cmake -G "NMake Makefiles" ^
-     -DCMAKE_BUILD_TYPE=Release ^
-     -DCMAKE_INSTALL_PREFIX=../../../../install ^
-     ../..
-
-It will generate *nmake* *Makefile* in current directory.
-
-To use *Debug* configuration:
-
-     C:\Path\to\protobuf\cmake\build>mkdir debug & cd debug
-     C:\Path\to\protobuf\cmake\build\debug>cmake -G "NMake Makefiles" ^
-     -DCMAKE_BUILD_TYPE=Debug ^
-     -DCMAKE_INSTALL_PREFIX=../../../../install ^
-     ../..
-
-It will generate *nmake* *Makefile* in current directory.
-
-To create *Visual Studio* solution file:
-
-     C:\Path\to\protobuf\cmake\build>mkdir solution & cd solution
-     C:\Path\to\protobuf\cmake\build\solution>cmake -G "Visual Studio 12 2013 Win64" ^
-     -DCMAKE_INSTALL_PREFIX=../../../../install ^
-     ../..
-
-It will generate *Visual Studio* solution file *protobuf.sln* in current directory.
-
-If the *gmock* directory does not exist, and you do not want to build protobuf unit tests,
-you need to add *cmake* command argument `-Dprotobuf_BUILD_TESTS=OFF` to disable testing.
-
-Compiling
-=========
-
-To compile protobuf:
-
-     C:\Path\to\protobuf\cmake\build\release>nmake
-
-or
-
-     C:\Path\to\protobuf\cmake\build\debug>nmake
-
-And wait for the compilation to finish.
-
-If you prefer to use the IDE:
-
-  * Open the generated protobuf.sln file in Microsoft Visual Studio.
-  * Choose "Debug" or "Release" configuration as desired.
-  * From the Build menu, choose "Build Solution".
-
-And wait for the compilation to finish.
-
-Testing
-=======
-
-To run unit-tests, first you must compile protobuf as described above.
-Then run:
-
-     C:\Path\to\protobuf\cmake\build\release>nmake check
-
-or
-
-     C:\Path\to\protobuf\cmake\build\debug>nmake check
-
-You can also build project *check* from Visual Studio solution.
-Yes, it may sound strange, but it works.
-
-You should see output similar to:
-
-     Running main() from gmock_main.cc
-     [==========] Running 1546 tests from 165 test cases.
-     
-     ...
-     
-     [==========] 1546 tests from 165 test cases ran. (2529 ms total)
-     [  PASSED  ] 1546 tests.
-
-To run specific tests:
-
-     C:\Path\to\protobuf>cmake\build\release\tests.exe --gtest_filter=AnyTest*
-     Running main() from gmock_main.cc
-     Note: Google Test filter = AnyTest*
-     [==========] Running 3 tests from 1 test case.
-     [----------] Global test environment set-up.
-     [----------] 3 tests from AnyTest
-     [ RUN      ] AnyTest.TestPackAndUnpack
-     [       OK ] AnyTest.TestPackAndUnpack (0 ms)
-     [ RUN      ] AnyTest.TestPackAndUnpackAny
-     [       OK ] AnyTest.TestPackAndUnpackAny (0 ms)
-     [ RUN      ] AnyTest.TestIs
-     [       OK ] AnyTest.TestIs (0 ms)
-     [----------] 3 tests from AnyTest (1 ms total)
-     
-     [----------] Global test environment tear-down
-     [==========] 3 tests from 1 test case ran. (2 ms total)
-     [  PASSED  ] 3 tests.
-
-Note that the tests must be run from the source folder.
-
-If all tests are passed, safely continue.
-
-Installing
-==========
-
-To install protobuf to the specified *install* folder:
-
-     C:\Path\to\protobuf\cmake\build\release>nmake install
-
-or
-
-     C:\Path\to\protobuf\cmake\build\debug>nmake install
-
-You can also build project *INSTALL* from Visual Studio solution.
-It sounds not so strange and it works.
-
-This will create the following folders under the *install* location:
-  * bin - that contains protobuf *protoc.exe* compiler;
-  * include - that contains C++ headers and protobuf *.proto files;
-  * lib - that contains linking libraries and *CMake* configuration files for *protobuf* package.
-
-Now you can if needed:
-  * Copy the contents of the include directory to wherever you want to put headers.
-  * Copy protoc.exe wherever you put build tools (probably somewhere in your PATH).
-  * Copy linking libraries libprotobuf[d].lib, libprotobuf-lite[d].lib, and libprotoc[d].lib wherever you put libraries.
-
-To avoid conflicts between the MSVC debug and release runtime libraries, when
-compiling a debug build of your application, you may need to link against a
-debug build of libprotobufd.lib with "d" postfix.  Similarly, release builds should link against
-release libprotobuf.lib library.
-
-DLLs vs. static linking
-=======================
-
-Static linking is now the default for the Protocol Buffer libraries.  Due to
-issues with Win32's use of a separate heap for each DLL, as well as binary
-compatibility issues between different versions of MSVC's STL library, it is
-recommended that you use static linkage only.  However, it is possible to
-build libprotobuf and libprotoc as DLLs if you really want.  To do this,
-do the following:
-
-  * Add an additional flag `-Dprotobuf_BUILD_SHARED_LIBS=ON` when invoking cmake
-  * Follow the same steps as described in the above section.
-  * When compiling your project, make sure to `#define PROTOBUF_USE_DLLS`.
-
-When distributing your software to end users, we strongly recommend that you
-do NOT install libprotobuf.dll or libprotoc.dll to any shared location.
-Instead, keep these libraries next to your binaries, in your application's
-own install directory.  C++ makes it very difficult to maintain binary
-compatibility between releases, so it is likely that future versions of these
-libraries will *not* be usable as drop-in replacements.
-
-If your project is itself a DLL intended for use by third-party software, we
-recommend that you do NOT expose protocol buffer objects in your library's
-public interface, and that you statically link protocol buffers into your
-library.
-
-ZLib support
-============
-
-If you want to include GzipInputStream and GzipOutputStream
-(google/protobuf/io/gzip_stream.h) in libprotobuf, you will need to do a few
-additional steps.
-
-Obtain a copy of the zlib library.  The pre-compiled DLL at zlib.net works.
-You need prepare it:
-
-  * Make sure zlib's two headers are in your `C:\Path\to\install\include` path
-  * Make sure zlib's linking libraries (*.lib file) is in your
-    `C:\Path\to\install\lib` library path.
-
-You can also compile it from source by yourself.
-
-Getting sources:
-
-     C:\Path\to>git clone -b v1.2.8 https://github.com/madler/zlib.git
-     C:\Path\to>cd zlib
-
-Compiling and Installing:
-
-     C:\Path\to\zlib>mkdir build & cd build
-     C:\Path\to\zlib\build>mkdir release & cd release
-     C:\Path\to\zlib\build\release>cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ^
-     -DCMAKE_INSTALL_PREFIX=../../../install ../..
-     C:\Path\to\zlib\build\release>nmake & nmake install
-
-You can make *debug* version or use *Visual Studio* generator also as before for the
-protobuf project.
-
-Now add *bin* folder from *install* to system *PATH*:
-
-     C:\Path\to>set PATH=%PATH%;C:\Path\to\install\bin
-
-You need reconfigure protobuf with flag `-Dprotobuf_WITH_ZLIB=ON` when invoking cmake.
-
-Note that if you have compiled ZLIB yourself, as stated above,
-further disable the option `-Dprotobuf_MSVC_STATIC_RUNTIME=OFF`.
-
-If it reports NOTFOUND for zlib_include or zlib_lib, you might haven't put
-the headers or the .lib file in the right directory.
-
-Build and testing protobuf as usual.
-
-Notes on Compiler Warnings
-==========================
-
-The following warnings have been disabled while building the protobuf libraries
-and compiler.  You may have to disable some of them in your own project as
-well, or live with them.
-
-* C4018 - 'expression' : signed/unsigned mismatch
-* C4146 - unary minus operator applied to unsigned type, result still unsigned
-* C4244 - Conversion from 'type1' to 'type2', possible loss of data.
-* C4251 - 'identifier' : class 'type' needs to have dll-interface to be used by
-  clients of class 'type2'
-* C4267 - Conversion from 'size_t' to 'type', possible loss of data.
-* C4305 - 'identifier' : truncation from 'type1' to 'type2'
-* C4355 - 'this' : used in base member initializer list
-* C4800 - 'type' : forcing value to bool 'true' or 'false' (performance warning)
-* C4996 - 'function': was declared deprecated
-
-C4251 is of particular note, if you are compiling the Protocol Buffer library
-as a DLL (see previous section).  The protocol buffer library uses templates in
-its public interfaces.  MSVC does not provide any reasonable way to export
-template classes from a DLL.  However, in practice, it appears that exporting
-templates is not necessary anyway.  Since the complete definition of any
-template is available in the header files, anyone importing the DLL will just
-end up compiling instances of the templates into their own binary.  The
-Protocol Buffer implementation does not rely on static template members being
-unique, so there should be no problem with this, but MSVC prints warning
-nevertheless.  So, we disable it.  Unfortunately, this warning will also be
-produced when compiling code which merely uses protocol buffers, meaning you
-may have to disable it in your code too.

+ 0 - 57
cmake/examples.cmake

@@ -1,57 +0,0 @@
-if(protobuf_VERBOSE)
-  message(STATUS "Protocol Buffers Examples Configuring...")
-endif()
-
-get_filename_component(examples_dir "../examples" ABSOLUTE)
-
-if(protobuf_VERBOSE)
-  message(STATUS "Protocol Buffers Examples Configuring done")
-endif()
-include(ExternalProject)
-
-# Internal utility function: Create a custom target representing a build of examples with custom options.
-function(add_examples_build NAME)
-
-  ExternalProject_Add(${NAME}
-    PREFIX ${NAME}
-    SOURCE_DIR "${examples_dir}"
-    BINARY_DIR ${NAME}
-    STAMP_DIR ${NAME}/logs
-    INSTALL_COMMAND "" #Skip
-    LOG_CONFIGURE 1
-    CMAKE_CACHE_ARGS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}"
-                     "-Dprotobuf_VERBOSE:BOOL=${protobuf_VERBOSE}"
-                     ${ARGN}
-  )
-  set_property(TARGET ${NAME} PROPERTY FOLDER "Examples")
-  set_property(TARGET ${NAME} PROPERTY EXCLUDE_FROM_ALL TRUE)
-endfunction()
-
-# Add examples as an external project.
-# sub_directory cannot be used because the find_package(protobuf) call would cause failures with redefined targets.
-add_examples_build(examples "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}")
-add_dependencies(examples libprotobuf protoc)
-
-option(protobuf_BUILD_EXAMPLES_MULTITEST "Build Examples in multiple configurations. Useful for testing." OFF)
-mark_as_advanced(protobuf_BUILD_EXAMPLES_MULTITEST)
-if(protobuf_BUILD_EXAMPLES_MULTITEST)
-  set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
-  #Build using the legacy compatibility module.
-  add_examples_build(examples-legacy
-    "-Dprotobuf_DIR:PATH=${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}"
-    "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE"
-  )
-  add_dependencies(examples-legacy libprotobuf protoc)
-
-  #Build using the installed library.
-  add_examples_build(examples-installed
-    "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}"
-  )
-
-  #Build using the installed library in legacy compatibility mode.
-  add_examples_build(examples-installed-legacy
-    "-Dprotobuf_DIR:PATH=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR}"
-    "-Dprotobuf_MODULE_COMPATIBLE:BOOL=TRUE"
-  )
-endif()

+ 0 - 131
cmake/extract_includes.bat.in

@@ -1,131 +0,0 @@
-mkdir include
-mkdir include\google
-mkdir include\google\protobuf
-mkdir include\google\protobuf\compiler
-mkdir include\google\protobuf\compiler\cpp
-mkdir include\google\protobuf\compiler\csharp
-mkdir include\google\protobuf\compiler\java
-mkdir include\google\protobuf\compiler\javanano
-mkdir include\google\protobuf\compiler\js
-mkdir include\google\protobuf\compiler\objectivec
-mkdir include\google\protobuf\compiler\php
-mkdir include\google\protobuf\compiler\python
-mkdir include\google\protobuf\compiler\ruby
-mkdir include\google\protobuf\io
-mkdir include\google\protobuf\stubs
-mkdir include\google\protobuf\util
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\any.h" include\google\protobuf\any.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\any.pb.h" include\google\protobuf\any.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\api.pb.h" include\google\protobuf\api.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arena.h" include\google\protobuf\arena.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arena_impl.h" include\google\protobuf\arena_impl.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\arenastring.h" include\google\protobuf\arenastring.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\code_generator.h" include\google\protobuf\compiler\code_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\command_line_interface.h" include\google\protobuf\compiler\command_line_interface.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\cpp\cpp_generator.h" include\google\protobuf\compiler\cpp\cpp_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_generator.h" include\google\protobuf\compiler\csharp\csharp_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_names.h" include\google\protobuf\compiler\csharp\csharp_names.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\importer.h" include\google\protobuf\compiler\importer.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_generator.h" include\google\protobuf\compiler\java\java_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_names.h" include\google\protobuf\compiler\java\java_names.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\javanano\javanano_generator.h" include\google\protobuf\compiler\javanano\javanano_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\js\js_generator.h" include\google\protobuf\compiler\js\js_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\js\well_known_types_embed.h" include\google\protobuf\compiler\js\well_known_types_embed.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\objectivec\objectivec_generator.h" include\google\protobuf\compiler\objectivec\objectivec_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\objectivec\objectivec_helpers.h" include\google\protobuf\compiler\objectivec\objectivec_helpers.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\parser.h" include\google\protobuf\compiler\parser.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\php\php_generator.h" include\google\protobuf\compiler\php\php_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\plugin.h" include\google\protobuf\compiler\plugin.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\plugin.pb.h" include\google\protobuf\compiler\plugin.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\python\python_generator.h" include\google\protobuf\compiler\python\python_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\ruby\ruby_generator.h" include\google\protobuf\compiler\ruby\ruby_generator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor.h" include\google\protobuf\descriptor.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor.pb.h" include\google\protobuf\descriptor.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\descriptor_database.h" include\google\protobuf\descriptor_database.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\duration.pb.h" include\google\protobuf\duration.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\dynamic_message.h" include\google\protobuf\dynamic_message.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\empty.pb.h" include\google\protobuf\empty.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\extension_set.h" include\google\protobuf\extension_set.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\field_mask.pb.h" include\google\protobuf\field_mask.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_enum_reflection.h" include\google\protobuf\generated_enum_reflection.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_enum_util.h" include\google\protobuf\generated_enum_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_reflection.h" include\google\protobuf\generated_message_reflection.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_table_driven.h" include\google\protobuf\generated_message_table_driven.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\generated_message_util.h" include\google\protobuf\generated_message_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\has_bits.h" include\google\protobuf\has_bits.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\implicit_weak_message.h" include\google\protobuf\implicit_weak_message.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\coded_stream.h" include\google\protobuf\io\coded_stream.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\gzip_stream.h" include\google\protobuf\io\gzip_stream.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\printer.h" include\google\protobuf\io\printer.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\strtod.h" include\google\protobuf\io\strtod.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\tokenizer.h" include\google\protobuf\io\tokenizer.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream.h" include\google\protobuf\io\zero_copy_stream.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream_impl.h" include\google\protobuf\io\zero_copy_stream_impl.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\io\zero_copy_stream_impl_lite.h" include\google\protobuf\io\zero_copy_stream_impl_lite.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map.h" include\google\protobuf\map.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_entry.h" include\google\protobuf\map_entry.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_entry_lite.h" include\google\protobuf\map_entry_lite.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field.h" include\google\protobuf\map_field.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field_inl.h" include\google\protobuf\map_field_inl.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_field_lite.h" include\google\protobuf\map_field_lite.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\map_type_handler.h" include\google\protobuf\map_type_handler.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\message.h" include\google\protobuf\message.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\message_lite.h" include\google\protobuf\message_lite.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\metadata.h" include\google\protobuf\metadata.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\metadata_lite.h" include\google\protobuf\metadata_lite.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\reflection.h" include\google\protobuf\reflection.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\reflection_ops.h" include\google\protobuf\reflection_ops.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\repeated_field.h" include\google\protobuf\repeated_field.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\service.h" include\google\protobuf\service.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\source_context.pb.h" include\google\protobuf\source_context.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\struct.pb.h" include\google\protobuf\struct.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomic_sequence_num.h" include\google\protobuf\stubs\atomic_sequence_num.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops.h" include\google\protobuf\stubs\atomicops.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm64_gcc.h" include\google\protobuf\stubs\atomicops_internals_arm64_gcc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm_gcc.h" include\google\protobuf\stubs\atomicops_internals_arm_gcc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_arm_qnx.h" include\google\protobuf\stubs\atomicops_internals_arm_qnx.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_generic_c11_atomic.h" include\google\protobuf\stubs\atomicops_internals_generic_c11_atomic.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_generic_gcc.h" include\google\protobuf\stubs\atomicops_internals_generic_gcc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_mips_gcc.h" include\google\protobuf\stubs\atomicops_internals_mips_gcc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_power.h" include\google\protobuf\stubs\atomicops_internals_power.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_ppc_gcc.h" include\google\protobuf\stubs\atomicops_internals_ppc_gcc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_solaris.h" include\google\protobuf\stubs\atomicops_internals_solaris.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_tsan.h" include\google\protobuf\stubs\atomicops_internals_tsan.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_x86_gcc.h" include\google\protobuf\stubs\atomicops_internals_x86_gcc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\atomicops_internals_x86_msvc.h" include\google\protobuf\stubs\atomicops_internals_x86_msvc.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\bytestream.h" include\google\protobuf\stubs\bytestream.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\callback.h" include\google\protobuf\stubs\callback.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\casts.h" include\google\protobuf\stubs\casts.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\common.h" include\google\protobuf\stubs\common.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\fastmem.h" include\google\protobuf\stubs\fastmem.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\hash.h" include\google\protobuf\stubs\hash.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\logging.h" include\google\protobuf\stubs\logging.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\macros.h" include\google\protobuf\stubs\macros.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\mutex.h" include\google\protobuf\stubs\mutex.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\once.h" include\google\protobuf\stubs\once.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\platform_macros.h" include\google\protobuf\stubs\platform_macros.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\port.h" include\google\protobuf\stubs\port.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\scoped_ptr.h" include\google\protobuf\stubs\scoped_ptr.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\shared_ptr.h" include\google\protobuf\stubs\shared_ptr.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\singleton.h" include\google\protobuf\stubs\singleton.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\status.h" include\google\protobuf\stubs\status.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\stl_util.h" include\google\protobuf\stubs\stl_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\stringpiece.h" include\google\protobuf\stubs\stringpiece.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\template_util.h" include\google\protobuf\stubs\template_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\stubs\type_traits.h" include\google\protobuf\stubs\type_traits.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\text_format.h" include\google\protobuf\text_format.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\timestamp.pb.h" include\google\protobuf\timestamp.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\type.pb.h" include\google\protobuf\type.pb.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\unknown_field_set.h" include\google\protobuf\unknown_field_set.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\delimited_message_util.h" include\google\protobuf\util\delimited_message_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\field_comparator.h" include\google\protobuf\util\field_comparator.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\field_mask_util.h" include\google\protobuf\util\field_mask_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\json_util.h" include\google\protobuf\util\json_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\message_differencer.h" include\google\protobuf\util\message_differencer.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\time_util.h" include\google\protobuf\util\time_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\type_resolver.h" include\google\protobuf\util\type_resolver.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\util\type_resolver_util.h" include\google\protobuf\util\type_resolver_util.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format.h" include\google\protobuf\wire_format.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format_lite.h" include\google\protobuf\wire_format_lite.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wire_format_lite_inl.h" include\google\protobuf\wire_format_lite_inl.h
-copy "${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\wrappers.pb.h" include\google\protobuf\wrappers.pb.h

+ 0 - 136
cmake/install.cmake

@@ -1,136 +0,0 @@
-include(GNUInstallDirs)
-
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protobuf.pc.cmake
-               ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc @ONLY)
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protobuf-lite.pc.cmake
-               ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc @ONLY)
-
-set(_protobuf_libraries libprotobuf-lite libprotobuf)
-if (protobuf_BUILD_PROTOC_BINARIES)
-    list(APPEND _protobuf_libraries libprotoc)
-endif (protobuf_BUILD_PROTOC_BINARIES)
-
-foreach(_library ${_protobuf_libraries})
-  set_property(TARGET ${_library}
-    PROPERTY INTERFACE_INCLUDE_DIRECTORIES
-    $<BUILD_INTERFACE:${protobuf_source_dir}/src>
-    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
-  install(TARGETS ${_library} EXPORT protobuf-targets
-    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${_library}
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library}
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${_library})
-endforeach()
-
-if (protobuf_BUILD_PROTOC_BINARIES)
-  install(TARGETS protoc EXPORT protobuf-targets
-    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc)
-endif (protobuf_BUILD_PROTOC_BINARIES)
-
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-
-file(STRINGS extract_includes.bat.in _extract_strings
-  REGEX "^copy")
-foreach(_extract_string ${_extract_strings})
-  string(REGEX REPLACE "^.* .+ include\\\\(.+)$" "\\1"
-    _header ${_extract_string})
-  string(REPLACE "\\" "/" _header ${_header})
-  get_filename_component(_extract_from "${protobuf_SOURCE_DIR}/../src/${_header}" ABSOLUTE)
-  get_filename_component(_extract_name ${_header} NAME)
-  get_filename_component(_extract_to "${CMAKE_INSTALL_INCLUDEDIR}/${_header}" PATH)
-  if(EXISTS "${_extract_from}")
-    install(FILES "${_extract_from}"
-      DESTINATION "${_extract_to}"
-      COMPONENT protobuf-headers
-      RENAME "${_extract_name}")
-  else()
-    message(AUTHOR_WARNING "The file \"${_extract_from}\" is listed in "
-      "\"${protobuf_SOURCE_DIR}/cmake/extract_includes.bat.in\" "
-      "but there not exists. The file will not be installed.")
-  endif()
-endforeach()
-
-# Internal function for parsing auto tools scripts
-function(_protobuf_auto_list FILE_NAME VARIABLE)
-  file(STRINGS ${FILE_NAME} _strings)
-  set(_list)
-  foreach(_string ${_strings})
-    set(_found)
-    string(REGEX MATCH "^[ \t]*${VARIABLE}[ \t]*=[ \t]*" _found "${_string}")
-    if(_found)
-      string(LENGTH "${_found}" _length)
-      string(SUBSTRING "${_string}" ${_length} -1 _draft_list)
-      foreach(_item ${_draft_list})
-        string(STRIP "${_item}" _item)
-        list(APPEND _list "${_item}")
-      endforeach()
-    endif()
-  endforeach()
-  set(${VARIABLE} ${_list} PARENT_SCOPE)
-endfunction()
-
-# Install well-known type proto files
-_protobuf_auto_list("../src/Makefile.am" nobase_dist_proto_DATA)
-foreach(_file ${nobase_dist_proto_DATA})
-  get_filename_component(_file_from "../src/${_file}" ABSOLUTE)
-  get_filename_component(_file_name ${_file} NAME)
-  get_filename_component(_file_path ${_file} PATH)
-  if(EXISTS "${_file_from}")
-    install(FILES "${_file_from}"
-      DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${_file_path}"
-      COMPONENT protobuf-protos
-      RENAME "${_file_name}")
-  else()
-    message(AUTHOR_WARNING "The file \"${_file_from}\" is listed in "
-      "\"${protobuf_SOURCE_DIR}/../src/Makefile.am\" as nobase_dist_proto_DATA "
-      "but there not exists. The file will not be installed.")
-  endif()
-endforeach()
-
-# Install configuration
-set(_cmakedir_desc "Directory relative to CMAKE_INSTALL to install the cmake configuration files")
-if(NOT MSVC)
-  set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/protobuf" CACHE STRING "${_cmakedir_desc}")
-else()
-  set(CMAKE_INSTALL_CMAKEDIR "cmake" CACHE STRING "${_cmakedir_desc}")
-endif()
-mark_as_advanced(CMAKE_INSTALL_CMAKEDIR)
-
-configure_file(protobuf-config.cmake.in
-  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-config.cmake @ONLY)
-configure_file(protobuf-config-version.cmake.in
-  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-config-version.cmake @ONLY)
-configure_file(protobuf-module.cmake.in
-  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-module.cmake @ONLY)
-configure_file(protobuf-options.cmake
-  ${CMAKE_INSTALL_CMAKEDIR}/protobuf-options.cmake @ONLY)
-
-# Allows the build directory to be used as a find directory.
-
-if (protobuf_BUILD_PROTOC_BINARIES)
-  export(TARGETS libprotobuf-lite libprotobuf libprotoc protoc
-    NAMESPACE protobuf::
-    FILE ${CMAKE_INSTALL_CMAKEDIR}/protobuf-targets.cmake
-  )
-else (protobuf_BUILD_PROTOC_BINARIES)
-  export(TARGETS libprotobuf-lite libprotobuf
-    NAMESPACE protobuf::
-    FILE ${CMAKE_INSTALL_CMAKEDIR}/protobuf-targets.cmake
-  )
-endif (protobuf_BUILD_PROTOC_BINARIES)
-
-install(EXPORT protobuf-targets
-  DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
-  NAMESPACE protobuf::
-  COMPONENT protobuf-export)
-
-install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/
-  DESTINATION "${CMAKE_INSTALL_CMAKEDIR}"
-  COMPONENT protobuf-export
-  PATTERN protobuf-targets.cmake EXCLUDE
-)
-
-option(protobuf_INSTALL_EXAMPLES "Install the examples folder" OFF)
-if(protobuf_INSTALL_EXAMPLES)
-  install(DIRECTORY ../examples/ DESTINATION examples
-    COMPONENT protobuf-examples)
-endif()

+ 0 - 66
cmake/libprotobuf-lite.cmake

@@ -1,66 +0,0 @@
-set(libprotobuf_lite_files
-  ${protobuf_source_dir}/src/google/protobuf/arena.cc
-  ${protobuf_source_dir}/src/google/protobuf/arenastring.cc
-  ${protobuf_source_dir}/src/google/protobuf/extension_set.cc
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_table_driven_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/implicit_weak_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/coded_stream.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/message_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/repeated_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/common.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/int128.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/once.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/status.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/statusor.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/structurally_valid.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/strutil.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/time.cc
-  ${protobuf_source_dir}/src/google/protobuf/wire_format_lite.cc
-)
-
-set(libprotobuf_lite_includes
-  ${protobuf_source_dir}/src/google/protobuf/arena.h
-  ${protobuf_source_dir}/src/google/protobuf/arenastring.h
-  ${protobuf_source_dir}/src/google/protobuf/extension_set.h
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_util.h
-  ${protobuf_source_dir}/src/google/protobuf/implicit_weak_message.h
-  ${protobuf_source_dir}/src/google/protobuf/io/coded_stream.h
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream.h
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/message_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/repeated_field.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/atomicops_internals_x86_msvc.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/common.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/int128.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/once.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/status.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/statusor.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/strutil.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/time.h
-  ${protobuf_source_dir}/src/google/protobuf/wire_format_lite.h
-)
-
-add_library(libprotobuf-lite ${protobuf_SHARED_OR_STATIC}
-  ${libprotobuf_lite_files} ${libprotobuf_lite_includes})
-target_link_libraries(libprotobuf-lite ${CMAKE_THREAD_LIBS_INIT})
-target_include_directories(libprotobuf-lite PUBLIC ${protobuf_source_dir}/src)
-if(MSVC AND protobuf_BUILD_SHARED_LIBS)
-  target_compile_definitions(libprotobuf-lite
-    PUBLIC  PROTOBUF_USE_DLLS
-    PRIVATE LIBPROTOBUF_EXPORTS)
-endif()
-set_target_properties(libprotobuf-lite PROPERTIES
-    OUTPUT_NAME ${LIB_PREFIX}protobuf-lite
-    DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}")

+ 0 - 129
cmake/libprotobuf.cmake

@@ -1,129 +0,0 @@
-set(libprotobuf_files
-  ${protobuf_source_dir}/src/google/protobuf/any.cc
-  ${protobuf_source_dir}/src/google/protobuf/any.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/api.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/importer.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/parser.cc
-  ${protobuf_source_dir}/src/google/protobuf/descriptor.cc
-  ${protobuf_source_dir}/src/google/protobuf/descriptor.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/descriptor_database.cc
-  ${protobuf_source_dir}/src/google/protobuf/duration.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/dynamic_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/empty.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/extension_set_heavy.cc
-  ${protobuf_source_dir}/src/google/protobuf/field_mask.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection.cc
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_table_driven.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/gzip_stream.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/printer.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/strtod.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/tokenizer.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl.cc
-  ${protobuf_source_dir}/src/google/protobuf/map_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/message.cc
-  ${protobuf_source_dir}/src/google/protobuf/reflection_ops.cc
-  ${protobuf_source_dir}/src/google/protobuf/service.cc
-  ${protobuf_source_dir}/src/google/protobuf/source_context.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/struct.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/mathlimits.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/substitute.cc
-  ${protobuf_source_dir}/src/google/protobuf/text_format.cc
-  ${protobuf_source_dir}/src/google/protobuf/timestamp.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/type.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/unknown_field_set.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/field_comparator.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/datapiece.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/error_listener.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/field_mask_utility.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_escaping.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/object_writer.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/proto_writer.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/utility.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/json_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/message_differencer.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/time_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/wire_format.cc
-  ${protobuf_source_dir}/src/google/protobuf/wrappers.pb.cc
-)
-
-set(libprotobuf_includes
-  ${protobuf_source_dir}/src/google/protobuf/any.h
-  ${protobuf_source_dir}/src/google/protobuf/any.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/api.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/importer.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/parser.h
-  ${protobuf_source_dir}/src/google/protobuf/descriptor.h
-  ${protobuf_source_dir}/src/google/protobuf/descriptor.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/descriptor_database.h
-  ${protobuf_source_dir}/src/google/protobuf/duration.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/dynamic_message.h
-  ${protobuf_source_dir}/src/google/protobuf/empty.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/field_mask.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection.h
-  ${protobuf_source_dir}/src/google/protobuf/io/gzip_stream.h
-  ${protobuf_source_dir}/src/google/protobuf/io/printer.h
-  ${protobuf_source_dir}/src/google/protobuf/io/strtod.h
-  ${protobuf_source_dir}/src/google/protobuf/io/tokenizer.h
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_impl.h
-  ${protobuf_source_dir}/src/google/protobuf/map_field.h
-  ${protobuf_source_dir}/src/google/protobuf/message.h
-  ${protobuf_source_dir}/src/google/protobuf/reflection_ops.h
-  ${protobuf_source_dir}/src/google/protobuf/service.h
-  ${protobuf_source_dir}/src/google/protobuf/source_context.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/struct.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/mathlimits.h
-  ${protobuf_source_dir}/src/google/protobuf/stubs/substitute.h
-  ${protobuf_source_dir}/src/google/protobuf/text_format.h
-  ${protobuf_source_dir}/src/google/protobuf/timestamp.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/type.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/unknown_field_set.h
-  ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util.h
-  ${protobuf_source_dir}/src/google/protobuf/util/field_comparator.h
-  ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/datapiece.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/error_listener.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/field_mask_utility.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_escaping.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/object_writer.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/proto_writer.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.h
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/utility.h
-  ${protobuf_source_dir}/src/google/protobuf/util/json_util.h
-  ${protobuf_source_dir}/src/google/protobuf/util/message_differencer.h
-  ${protobuf_source_dir}/src/google/protobuf/util/time_util.h
-  ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util.h
-  ${protobuf_source_dir}/src/google/protobuf/wire_format.h
-  ${protobuf_source_dir}/src/google/protobuf/wrappers.pb.h
-)
-
-add_library(libprotobuf ${protobuf_SHARED_OR_STATIC}
-  ${libprotobuf_lite_files} ${libprotobuf_files} ${libprotobuf_includes})
-target_link_libraries(libprotobuf ${CMAKE_THREAD_LIBS_INIT})
-if(protobuf_WITH_ZLIB)
-    target_link_libraries(libprotobuf ${ZLIB_LIBRARIES})
-endif()
-target_include_directories(libprotobuf PUBLIC ${protobuf_source_dir}/src)
-if(MSVC AND protobuf_BUILD_SHARED_LIBS)
-  target_compile_definitions(libprotobuf
-    PUBLIC  PROTOBUF_USE_DLLS
-    PRIVATE LIBPROTOBUF_EXPORTS)
-endif()
-set_target_properties(libprotobuf PROPERTIES
-    OUTPUT_NAME ${LIB_PREFIX}protobuf
-    DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}")

+ 0 - 229
cmake/libprotoc.cmake

@@ -1,229 +0,0 @@
-set(libprotoc_files
-  ${protobuf_source_dir}/src/google/protobuf/compiler/code_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_extension.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_file.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_helpers.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_map_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_service.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_string_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_field_base.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_helpers.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_map_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_reflection_class.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_context.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_file.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator_factory.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_helpers.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_name_resolver.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_service.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_shared_code_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field_lite.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_extension.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_file.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_helpers.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_map_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_primitive_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/js_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_extension.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_file.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_map_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_oneof.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/php/php_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/subprocess.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/zip_writer.cc
-)
-
-set(libprotoc_headers
-  ${protobuf_source_dir}/src/google/protobuf/compiler/code_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/importer.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/package_info.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/parser.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/subprocess.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/zip_writer.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_enum_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_extension.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_file.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_helpers.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_map_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_options.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_primitive_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_service.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_string_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_doc_comment.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_enum_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_field_base.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_helpers.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_map_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_names.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_options.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_primitive_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_reflection_class.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_source_generator_base.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_wrapper_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_context.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_field_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_enum_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_extension_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_file.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_generator_factory.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_helpers.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_lazy_message_field_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_map_field_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_builder_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_field_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_message_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_names.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_name_resolver.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_options.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_primitive_field_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_service.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_shared_code_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_string_field_lite.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_enum_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_extension.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_file.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_helpers.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_map_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_params.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/javanano/javanano_primitive_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/js_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_enum_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_extension.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_file.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_map_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_message_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_oneof.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/php/php_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/plugin.pb.h
-)
-
-set(js_well_known_types_sources
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types/any.js
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types/struct.js
-  ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types/timestamp.js
-)
-add_executable(js_embed ${protobuf_source_dir}/src/google/protobuf/compiler/js/embed.cc)
-add_custom_command(
-  OUTPUT ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.cc
-  DEPENDS js_embed ${js_well_known_types_sources}
-  COMMAND js_embed ${js_well_known_types_sources} > ${protobuf_source_dir}/src/google/protobuf/compiler/js/well_known_types_embed.cc
-)
-
-add_library(libprotoc ${protobuf_SHARED_OR_STATIC}
-  ${libprotoc_files} ${libprotoc_headers})
-target_link_libraries(libprotoc libprotobuf)
-if(MSVC AND protobuf_BUILD_SHARED_LIBS)
-  target_compile_definitions(libprotoc
-    PUBLIC  PROTOBUF_USE_DLLS
-    PRIVATE LIBPROTOC_EXPORTS)
-endif()
-set_target_properties(libprotoc PROPERTIES
-    COMPILE_DEFINITIONS LIBPROTOC_EXPORTS
-    OUTPUT_NAME ${LIB_PREFIX}protoc
-    DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}")

+ 0 - 60
cmake/protobuf-config-version.cmake.in

@@ -1,60 +0,0 @@
-set(PACKAGE_VERSION "@protobuf_VERSION@")
-set(${PACKAGE_FIND_NAME}_VERSION_PRERELEASE "@protobuf_VERSION_PRERELEASE@" PARENT_SCOPE)
-
-# Prerelease versions cannot be passed in directly via the find_package command,
-# so we allow users to specify it in a variable
-if(NOT DEFINED "${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE")
-  set("${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}" "")
-else()
-  set(PACKAGE_FIND_VERSION ${PACKAGE_FIND_VERSION}-${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE})
-endif()
-set(PACKAGE_FIND_VERSION_PRERELEASE "${${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE}")
-
-# VERSION_EQUAL ignores the prerelease strings, so we use STREQUAL.
-if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
-  set(PACKAGE_VERSION_EXACT TRUE)
-endif()
-
-set(PACKAGE_VERSION_COMPATIBLE TRUE) #Assume true until shown otherwise
-
-if(PACKAGE_FIND_VERSION) #Only perform version checks if one is given
-  if(NOT PACKAGE_FIND_VERSION_MAJOR EQUAL "@protobuf_VERSION_MAJOR@")
-    set(PACKAGE_VERSION_COMPATIBLE FALSE)
-  elseif(PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION)
-    set(PACKAGE_VERSION_COMPATIBLE FALSE)
-  elseif(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
-    # Do not match prerelease versions to non-prerelease version requests.
-      if(NOT "@protobuf_VERSION_PRERELEASE@" STREQUAL "" AND PACKAGE_FIND_VERSION_PRERELEASE STREQUAL "")
-      message(AUTHOR_WARNING "To use this prerelease version of ${PACKAGE_FIND_NAME}, set ${PACKAGE_FIND_NAME}_FIND_VERSION_PRERELEASE to '@protobuf_VERSION_PRERELEASE@' or greater.")
-      set(PACKAGE_VERSION_COMPATIBLE FALSE)
-    endif()
-
-    # Not robustly SemVer compliant, but protobuf never uses '.' separated prerelease identifiers.
-    if(PACKAGE_FIND_VERSION_PRERELEASE STRGREATER "@protobuf_VERSION_PRERELEASE@")
-      set(PACKAGE_VERSION_COMPATIBLE FALSE)
-    endif()
-  endif()
-endif()
-
-# Check and save build options used to create this package
-macro(_check_and_save_build_option OPTION VALUE)
-  if(DEFINED ${PACKAGE_FIND_NAME}_${OPTION} AND
-    NOT ${PACKAGE_FIND_NAME}_${OPTION} STREQUAL ${VALUE})
-    set(PACKAGE_VERSION_UNSUITABLE TRUE)
-  endif()
-  set(${PACKAGE_FIND_NAME}_${OPTION} ${VALUE} PARENT_SCOPE)
-endmacro()
-_check_and_save_build_option(WITH_ZLIB @protobuf_WITH_ZLIB@)
-_check_and_save_build_option(MSVC_STATIC_RUNTIME @protobuf_MSVC_STATIC_RUNTIME@)
-_check_and_save_build_option(BUILD_SHARED_LIBS @protobuf_BUILD_SHARED_LIBS@)
-
-# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
-if(CMAKE_SIZEOF_VOID_P AND "@CMAKE_SIZEOF_VOID_P@")
-  # check that the installed version has the same 32/64bit-ness as the one which is currently searching:
-  if(NOT CMAKE_SIZEOF_VOID_P EQUAL "@CMAKE_SIZEOF_VOID_P@")
-    math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
-    set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
-    set(PACKAGE_VERSION_UNSUITABLE TRUE)
-  endif()
-endif()
-

+ 0 - 121
cmake/protobuf-config.cmake.in

@@ -1,121 +0,0 @@
-# User options
-include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake")
-
-# Depend packages
-@_protobuf_FIND_ZLIB@
-
-# Imported targets
-include("${CMAKE_CURRENT_LIST_DIR}/protobuf-targets.cmake")
-
-function(protobuf_generate)
-  include(CMakeParseArguments)
-
-  set(_options APPEND_PATH)
-  set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO)
-  if(COMMAND target_sources)
-    list(APPEND _singleargs TARGET)
-  endif()
-  set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS)
-
-  cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}")
-
-  if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET)
-    message(SEND_ERROR "Error: protobuf_generate called without any targets or source files")
-    return()
-  endif()
-
-  if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET)
-    message(SEND_ERROR "Error: protobuf_generate called without a target or output variable")
-    return()
-  endif()
-
-  if(NOT protobuf_generate_LANGUAGE)
-    set(protobuf_generate_LANGUAGE cpp)
-  endif()
-  string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE)
-
-  if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp)
-    set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:")
-  endif()
-
-  if(NOT protobuf_GENERATE_EXTENSIONS)
-    if(protobuf_generate_LANGUAGE STREQUAL cpp)
-      set(protobuf_GENERATE_EXTENSIONS .pb.h .pb.cc)
-    elseif(protobuf_generate_LANGUAGE STREQUAL python)
-      set(protobuf_GENERATE_EXTENSIONS _pb2.py)
-    else()
-      message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS")
-      return()
-    endif()
-  endif()
-
-  if(protobuf_generate_TARGET)
-    get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES)
-    foreach(_file ${_source_list})
-      if(_file MATCHES "proto$")
-        list(APPEND protobuf_generate_PROTOS ${_file})
-      endif()
-    endforeach()
-  endif()
-
-  if(NOT protobuf_generate_PROTOS)
-    message(SEND_ERROR "Error: protobuf_generate could not find any .proto files")
-    return()
-  endif()
-
-  if(protobuf_generate_APPEND_PATH)
-    # Create an include path for each file specified
-    foreach(_file ${protobuf_generate_PROTOS})
-      get_filename_component(_abs_file ${_file} ABSOLUTE)
-      get_filename_component(_abs_path ${_abs_file} PATH)
-      list(FIND _protobuf_include_path ${_abs_path} _contains_already)
-      if(${_contains_already} EQUAL -1)
-          list(APPEND _protobuf_include_path -I ${_abs_path})
-      endif()
-    endforeach()
-  else()
-    set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
-  endif()
-
-  foreach(DIR ${protobuf_generate_IMPORT_DIRS})
-    get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
-    list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
-    if(${_contains_already} EQUAL -1)
-        list(APPEND _protobuf_include_path -I ${ABS_PATH})
-    endif()
-  endforeach()
-
-  set(_generated_srcs_all)
-  foreach(_proto ${protobuf_generate_PROTOS})
-    get_filename_component(_abs_file ${_proto} ABSOLUTE)
-    get_filename_component(_basename ${_proto} NAME_WE)
-
-    set(_generated_srcs)
-    foreach(_ext ${protobuf_GENERATE_EXTENSIONS})
-      list(APPEND _generated_srcs "${CMAKE_CURRENT_BINARY_DIR}/${_basename}${_ext}")
-    endforeach()
-    list(APPEND _generated_srcs_all ${_generated_srcs})
-
-    add_custom_command(
-      OUTPUT ${_generated_srcs}
-      COMMAND  protobuf::protoc
-      ARGS --${protobuf_generate_LANGUAGE}_out ${_dll_export_decl}${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${_abs_file}
-      DEPENDS ${ABS_FIL} protobuf::protoc
-      COMMENT "Running ${protobuf_generate_LANGUAGE} protocol buffer compiler on ${_proto}"
-      VERBATIM )
-  endforeach()
-
-  set_source_files_properties(${_generated_srcs_all} PROPERTIES GENERATED TRUE)
-  if(protobuf_generate_OUT_VAR)
-    set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE)
-  endif()
-  if(protobuf_generate_TARGET)
-    target_sources(${protobuf_generate_TARGET} PUBLIC ${_generated_srcs_all})
-  endif()
-
-endfunction()
-
-# CMake FindProtobuf module compatible file
-if(protobuf_MODULE_COMPATIBLE)
-  include("${CMAKE_CURRENT_LIST_DIR}/protobuf-module.cmake")
-endif()

+ 0 - 11
cmake/protobuf-lite.pc.cmake

@@ -1,11 +0,0 @@
-prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@CMAKE_INSTALL_FULL_LIBDIR@
-includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
-
-Name: Protocol Buffers
-Description: Google's Data Interchange Format
-Version: @protobuf_VERSION@
-Libs: -L${libdir} -lprotobuf-lite @CMAKE_THREAD_LIBS_INIT@
-Cflags: -I${includedir} @CMAKE_THREAD_LIBS_INIT@
-Conflicts: protobuf

+ 0 - 189
cmake/protobuf-module.cmake.in

@@ -1,189 +0,0 @@
-# This file contains backwards compatibility patches for various legacy functions and variables
-# Functions
-
-function(PROTOBUF_GENERATE_CPP SRCS HDRS)
-  cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO" "" ${ARGN})
-
-  set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}")
-  if(NOT _proto_files)
-    message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
-    return()
-  endif()
-
-  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
-    set(_append_arg APPEND_PATH)
-  endif()
-
-  if(DEFINED Protobuf_IMPORT_DIRS)
-    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
-  endif()
-
-  set(_outvar)
-  protobuf_generate(${_append_arg} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files})
-
-  set(${SRCS})
-  set(${HDRS})
-  foreach(_file ${_outvar})
-    if(_file MATCHES "cc$")
-      list(APPEND ${SRCS} ${_file})
-    else()
-      list(APPEND ${HDRS} ${_file})
-    endif()
-  endforeach()
-  set(${SRCS} ${${SRCS}} PARENT_SCOPE)
-  set(${HDRS} ${${HDRS}} PARENT_SCOPE)
-endfunction()
-
-function(PROTOBUF_GENERATE_PYTHON SRCS)
-  if(NOT ARGN)
-    message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files")
-    return()
-  endif()
-
-  if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
-    set(_append_arg APPEND_PATH)
-  endif()
-
-  if(DEFINED Protobuf_IMPORT_DIRS)
-    set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
-  endif()
-
-  set(_outvar)
-  protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN})
-  set(${SRCS} ${_outvar} PARENT_SCOPE)
-endfunction()
-
-# Environment
-
-# Backwards compatibility
-# Define camel case versions of input variables
-foreach(UPPER
-    PROTOBUF_SRC_ROOT_FOLDER
-    PROTOBUF_IMPORT_DIRS
-    PROTOBUF_DEBUG
-    PROTOBUF_LIBRARY
-    PROTOBUF_PROTOC_LIBRARY
-    PROTOBUF_INCLUDE_DIR
-    PROTOBUF_PROTOC_EXECUTABLE
-    PROTOBUF_LIBRARY_DEBUG
-    PROTOBUF_PROTOC_LIBRARY_DEBUG
-    PROTOBUF_LITE_LIBRARY
-    PROTOBUF_LITE_LIBRARY_DEBUG
-    )
-    if (DEFINED ${UPPER})
-        string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER})
-        if (NOT DEFINED ${Camel})
-            set(${Camel} ${${UPPER}})
-        endif()
-    endif()
-endforeach()
-
-if(DEFINED Protobuf_SRC_ROOT_FOLDER)
-  message(AUTHOR_WARNING "Variable Protobuf_SRC_ROOT_FOLDER defined, but not"
-    " used in CONFIG mode")
-endif()
-
-include(SelectLibraryConfigurations)
-
-# Internal function: search for normal library as well as a debug one
-#    if the debug one is specified also include debug/optimized keywords
-#    in *_LIBRARIES variable
-function(_protobuf_find_libraries name filename)
-  if(${name}_LIBRARIES)
-    # Use result recorded by a previous call.
-  elseif(${name}_LIBRARY)
-    # Honor cache entry used by CMake 3.5 and lower.
-    set(${name}_LIBRARIES "${${name}_LIBRARY}" PARENT_SCOPE)
-  else()
-    get_target_property(${name}_LIBRARY_RELEASE protobuf::lib${filename}
-      LOCATION_RELEASE)
-    get_target_property(${name}_LIBRARY_DEBUG protobuf::lib${filename}
-      LOCATION_DEBUG)
-
-    select_library_configurations(${name})
-    set(${name}_LIBRARY ${${name}_LIBRARY} PARENT_SCOPE)
-    set(${name}_LIBRARIES ${${name}_LIBRARIES} PARENT_SCOPE)
-  endif()
-endfunction()
-
-# Internal function: find threads library
-function(_protobuf_find_threads)
-    set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
-    find_package(Threads)
-    if(Threads_FOUND)
-        list(APPEND PROTOBUF_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
-        set(PROTOBUF_LIBRARIES "${PROTOBUF_LIBRARIES}" PARENT_SCOPE)
-    endif()
-endfunction()
-
-#
-# Main.
-#
-
-# By default have PROTOBUF_GENERATE_CPP macro pass -I to protoc
-# for each directory where a proto file is referenced.
-if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
-  set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
-endif()
-
-# The Protobuf library
-_protobuf_find_libraries(Protobuf protobuf)
-
-# The Protobuf Lite library
-_protobuf_find_libraries(Protobuf_LITE protobuf-lite)
-
-# The Protobuf Protoc Library
-_protobuf_find_libraries(Protobuf_PROTOC protoc)
-
-if(UNIX)
-  _protobuf_find_threads()
-endif()
-
-# Set the include directory
-get_target_property(Protobuf_INCLUDE_DIRS protobuf::libprotobuf
-  INTERFACE_INCLUDE_DIRECTORIES)
-
-# Set the protoc Executable
-get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
-  IMPORTED_LOCATION_RELEASE)
-if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
-  get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
-    IMPORTED_LOCATION_DEBUG)
-endif()
-if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
-  get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc
-    IMPORTED_LOCATION_NOCONFIG)
-endif()
-
-# Version info variable
-set(Protobuf_VERSION "@protobuf_VERSION@")
-
-include(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf
-    REQUIRED_VARS Protobuf_PROTOC_EXECUTABLE Protobuf_LIBRARIES Protobuf_INCLUDE_DIRS
-    VERSION_VAR Protobuf_VERSION
-)
-
-# Backwards compatibility
-# Define upper case versions of output variables
-foreach(Camel
-    Protobuf_VERSION
-    Protobuf_SRC_ROOT_FOLDER
-    Protobuf_IMPORT_DIRS
-    Protobuf_DEBUG
-    Protobuf_INCLUDE_DIRS
-    Protobuf_LIBRARIES
-    Protobuf_PROTOC_LIBRARIES
-    Protobuf_LITE_LIBRARIES
-    Protobuf_LIBRARY
-    Protobuf_PROTOC_LIBRARY
-    Protobuf_INCLUDE_DIR
-    Protobuf_PROTOC_EXECUTABLE
-    Protobuf_LIBRARY_DEBUG
-    Protobuf_PROTOC_LIBRARY_DEBUG
-    Protobuf_LITE_LIBRARY
-    Protobuf_LITE_LIBRARY_DEBUG
-    )
-    string(TOUPPER ${Camel} UPPER)
-    set(${UPPER} ${${Camel}})
-endforeach()

+ 0 - 7
cmake/protobuf-options.cmake

@@ -1,7 +0,0 @@
-# Verbose output
-option(protobuf_VERBOSE "Enable for verbose output" OFF)
-mark_as_advanced(protobuf_VERBOSE)
-
-# FindProtobuf module compatibel
-option(protobuf_MODULE_COMPATIBLE "CMake build-in FindProtobuf.cmake module compatible" OFF)
-mark_as_advanced(protobuf_MODULE_COMPATIBLE)

+ 0 - 11
cmake/protobuf.pc.cmake

@@ -1,11 +0,0 @@
-prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=@CMAKE_INSTALL_PREFIX@
-libdir=@CMAKE_INSTALL_FULL_LIBDIR@
-includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
-
-Name: Protocol Buffers
-Description: Google's Data Interchange Format
-Version: @protobuf_VERSION@
-Libs: -L${libdir} -lprotobuf @CMAKE_THREAD_LIBS_INIT@
-Cflags: -I${includedir} @CMAKE_THREAD_LIBS_INIT@
-Conflicts: protobuf-lite

+ 0 - 6
cmake/protoc.cmake

@@ -1,6 +0,0 @@
-set(protoc_files
-  ${protobuf_source_dir}/src/google/protobuf/compiler/main.cc
-)
-
-add_executable(protoc ${protoc_files})
-target_link_libraries(protoc libprotobuf libprotoc)

+ 0 - 227
cmake/tests.cmake

@@ -1,227 +0,0 @@
-if (NOT EXISTS "${PROJECT_SOURCE_DIR}/../gmock/CMakeLists.txt")
-  message(FATAL_ERROR "Cannot find gmock directory.")
-endif()
-
-option(protobuf_ABSOLUTE_TEST_PLUGIN_PATH
-  "Using absolute test_plugin path in tests" ON)
-mark_as_advanced(protobuf_ABSOLUTE_TEST_PLUGIN_PATH)
-
-include_directories(
-  ${protobuf_source_dir}/gmock
-  ${protobuf_source_dir}/gmock/gtest
-  ${protobuf_source_dir}/gmock/gtest/include
-  ${protobuf_source_dir}/gmock/include
-)
-
-add_library(gmock STATIC
-  ${protobuf_source_dir}/gmock/src/gmock-all.cc
-  ${protobuf_source_dir}/gmock/gtest/src/gtest-all.cc
-)
-target_link_libraries(gmock ${CMAKE_THREAD_LIBS_INIT})
-add_library(gmock_main STATIC ${protobuf_source_dir}/gmock/src/gmock_main.cc)
-target_link_libraries(gmock_main gmock)
-
-set(lite_test_protos
-  google/protobuf/map_lite_unittest.proto
-  google/protobuf/unittest_import_lite.proto
-  google/protobuf/unittest_import_public_lite.proto
-  google/protobuf/unittest_lite.proto
-  google/protobuf/unittest_no_arena_lite.proto
-)
-
-set(tests_protos
-  google/protobuf/any_test.proto
-  google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto
-  google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto
-  google/protobuf/map_proto2_unittest.proto
-  google/protobuf/map_unittest.proto
-  google/protobuf/unittest.proto
-  google/protobuf/unittest_arena.proto
-  google/protobuf/unittest_custom_options.proto
-  google/protobuf/unittest_drop_unknown_fields.proto
-  google/protobuf/unittest_embed_optimize_for.proto
-  google/protobuf/unittest_empty.proto
-  google/protobuf/unittest_import.proto
-  google/protobuf/unittest_import_public.proto
-  google/protobuf/unittest_lazy_dependencies.proto
-  google/protobuf/unittest_lazy_dependencies_custom_option.proto
-  google/protobuf/unittest_lazy_dependencies_enum.proto
-  google/protobuf/unittest_lite_imports_nonlite.proto
-  google/protobuf/unittest_mset.proto
-  google/protobuf/unittest_mset_wire_format.proto
-  google/protobuf/unittest_no_arena.proto
-  google/protobuf/unittest_no_arena_import.proto
-  google/protobuf/unittest_no_field_presence.proto
-  google/protobuf/unittest_no_generic_services.proto
-  google/protobuf/unittest_optimize_for.proto
-  google/protobuf/unittest_preserve_unknown_enum.proto
-  google/protobuf/unittest_preserve_unknown_enum2.proto
-  google/protobuf/unittest_proto3_arena.proto
-  google/protobuf/unittest_proto3_arena_lite.proto
-  google/protobuf/unittest_proto3_lite.proto
-  google/protobuf/unittest_well_known_types.proto
-  google/protobuf/util/internal/testdata/anys.proto
-  google/protobuf/util/internal/testdata/books.proto
-  google/protobuf/util/internal/testdata/default_value.proto
-  google/protobuf/util/internal/testdata/default_value_test.proto
-  google/protobuf/util/internal/testdata/field_mask.proto
-  google/protobuf/util/internal/testdata/maps.proto
-  google/protobuf/util/internal/testdata/oneofs.proto
-  google/protobuf/util/internal/testdata/proto3.proto
-  google/protobuf/util/internal/testdata/struct.proto
-  google/protobuf/util/internal/testdata/timestamp_duration.proto
-  google/protobuf/util/internal/testdata/wrappers.proto
-  google/protobuf/util/json_format_proto3.proto
-  google/protobuf/util/message_differencer_unittest.proto
-)
-
-macro(compile_proto_file filename)
-  get_filename_component(dirname ${filename} PATH)
-  get_filename_component(basename ${filename} NAME_WE)
-  add_custom_command(
-    OUTPUT ${protobuf_source_dir}/src/${dirname}/${basename}.pb.cc
-    DEPENDS protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto
-    COMMAND protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto
-        --proto_path=${protobuf_source_dir}/src
-        --cpp_out=${protobuf_source_dir}/src
-  )
-endmacro(compile_proto_file)
-
-set(lite_test_proto_files)
-foreach(proto_file ${lite_test_protos})
-  compile_proto_file(${proto_file})
-  string(REPLACE .proto .pb.cc pb_file ${proto_file})
-  set(lite_test_proto_files ${lite_test_proto_files}
-      ${protobuf_source_dir}/src/${pb_file})
-endforeach(proto_file)
-
-set(tests_proto_files)
-foreach(proto_file ${tests_protos})
-  compile_proto_file(${proto_file})
-  string(REPLACE .proto .pb.cc pb_file ${proto_file})
-  set(tests_proto_files ${tests_proto_files}
-      ${protobuf_source_dir}/src/${pb_file})
-endforeach(proto_file)
-
-set(common_test_files
-  ${protobuf_source_dir}/src/google/protobuf/arena_test_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/map_test_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/test_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/testing/file.cc
-  ${protobuf_source_dir}/src/google/protobuf/testing/googletest.cc
-)
-
-set(common_lite_test_files
-  ${protobuf_source_dir}/src/google/protobuf/arena_test_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/map_lite_test_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/test_util_lite.cc
-)
-
-set(tests_files
-  ${protobuf_source_dir}/src/google/protobuf/any_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/arena_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/arenastring_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/annotation_test_util.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/metadata_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/importer_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_plugin_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/parser_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_plugin_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/descriptor_database_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/descriptor_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/drop_unknown_fields_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/dynamic_message_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/extension_set_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/coded_stream_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/printer_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/tokenizer_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/map_field_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/map_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/message_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/no_field_presence_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/preserve_unknown_enum_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/proto3_arena_lite_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/proto3_arena_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/proto3_lite_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/reflection_ops_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/repeated_field_reflection_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/repeated_field_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/common_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/int128_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/once_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/status_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/statusor_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/structurally_valid_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/strutil_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/template_util_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/time_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/stubs/type_traits_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/text_format_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/unknown_field_set_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/field_comparator_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/json_util_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/message_differencer_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/time_util_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util_test.cc
-  ${protobuf_source_dir}/src/google/protobuf/well_known_types_unittest.cc
-  ${protobuf_source_dir}/src/google/protobuf/wire_format_unittest.cc
-)
-
-if(protobuf_ABSOLUTE_TEST_PLUGIN_PATH)
-  add_compile_options(-DGOOGLE_PROTOBUF_TEST_PLUGIN_PATH="$<TARGET_FILE:test_plugin>")
-endif()
-
-add_executable(tests ${tests_files} ${common_test_files} ${tests_proto_files} ${lite_test_proto_files})
-target_link_libraries(tests libprotoc libprotobuf gmock_main)
-
-set(test_plugin_files
-  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc
-  ${protobuf_source_dir}/src/google/protobuf/testing/file.cc
-  ${protobuf_source_dir}/src/google/protobuf/testing/file.h
-  ${protobuf_source_dir}/src/google/protobuf/compiler/test_plugin.cc
-)
-
-add_executable(test_plugin ${test_plugin_files})
-target_link_libraries(test_plugin libprotoc libprotobuf gmock)
-
-set(lite_test_files
-  ${protobuf_source_dir}/src/google/protobuf/lite_unittest.cc
-)
-add_executable(lite-test ${lite_test_files} ${common_lite_test_files} ${lite_test_proto_files})
-target_link_libraries(lite-test libprotobuf-lite gmock_main)
-
-set(lite_arena_test_files
-  ${protobuf_source_dir}/src/google/protobuf/lite_arena_unittest.cc
-)
-add_executable(lite-arena-test ${lite_arena_test_files} ${common_lite_test_files} ${lite_test_proto_files})
-target_link_libraries(lite-arena-test libprotobuf-lite gmock_main)
-
-add_custom_target(check
-  COMMAND tests
-  DEPENDS tests test_plugin
-  WORKING_DIRECTORY ${protobuf_source_dir})

+ 0 - 23
composer.json

@@ -1,23 +0,0 @@
-{
-  "name": "google/protobuf",
-  "type": "library",
-  "description": "proto library for PHP",
-  "keywords": ["proto"],
-  "homepage": "https://developers.google.com/protocol-buffers/",
-  "license": "BSD-3-Clause",
-  "require": {
-    "php": ">=5.5.0"
-  },
-  "require-dev": {
-    "phpunit/phpunit": ">=4.8.0"
-  },
-  "suggest": {
-    "ext-bcmath": "Need to support JSON deserialization"
-  },
-  "autoload": {
-    "psr-4": {
-      "Google\\Protobuf\\": "php/src/Google/Protobuf",
-      "GPBMetadata\\Google\\Protobuf\\": "php/src/GPBMetadata/Google/Protobuf"
-    }
-  }
-}

+ 0 - 221
configure.ac

@@ -1,221 +0,0 @@
-## Process this file with autoconf to produce configure.
-## In general, the safest way to proceed is to run ./autogen.sh
-
-AC_PREREQ(2.59)
-
-# Note:  If you change the version, you must also update it in:
-# * Protobuf.podspec
-# * csharp/Google.Protobuf.Tools.nuspec
-# * csharp/src/*/AssemblyInfo.cs
-# * csharp/src/Google.Protobuf/Google.Protobuf.nuspec
-# * java/*/pom.xml
-# * python/google/protobuf/__init__.py
-# * protoc-artifacts/pom.xml
-# * src/google/protobuf/stubs/common.h
-# * src/Makefile.am (Update -version-info for LDFLAGS if needed)
-#
-# In the SVN trunk, the version should always be the next anticipated release
-# version with the "-pre" suffix.  (We used to use "-SNAPSHOT" but this pushed
-# the size of one file name in the dist tarfile over the 99-char limit.)
-AC_INIT([Protocol Buffers],[3.5.1],[protobuf@googlegroups.com],[protobuf])
-
-AM_MAINTAINER_MODE([enable])
-
-AC_CONFIG_SRCDIR(src/google/protobuf/message.cc)
-# The config file is generated but not used by the source code, since we only
-# need very few of them, e.g. HAVE_PTHREAD and HAVE_ZLIB. Those macros are
-# passed down in CXXFLAGS manually in src/Makefile.am
-AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_MACRO_DIR([m4])
-
-AC_ARG_VAR(DIST_LANG, [language to include in the distribution package (i.e., make dist)])
-case "$DIST_LANG" in
-  "") DIST_LANG=all ;;
-  all | cpp | csharp | java | python | javanano | objectivec | ruby | js | php) ;;
-  *) AC_MSG_FAILURE([unknown language: $DIST_LANG]) ;;
-esac
-AC_SUBST(DIST_LANG)
-
-# autoconf's default CXXFLAGS are usually "-g -O2".  These aren't necessarily
-# the best choice for libprotobuf.
-AS_IF([test "x${ac_cv_env_CFLAGS_set}" = "x"],
-      [CFLAGS=""])
-AS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"],
-      [CXXFLAGS=""])
-
-AC_CANONICAL_TARGET
-
-AM_INIT_AUTOMAKE([1.9 tar-ustar subdir-objects])
-
-AC_ARG_WITH([zlib],
-  [AS_HELP_STRING([--with-zlib],
-    [include classes for streaming compressed data in and out @<:@default=check@:>@])],
-  [],[with_zlib=check])
-
-AC_ARG_WITH([zlib-include],
-  [AS_HELP_STRING([--with-zlib-include=PATH],
-    [zlib include directory])],
-  [CPPFLAGS="-I$withval $CPPFLAGS"])
-
-AC_ARG_WITH([zlib-lib],
-  [AS_HELP_STRING([--with-zlib-lib=PATH],
-    [zlib lib directory])],
-  [LDFLAGS="-L$withval $LDFLAGS"])
-
-AC_ARG_WITH([protoc],
-  [AS_HELP_STRING([--with-protoc=COMMAND],
-    [use the given protoc command instead of building a new one when building tests (useful for cross-compiling)])],
-  [],[with_protoc=no])
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_CXX
-AC_PROG_CXX_FOR_BUILD
-AC_LANG([C++])
-ACX_USE_SYSTEM_EXTENSIONS
-m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
-AM_CONDITIONAL(GCC, test "$GCC" = yes)   # let the Makefile know if we're gcc
-AC_PROG_OBJC
-
-# test_util.cc takes forever to compile with GCC and optimization turned on.
-AC_MSG_CHECKING([C++ compiler flags...])
-AS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"],[
-  AS_IF([test "$GCC" = "yes"],[
-    PROTOBUF_OPT_FLAG="-O2"
-    CXXFLAGS="${CXXFLAGS} -g"
-  ])
-
-  # Protocol Buffers contains several checks that are intended to be used only
-  # for debugging and which might hurt performance.  Most users are probably
-  # end users who don't want these checks, so add -DNDEBUG by default.
-  CXXFLAGS="$CXXFLAGS -DNDEBUG"
-
-  AC_MSG_RESULT([use default: $PROTOBUF_OPT_FLAG $CXXFLAGS])
-],[
-  AC_MSG_RESULT([use user-supplied: $CXXFLAGS])
-])
-
-AC_SUBST(PROTOBUF_OPT_FLAG)
-
-ACX_CHECK_SUNCC
-
-# Have to do libtool after SUNCC, other wise it "helpfully" adds Crun Cstd
-# to the link
-AC_PROG_LIBTOOL
-
-# Check whether the linker supports version scripts
-AC_MSG_CHECKING([whether the linker supports version scripts])
-save_LDFLAGS=$LDFLAGS
-LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
-cat > conftest.map <<EOF
-{
-  global:
-    main;
-  local:
-    *;
-};
-EOF
-AC_LINK_IFELSE(
-  [AC_LANG_SOURCE([int main() { return 0; }])],
-  [have_ld_version_script=yes; AC_MSG_RESULT(yes)],
-  [have_ld_version_script=no; AC_MSG_RESULT(no)])
-LDFLAGS=$save_LDFLAGS
-AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT], [test "$have_ld_version_script" == "yes"])
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h inttypes.h limits.h stdlib.h unistd.h])
-
-# Checks for library functions.
-AC_FUNC_MEMCMP
-AC_FUNC_STRTOD
-AC_CHECK_FUNCS([ftruncate memset mkdir strchr strerror strtol])
-
-# Check for zlib.
-HAVE_ZLIB=0
-AS_IF([test "$with_zlib" != no], [
-  AC_MSG_CHECKING([zlib version])
-
-  # First check the zlib header version.
-  AC_COMPILE_IFELSE(
-    [AC_LANG_PROGRAM([[
-        #include <zlib.h>
-        #if !defined(ZLIB_VERNUM) || (ZLIB_VERNUM < 0x1204)
-        # error zlib version too old
-        #endif
-        ]], [])], [
-    AC_MSG_RESULT([ok (1.2.0.4 or later)])
-
-    # Also need to add -lz to the linker flags and make sure this succeeds.
-    AC_SEARCH_LIBS([zlibVersion], [z], [
-      AC_DEFINE([HAVE_ZLIB], [1], [Enable classes using zlib compression.])
-      HAVE_ZLIB=1
-    ], [
-      AS_IF([test "$with_zlib" != check], [
-        AC_MSG_FAILURE([--with-zlib was given, but no working zlib library was found])
-      ])
-    ])
-  ], [
-    AS_IF([test "$with_zlib" = check], [
-      AC_MSG_RESULT([headers missing or too old (requires 1.2.0.4)])
-    ], [
-      AC_MSG_FAILURE([--with-zlib was given, but zlib headers were not present or were too old (requires 1.2.0.4)])
-    ])
-  ])
-])
-AM_CONDITIONAL([HAVE_ZLIB], [test $HAVE_ZLIB = 1])
-
-AS_IF([test "$with_protoc" != "no"], [
-  PROTOC=$with_protoc
-  AS_IF([test "$with_protoc" = "yes"], [
-    # No argument given.  Use system protoc.
-    PROTOC=protoc
-  ])
-  AS_IF([echo "$PROTOC" | grep -q '^@<:@^/@:>@.*/'], [
-    # Does not start with a slash, but contains a slash.  So, it's a relative
-    # path (as opposed to an absolute path or an executable in $PATH).
-    # Since it will actually be executed from the src directory, prefix with
-    # the current directory.  We also insert $ac_top_build_prefix in case this
-    # is a nested package and --with-protoc was actually given on the outer
-    # package's configure script.
-    PROTOC=`pwd`/${ac_top_build_prefix}$PROTOC
-  ])
-  AC_SUBST([PROTOC])
-])
-AM_CONDITIONAL([USE_EXTERNAL_PROTOC], [test "$with_protoc" != "no"])
-
-ACX_PTHREAD
-AM_CONDITIONAL([HAVE_PTHREAD], [test "x$acx_pthread_ok" = "xyes"])
-
-# We still keep this for improving pbconfig.h for unsupported platforms.
-AC_CXX_STL_HASH
-
-case "$target_os" in
-  mingw* | cygwin* | win* | aix*)
-    ;;
-  *)
-    # Need to link against rt on Solaris
-    AC_SEARCH_LIBS([sched_yield], [rt], [], [AC_MSG_FAILURE([sched_yield was not found on your system])])
-    ;;
-esac
-
-# Enable ObjC support for conformance directory on OS X.
-OBJC_CONFORMANCE_TEST=0
-case "$target_os" in
-  darwin*)
-    OBJC_CONFORMANCE_TEST=1
-    ;;
-esac
-AM_CONDITIONAL([OBJC_CONFORMANCE_TEST], [test $OBJC_CONFORMANCE_TEST = 1])
-
-AX_CXX_COMPILE_STDCXX([11], [noext], [optional])
-
-# HACK:  Make gmock's configure script pick up our copy of CFLAGS and CXXFLAGS,
-#   since the flags added by ACX_CHECK_SUNCC must be used when compiling gmock
-#   too.
-export CFLAGS
-export CXXFLAGS
-AC_CONFIG_SUBDIRS([gmock])
-
-AC_CONFIG_FILES([Makefile src/Makefile benchmarks/Makefile conformance/Makefile protobuf.pc protobuf-lite.pc])
-AC_OUTPUT

+ 0 - 317
conformance/ConformanceJava.java

@@ -1,317 +0,0 @@
-import com.google.protobuf.ByteString;
-import com.google.protobuf.AbstractMessage;
-import com.google.protobuf.Parser;
-import com.google.protobuf.CodedInputStream;
-import com.google.protobuf.conformance.Conformance;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.google.protobuf_test_messages.proto3.TestMessagesProto3;
-import com.google.protobuf_test_messages.proto3.TestMessagesProto3.TestAllTypesProto3;
-import com.google.protobuf_test_messages.proto2.TestMessagesProto2;
-import com.google.protobuf_test_messages.proto2.TestMessagesProto2.TestAllTypesProto2;
-import com.google.protobuf.ExtensionRegistry;
-import com.google.protobuf.util.JsonFormat;
-import com.google.protobuf.util.JsonFormat.TypeRegistry;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-
-class ConformanceJava {
-  private int testCount = 0;
-  private TypeRegistry typeRegistry;
-
-  private boolean readFromStdin(byte[] buf, int len) throws Exception {
-    int ofs = 0;
-    while (len > 0) {
-      int read = System.in.read(buf, ofs, len);
-      if (read == -1) {
-        return false;  // EOF
-      }
-      ofs += read;
-      len -= read;
-    }
-
-    return true;
-  }
-
-  private void writeToStdout(byte[] buf) throws Exception {
-    System.out.write(buf);
-  }
-
-  // Returns -1 on EOF (the actual values will always be positive).
-  private int readLittleEndianIntFromStdin() throws Exception {
-    byte[] buf = new byte[4];
-    if (!readFromStdin(buf, 4)) {
-      return -1;
-    }
-    return (buf[0] & 0xff)
-        | ((buf[1] & 0xff) << 8)
-        | ((buf[2] & 0xff) << 16)
-        | ((buf[3] & 0xff) << 24);
-  }
-
-  private void writeLittleEndianIntToStdout(int val) throws Exception {
-    byte[] buf = new byte[4];
-    buf[0] = (byte)val;
-    buf[1] = (byte)(val >> 8);
-    buf[2] = (byte)(val >> 16);
-    buf[3] = (byte)(val >> 24);
-    writeToStdout(buf);
-  }
-  
-  private enum BinaryDecoderType {
-    BTYE_STRING_DECODER,
-    BYTE_ARRAY_DECODER,
-    ARRAY_BYTE_BUFFER_DECODER,
-    READONLY_ARRAY_BYTE_BUFFER_DECODER,
-    DIRECT_BYTE_BUFFER_DECODER,
-    READONLY_DIRECT_BYTE_BUFFER_DECODER,
-    INPUT_STREAM_DECODER;
-  }
-
-  private static class BinaryDecoder <MessageType extends AbstractMessage> {
-    public MessageType decode (ByteString bytes, BinaryDecoderType type, 
-        Parser <MessageType> parser, ExtensionRegistry extensions)
-      throws InvalidProtocolBufferException {
-      switch (type) {
-        case BTYE_STRING_DECODER: 
-          return parser.parseFrom(bytes, extensions);
-        case BYTE_ARRAY_DECODER:
-          return parser.parseFrom(bytes.toByteArray(), extensions);
-        case ARRAY_BYTE_BUFFER_DECODER: {
-          ByteBuffer buffer = ByteBuffer.allocate(bytes.size());
-          bytes.copyTo(buffer);
-          buffer.flip();
-          try {
-            return parser.parseFrom(CodedInputStream.newInstance(buffer), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            throw e;
-          }
-        }
-        case READONLY_ARRAY_BYTE_BUFFER_DECODER: {
-          try {
-            return parser.parseFrom(
-                CodedInputStream.newInstance(bytes.asReadOnlyByteBuffer()), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            throw e;
-          }
-        } 
-        case DIRECT_BYTE_BUFFER_DECODER: {
-          ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size());
-          bytes.copyTo(buffer);
-          buffer.flip();
-          try {
-            return parser.parseFrom(CodedInputStream.newInstance(buffer), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            throw e;
-          }
-        }
-        case READONLY_DIRECT_BYTE_BUFFER_DECODER: {
-          ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size());
-          bytes.copyTo(buffer);
-          buffer.flip();
-          try {
-            return parser.parseFrom(
-                CodedInputStream.newInstance(buffer.asReadOnlyBuffer()), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            throw e;
-          }
-        }
-        case INPUT_STREAM_DECODER: {
-          try {
-            return parser.parseFrom(bytes.newInput(), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            throw e;
-          }
-        }
-        default :
-          return null;
-      }
-    }
-  }
-
-  private <MessageType extends AbstractMessage> MessageType parseBinary(
-      ByteString bytes, Parser <MessageType> parser, ExtensionRegistry extensions)
-      throws InvalidProtocolBufferException {
-    ArrayList <MessageType> messages = new ArrayList <MessageType> ();
-    ArrayList <InvalidProtocolBufferException> exceptions =
-        new ArrayList <InvalidProtocolBufferException>();
-    
-    for (int i = 0; i < BinaryDecoderType.values().length; i++) {
-      messages.add(null);
-      exceptions.add(null);
-    }
-    BinaryDecoder <MessageType> decoder = new BinaryDecoder <MessageType> ();
-
-    boolean hasMessage = false;
-    boolean hasException = false;
-    for (int i = 0; i < BinaryDecoderType.values().length; ++i) {
-      try {
-        //= BinaryDecoderType.values()[i].parseProto3(bytes);
-        messages.set(i, decoder.decode(bytes, BinaryDecoderType.values()[i], parser, extensions));
-        hasMessage = true;
-      } catch (InvalidProtocolBufferException e) {
-        exceptions.set(i, e);
-        hasException = true;
-      }
-    }
-
-    if (hasMessage && hasException) {
-      StringBuilder sb =
-          new StringBuilder("Binary decoders disagreed on whether the payload was valid.\n");
-      for (int i = 0; i < BinaryDecoderType.values().length; ++i) {
-        sb.append(BinaryDecoderType.values()[i].name());
-        if (messages.get(i) != null) {
-          sb.append(" accepted the payload.\n");
-        } else {
-          sb.append(" rejected the payload.\n");
-        }
-      }
-      throw new RuntimeException(sb.toString());
-    }
-
-    if (hasException) {
-      // We do not check if exceptions are equal. Different implementations may return different
-      // exception messages. Throw an arbitrary one out instead.
-      throw exceptions.get(0);
-    }
-
-    // Fast path comparing all the messages with the first message, assuming equality being
-    // symmetric and transitive.
-    boolean allEqual = true;
-    for (int i = 1; i < messages.size(); ++i) {
-      if (!messages.get(0).equals(messages.get(i))) {
-        allEqual = false;
-        break;
-      }
-    }
-
-    // Slow path: compare and find out all unequal pairs.
-    if (!allEqual) {
-      StringBuilder sb = new StringBuilder();
-      for (int i = 0; i < messages.size() - 1; ++i) {
-        for (int j = i + 1; j < messages.size(); ++j) {
-          if (!messages.get(i).equals(messages.get(j))) {
-            sb.append(BinaryDecoderType.values()[i].name())
-                .append(" and ")
-                .append(BinaryDecoderType.values()[j].name())
-                .append(" parsed the payload differently.\n");
-          }
-        }
-      }
-      throw new RuntimeException(sb.toString());
-    }
-
-    return messages.get(0);
-  }
-
-  private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) {
-    com.google.protobuf.AbstractMessage testMessage;
-    boolean isProto3 = request.getMessageType().equals("protobuf_test_messages.proto3.TestAllTypesProto3");
-    boolean isProto2 = request.getMessageType().equals("protobuf_test_messages.proto2.TestAllTypesProto2");
-
-    switch (request.getPayloadCase()) {
-      case PROTOBUF_PAYLOAD: {
-        if (isProto3) {
-          try {
-            ExtensionRegistry extensions = ExtensionRegistry.newInstance();
-            TestMessagesProto3.registerAllExtensions(extensions);
-            testMessage = parseBinary(request.getProtobufPayload(), TestAllTypesProto3.parser(), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build();
-          }
-        } else if (isProto2) {
-          try {
-            ExtensionRegistry extensions = ExtensionRegistry.newInstance();
-            TestMessagesProto2.registerAllExtensions(extensions);
-            testMessage = parseBinary(request.getProtobufPayload(), TestAllTypesProto2.parser(), extensions);
-          } catch (InvalidProtocolBufferException e) {
-            return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build();
-          }
-        } else {
-          throw new RuntimeException("Protobuf request doesn't have specific payload type.");
-        }
-        break;
-      }
-      case JSON_PAYLOAD: {
-        try {
-          TestMessagesProto3.TestAllTypesProto3.Builder builder = 
-              TestMessagesProto3.TestAllTypesProto3.newBuilder();
-          JsonFormat.parser().usingTypeRegistry(typeRegistry)
-              .merge(request.getJsonPayload(), builder);
-          testMessage = builder.build();
-        } catch (InvalidProtocolBufferException e) {
-          return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build();
-        }
-        break;
-      }
-      case PAYLOAD_NOT_SET: {
-        throw new RuntimeException("Request didn't have payload.");
-      }
-
-      default: {
-        throw new RuntimeException("Unexpected payload case.");
-      }
-    }
-
-    switch (request.getRequestedOutputFormat()) {
-      case UNSPECIFIED:
-        throw new RuntimeException("Unspecified output format.");
-
-      case PROTOBUF: {
-        ByteString MessageString = testMessage.toByteString(); 
-        return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(MessageString).build();
-      }
-
-      case JSON:
-        try {
-          return Conformance.ConformanceResponse.newBuilder().setJsonPayload(
-              JsonFormat.printer().usingTypeRegistry(typeRegistry).print(testMessage)).build();
-        } catch (InvalidProtocolBufferException | IllegalArgumentException e) {
-          return Conformance.ConformanceResponse.newBuilder().setSerializeError(
-              e.getMessage()).build();
-        }
-
-      default: {
-        throw new RuntimeException("Unexpected request output.");
-      }
-    }
-  }
-
-  private boolean doTestIo() throws Exception {
-    int bytes = readLittleEndianIntFromStdin();
-
-    if (bytes == -1) {
-      return false;  // EOF
-    }
-
-    byte[] serializedInput = new byte[bytes];
-
-    if (!readFromStdin(serializedInput, bytes)) {
-      throw new RuntimeException("Unexpected EOF from test program.");
-    }
-
-    Conformance.ConformanceRequest request =
-        Conformance.ConformanceRequest.parseFrom(serializedInput);
-    Conformance.ConformanceResponse response = doTest(request);
-    byte[] serializedOutput = response.toByteArray();
-
-    writeLittleEndianIntToStdout(serializedOutput.length);
-    writeToStdout(serializedOutput);
-
-    return true;
-  }
-
-  public void run() throws Exception {
-    typeRegistry = TypeRegistry.newBuilder().add(
-        TestMessagesProto3.TestAllTypesProto3.getDescriptor()).build();
-    while (doTestIo()) {
-      this.testCount++;
-    }
-
-    System.err.println("ConformanceJava: received EOF from test runner after " +
-        this.testCount + " tests");
-  }
-
-  public static void main(String[] args) throws Exception {
-    new ConformanceJava().run();
-  }
-}

+ 0 - 125
conformance/ConformanceJavaLite.java

@@ -1,125 +0,0 @@
-
-import com.google.protobuf.conformance.Conformance;
-import com.google.protobuf.InvalidProtocolBufferException;
-
-class ConformanceJavaLite {
-  private int testCount = 0;
-
-  private boolean readFromStdin(byte[] buf, int len) throws Exception {
-    int ofs = 0;
-    while (len > 0) {
-      int read = System.in.read(buf, ofs, len);
-      if (read == -1) {
-        return false;  // EOF
-      }
-      ofs += read;
-      len -= read;
-    }
-
-    return true;
-  }
-
-  private void writeToStdout(byte[] buf) throws Exception {
-    System.out.write(buf);
-  }
-
-  // Returns -1 on EOF (the actual values will always be positive).
-  private int readLittleEndianIntFromStdin() throws Exception {
-    byte[] buf = new byte[4];
-    if (!readFromStdin(buf, 4)) {
-      return -1;
-    }
-    return (buf[0] & 0xff)
-        | ((buf[1] & 0xff) << 8)
-        | ((buf[2] & 0xff) << 16)
-        | ((buf[3] & 0xff) << 24);
-  }
-
-  private void writeLittleEndianIntToStdout(int val) throws Exception {
-    byte[] buf = new byte[4];
-    buf[0] = (byte)val;
-    buf[1] = (byte)(val >> 8);
-    buf[2] = (byte)(val >> 16);
-    buf[3] = (byte)(val >> 24);
-    writeToStdout(buf);
-  }
-
-  private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) {
-    Conformance.TestAllTypes testMessage;
-
-    switch (request.getPayloadCase()) {
-      case PROTOBUF_PAYLOAD: {
-        try {
-          testMessage = Conformance.TestAllTypes.parseFrom(request.getProtobufPayload());
-        } catch (InvalidProtocolBufferException e) {
-          return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build();
-        }
-        break;
-      }
-      case JSON_PAYLOAD: {
-        return Conformance.ConformanceResponse.newBuilder().setSkipped(
-            "Lite runtime does not support JSON format.").build();
-      }
-      case PAYLOAD_NOT_SET: {
-        throw new RuntimeException("Request didn't have payload.");
-      }
-
-      default: {
-        throw new RuntimeException("Unexpected payload case.");
-      }
-    }
-
-    switch (request.getRequestedOutputFormat()) {
-      case UNSPECIFIED:
-        throw new RuntimeException("Unspecified output format.");
-
-      case PROTOBUF:
-        return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(testMessage.toByteString()).build();
-
-      case JSON:
-        return Conformance.ConformanceResponse.newBuilder().setSkipped(
-            "Lite runtime does not support JSON format.").build();
-
-      default: {
-        throw new RuntimeException("Unexpected request output.");
-      }
-    }
-  }
-
-  private boolean doTestIo() throws Exception {
-    int bytes = readLittleEndianIntFromStdin();
-
-    if (bytes == -1) {
-      return false;  // EOF
-    }
-
-    byte[] serializedInput = new byte[bytes];
-
-    if (!readFromStdin(serializedInput, bytes)) {
-      throw new RuntimeException("Unexpected EOF from test program.");
-    }
-
-    Conformance.ConformanceRequest request =
-        Conformance.ConformanceRequest.parseFrom(serializedInput);
-    Conformance.ConformanceResponse response = doTest(request);
-    byte[] serializedOutput = response.toByteArray();
-
-    writeLittleEndianIntToStdout(serializedOutput.length);
-    writeToStdout(serializedOutput);
-
-    return true;
-  }
-
-  public void run() throws Exception {
-    while (doTestIo()) {
-      this.testCount++;
-    }
-
-    System.err.println("ConformanceJavaLite: received EOF from test runner after " +
-        this.testCount + " tests");
-  }
-
-  public static void main(String[] args) throws Exception {
-    new ConformanceJavaLite().run();
-  }
-}

+ 0 - 371
conformance/Makefile.am

@@ -1,371 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-conformance_protoc_inputs =                                    \
-  conformance.proto                                            \
-  $(top_srcdir)/src/google/protobuf/test_messages_proto3.proto
-
-# proto2 input files, should be separated with proto3, as we
-# can't generate proto2 files for ruby, php and objc
-conformance_proto2_protoc_inputs =                             \
-  $(top_srcdir)/src/google/protobuf/test_messages_proto2.proto
-
-well_known_type_protoc_inputs =                                \
-  $(top_srcdir)/src/google/protobuf/any.proto                  \
-  $(top_srcdir)/src/google/protobuf/duration.proto             \
-  $(top_srcdir)/src/google/protobuf/field_mask.proto           \
-  $(top_srcdir)/src/google/protobuf/struct.proto               \
-  $(top_srcdir)/src/google/protobuf/timestamp.proto            \
-  $(top_srcdir)/src/google/protobuf/wrappers.proto
-
-
-protoc_outputs =                                               \
-  conformance.pb.cc                                            \
-  conformance.pb.h
-
-other_language_protoc_outputs =                                \
-  conformance_pb2.py                                           \
-  Conformance.pbobjc.h                                         \
-  Conformance.pbobjc.m                                         \
-  conformance_pb.js                                            \
-  conformance_pb.rb                                            \
-  com/google/protobuf/Any.java                                 \
-  com/google/protobuf/AnyOrBuilder.java                        \
-  com/google/protobuf/AnyProto.java                            \
-  com/google/protobuf/BoolValue.java                           \
-  com/google/protobuf/BoolValueOrBuilder.java                  \
-  com/google/protobuf/BytesValue.java                          \
-  com/google/protobuf/BytesValueOrBuilder.java                 \
-  com/google/protobuf/conformance/Conformance.java             \
-  com/google/protobuf/DoubleValue.java                         \
-  com/google/protobuf/DoubleValueOrBuilder.java                \
-  com/google/protobuf/Duration.java                            \
-  com/google/protobuf/DurationOrBuilder.java                   \
-  com/google/protobuf/DurationProto.java                       \
-  com/google/protobuf/FieldMask.java                           \
-  com/google/protobuf/FieldMaskOrBuilder.java                  \
-  com/google/protobuf/FieldMaskProto.java                      \
-  com/google/protobuf/FloatValue.java                          \
-  com/google/protobuf/FloatValueOrBuilder.java                 \
-  com/google/protobuf/Int32Value.java                          \
-  com/google/protobuf/Int32ValueOrBuilder.java                 \
-  com/google/protobuf/Int64Value.java                          \
-  com/google/protobuf/Int64ValueOrBuilder.java                 \
-  com/google/protobuf/ListValue.java                           \
-  com/google/protobuf/ListValueOrBuilder.java                  \
-  com/google/protobuf/NullValue.java                           \
-  com/google/protobuf/StringValue.java                         \
-  com/google/protobuf/StringValueOrBuilder.java                \
-  com/google/protobuf/Struct.java                              \
-  com/google/protobuf/StructOrBuilder.java                     \
-  com/google/protobuf/StructProto.java                         \
-  com/google/protobuf/Timestamp.java                           \
-  com/google/protobuf/TimestampOrBuilder.java                  \
-  com/google/protobuf/TimestampProto.java                      \
-  com/google/protobuf/UInt32Value.java                         \
-  com/google/protobuf/UInt32ValueOrBuilder.java                \
-  com/google/protobuf/UInt64Value.java                         \
-  com/google/protobuf/UInt64ValueOrBuilder.java                \
-  com/google/protobuf/Value.java                               \
-  com/google/protobuf/ValueOrBuilder.java                      \
-  com/google/protobuf/WrappersProto.java                       \
-  com/google/protobuf_test_messages/proto3/TestMessagesProto3.java \
-  com/google/protobuf_test_messages/proto2/TestMessagesProto2.java \
-  google/protobuf/any.pb.cc                                    \
-  google/protobuf/any.pb.h                                     \
-  google/protobuf/any.rb                                       \
-  google/protobuf/any_pb2.py                                   \
-  google/protobuf/duration.pb.cc                               \
-  google/protobuf/duration.pb.h                                \
-  google/protobuf/duration.rb                                  \
-  google/protobuf/duration_pb2.py                              \
-  google/protobuf/field_mask.pb.cc                             \
-  google/protobuf/field_mask.pb.h                              \
-  google/protobuf/field_mask.rb                                \
-  google/protobuf/field_mask_pb2.py                            \
-  google/protobuf/struct.pb.cc                                 \
-  google/protobuf/struct.pb.h                                  \
-  google/protobuf/struct.rb                                    \
-  google/protobuf/struct_pb2.py                                \
-  google/protobuf/TestMessagesProto2.pbobjc.h                  \
-  google/protobuf/TestMessagesProto2.pbobjc.m                  \
-  google/protobuf/TestMessagesProto3.pbobjc.h                  \
-  google/protobuf/TestMessagesProto3.pbobjc.m                  \
-  google/protobuf/test_messages_proto3.pb.cc                   \
-  google/protobuf/test_messages_proto3.pb.h                    \
-  google/protobuf/test_messages_proto2.pb.cc                   \
-  google/protobuf/test_messages_proto2.pb.h                    \
-  google/protobuf/test_messages_proto3_pb.rb                   \
-  google/protobuf/test_messages_proto3_pb2.py                  \
-  google/protobuf/test_messages_proto2_pb2.py                  \
-  google/protobuf/timestamp.pb.cc                              \
-  google/protobuf/timestamp.pb.h                               \
-  google/protobuf/timestamp.rb                                 \
-  google/protobuf/timestamp_pb2.py                             \
-  google/protobuf/wrappers.pb.cc                               \
-  google/protobuf/wrappers.pb.h                                \
-  google/protobuf/wrappers.rb                                  \
-  google/protobuf/wrappers_pb2.py                              \
-  Conformance/ConformanceRequest.php                           \
-  Conformance/ConformanceResponse.php                          \
-  Conformance/WireFormat.php                                   \
-  GPBMetadata/Conformance.php                                  \
-  GPBMetadata/Google/Protobuf/Any.php                          \
-  GPBMetadata/Google/Protobuf/Duration.php                     \
-  GPBMetadata/Google/Protobuf/FieldMask.php                    \
-  GPBMetadata/Google/Protobuf/Struct.php                       \
-  GPBMetadata/Google/Protobuf/TestMessagesProto3.php           \
-  GPBMetadata/Google/Protobuf/Timestamp.php                    \
-  GPBMetadata/Google/Protobuf/Wrappers.php                     \
-  Google/Protobuf/Any.php                                      \
-  Google/Protobuf/BoolValue.php                                \
-  Google/Protobuf/BytesValue.php                               \
-  Google/Protobuf/DoubleValue.php                              \
-  Google/Protobuf/Duration.php                                 \
-  Google/Protobuf/FieldMask.php                                \
-  Google/Protobuf/FloatValue.php                               \
-  Google/Protobuf/Int32Value.php                               \
-  Google/Protobuf/Int64Value.php                               \
-  Google/Protobuf/ListValue.php                                \
-  Google/Protobuf/NullValue.php                                \
-  Google/Protobuf/StringValue.php                              \
-  Google/Protobuf/Struct.php                                   \
-  Google/Protobuf/Timestamp.php                                \
-  Google/Protobuf/UInt32Value.php                              \
-  Google/Protobuf/UInt64Value.php                              \
-  Google/Protobuf/Value.php                                    \
-  Protobuf_test_messages/Proto3/ForeignEnum.php                \
-  Protobuf_test_messages/Proto3/ForeignMessage.php             \
-  Protobuf_test_messages/Proto3/TestAllTypes_NestedEnum.php    \
-  Protobuf_test_messages/Proto3/TestAllTypes_NestedMessage.php \
-  Protobuf_test_messages/Proto3/TestAllTypes.php
-  # lite/com/google/protobuf/Any.java                            \
-  # lite/com/google/protobuf/AnyOrBuilder.java                   \
-  # lite/com/google/protobuf/AnyProto.java                       \
-  # lite/com/google/protobuf/BoolValue.java                      \
-  # lite/com/google/protobuf/BoolValueOrBuilder.java             \
-  # lite/com/google/protobuf/BytesValue.java                     \
-  # lite/com/google/protobuf/BytesValueOrBuilder.java            \
-  # lite/com/google/protobuf/conformance/Conformance.java        \
-  # lite/com/google/protobuf/DoubleValue.java                    \
-  # lite/com/google/protobuf/DoubleValueOrBuilder.java           \
-  # lite/com/google/protobuf/Duration.java                       \
-  # lite/com/google/protobuf/DurationOrBuilder.java              \
-  # lite/com/google/protobuf/DurationProto.java                  \
-  # lite/com/google/protobuf/FieldMask.java                      \
-  # lite/com/google/protobuf/FieldMaskOrBuilder.java             \
-  # lite/com/google/protobuf/FieldMaskProto.java                 \
-  # lite/com/google/protobuf/FloatValue.java                     \
-  # lite/com/google/protobuf/FloatValueOrBuilder.java            \
-  # lite/com/google/protobuf/Int32Value.java                     \
-  # lite/com/google/protobuf/Int32ValueOrBuilder.java            \
-  # lite/com/google/protobuf/Int64Value.java                     \
-  # lite/com/google/protobuf/Int64ValueOrBuilder.java            \
-  # lite/com/google/protobuf/ListValue.java                      \
-  # lite/com/google/protobuf/ListValueOrBuilder.java             \
-  # lite/com/google/protobuf/NullValue.java                      \
-  # lite/com/google/protobuf/StringValue.java                    \
-  # lite/com/google/protobuf/StringValueOrBuilder.java           \
-  # lite/com/google/protobuf/Struct.java                         \
-  # lite/com/google/protobuf/StructOrBuilder.java                \
-  # lite/com/google/protobuf/StructProto.java                    \
-  # lite/com/google/protobuf/Timestamp.java                      \
-  # lite/com/google/protobuf/TimestampOrBuilder.java             \
-  # lite/com/google/protobuf/TimestampProto.java                 \
-  # lite/com/google/protobuf/UInt32Value.java                    \
-  # lite/com/google/protobuf/UInt32ValueOrBuilder.java           \
-  # lite/com/google/protobuf/UInt64Value.java                    \
-  # lite/com/google/protobuf/UInt64ValueOrBuilder.java           \
-  # lite/com/google/protobuf/Value.java                          \
-  # lite/com/google/protobuf/ValueOrBuilder.java                 \
-  # lite/com/google/protobuf/WrappersProto.java
-
-bin_PROGRAMS = conformance-test-runner conformance-cpp
-
-# All source files excepet C++/Objective-C ones should be explicitly listed
-# here because the autoconf tools don't include files of other languages
-# automatically.
-EXTRA_DIST =                  \
-  ConformanceJava.java        \
-  ConformanceJavaLite.java    \
-  README.md                   \
-  conformance.proto           \
-  conformance_python.py       \
-  conformance_ruby.rb         \
-  conformance_php.php         \
-  failure_list_cpp.txt        \
-  failure_list_csharp.txt     \
-  failure_list_java.txt       \
-  failure_list_js.txt         \
-  failure_list_objc.txt       \
-  failure_list_python.txt     \
-  failure_list_python_cpp.txt \
-  failure_list_python-post26.txt \
-  failure_list_ruby.txt       \
-  failure_list_php.txt        \
-  failure_list_php_c.txt
-
-conformance_test_runner_LDADD = $(top_srcdir)/src/libprotobuf.la
-conformance_test_runner_SOURCES = conformance_test.h conformance_test.cc \
-                                  conformance_test_runner.cc             \
-                                  third_party/jsoncpp/json.h             \
-                                  third_party/jsoncpp/jsoncpp.cpp
-nodist_conformance_test_runner_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc google/protobuf/test_messages_proto2.pb.cc
-conformance_test_runner_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir)
-conformance_test_runner_CXXFLAGS = -std=c++11
-# Explicit deps beacuse BUILT_SOURCES are only done before a "make all/check"
-# so a direct "make test_cpp" could fail if parallel enough.
-conformance_test_runner-conformance_test.$(OBJEXT): conformance.pb.h
-conformance_test_runner-conformance_test_runner.$(OBJEXT): conformance.pb.h
-
-conformance_cpp_LDADD = $(top_srcdir)/src/libprotobuf.la
-conformance_cpp_SOURCES = conformance_cpp.cc
-nodist_conformance_cpp_SOURCES = conformance.pb.cc google/protobuf/test_messages_proto3.pb.cc google/protobuf/test_messages_proto2.pb.cc
-conformance_cpp_CPPFLAGS = -I$(top_srcdir)/src
-# Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check"
-# so a direct "make test_cpp" could fail if parallel enough.
-conformance_cpp-conformance_cpp.$(OBJEXT): conformance.pb.h
-
-if OBJC_CONFORMANCE_TEST
-
-bin_PROGRAMS += conformance-objc
-
-conformance_objc_SOURCES = conformance_objc.m ../objectivec/GPBProtocolBuffers.m
-nodist_conformance_objc_SOURCES = Conformance.pbobjc.m google/protobuf/TestMessagesProto2.pbobjc.m google/protobuf/TestMessagesProto3.pbobjc.m
-# On travis, the build fails without the isysroot because whatever system
-# headers are being found don't include generics support for
-# NSArray/NSDictionary, the only guess is their image at one time had an odd
-# setup for Xcode and old frameworks are being found.
-conformance_objc_CPPFLAGS = -I$(top_srcdir)/objectivec -isysroot `xcrun --sdk macosx --show-sdk-path`
-conformance_objc_LDFLAGS = -framework Foundation
-# Explicit dep beacuse BUILT_SOURCES are only done before a "make all/check"
-# so a direct "make test_objc" could fail if parallel enough.
-conformance_objc-conformance_objc.$(OBJEXT): Conformance.pbobjc.h google/protobuf/TestMessagesProto2.pbobjc.h google/protobuf/TestMessagesProto3.pbobjc.h
-
-endif
-
-# JavaScript well-known types are expected to be in a directory called
-# google-protobuf, because they are usually in the google-protobuf npm
-# package.  But we want to use the sources from our tree, so we recreate
-# that directory structure here.
-google-protobuf:
-	mkdir google-protobuf
-
-if USE_EXTERNAL_PROTOC
-
-# Some implementations include pre-generated versions of well-known types.
-protoc_middleman: $(conformance_protoc_inputs) $(conformance_proto2_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf
-	$(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --objc_out=. --python_out=. --php_out=. --js_out=import_style=commonjs,binary:. $(conformance_protoc_inputs)
-	$(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --objc_out=. --python_out=. --js_out=import_style=commonjs,binary:. $(conformance_proto2_protoc_inputs)
-	$(PROTOC) -I$(srcdir) -I$(top_srcdir) --cpp_out=. --java_out=. --ruby_out=. --python_out=. --js_out=import_style=commonjs,binary:google-protobuf $(well_known_type_protoc_inputs)
-	## $(PROTOC) -I$(srcdir) -I$(top_srcdir) --java_out=lite:lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs)
-	touch protoc_middleman
-
-else
-
-# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is
-# relative to srcdir, which may not be the same as the current directory when
-# building out-of-tree.
-protoc_middleman: $(top_srcdir)/src/protoc$(EXEEXT) $(conformance_protoc_inputs) $(conformance_proto2_protoc_inputs) $(well_known_type_protoc_inputs) google-protobuf
-	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --objc_out=$$oldpwd --python_out=$$oldpwd --php_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_protoc_inputs) )
-	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --objc_out=. --python_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd $(conformance_proto2_protoc_inputs) )
-	oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --cpp_out=$$oldpwd --java_out=$$oldpwd --ruby_out=$$oldpwd --python_out=$$oldpwd --js_out=import_style=commonjs,binary:$$oldpwd/google-protobuf $(well_known_type_protoc_inputs) )
-	## @mkdir -p lite
-	## oldpwd=`pwd` && ( cd $(srcdir) && $$oldpwd/../src/protoc$(EXEEXT) -I. -I$(top_srcdir)/src --java_out=lite:$$oldpwd/lite $(conformance_protoc_inputs) $(well_known_type_protoc_inputs) )
-	touch protoc_middleman
-
-endif
-
-$(protoc_outputs): protoc_middleman
-
-$(other_language_protoc_outputs): protoc_middleman
-
-BUILT_SOURCES = $(protoc_outputs) $(other_language_protoc_outputs)
-
-CLEANFILES = $(protoc_outputs) protoc_middleman javac_middleman conformance-java javac_middleman_lite conformance-java-lite conformance-csharp conformance-php conformance-php-c $(other_language_protoc_outputs)
-
-MAINTAINERCLEANFILES =   \
-  Makefile.in
-
-javac_middleman: ConformanceJava.java protoc_middleman $(other_language_protoc_outputs)
-	jar=`ls ../java/util/target/*jar-with-dependencies.jar` && javac -classpath ../java/target/classes:$$jar ConformanceJava.java com/google/protobuf/conformance/Conformance.java com/google/protobuf_test_messages/proto3/TestMessagesProto3.java com/google/protobuf_test_messages/proto2/TestMessagesProto2.java
-	@touch javac_middleman
-
-conformance-java: javac_middleman
-	@echo "Writing shortcut script conformance-java..."
-	@echo '#! /bin/sh' > conformance-java
-	@jar=`ls ../java/util/target/*jar-with-dependencies.jar` && echo java -classpath .:../java/target/classes:$$jar ConformanceJava '$$@' >> conformance-java
-	@chmod +x conformance-java
-
-javac_middleman_lite: ConformanceJavaLite.java protoc_middleman $(other_language_protoc_outputs)
-	javac -classpath ../java/lite/target/classes:lite ConformanceJavaLite.java lite/com/google/protobuf/conformance/Conformance.java
-	@touch javac_middleman_lite
-
-conformance-java-lite: javac_middleman_lite
-	@echo "Writing shortcut script conformance-java-lite..."
-	@echo '#! /bin/sh' > conformance-java-lite
-	@echo java -classpath .:../java/lite/target/classes:lite ConformanceJavaLite '$$@' >> conformance-java-lite
-	@chmod +x conformance-java-lite
-
-# Currently the conformance code is alongside the rest of the C#
-# source, as it's easier to maintain there. We assume we've already
-# built that, so we just need a script to run it.
-conformance-csharp: $(other_language_protoc_outputs)
-	@echo "Writing shortcut script conformance-csharp..."
-	@echo '#! /bin/sh' > conformance-csharp
-	@echo 'dotnet ../csharp/src/Google.Protobuf.Conformance/bin/Release/netcoreapp1.0/Google.Protobuf.Conformance.dll "$$@"' >> conformance-csharp
-	@chmod +x conformance-csharp
-
-conformance-php:
-	@echo "Writing shortcut script conformance-php..."
-	@echo '#! /bin/sh' > conformance-php
-	@echo 'php -d auto_prepend_file=autoload.php ./conformance_php.php' >> conformance-php
-	@chmod +x conformance-php
-
-conformance-php-c:
-	@echo "Writing shortcut script conformance-php-c..."
-	@echo '#! /bin/sh' > conformance-php-c
-	@echo 'php -dextension=../php/ext/google/protobuf/modules/protobuf.so ./conformance_php.php' >> conformance-php-c
-	@chmod +x conformance-php-c
-
-# Targets for actually running tests.
-test_cpp: protoc_middleman conformance-test-runner conformance-cpp
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_cpp.txt ./conformance-cpp
-
-test_java: protoc_middleman conformance-test-runner conformance-java
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_java.txt ./conformance-java
-
-test_java_lite: protoc_middleman conformance-test-runner conformance-java-lite
-	./conformance-test-runner --enforce_recommended ./conformance-java-lite
-
-test_csharp: protoc_middleman conformance-test-runner conformance-csharp
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_csharp.txt ./conformance-csharp
-
-test_ruby: protoc_middleman conformance-test-runner $(other_language_protoc_outputs)
-	RUBYLIB=../ruby/lib:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_ruby.txt ./conformance_ruby.rb
-
-test_php: protoc_middleman conformance-test-runner conformance-php $(other_language_protoc_outputs)
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_php.txt ./conformance-php
-
-test_php_c: protoc_middleman conformance-test-runner conformance-php-c $(other_language_protoc_outputs)
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_php_c.txt ./conformance-php-c
-
-test_php_zts_c: protoc_middleman conformance-test-runner conformance-php-c $(other_language_protoc_outputs)
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_php_zts_c.txt ./conformance-php-c
-
-# These depend on library paths being properly set up.  The easiest way to
-# run them is to just use "tox" from the python dir.
-test_python: protoc_middleman conformance-test-runner
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_python.txt ./conformance_python.py
-
-test_python_cpp: protoc_middleman conformance-test-runner
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py
-
-test_nodejs: protoc_middleman conformance-test-runner $(other_language_protoc_outputs)
-	NODE_PATH=../js:. ./conformance-test-runner --enforce_recommended --failure_list failure_list_js.txt ./conformance_nodejs.js
-
-if OBJC_CONFORMANCE_TEST
-
-test_objc: protoc_middleman conformance-test-runner conformance-objc
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_objc.txt ./conformance-objc
-
-endif

+ 0 - 73
conformance/README.md

@@ -1,73 +0,0 @@
-Protocol Buffers - Google's data interchange format
-===================================================
-
-[![Build Status](https://travis-ci.org/google/protobuf.svg?branch=master)](https://travis-ci.org/google/protobuf)
-
-Copyright 2008 Google Inc.
-
-This directory contains conformance tests for testing completeness and
-correctness of Protocol Buffers implementations.  These tests are designed
-to be easy to run against any Protocol Buffers implementation.
-
-This directory contains the tester process `conformance-test`, which
-contains all of the tests themselves.  Then separate programs written
-in whatever language you want to test communicate with the tester
-program over a pipe.
-
-Before running any of these tests, make sure you run `make` in the base
-directory to build `protoc`, since all the tests depend on it.
-
-    $ make
-
-Running the tests for C++
--------------------------
-
-To run the tests against the C++ implementation, run:
-
-    $ cd conformance && make test_cpp
-
-Running the tests for JavaScript (Node.js)
-------------------------------------------
-
-To run the JavaScript tests against Node.js, make sure you have "node"
-on your path and then run:
-
-    $ cd conformance && make test_nodejs
-
-Running the tests for Ruby (MRI)
---------------------------------
-
-To run the Ruby tests against MRI, first build the C extension:
-
-    $ cd ruby && rake
-
-Then run the tests like so:
-
-    $ cd conformance && make test_ruby
-
-Running the tests for other languages
--------------------------------------
-
-Most of the languages in the Protobuf source tree are set up to run
-conformance tests.  However some of them are more tricky to set up
-properly.  See `tests.sh` in the base of the repository to see how
-Travis runs the tests.
-
-Testing other Protocol Buffer implementations
----------------------------------------------
-
-To run these tests against a new Protocol Buffers implementation, write a
-program in your language that uses the protobuf implementation you want
-to test.  This program should implement the testing protocol defined in
-[conformance.proto](https://github.com/google/protobuf/blob/master/conformance/conformance.proto).
-This is designed to be as easy as possible: the C++ version is only
-150 lines and is a good example for what this program should look like
-(see [conformance_cpp.cc](https://github.com/google/protobuf/blob/master/conformance/conformance_cpp.cc)).
-The program only needs to be able to read from stdin and write to stdout.
-
-Portability
------------
-
-Note that the test runner currently does not work on Windows.  Patches
-to fix this are welcome!  (But please get in touch first to settle on
-a general implementation strategy).

+ 0 - 21
conformance/autoload.php

@@ -1,21 +0,0 @@
-<?php
-
-define("GOOGLE_INTERNAL_NAMESPACE", "Google\\Protobuf\\Internal\\");
-define("GOOGLE_NAMESPACE", "Google\\Protobuf\\");
-define("GOOGLE_GPBMETADATA_NAMESPACE", "GPBMetadata\\Google\\Protobuf\\");
-
-function protobuf_autoloader_impl($class, $prefix) {
-    $length = strlen($prefix);
-    if ((substr($class, 0, $length) === $prefix)) {
-        $path = '../php/src/' . implode('/', array_map('ucwords', explode('\\', $class))) . '.php';
-        include_once $path;
-    }
-}
-
-function protobuf_autoloader($class) {
-    protobuf_autoloader_impl($class, GOOGLE_INTERNAL_NAMESPACE);
-    protobuf_autoloader_impl($class, GOOGLE_NAMESPACE);
-    protobuf_autoloader_impl($class, GOOGLE_GPBMETADATA_NAMESPACE);
-}
-
-spl_autoload_register('protobuf_autoloader');

+ 0 - 119
conformance/conformance.proto

@@ -1,119 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-syntax = "proto3";
-package conformance;
-option java_package = "com.google.protobuf.conformance";
-
-// This defines the conformance testing protocol.  This protocol exists between
-// the conformance test suite itself and the code being tested.  For each test,
-// the suite will send a ConformanceRequest message and expect a
-// ConformanceResponse message.
-//
-// You can either run the tests in two different ways:
-//
-//   1. in-process (using the interface in conformance_test.h).
-//
-//   2. as a sub-process communicating over a pipe.  Information about how to
-//      do this is in conformance_test_runner.cc.
-//
-// Pros/cons of the two approaches:
-//
-//   - running as a sub-process is much simpler for languages other than C/C++.
-//
-//   - running as a sub-process may be more tricky in unusual environments like
-//     iOS apps, where fork/stdin/stdout are not available.
-
-enum WireFormat {
-  UNSPECIFIED = 0;
-  PROTOBUF = 1;
-  JSON = 2;
-}
-
-// Represents a single test case's input.  The testee should:
-//
-//   1. parse this proto (which should always succeed)
-//   2. parse the protobuf or JSON payload in "payload" (which may fail)
-//   3. if the parse succeeded, serialize the message in the requested format.
-message ConformanceRequest {
-  // The payload (whether protobuf of JSON) is always for a
-  // protobuf_test_messages.proto3.TestAllTypes proto (as defined in
-  // src/google/protobuf/proto3_test_messages.proto).
-  //
-  // TODO(haberman): if/when we expand the conformance tests to support proto2,
-  // we will want to include a field that lets the payload/response be a
-  // protobuf_test_messages.proto2.TestAllTypes message instead.
-  oneof payload {
-    bytes protobuf_payload = 1;
-    string json_payload = 2;
-  }
-
-  // Which format should the testee serialize its message to?
-  WireFormat requested_output_format = 3;
-
-  // The full name for the test message to use; for the moment, either:
-  // protobuf_test_messages.proto3.TestAllTypesProto3 or
-  // protobuf_test_messages.proto2.TestAllTypesProto2.
-  string message_type = 4;
-}
-
-// Represents a single test case's output.
-message ConformanceResponse {
-  oneof result {
-    // This string should be set to indicate parsing failed.  The string can
-    // provide more information about the parse error if it is available.
-    //
-    // Setting this string does not necessarily mean the testee failed the
-    // test.  Some of the test cases are intentionally invalid input.
-    string parse_error = 1;
-
-    // If the input was successfully parsed but errors occurred when
-    // serializing it to the requested output format, set the error message in
-    // this field.
-    string serialize_error = 6;
-
-    // This should be set if some other error occurred.  This will always
-    // indicate that the test failed.  The string can provide more information
-    // about the failure.
-    string runtime_error = 2;
-
-    // If the input was successfully parsed and the requested output was
-    // protobuf, serialize it to protobuf and set it in this field.
-    bytes protobuf_payload = 3;
-
-    // If the input was successfully parsed and the requested output was JSON,
-    // serialize to JSON and set it in this field.
-    string json_payload = 4;
-
-    // For when the testee skipped the test, likely because a certain feature
-    // wasn't supported, like JSON input/output.
-    string skipped = 5;
-  }
-}

+ 0 - 220
conformance/conformance_cpp.cc

@@ -1,220 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include <errno.h>
-#include <stdarg.h>
-#include <unistd.h>
-
-#include "conformance.pb.h"
-#include <google/protobuf/test_messages_proto3.pb.h>
-#include <google/protobuf/test_messages_proto2.pb.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/util/json_util.h>
-#include <google/protobuf/util/type_resolver_util.h>
-
-using conformance::ConformanceRequest;
-using conformance::ConformanceResponse;
-using google::protobuf::Descriptor;
-using google::protobuf::DescriptorPool;
-using google::protobuf::Message;
-using google::protobuf::MessageFactory;
-using google::protobuf::internal::scoped_ptr;
-using google::protobuf::util::BinaryToJsonString;
-using google::protobuf::util::JsonToBinaryString;
-using google::protobuf::util::NewTypeResolverForDescriptorPool;
-using google::protobuf::util::Status;
-using google::protobuf::util::TypeResolver;
-using protobuf_test_messages::proto3::TestAllTypesProto3;
-using protobuf_test_messages::proto2::TestAllTypesProto2;
-using std::string;
-
-static const char kTypeUrlPrefix[] = "type.googleapis.com";
-
-static string GetTypeUrl(const Descriptor* message) {
-  return string(kTypeUrlPrefix) + "/" + message->full_name();
-}
-
-int test_count = 0;
-bool verbose = false;
-TypeResolver* type_resolver;
-string* type_url;
-
-
-bool CheckedRead(int fd, void *buf, size_t len) {
-  size_t ofs = 0;
-  while (len > 0) {
-    ssize_t bytes_read = read(fd, (char*)buf + ofs, len);
-
-    if (bytes_read == 0) return false;
-
-    if (bytes_read < 0) {
-      GOOGLE_LOG(FATAL) << "Error reading from test runner: " <<  strerror(errno);
-    }
-
-    len -= bytes_read;
-    ofs += bytes_read;
-  }
-
-  return true;
-}
-
-void CheckedWrite(int fd, const void *buf, size_t len) {
-  if (write(fd, buf, len) != len) {
-    GOOGLE_LOG(FATAL) << "Error writing to test runner: " << strerror(errno);
-  }
-}
-
-void DoTest(const ConformanceRequest& request, ConformanceResponse* response) {
-  Message *test_message;
-  const Descriptor *descriptor = DescriptorPool::generated_pool()->FindMessageTypeByName(
-      request.message_type());
-  if (!descriptor) {
-    GOOGLE_LOG(FATAL) << "No such message type: " << request.message_type();
-  }
-  test_message = MessageFactory::generated_factory()->GetPrototype(descriptor)->New();
-
-  switch (request.payload_case()) {
-    case ConformanceRequest::kProtobufPayload: {
-      if (!test_message->ParseFromString(request.protobuf_payload())) {
-        // Getting parse details would involve something like:
-        //   http://stackoverflow.com/questions/22121922/how-can-i-get-more-details-about-errors-generated-during-protobuf-parsing-c
-        response->set_parse_error("Parse error (no more details available).");
-        return;
-      }
-      break;
-    }
-
-    case ConformanceRequest::kJsonPayload: {
-      string proto_binary;
-      Status status = JsonToBinaryString(type_resolver, *type_url,
-                                         request.json_payload(), &proto_binary);
-      if (!status.ok()) {
-        response->set_parse_error(string("Parse error: ") +
-                                  status.error_message().as_string());
-        return;
-      }
-
-      if (!test_message->ParseFromString(proto_binary)) {
-        response->set_runtime_error(
-            "Parsing JSON generates invalid proto output.");
-        return;
-      }
-      break;
-    }
-
-    case ConformanceRequest::PAYLOAD_NOT_SET:
-      GOOGLE_LOG(FATAL) << "Request didn't have payload.";
-      break;
-  }
-
-  switch (request.requested_output_format()) {
-    case conformance::UNSPECIFIED:
-      GOOGLE_LOG(FATAL) << "Unspecified output format";
-      break;
-
-    case conformance::PROTOBUF: {
-      GOOGLE_CHECK(test_message->SerializeToString(response->mutable_protobuf_payload()));
-      break;
-    }
-
-    case conformance::JSON: {
-      string proto_binary;
-      GOOGLE_CHECK(test_message->SerializeToString(&proto_binary));
-      Status status = BinaryToJsonString(type_resolver, *type_url, proto_binary,
-                                         response->mutable_json_payload());
-      if (!status.ok()) {
-        response->set_serialize_error(
-            string("Failed to serialize JSON output: ") +
-            status.error_message().as_string());
-        return;
-      }
-      break;
-    }
-
-    default:
-      GOOGLE_LOG(FATAL) << "Unknown output format: "
-                        << request.requested_output_format();
-  }
-}
-
-bool DoTestIo() {
-  string serialized_input;
-  string serialized_output;
-  ConformanceRequest request;
-  ConformanceResponse response;
-  uint32_t bytes;
-
-  if (!CheckedRead(STDIN_FILENO, &bytes, sizeof(uint32_t))) {
-    // EOF.
-    return false;
-  }
-
-  serialized_input.resize(bytes);
-
-  if (!CheckedRead(STDIN_FILENO, (char*)serialized_input.c_str(), bytes)) {
-    GOOGLE_LOG(ERROR) << "Unexpected EOF on stdin. " << strerror(errno);
-  }
-
-  if (!request.ParseFromString(serialized_input)) {
-    GOOGLE_LOG(FATAL) << "Parse of ConformanceRequest proto failed.";
-    return false;
-  }
-
-  DoTest(request, &response);
-
-  response.SerializeToString(&serialized_output);
-
-  bytes = serialized_output.size();
-  CheckedWrite(STDOUT_FILENO, &bytes, sizeof(uint32_t));
-  CheckedWrite(STDOUT_FILENO, serialized_output.c_str(), bytes);
-
-  if (verbose) {
-    fprintf(stderr, "conformance-cpp: request=%s, response=%s\n",
-            request.ShortDebugString().c_str(),
-            response.ShortDebugString().c_str());
-  }
-
-  test_count++;
-
-  return true;
-}
-
-int main() {
-  type_resolver = NewTypeResolverForDescriptorPool(
-      kTypeUrlPrefix, DescriptorPool::generated_pool());
-  type_url = new string(GetTypeUrl(TestAllTypesProto3::descriptor()));
-  while (1) {
-    if (!DoTestIo()) {
-      fprintf(stderr, "conformance-cpp: received EOF from test runner "
-                      "after %d tests, exiting\n", test_count);
-      return 0;
-    }
-  }
-}

+ 0 - 182
conformance/conformance_nodejs.js

@@ -1,182 +0,0 @@
-#!/usr/bin/env node
-
-/*
- * Protocol Buffers - Google's data interchange format
- * Copyright 2008 Google Inc.  All rights reserved.
- * https://developers.google.com/protocol-buffers/
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-var conformance = require('conformance_pb');
-var test_messages_proto3 = require('google/protobuf/test_messages_proto3_pb');
-var test_messages_proto2 = require('google/protobuf/test_messages_proto2_pb');
-var fs = require('fs');
-
-var testCount = 0;
-
-function doTest(request) {
-  var testMessage;
-  var response = new conformance.ConformanceResponse();
-
-  try {
-    if (request.getRequestedOutputFormat() === conformance.WireFormat.JSON) {
-      response.setSkipped("JSON not supported.");
-      return response;
-    }
-
-    switch (request.getPayloadCase()) {
-      case conformance.ConformanceRequest.PayloadCase.PROTOBUF_PAYLOAD: {
-        if (request.getMessageType() == "protobuf_test_messages.proto3.TestAllTypesProto3") {
-          try {
-            testMessage = test_messages_proto3.TestAllTypesProto3.deserializeBinary(
-                request.getProtobufPayload());
-          } catch (err) {
-            response.setParseError(err.toString());
-            return response;
-          }
-        } else if (request.getMessageType() == "protobuf_test_messages.proto2.TestAllTypesProto2"){
-          try {
-            testMessage = test_messages_proto2.TestAllTypesProto2.deserializeBinary(
-                request.getProtobufPayload());
-          } catch (err) {
-            response.setParseError(err.toString());
-            return response;
-          }
-        } else {
-          throw "Protobuf request doesn\'t have specific payload type";
-        }
-      }
-
-      case conformance.ConformanceRequest.PayloadCase.JSON_PAYLOAD:
-        response.setSkipped("JSON not supported.");
-        return response;
-
-      case conformance.ConformanceRequest.PayloadCase.PAYLOAD_NOT_SET:
-        response.setRuntimeError("Request didn't have payload");
-        return response;
-    }
-
-    switch (request.getRequestedOutputFormat()) {
-      case conformance.WireFormat.UNSPECIFIED:
-        response.setRuntimeError("Unspecified output format");
-        return response;
-
-      case conformance.WireFormat.PROTOBUF:
-        response.setProtobufPayload(testMessage.serializeBinary());
-
-      case conformance.WireFormat.JSON:
-        response.setSkipped("JSON not supported.");
-        return response;
-
-      default:
-        throw "Request didn't have requested output format";
-    }
-  } catch (err) {
-    response.setRuntimeError(err.toString());
-  }
-
-  return response;
-}
-
-function onEof(totalRead) {
-  if (totalRead == 0) {
-    return undefined;
-  } else {
-    throw "conformance_nodejs: premature EOF on stdin.";
-  }
-}
-
-// Utility function to read a buffer of N bytes.
-function readBuffer(bytes) {
-  var buf = new Buffer(bytes);
-  var totalRead = 0;
-  while (totalRead < bytes) {
-    var read = 0;
-    try {
-      read = fs.readSync(process.stdin.fd, buf, totalRead, bytes - totalRead);
-    } catch (e) {
-      if (e.code == 'EOF') {
-        return onEof(totalRead)
-      } else if (e.code == 'EAGAIN') {
-      } else {
-        throw "conformance_nodejs: Error reading from stdin." + e;
-      }
-    }
-
-    totalRead += read;
-  }
-
-  return buf;
-}
-
-function writeBuffer(buffer) {
-  var totalWritten = 0;
-  while (totalWritten < buffer.length) {
-    totalWritten += fs.writeSync(
-        process.stdout.fd, buffer, totalWritten, buffer.length - totalWritten);
-  }
-}
-
-// Returns true if the test ran successfully, false on legitimate EOF.
-// If EOF is encountered in an unexpected place, raises IOError.
-function doTestIo() {
-  var lengthBuf = readBuffer(4);
-  if (!lengthBuf) {
-    return false;
-  }
-
-  var length = lengthBuf.readInt32LE(0);
-  var serializedRequest = readBuffer(length);
-  if (!serializedRequest) {
-    throw "conformance_nodejs: Failed to read request.";
-  }
-
-  serializedRequest = new Uint8Array(serializedRequest);
-  var request =
-      conformance.ConformanceRequest.deserializeBinary(serializedRequest);
-  var response = doTest(request);
-
-  var serializedResponse = response.serializeBinary();
-
-  lengthBuf = new Buffer(4);
-  lengthBuf.writeInt32LE(serializedResponse.length, 0);
-  writeBuffer(lengthBuf);
-  writeBuffer(new Buffer(serializedResponse));
-
-  testCount += 1
-
-  return true;
-}
-
-while (true) {
-  if (!doTestIo()) {
-    console.error('conformance_nodejs: received EOF from test runner ' +
-                  "after " + testCount + " tests, exiting")
-    break;
-  }
-}

+ 0 - 188
conformance/conformance_objc.m

@@ -1,188 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2015 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#import <Foundation/Foundation.h>
-
-#import "Conformance.pbobjc.h"
-#import "google/protobuf/TestMessagesProto2.pbobjc.h"
-#import "google/protobuf/TestMessagesProto3.pbobjc.h"
-
-static void Die(NSString *format, ...) __dead2;
-
-static BOOL verbose = NO;
-static int32_t testCount = 0;
-
-static void Die(NSString *format, ...) {
-  va_list args;
-  va_start(args, format);
-  NSString *msg = [[NSString alloc] initWithFormat:format arguments:args];
-  NSLog(@"%@", msg);
-  va_end(args);
-  [msg release];
-  exit(66);
-}
-
-static NSData *CheckedReadDataOfLength(NSFileHandle *handle, NSUInteger numBytes) {
-  NSData *data = [handle readDataOfLength:numBytes];
-  NSUInteger dataLen = data.length;
-  if (dataLen == 0) {
-    return nil;  // EOF.
-  }
-  if (dataLen != numBytes) {
-    Die(@"Failed to read the request length (%d), only got: %@",
-        numBytes, data);
-  }
-  return data;
-}
-
-static ConformanceResponse *DoTest(ConformanceRequest *request) {
-  ConformanceResponse *response = [ConformanceResponse message];
-  GPBMessage *testMessage = nil;
-
-  switch (request.payloadOneOfCase) {
-    case ConformanceRequest_Payload_OneOfCase_GPBUnsetOneOfCase:
-      Die(@"Request didn't have a payload: %@", request);
-      break;
-
-    case ConformanceRequest_Payload_OneOfCase_ProtobufPayload: {
-      Class msgClass = nil;
-      if ([request.messageType isEqual:@"protobuf_test_messages.proto3.TestAllTypesProto3"]) {
-        msgClass = [Proto3TestAllTypesProto3 class];
-      } else if ([request.messageType isEqual:@"protobuf_test_messages.proto2.TestAllTypesProto2"]) {
-        msgClass = [TestAllTypesProto2 class];
-      } else {
-        Die(@"Protobuf request had an unknown message_type: %@", request.messageType);
-      }
-      NSError *error = nil;
-      testMessage = [msgClass parseFromData:request.protobufPayload error:&error];
-      if (!testMessage) {
-        response.parseError =
-            [NSString stringWithFormat:@"Parse error: %@", error];
-      }
-      break;
-    }
-
-    case ConformanceRequest_Payload_OneOfCase_JsonPayload:
-      response.skipped = @"ObjC doesn't support parsing JSON";
-      break;
-  }
-
-  if (testMessage) {
-    switch (request.requestedOutputFormat) {
-      case WireFormat_GPBUnrecognizedEnumeratorValue:
-      case WireFormat_Unspecified:
-        Die(@"Unrecognized/unspecified output format: %@", request);
-        break;
-
-      case WireFormat_Protobuf:
-        response.protobufPayload = testMessage.data;
-        if (!response.protobufPayload) {
-          response.serializeError =
-            [NSString stringWithFormat:@"Failed to make data from: %@", testMessage];
-        }
-        break;
-
-      case WireFormat_Json:
-        response.skipped = @"ObjC doesn't support generating JSON";
-        break;
-    }
-  }
-
-  return response;
-}
-
-static uint32_t UInt32FromLittleEndianData(NSData *data) {
-  if (data.length != sizeof(uint32_t)) {
-    Die(@"Data not the right size for uint32_t: %@", data);
-  }
-  uint32_t value;
-  memcpy(&value, data.bytes, sizeof(uint32_t));
-  return CFSwapInt32LittleToHost(value);
-}
-
-static NSData *UInt32ToLittleEndianData(uint32_t num) {
-  uint32_t value = CFSwapInt32HostToLittle(num);
-  return [NSData dataWithBytes:&value length:sizeof(uint32_t)];
-}
-
-static BOOL DoTestIo(NSFileHandle *input, NSFileHandle *output) {
-  // See conformance_test_runner.cc for the wire format.
-  NSData *data = CheckedReadDataOfLength(input, sizeof(uint32_t));
-  if (!data) {
-    // EOF.
-    return NO;
-  }
-  uint32_t numBytes = UInt32FromLittleEndianData(data);
-  data = CheckedReadDataOfLength(input, numBytes);
-  if (!data) {
-    Die(@"Failed to read request");
-  }
-
-  NSError *error = nil;
-  ConformanceRequest *request = [ConformanceRequest parseFromData:data
-                                                            error:&error];
-  if (!request) {
-    Die(@"Failed to parse the message data: %@", error);
-  }
-
-  ConformanceResponse *response = DoTest(request);
-  if (!response) {
-    Die(@"Failed to make a reply from %@", request);
-  }
-
-  data = response.data;
-  [output writeData:UInt32ToLittleEndianData((int32_t)data.length)];
-  [output writeData:data];
-
-  if (verbose) {
-    NSLog(@"Request: %@", request);
-    NSLog(@"Response: %@", response);
-  }
-
-  ++testCount;
-  return YES;
-}
-
-int main(int argc, const char *argv[]) {
-  @autoreleasepool {
-    NSFileHandle *input = [[NSFileHandle fileHandleWithStandardInput] retain];
-    NSFileHandle *output = [[NSFileHandle fileHandleWithStandardOutput] retain];
-
-    BOOL notDone = YES;
-    while (notDone) {
-      @autoreleasepool {
-        notDone = DoTestIo(input, output);
-      }
-    }
-
-    NSLog(@"Received EOF from test runner after %d tests, exiting.", testCount);
-  }
-  return 0;
-}

+ 0 - 105
conformance/conformance_php.php

@@ -1,105 +0,0 @@
-<?php
-
-require_once("Conformance/WireFormat.php");
-require_once("Conformance/ConformanceResponse.php");
-require_once("Conformance/ConformanceRequest.php");
-require_once("Protobuf_test_messages/Proto3/ForeignMessage.php");
-require_once("Protobuf_test_messages/Proto3/ForeignEnum.php");
-require_once("Protobuf_test_messages/Proto3/TestAllTypesProto3.php");
-require_once("Protobuf_test_messages/Proto3/TestAllTypesProto3_NestedMessage.php");
-require_once("Protobuf_test_messages/Proto3/TestAllTypesProto3_NestedEnum.php");
-
-require_once("GPBMetadata/Conformance.php");
-require_once("GPBMetadata/Google/Protobuf/TestMessagesProto3.php");
-
-use  \Conformance\WireFormat;
-
-if (!ini_get("date.timezone")) {
-  ini_set("date.timezone", "UTC");
-}
-
-$test_count = 0;
-
-function doTest($request)
-{
-    $test_message = new \Protobuf_test_messages\Proto3\TestAllTypesProto3();
-    $response = new \Conformance\ConformanceResponse();
-    if ($request->getPayload() == "protobuf_payload") {
-      if ($request->getMessageType() == "protobuf_test_messages.proto3.TestAllTypesProto3") {
-        try {
-          $test_message->mergeFromString($request->getProtobufPayload());
-        } catch (Exception $e) {
-          $response->setParseError($e->getMessage());
-          return $response;
-        }
-      } elseif ($request->getMessageType() == "protobuf_test_messages.proto2.TestAllTypesProto2") {
-        $response->setSkipped("PHP doesn't support proto2");
-        return $response;
-      } else {
-        trigger_error("Protobuf request doesn't have specific payload type", E_USER_ERROR);
-      }
-    } elseif ($request->getPayload() == "json_payload") {
-      try {
-          $test_message->mergeFromJsonString($request->getJsonPayload());
-      } catch (Exception $e) {
-          $response->setParseError($e->getMessage());
-          return $response;
-      }
-    } else {
-      trigger_error("Request didn't have payload.", E_USER_ERROR);
-    }
-
-    if ($request->getRequestedOutputFormat() == WireFormat::UNSPECIFIED) {
-      trigger_error("Unspecified output format.", E_USER_ERROR);
-    } elseif ($request->getRequestedOutputFormat() == WireFormat::PROTOBUF) {
-      $response->setProtobufPayload($test_message->serializeToString());
-    } elseif ($request->getRequestedOutputFormat() == WireFormat::JSON) {
-      try {
-          $response->setJsonPayload($test_message->serializeToJsonString());
-      } catch (Exception $e) {
-          $response->setSerializeError($e->getMessage());
-          return $response;
-      }
-    }
-
-    return $response;
-}
-
-function doTestIO()
-{
-    $length_bytes = fread(STDIN, 4);
-    if (strlen($length_bytes) == 0) {
-      return false;   # EOF
-    } elseif (strlen($length_bytes) != 4) {
-      fwrite(STDERR, "I/O error\n");
-      return false;
-    }
-
-    $length = unpack("V", $length_bytes)[1];
-    $serialized_request = fread(STDIN, $length);
-    if (strlen($serialized_request) != $length) {
-      trigger_error("I/O error", E_USER_ERROR);
-    }
-
-    $request = new \Conformance\ConformanceRequest();
-    $request->mergeFromString($serialized_request);
-
-    $response = doTest($request);
-
-    $serialized_response = $response->serializeToString();
-    fwrite(STDOUT, pack("V", strlen($serialized_response)));
-    fwrite(STDOUT, $serialized_response);
-
-    $GLOBALS['test_count'] += 1;
-
-    return true;
-}
-
-while(true){
-  if (!doTestIO()) {
-      fprintf(STDERR,
-             "conformance_php: received EOF from test runner " +
-             "after %d tests, exiting\n", $test_count);
-      exit;
-  }
-}

+ 0 - 146
conformance/conformance_python.py

@@ -1,146 +0,0 @@
-#!/usr/bin/env python
-#
-# Protocol Buffers - Google's data interchange format
-# Copyright 2008 Google Inc.  All rights reserved.
-# https://developers.google.com/protocol-buffers/
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""A conformance test implementation for the Python protobuf library.
-
-See conformance.proto for more information.
-"""
-
-import struct
-import sys
-import os
-from google.protobuf import descriptor
-from google.protobuf import descriptor_pool
-from google.protobuf import json_format
-from google.protobuf import message
-from google.protobuf import test_messages_proto3_pb2
-from google.protobuf import test_messages_proto2_pb2
-import conformance_pb2
-
-sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0)
-sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0)
-
-test_count = 0
-verbose = False
-
-class ProtocolError(Exception):
-  pass
-
-def do_test(request):
-  isProto3 = (request.message_type == "protobuf_test_messages.proto3.TestAllTypesProto3")
-  isJson = (request.WhichOneof('payload') == 'json_payload')
-  isProto2 = (request.message_type == "protobuf_test_messages.proto2.TestAllTypesProto2")
-  
-  if (not isProto3) and (not isJson) and (not isProto2):
-    raise ProtocolError("Protobuf request doesn't have specific payload type")
-      
-  test_message = test_messages_proto2_pb2.TestAllTypesProto2() if isProto2 else \
-    test_messages_proto3_pb2.TestAllTypesProto3()
-
-  response = conformance_pb2.ConformanceResponse()
-
-  try:
-    if request.WhichOneof('payload') == 'protobuf_payload':
-      try:
-        test_message.ParseFromString(request.protobuf_payload)
-      except message.DecodeError as e:
-        response.parse_error = str(e)
-        return response  
-      
-    elif request.WhichOneof('payload') == 'json_payload':
-      try:
-        json_format.Parse(request.json_payload, test_message)
-      except Exception as e:
-        response.parse_error = str(e)
-        return response
-
-    else:
-      raise ProtocolError("Request didn't have payload.")
-
-    if request.requested_output_format == conformance_pb2.UNSPECIFIED:
-      raise ProtocolError("Unspecified output format")
-
-    elif request.requested_output_format == conformance_pb2.PROTOBUF:
-      response.protobuf_payload = test_message.SerializeToString()
-
-    elif request.requested_output_format == conformance_pb2.JSON:
-      try: 
-        response.json_payload = json_format.MessageToJson(test_message)
-      except Exception as e:
-        response.serialize_error = str(e)
-        return response
-
-  except Exception as e:
-    response.runtime_error = str(e)
-
-  return response
-
-def do_test_io():
-  length_bytes = sys.stdin.read(4)
-  if len(length_bytes) == 0:
-    return False   # EOF
-  elif len(length_bytes) != 4:
-    raise IOError("I/O error")
-
-  # "I" is "unsigned int", so this depends on running on a platform with
-  # 32-bit "unsigned int" type.  The Python struct module unfortunately
-  # has no format specifier for uint32_t.
-  length = struct.unpack("<I", length_bytes)[0]
-  serialized_request = sys.stdin.read(length)
-  if len(serialized_request) != length:
-    raise IOError("I/O error")
-
-  request = conformance_pb2.ConformanceRequest()
-  request.ParseFromString(serialized_request)
-
-  response = do_test(request)
-
-  serialized_response = response.SerializeToString()
-  sys.stdout.write(struct.pack("<I", len(serialized_response)))
-  sys.stdout.write(serialized_response)
-  sys.stdout.flush()
-
-  if verbose:
-    sys.stderr.write("conformance_python: request=%s, response=%s\n" % (
-                       request.ShortDebugString().c_str(),
-                       response.ShortDebugString().c_str()))
-
-  global test_count
-  test_count += 1
-
-  return True
-
-while True:
-  if not do_test_io():
-    sys.stderr.write("conformance_python: received EOF from test runner " +
-                     "after %s tests, exiting\n" % (test_count))
-    sys.exit(0)

+ 0 - 131
conformance/conformance_ruby.rb

@@ -1,131 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Protocol Buffers - Google's data interchange format
-# Copyright 2008 Google Inc.  All rights reserved.
-# https://developers.google.com/protocol-buffers/
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-require 'conformance_pb'
-require 'google/protobuf/test_messages_proto3_pb'
-
-$test_count = 0
-$verbose = false
-
-def do_test(request)
-  test_message = ProtobufTestMessages::Proto3::TestAllTypesProto3.new
-  response = Conformance::ConformanceResponse.new
-
-  begin
-    case request.payload
-    when :protobuf_payload
-      if request.message_type.eql?('protobuf_test_messages.proto3.TestAllTypesProto3')
-        begin
-          test_message = ProtobufTestMessages::Proto3::TestAllTypesProto3.decode(
-              request.protobuf_payload)
-        rescue Google::Protobuf::ParseError => err
-          response.parse_error = err.message.encode('utf-8')
-          return response
-        end
-      elsif request.message_type.eql?('protobuf_test_messages.proto2.TestAllTypesProto2')
-        response.skipped = "Ruby doesn't support proto2"
-        return response
-      else 
-        fail "Protobuf request doesn't have specific payload type"
-      end
-
-    when :json_payload
-      begin
-        test_message = ProtobufTestMessages::Proto3::TestAllTypesProto3.decode_json(
-            request.json_payload)
-      rescue Google::Protobuf::ParseError => err
-        response.parse_error = err.message.encode('utf-8')
-        return response
-      end
-
-    when nil
-      fail "Request didn't have payload"
-    end
-
-    case request.requested_output_format
-    when :UNSPECIFIED
-      fail 'Unspecified output format'
-
-    when :PROTOBUF
-      response.protobuf_payload = test_message.to_proto
-
-    when :JSON
-      response.json_payload = test_message.to_json
-
-    when nil
-      fail "Request didn't have requested output format"
-    end
-  rescue StandardError => err
-    response.runtime_error = err.message.encode('utf-8')
-  end
-
-  response
-end
-
-# Returns true if the test ran successfully, false on legitimate EOF.
-# If EOF is encountered in an unexpected place, raises IOError.
-def do_test_io
-  length_bytes = STDIN.read(4)
-  return false if length_bytes.nil?
-
-  length = length_bytes.unpack('V').first
-  serialized_request = STDIN.read(length)
-  if serialized_request.nil? || serialized_request.length != length
-    fail IOError
-  end
-
-  request = Conformance::ConformanceRequest.decode(serialized_request)
-
-  response = do_test(request)
-
-  serialized_response = Conformance::ConformanceResponse.encode(response)
-  STDOUT.write([serialized_response.length].pack('V'))
-  STDOUT.write(serialized_response)
-  STDOUT.flush
-
-  if $verbose
-    STDERR.puts("conformance_ruby: request=#{request.to_json}, " \
-                                 "response=#{response.to_json}\n")
-  end
-
-  $test_count += 1
-
-  true
-end
-
-loop do
-  unless do_test_io
-    STDERR.puts('conformance_ruby: received EOF from test runner ' \
-                "after #{$test_count} tests, exiting")
-    break
-  end
-end

+ 0 - 2562
conformance/conformance_test.cc

@@ -1,2562 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include <stdarg.h>
-#include <string>
-#include <fstream>
-
-#include "conformance.pb.h"
-#include "conformance_test.h"
-#include <google/protobuf/test_messages_proto3.pb.h>
-#include <google/protobuf/test_messages_proto2.pb.h>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/stubs/stringprintf.h>
-#include <google/protobuf/text_format.h>
-#include <google/protobuf/util/field_comparator.h>
-#include <google/protobuf/util/json_util.h>
-#include <google/protobuf/util/message_differencer.h>
-#include <google/protobuf/util/type_resolver_util.h>
-#include <google/protobuf/wire_format_lite.h>
-
-#include "third_party/jsoncpp/json.h"
-
-using conformance::ConformanceRequest;
-using conformance::ConformanceResponse;
-using conformance::WireFormat;
-using google::protobuf::Descriptor;
-using google::protobuf::FieldDescriptor;
-using google::protobuf::internal::WireFormatLite;
-using google::protobuf::TextFormat;
-using google::protobuf::util::DefaultFieldComparator;
-using google::protobuf::util::JsonToBinaryString;
-using google::protobuf::util::MessageDifferencer;
-using google::protobuf::util::NewTypeResolverForDescriptorPool;
-using google::protobuf::util::Status;
-using protobuf_test_messages::proto3::TestAllTypesProto3;
-using protobuf_test_messages::proto2::TestAllTypesProto2;
-using std::string;
-
-namespace {
-
-static const char kTypeUrlPrefix[] = "type.googleapis.com";
-
-static string GetTypeUrl(const Descriptor* message) {
-  return string(kTypeUrlPrefix) + "/" + message->full_name();
-}
-
-/* Routines for building arbitrary protos *************************************/
-
-// We would use CodedOutputStream except that we want more freedom to build
-// arbitrary protos (even invalid ones).
-
-const string empty;
-
-string cat(const string& a, const string& b,
-           const string& c = empty,
-           const string& d = empty,
-           const string& e = empty,
-           const string& f = empty,
-           const string& g = empty,
-           const string& h = empty,
-           const string& i = empty,
-           const string& j = empty,
-           const string& k = empty,
-           const string& l = empty) {
-  string ret;
-  ret.reserve(a.size() + b.size() + c.size() + d.size() + e.size() + f.size() +
-              g.size() + h.size() + i.size() + j.size() + k.size() + l.size());
-  ret.append(a);
-  ret.append(b);
-  ret.append(c);
-  ret.append(d);
-  ret.append(e);
-  ret.append(f);
-  ret.append(g);
-  ret.append(h);
-  ret.append(i);
-  ret.append(j);
-  ret.append(k);
-  ret.append(l);
-  return ret;
-}
-
-// The maximum number of bytes that it takes to encode a 64-bit varint.
-#define VARINT_MAX_LEN 10
-
-size_t vencode64(uint64_t val, int over_encoded_bytes, char *buf) {
-  if (val == 0) { buf[0] = 0; return 1; }
-  size_t i = 0;
-  while (val) {
-    uint8_t byte = val & 0x7fU;
-    val >>= 7;
-    if (val || over_encoded_bytes) byte |= 0x80U;
-    buf[i++] = byte;
-  }
-  while (over_encoded_bytes--) {
-    assert(i < 10);
-    uint8_t byte = over_encoded_bytes ? 0x80 : 0;
-    buf[i++] = byte;
-  }
-  return i;
-}
-
-string varint(uint64_t x) {
-  char buf[VARINT_MAX_LEN];
-  size_t len = vencode64(x, 0, buf);
-  return string(buf, len);
-}
-
-// Encodes a varint that is |extra| bytes longer than it needs to be, but still
-// valid.
-string longvarint(uint64_t x, int extra) {
-  char buf[VARINT_MAX_LEN];
-  size_t len = vencode64(x, extra, buf);
-  return string(buf, len);
-}
-
-// TODO: proper byte-swapping for big-endian machines.
-string fixed32(void *data) { return string(static_cast<char*>(data), 4); }
-string fixed64(void *data) { return string(static_cast<char*>(data), 8); }
-
-string delim(const string& buf) { return cat(varint(buf.size()), buf); }
-string u32(uint32_t u32) { return fixed32(&u32); }
-string u64(uint64_t u64) { return fixed64(&u64); }
-string flt(float f) { return fixed32(&f); }
-string dbl(double d) { return fixed64(&d); }
-string zz32(int32_t x) { return varint(WireFormatLite::ZigZagEncode32(x)); }
-string zz64(int64_t x) { return varint(WireFormatLite::ZigZagEncode64(x)); }
-
-string tag(uint32_t fieldnum, char wire_type) {
-  return varint((fieldnum << 3) | wire_type);
-}
-
-string submsg(uint32_t fn, const string& buf) {
-  return cat( tag(fn, WireFormatLite::WIRETYPE_LENGTH_DELIMITED), delim(buf) );
-}
-
-#define UNKNOWN_FIELD 666
-
-const FieldDescriptor* GetFieldForType(FieldDescriptor::Type type,
-                                       bool repeated, bool isProto3) {
-
-  const Descriptor* d = isProto3 ?
-      TestAllTypesProto3().GetDescriptor() : TestAllTypesProto2().GetDescriptor();
-  for (int i = 0; i < d->field_count(); i++) {
-    const FieldDescriptor* f = d->field(i);
-    if (f->type() == type && f->is_repeated() == repeated) {
-      return f;
-    }
-  }
-  GOOGLE_LOG(FATAL) << "Couldn't find field with type " << (int)type;
-  return nullptr;
-}
-
-string UpperCase(string str) {
-  for (int i = 0; i < str.size(); i++) {
-    str[i] = toupper(str[i]);
-  }
-  return str;
-}
-
-}  // anonymous namespace
-
-namespace google {
-namespace protobuf {
-
-void ConformanceTestSuite::ReportSuccess(const string& test_name) {
-  if (expected_to_fail_.erase(test_name) != 0) {
-    StringAppendF(&output_,
-                  "ERROR: test %s is in the failure list, but test succeeded.  "
-                  "Remove it from the failure list.\n",
-                  test_name.c_str());
-    unexpected_succeeding_tests_.insert(test_name);
-  }
-  successes_++;
-}
-
-void ConformanceTestSuite::ReportFailure(const string& test_name,
-                                         ConformanceLevel level,
-                                         const ConformanceRequest& request,
-                                         const ConformanceResponse& response,
-                                         const char* fmt, ...) {
-  if (expected_to_fail_.erase(test_name) == 1) {
-    expected_failures_++;
-    if (!verbose_)
-      return;
-  } else if (level == RECOMMENDED && !enforce_recommended_) {
-    StringAppendF(&output_, "WARNING, test=%s: ", test_name.c_str());
-  } else {
-    StringAppendF(&output_, "ERROR, test=%s: ", test_name.c_str());
-    unexpected_failing_tests_.insert(test_name);
-  }
-  va_list args;
-  va_start(args, fmt);
-  StringAppendV(&output_, fmt, args);
-  va_end(args);
-  StringAppendF(&output_, " request=%s, response=%s\n",
-                request.ShortDebugString().c_str(),
-                response.ShortDebugString().c_str());
-}
-
-void ConformanceTestSuite::ReportSkip(const string& test_name,
-                                      const ConformanceRequest& request,
-                                      const ConformanceResponse& response) {
-  if (verbose_) {
-    StringAppendF(&output_, "SKIPPED, test=%s request=%s, response=%s\n",
-                  test_name.c_str(), request.ShortDebugString().c_str(),
-                  response.ShortDebugString().c_str());
-  }
-  skipped_.insert(test_name);
-}
-
-string ConformanceTestSuite::ConformanceLevelToString(ConformanceLevel level) {
-  switch (level) {
-    case REQUIRED: return "Required";
-    case RECOMMENDED: return "Recommended";
-  }
-  GOOGLE_LOG(FATAL) << "Unknown value: " << level;
-  return "";
-}
-
-void ConformanceTestSuite::RunTest(const string& test_name,
-                                   const ConformanceRequest& request,
-                                   ConformanceResponse* response) {
-  if (test_names_.insert(test_name).second == false) {
-    GOOGLE_LOG(FATAL) << "Duplicated test name: " << test_name;
-  }
-
-  string serialized_request;
-  string serialized_response;
-  request.SerializeToString(&serialized_request);
-
-  runner_->RunTest(test_name, serialized_request, &serialized_response);
-
-  if (!response->ParseFromString(serialized_response)) {
-    response->Clear();
-    response->set_runtime_error("response proto could not be parsed.");
-  }
-
-  if (verbose_) {
-    StringAppendF(&output_, "conformance test: name=%s, request=%s, response=%s\n",
-                  test_name.c_str(),
-                  request.ShortDebugString().c_str(),
-                  response->ShortDebugString().c_str());
-  }
-}
-
-void ConformanceTestSuite::RunValidInputTest(
-    const string& test_name, ConformanceLevel level, const string& input,
-    WireFormat input_format, const string& equivalent_text_format,
-    WireFormat requested_output, bool isProto3) {
-  auto newTestMessage = [&isProto3]() {
-    Message* newMessage;
-    if (isProto3) {
-      newMessage = new TestAllTypesProto3;
-    } else {
-      newMessage = new TestAllTypesProto2;
-    }
-    return newMessage;
-  };
-  Message* reference_message = newTestMessage();
-  GOOGLE_CHECK(
-      TextFormat::ParseFromString(equivalent_text_format, reference_message))
-          << "Failed to parse data for test case: " << test_name
-          << ", data: " << equivalent_text_format;
-  const string equivalent_wire_format = reference_message->SerializeAsString();
-  RunValidBinaryInputTest(test_name, level, input, input_format,
-                          equivalent_wire_format, requested_output, isProto3);
-}
-
-void ConformanceTestSuite::RunValidBinaryInputTest(
-    const string& test_name, ConformanceLevel level, const string& input,
-    WireFormat input_format, const string& equivalent_wire_format,
-    WireFormat requested_output, bool isProto3) {
-  auto newTestMessage = [&isProto3]() {
-    Message* newMessage;
-    if (isProto3) {
-      newMessage = new TestAllTypesProto3;
-    } else {
-      newMessage = new TestAllTypesProto2;
-    }
-    return newMessage;
-  };
-  Message* reference_message = newTestMessage();
-  GOOGLE_CHECK(
-      reference_message->ParseFromString(equivalent_wire_format))
-          << "Failed to parse wire data for test case: " << test_name;
-
-  ConformanceRequest request;
-  ConformanceResponse response;
-
-  switch (input_format) {
-    case conformance::PROTOBUF: {
-      request.set_protobuf_payload(input);
-      if (isProto3) {
-        request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3");
-      } else {
-        request.set_message_type("protobuf_test_messages.proto2.TestAllTypesProto2");
-      }
-      break;
-    }
-
-    case conformance::JSON: {
-      request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3");
-      request.set_json_payload(input);
-      break;
-    }
-
-    default:
-      GOOGLE_LOG(FATAL) << "Unspecified input format";
-  }
-
-  request.set_requested_output_format(requested_output);
-
-  RunTest(test_name, request, &response);
-
-  Message *test_message = newTestMessage();
-
-  switch (response.result_case()) {
-    case ConformanceResponse::RESULT_NOT_SET:
-      ReportFailure(test_name, level, request, response,
-                    "Response didn't have any field in the Response.");
-      return;
-
-    case ConformanceResponse::kParseError:
-    case ConformanceResponse::kRuntimeError:
-    case ConformanceResponse::kSerializeError:
-      ReportFailure(test_name, level, request, response,
-                    "Failed to parse input or produce output.");
-      return;
-
-    case ConformanceResponse::kSkipped:
-      ReportSkip(test_name, request, response);
-      return;
-
-    case ConformanceResponse::kJsonPayload: {
-      if (requested_output != conformance::JSON) {
-        ReportFailure(
-            test_name, level, request, response,
-            "Test was asked for protobuf output but provided JSON instead.");
-        return;
-      }
-      string binary_protobuf;
-      Status status =
-          JsonToBinaryString(type_resolver_.get(), type_url_,
-                             response.json_payload(), &binary_protobuf);
-      if (!status.ok()) {
-        ReportFailure(test_name, level, request, response,
-                      "JSON output we received from test was unparseable.");
-        return;
-      }
-
-      if (!test_message->ParseFromString(binary_protobuf)) {
-        ReportFailure(test_name, level, request, response,
-                    "INTERNAL ERROR: internal JSON->protobuf transcode "
-                    "yielded unparseable proto.");
-        return;
-      }
-
-      break;
-    }
-
-    case ConformanceResponse::kProtobufPayload: {
-      if (requested_output != conformance::PROTOBUF) {
-        ReportFailure(
-            test_name, level, request, response,
-            "Test was asked for JSON output but provided protobuf instead.");
-        return;
-      }
-
-      if (!test_message->ParseFromString(response.protobuf_payload())) {
-        ReportFailure(test_name, level, request, response,
-                   "Protobuf output we received from test was unparseable.");
-        return;
-      }
-
-      break;
-    }
-
-    default:
-      GOOGLE_LOG(FATAL) << test_name << ": unknown payload type: "
-                        << response.result_case();
-  }
-
-  MessageDifferencer differencer;
-  DefaultFieldComparator field_comparator;
-  field_comparator.set_treat_nan_as_equal(true);
-  differencer.set_field_comparator(&field_comparator);
-  string differences;
-  differencer.ReportDifferencesToString(&differences);
-
-  bool check;
-  check = differencer.Compare(*reference_message, *test_message);
-  if (check) {
-    ReportSuccess(test_name);
-  } else {
-    ReportFailure(test_name, level, request, response,
-                  "Output was not equivalent to reference message: %s.",
-                  differences.c_str());
-  }
-}
-void ConformanceTestSuite::ExpectParseFailureForProtoWithProtoVersion (
-    const string& proto, const string& test_name, ConformanceLevel level,
-    bool isProto3) {
-  ConformanceRequest request;
-  ConformanceResponse response;
-  request.set_protobuf_payload(proto);
-  if (isProto3) {
-    request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3");
-  } else {
-    request.set_message_type("protobuf_test_messages.proto2.TestAllTypesProto2");
-  }
-  string effective_test_name = ConformanceLevelToString(level) +
-      (isProto3 ? ".Proto3" : ".Proto2") +
-      ".ProtobufInput." + test_name;
-
-  // We don't expect output, but if the program erroneously accepts the protobuf
-  // we let it send its response as this.  We must not leave it unspecified.
-  request.set_requested_output_format(conformance::PROTOBUF);
-
-  RunTest(effective_test_name, request, &response);
-  if (response.result_case() == ConformanceResponse::kParseError) {
-    ReportSuccess(effective_test_name);
-  } else if (response.result_case() == ConformanceResponse::kSkipped) {
-    ReportSkip(effective_test_name, request, response);
-  } else {
-    ReportFailure(effective_test_name, level, request, response,
-                  "Should have failed to parse, but didn't.");
-  }
-}
-
-// Expect that this precise protobuf will cause a parse error.
-void ConformanceTestSuite::ExpectParseFailureForProto(
-    const string& proto, const string& test_name, ConformanceLevel level) {
-  ExpectParseFailureForProtoWithProtoVersion(proto, test_name, level, true);
-  ExpectParseFailureForProtoWithProtoVersion(proto, test_name, level, false);
-}
-
-// Expect that this protobuf will cause a parse error, even if it is followed
-// by valid protobuf data.  We can try running this twice: once with this
-// data verbatim and once with this data followed by some valid data.
-//
-// TODO(haberman): implement the second of these.
-void ConformanceTestSuite::ExpectHardParseFailureForProto(
-    const string& proto, const string& test_name, ConformanceLevel level) {
-  return ExpectParseFailureForProto(proto, test_name, level);
-}
-
-void ConformanceTestSuite::RunValidJsonTest(
-    const string& test_name, ConformanceLevel level, const string& input_json,
-    const string& equivalent_text_format) {
-  RunValidInputTest(
-      ConformanceLevelToString(level) + ".Proto3.JsonInput." + test_name +
-      ".ProtobufOutput", level, input_json, conformance::JSON,
-      equivalent_text_format, conformance::PROTOBUF, true);
-  RunValidInputTest(
-      ConformanceLevelToString(level) + ".Proto3.JsonInput." + test_name +
-      ".JsonOutput", level, input_json, conformance::JSON,
-      equivalent_text_format, conformance::JSON, true);
-}
-
-void ConformanceTestSuite::RunValidJsonTestWithProtobufInput(
-    const string& test_name, ConformanceLevel level, const TestAllTypesProto3& input,
-    const string& equivalent_text_format) {
-  RunValidInputTest(
-      ConformanceLevelToString(level) + ".Proto3" + ".ProtobufInput." + test_name +
-      ".JsonOutput", level, input.SerializeAsString(), conformance::PROTOBUF,
-      equivalent_text_format, conformance::JSON, true);
-}
-
-void ConformanceTestSuite::RunValidProtobufTest(
-    const string& test_name, ConformanceLevel level,
-    const string& input_protobuf, const string& equivalent_text_format,
-    bool isProto3) {
-  string rname = ".Proto3";
-  if (!isProto3) {
-    rname = ".Proto2";
-  }
-  RunValidInputTest(
-      ConformanceLevelToString(level) + rname + ".ProtobufInput." + test_name +
-      ".ProtobufOutput", level, input_protobuf, conformance::PROTOBUF,
-      equivalent_text_format, conformance::PROTOBUF, isProto3);
-  if (isProto3) {
-    RunValidInputTest(
-        ConformanceLevelToString(level) + rname + ".ProtobufInput." +  test_name +
-        ".JsonOutput", level, input_protobuf, conformance::PROTOBUF,
-        equivalent_text_format, conformance::JSON, isProto3);
-  }
-}
-
-void ConformanceTestSuite::RunValidBinaryProtobufTest(
-    const string& test_name, ConformanceLevel level,
-    const string& input_protobuf, bool isProto3) {
-  string rname = ".Proto3";
-  if (!isProto3) {
-    rname = ".Proto2";
-  }
-  RunValidBinaryInputTest(
-      ConformanceLevelToString(level) + rname + ".ProtobufInput." + test_name +
-      ".ProtobufOutput", level, input_protobuf, conformance::PROTOBUF,
-      input_protobuf, conformance::PROTOBUF, isProto3);
-}
-
-void ConformanceTestSuite::RunValidProtobufTestWithMessage(
-    const string& test_name, ConformanceLevel level, const Message *input,
-    const string& equivalent_text_format, bool isProto3) {
-  RunValidProtobufTest(test_name, level, input->SerializeAsString(), equivalent_text_format, isProto3);
-}
-
-// According to proto3 JSON specification, JSON serializers follow more strict
-// rules than parsers (e.g., a serializer must serialize int32 values as JSON
-// numbers while the parser is allowed to accept them as JSON strings). This
-// method allows strict checking on a proto3 JSON serializer by inspecting
-// the JSON output directly.
-void ConformanceTestSuite::RunValidJsonTestWithValidator(
-    const string& test_name, ConformanceLevel level, const string& input_json,
-    const Validator& validator) {
-  ConformanceRequest request;
-  ConformanceResponse response;
-  request.set_json_payload(input_json);
-  request.set_requested_output_format(conformance::JSON);
-  request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3");
-
-  string effective_test_name = ConformanceLevelToString(level) +
-      ".Proto3.JsonInput." + test_name + ".Validator";
-
-  RunTest(effective_test_name, request, &response);
-
-  if (response.result_case() == ConformanceResponse::kSkipped) {
-    ReportSkip(effective_test_name, request, response);
-    return;
-  }
-
-  if (response.result_case() != ConformanceResponse::kJsonPayload) {
-    ReportFailure(effective_test_name, level, request, response,
-                  "Expected JSON payload but got type %d.",
-                  response.result_case());
-    return;
-  }
-  Json::Reader reader;
-  Json::Value value;
-  if (!reader.parse(response.json_payload(), value)) {
-    ReportFailure(effective_test_name, level, request, response,
-                  "JSON payload cannot be parsed as valid JSON: %s",
-                  reader.getFormattedErrorMessages().c_str());
-    return;
-  }
-  if (!validator(value)) {
-    ReportFailure(effective_test_name, level, request, response,
-                  "JSON payload validation failed.");
-    return;
-  }
-  ReportSuccess(effective_test_name);
-}
-
-void ConformanceTestSuite::ExpectParseFailureForJson(
-    const string& test_name, ConformanceLevel level, const string& input_json) {
-  ConformanceRequest request;
-  ConformanceResponse response;
-  request.set_json_payload(input_json);
-  request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3");
-  string effective_test_name =
-      ConformanceLevelToString(level) + ".Proto3.JsonInput." + test_name;
-
-  // We don't expect output, but if the program erroneously accepts the protobuf
-  // we let it send its response as this.  We must not leave it unspecified.
-  request.set_requested_output_format(conformance::JSON);
-
-  RunTest(effective_test_name, request, &response);
-  if (response.result_case() == ConformanceResponse::kParseError) {
-    ReportSuccess(effective_test_name);
-  } else if (response.result_case() == ConformanceResponse::kSkipped) {
-    ReportSkip(effective_test_name, request, response);
-  } else {
-    ReportFailure(effective_test_name, level, request, response,
-                  "Should have failed to parse, but didn't.");
-  }
-}
-
-void ConformanceTestSuite::ExpectSerializeFailureForJson(
-    const string& test_name, ConformanceLevel level, const string& text_format) {
-  TestAllTypesProto3 payload_message;
-  GOOGLE_CHECK(
-      TextFormat::ParseFromString(text_format, &payload_message))
-          << "Failed to parse: " << text_format;
-
-  ConformanceRequest request;
-  ConformanceResponse response;
-  request.set_protobuf_payload(payload_message.SerializeAsString());
-  request.set_message_type("protobuf_test_messages.proto3.TestAllTypesProto3");
-  string effective_test_name =
-      ConformanceLevelToString(level) + "." + test_name + ".JsonOutput";
-  request.set_requested_output_format(conformance::JSON);
-
-  RunTest(effective_test_name, request, &response);
-  if (response.result_case() == ConformanceResponse::kSerializeError) {
-    ReportSuccess(effective_test_name);
-  } else if (response.result_case() == ConformanceResponse::kSkipped) {
-    ReportSkip(effective_test_name, request, response);
-  } else {
-    ReportFailure(effective_test_name, level, request, response,
-                  "Should have failed to serialize, but didn't.");
-  }
-}
-
-//TODO: proto2?
-void ConformanceTestSuite::TestPrematureEOFForType(FieldDescriptor::Type type) {
-  // Incomplete values for each wire type.
-  static const string incompletes[6] = {
-    string("\x80"),     // VARINT
-    string("abcdefg"),  // 64BIT
-    string("\x80"),     // DELIMITED (partial length)
-    string(),           // START_GROUP (no value required)
-    string(),           // END_GROUP (no value required)
-    string("abc")       // 32BIT
-  };
-
-  const FieldDescriptor* field = GetFieldForType(type, false, true);
-  const FieldDescriptor* rep_field = GetFieldForType(type, true, true);
-  WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
-      static_cast<WireFormatLite::FieldType>(type));
-  const string& incomplete = incompletes[wire_type];
-  const string type_name =
-      UpperCase(string(".") + FieldDescriptor::TypeName(type));
-
-  ExpectParseFailureForProto(
-      tag(field->number(), wire_type),
-      "PrematureEofBeforeKnownNonRepeatedValue" + type_name, REQUIRED);
-
-  ExpectParseFailureForProto(
-      tag(rep_field->number(), wire_type),
-      "PrematureEofBeforeKnownRepeatedValue" + type_name, REQUIRED);
-
-  ExpectParseFailureForProto(
-      tag(UNKNOWN_FIELD, wire_type),
-      "PrematureEofBeforeUnknownValue" + type_name, REQUIRED);
-
-  ExpectParseFailureForProto(
-      cat( tag(field->number(), wire_type), incomplete ),
-      "PrematureEofInsideKnownNonRepeatedValue" + type_name, REQUIRED);
-
-  ExpectParseFailureForProto(
-      cat( tag(rep_field->number(), wire_type), incomplete ),
-      "PrematureEofInsideKnownRepeatedValue" + type_name, REQUIRED);
-
-  ExpectParseFailureForProto(
-      cat( tag(UNKNOWN_FIELD, wire_type), incomplete ),
-      "PrematureEofInsideUnknownValue" + type_name, REQUIRED);
-
-  if (wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
-    ExpectParseFailureForProto(
-        cat( tag(field->number(), wire_type), varint(1) ),
-        "PrematureEofInDelimitedDataForKnownNonRepeatedValue" + type_name,
-        REQUIRED);
-
-    ExpectParseFailureForProto(
-        cat( tag(rep_field->number(), wire_type), varint(1) ),
-        "PrematureEofInDelimitedDataForKnownRepeatedValue" + type_name,
-        REQUIRED);
-
-    // EOF in the middle of delimited data for unknown value.
-    ExpectParseFailureForProto(
-        cat( tag(UNKNOWN_FIELD, wire_type), varint(1) ),
-        "PrematureEofInDelimitedDataForUnknownValue" + type_name, REQUIRED);
-
-    if (type == FieldDescriptor::TYPE_MESSAGE) {
-      // Submessage ends in the middle of a value.
-      string incomplete_submsg =
-          cat( tag(WireFormatLite::TYPE_INT32, WireFormatLite::WIRETYPE_VARINT),
-                incompletes[WireFormatLite::WIRETYPE_VARINT] );
-      ExpectHardParseFailureForProto(
-          cat( tag(field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
-               varint(incomplete_submsg.size()),
-               incomplete_submsg ),
-          "PrematureEofInSubmessageValue" + type_name, REQUIRED);
-    }
-  } else if (type != FieldDescriptor::TYPE_GROUP) {
-    // Non-delimited, non-group: eligible for packing.
-
-    // Packed region ends in the middle of a value.
-    ExpectHardParseFailureForProto(
-        cat(tag(rep_field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
-            varint(incomplete.size()), incomplete),
-        "PrematureEofInPackedFieldValue" + type_name, REQUIRED);
-
-    // EOF in the middle of packed region.
-    ExpectParseFailureForProto(
-        cat(tag(rep_field->number(), WireFormatLite::WIRETYPE_LENGTH_DELIMITED),
-            varint(1)),
-        "PrematureEofInPackedField" + type_name, REQUIRED);
-  }
-}
-
-void ConformanceTestSuite::TestValidDataForType(
-    FieldDescriptor::Type type,
-    std::vector<std::pair<std::string, std::string>> values) {
-  for (int isProto3 = 0; isProto3 < 2; isProto3++) {
-    const string type_name =
-        UpperCase(string(".") + FieldDescriptor::TypeName(type));
-    WireFormatLite::WireType wire_type = WireFormatLite::WireTypeForFieldType(
-        static_cast<WireFormatLite::FieldType>(type));
-    const FieldDescriptor* field = GetFieldForType(type, false, isProto3);
-    const FieldDescriptor* rep_field = GetFieldForType(type, true, isProto3);
-
-    RunValidProtobufTest("ValidDataScalar" + type_name, REQUIRED,
-                         cat(tag(field->number(), wire_type), values[0].first),
-                         field->name() + ": " + values[0].second, isProto3);
-
-    string proto;
-    string text = field->name() + ": " + values.back().second;
-    for (size_t i = 0; i < values.size(); i++) {
-      proto += cat(tag(field->number(), wire_type), values[i].first);
-    }
-    RunValidProtobufTest("RepeatedScalarSelectsLast" + type_name, REQUIRED,
-                         proto, text, isProto3);
-
-    proto.clear();
-    text.clear();
-
-    for (size_t i = 0; i < values.size(); i++) {
-      proto += cat(tag(rep_field->number(), wire_type), values[i].first);
-      text += rep_field->name() + ": " + values[i].second + " ";
-    }
-    RunValidProtobufTest("ValidDataRepeated" + type_name, REQUIRED,
-                         proto, text, isProto3);
-  }
-}
-
-void ConformanceTestSuite::SetFailureList(const string& filename,
-                                          const vector<string>& failure_list) {
-  failure_list_filename_ = filename;
-  expected_to_fail_.clear();
-  std::copy(failure_list.begin(), failure_list.end(),
-            std::inserter(expected_to_fail_, expected_to_fail_.end()));
-}
-
-bool ConformanceTestSuite::CheckSetEmpty(const std::set<string>& set_to_check,
-                                         const std::string& write_to_file,
-                                         const std::string& msg) {
-  if (set_to_check.empty()) {
-    return true;
-  } else {
-    StringAppendF(&output_, "\n");
-    StringAppendF(&output_, "%s\n\n", msg.c_str());
-    for (std::set<string>::const_iterator iter = set_to_check.begin();
-         iter != set_to_check.end(); ++iter) {
-      StringAppendF(&output_, "  %s\n", iter->c_str());
-    }
-    StringAppendF(&output_, "\n");
-
-    if (!write_to_file.empty()) {
-      std::ofstream os(write_to_file);
-      if (os) {
-        for (std::set<string>::const_iterator iter = set_to_check.begin();
-             iter != set_to_check.end(); ++iter) {
-          os << *iter << "\n";
-        }
-      } else {
-        StringAppendF(&output_, "Failed to open file: %s\n",
-                      write_to_file.c_str());
-      }
-    }
-
-    return false;
-  }
-}
-
-// TODO: proto2?
-void ConformanceTestSuite::TestIllegalTags() {
-  // field num 0 is illegal
-  string nullfield[] = {
-    "\1DEADBEEF",
-    "\2\1\1",
-    "\3\4",
-    "\5DEAD"
-  };
-  for (int i = 0; i < 4; i++) {
-    string name = "IllegalZeroFieldNum_Case_0";
-    name.back() += i;
-    ExpectParseFailureForProto(nullfield[i], name, REQUIRED);
-  }
-}
-template <class MessageType>
-void ConformanceTestSuite::TestOneofMessage (MessageType &message,
-                                             bool isProto3) {
-  message.set_oneof_uint32(0);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroUint32", RECOMMENDED, &message, "oneof_uint32: 0", isProto3);
-  message.mutable_oneof_nested_message()->set_a(0);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroMessage", RECOMMENDED, &message,
-      isProto3 ? "oneof_nested_message: {}" : "oneof_nested_message: {a: 0}",
-      isProto3);
-  message.mutable_oneof_nested_message()->set_a(1);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroMessageSetTwice", RECOMMENDED, &message,
-      "oneof_nested_message: {a: 1}",
-      isProto3);
-  message.set_oneof_string("");
-  RunValidProtobufTestWithMessage(
-      "OneofZeroString", RECOMMENDED, &message, "oneof_string: \"\"", isProto3);
-  message.set_oneof_bytes("");
-  RunValidProtobufTestWithMessage(
-      "OneofZeroBytes", RECOMMENDED, &message, "oneof_bytes: \"\"", isProto3);
-  message.set_oneof_bool(false);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroBool", RECOMMENDED, &message, "oneof_bool: false", isProto3);
-  message.set_oneof_uint64(0);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroUint64", RECOMMENDED, &message, "oneof_uint64: 0", isProto3);
-  message.set_oneof_float(0.0f);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroFloat", RECOMMENDED, &message, "oneof_float: 0", isProto3);
-  message.set_oneof_double(0.0);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroDouble", RECOMMENDED, &message, "oneof_double: 0", isProto3);
-  message.set_oneof_enum(MessageType::FOO);
-  RunValidProtobufTestWithMessage(
-      "OneofZeroEnum", RECOMMENDED, &message, "oneof_enum: FOO", isProto3);
-}
-
-template <class MessageType>
-void ConformanceTestSuite::TestUnknownMessage(MessageType& message,
-                                              bool isProto3) {
-  message.ParseFromString("\xA8\x1F\x01");
-  RunValidBinaryProtobufTest("UnknownVarint", REQUIRED,
-                             message.SerializeAsString(), isProto3);
-}
-
-bool ConformanceTestSuite::RunSuite(ConformanceTestRunner* runner,
-                                    std::string* output) {
-  runner_ = runner;
-  successes_ = 0;
-  expected_failures_ = 0;
-  skipped_.clear();
-  test_names_.clear();
-  unexpected_failing_tests_.clear();
-  unexpected_succeeding_tests_.clear();
-  type_resolver_.reset(NewTypeResolverForDescriptorPool(
-      kTypeUrlPrefix, DescriptorPool::generated_pool()));
-  type_url_ = GetTypeUrl(TestAllTypesProto3::descriptor());
-
-  output_ = "\nCONFORMANCE TEST BEGIN ====================================\n\n";
-
-  for (int i = 1; i <= FieldDescriptor::MAX_TYPE; i++) {
-    if (i == FieldDescriptor::TYPE_GROUP) continue;
-    TestPrematureEOFForType(static_cast<FieldDescriptor::Type>(i));
-  }
-
-  TestIllegalTags();
-
-  int64 kInt64Min = -9223372036854775808ULL;
-  int64 kInt64Max = 9223372036854775807ULL;
-  uint64 kUint64Max = 18446744073709551615ULL;
-  int32 kInt32Max = 2147483647;
-  int32 kInt32Min = -2147483648;
-  uint32 kUint32Max = 4294967295UL;
-
-  TestValidDataForType(FieldDescriptor::TYPE_DOUBLE, {
-    {dbl(0.1), "0.1"},
-    {dbl(1.7976931348623157e+308), "1.7976931348623157e+308"},
-    {dbl(2.22507385850720138309e-308), "2.22507385850720138309e-308"}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_FLOAT, {
-    {flt(0.1), "0.1"},
-    {flt(1.00000075e-36), "1.00000075e-36"},
-    {flt(3.402823e+38), "3.402823e+38"},  // 3.40282347e+38
-    {flt(1.17549435e-38f), "1.17549435e-38"}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_INT64, {
-    {varint(12345), "12345"},
-    {varint(kInt64Max), std::to_string(kInt64Max)},
-    {varint(kInt64Min), std::to_string(kInt64Min)}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_UINT64, {
-    {varint(12345), "12345"},
-    {varint(kUint64Max), std::to_string(kUint64Max)},
-    {varint(0), "0"}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_INT32, {
-    {varint(12345), "12345"},
-    {longvarint(12345, 2), "12345"},
-    {longvarint(12345, 7), "12345"},
-    {varint(kInt32Max), std::to_string(kInt32Max)},
-    {varint(kInt32Min), std::to_string(kInt32Min)},
-    {varint(1LL << 33), std::to_string(static_cast<int32>(1LL << 33))},
-    {varint((1LL << 33) - 1),
-     std::to_string(static_cast<int32>((1LL << 33) - 1))},
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_UINT32, {
-    {varint(12345), "12345"},
-    {longvarint(12345, 2), "12345"},
-    {longvarint(12345, 7), "12345"},
-    {varint(kUint32Max), std::to_string(kUint32Max)},  // UINT32_MAX
-    {varint(0), "0"},
-    {varint(1LL << 33), std::to_string(static_cast<uint32>(1LL << 33))},
-    {varint((1LL << 33) - 1),
-     std::to_string(static_cast<uint32>((1LL << 33) - 1))},
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_FIXED64, {
-    {u64(12345), "12345"},
-    {u64(kUint64Max), std::to_string(kUint64Max)},
-    {u64(0), "0"}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_FIXED32, {
-    {u32(12345), "12345"},
-    {u32(kUint32Max), std::to_string(kUint32Max)},  // UINT32_MAX
-    {u32(0), "0"}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_SFIXED64, {
-    {u64(12345), "12345"},
-    {u64(kInt64Max), std::to_string(kInt64Max)},
-    {u64(kInt64Min), std::to_string(kInt64Min)}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_SFIXED32, {
-    {u32(12345), "12345"},
-    {u32(kInt32Max), std::to_string(kInt32Max)},
-    {u32(kInt32Min), std::to_string(kInt32Min)}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_BOOL, {
-    {varint(1), "true"},
-    {varint(0), "false"},
-    {varint(12345678), "true"}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_SINT32, {
-    {zz32(12345), "12345"},
-    {zz32(kInt32Max), std::to_string(kInt32Max)},
-    {zz32(kInt32Min), std::to_string(kInt32Min)}
-  });
-  TestValidDataForType(FieldDescriptor::TYPE_SINT64, {
-    {zz64(12345), "12345"},
-    {zz64(kInt64Max), std::to_string(kInt64Max)},
-    {zz64(kInt64Min), std::to_string(kInt64Min)}
-  });
-
-  // TODO(haberman):
-  // TestValidDataForType(FieldDescriptor::TYPE_STRING
-  // TestValidDataForType(FieldDescriptor::TYPE_GROUP
-  // TestValidDataForType(FieldDescriptor::TYPE_MESSAGE
-  // TestValidDataForType(FieldDescriptor::TYPE_BYTES
-  // TestValidDataForType(FieldDescriptor::TYPE_ENUM
-
-  RunValidJsonTest("HelloWorld", REQUIRED,
-                   "{\"optionalString\":\"Hello, World!\"}",
-                   "optional_string: 'Hello, World!'");
-
-  // NOTE: The spec for JSON support is still being sorted out, these may not
-  // all be correct.
-  // Test field name conventions.
-  RunValidJsonTest(
-      "FieldNameInSnakeCase", REQUIRED,
-      R"({
-        "fieldname1": 1,
-        "fieldName2": 2,
-        "FieldName3": 3,
-        "fieldName4": 4
-      })",
-      R"(
-        fieldname1: 1
-        field_name2: 2
-        _field_name3: 3
-        field__name4_: 4
-      )");
-  RunValidJsonTest(
-      "FieldNameWithNumbers", REQUIRED,
-      R"({
-        "field0name5": 5,
-        "field0Name6": 6
-      })",
-      R"(
-        field0name5: 5
-        field_0_name6: 6
-      )");
-  RunValidJsonTest(
-      "FieldNameWithMixedCases", REQUIRED,
-      R"({
-        "fieldName7": 7,
-        "FieldName8": 8,
-        "fieldName9": 9,
-        "FieldName10": 10,
-        "FIELDNAME11": 11,
-        "FIELDName12": 12
-      })",
-      R"(
-        fieldName7: 7
-        FieldName8: 8
-        field_Name9: 9
-        Field_Name10: 10
-        FIELD_NAME11: 11
-        FIELD_name12: 12
-      )");
-  RunValidJsonTest(
-      "FieldNameWithDoubleUnderscores", RECOMMENDED,
-      R"({
-        "FieldName13": 13,
-        "FieldName14": 14,
-        "fieldName15": 15,
-        "fieldName16": 16,
-        "fieldName17": 17,
-        "FieldName18": 18
-      })",
-      R"(
-        __field_name13: 13
-        __Field_name14: 14
-        field__name15: 15
-        field__Name16: 16
-        field_name17__: 17
-        Field_name18__: 18
-      )");
-  // Using the original proto field name in JSON is also allowed.
-  RunValidJsonTest(
-      "OriginalProtoFieldName", REQUIRED,
-      R"({
-        "fieldname1": 1,
-        "field_name2": 2,
-        "_field_name3": 3,
-        "field__name4_": 4,
-        "field0name5": 5,
-        "field_0_name6": 6,
-        "fieldName7": 7,
-        "FieldName8": 8,
-        "field_Name9": 9,
-        "Field_Name10": 10,
-        "FIELD_NAME11": 11,
-        "FIELD_name12": 12,
-        "__field_name13": 13,
-        "__Field_name14": 14,
-        "field__name15": 15,
-        "field__Name16": 16,
-        "field_name17__": 17,
-        "Field_name18__": 18
-      })",
-      R"(
-        fieldname1: 1
-        field_name2: 2
-        _field_name3: 3
-        field__name4_: 4
-        field0name5: 5
-        field_0_name6: 6
-        fieldName7: 7
-        FieldName8: 8
-        field_Name9: 9
-        Field_Name10: 10
-        FIELD_NAME11: 11
-        FIELD_name12: 12
-        __field_name13: 13
-        __Field_name14: 14
-        field__name15: 15
-        field__Name16: 16
-        field_name17__: 17
-        Field_name18__: 18
-      )");
-  // Field names can be escaped.
-  RunValidJsonTest(
-      "FieldNameEscaped", REQUIRED,
-      R"({"fieldn\u0061me1": 1})",
-      "fieldname1: 1");
-  // String ends with escape character.
-  ExpectParseFailureForJson(
-      "StringEndsWithEscapeChar", RECOMMENDED,
-      "{\"optionalString\": \"abc\\");
-  // Field names must be quoted (or it's not valid JSON).
-  ExpectParseFailureForJson(
-      "FieldNameNotQuoted", RECOMMENDED,
-      "{fieldname1: 1}");
-  // Trailing comma is not allowed (not valid JSON).
-  ExpectParseFailureForJson(
-      "TrailingCommaInAnObject", RECOMMENDED,
-      R"({"fieldname1":1,})");
-  ExpectParseFailureForJson(
-      "TrailingCommaInAnObjectWithSpace", RECOMMENDED,
-      R"({"fieldname1":1 ,})");
-  ExpectParseFailureForJson(
-      "TrailingCommaInAnObjectWithSpaceCommaSpace", RECOMMENDED,
-      R"({"fieldname1":1 , })");
-  ExpectParseFailureForJson(
-      "TrailingCommaInAnObjectWithNewlines", RECOMMENDED,
-      R"({
-        "fieldname1":1,
-      })");
-  // JSON doesn't support comments.
-  ExpectParseFailureForJson(
-      "JsonWithComments", RECOMMENDED,
-      R"({
-        // This is a comment.
-        "fieldname1": 1
-      })");
-  // JSON spec says whitespace doesn't matter, so try a few spacings to be sure.
-  RunValidJsonTest(
-      "OneLineNoSpaces", RECOMMENDED,
-      "{\"optionalInt32\":1,\"optionalInt64\":2}",
-      R"(
-        optional_int32: 1
-        optional_int64: 2
-      )");
-  RunValidJsonTest(
-      "OneLineWithSpaces", RECOMMENDED,
-      "{ \"optionalInt32\" : 1 , \"optionalInt64\" : 2 }",
-      R"(
-        optional_int32: 1
-        optional_int64: 2
-      )");
-  RunValidJsonTest(
-      "MultilineNoSpaces", RECOMMENDED,
-      "{\n\"optionalInt32\"\n:\n1\n,\n\"optionalInt64\"\n:\n2\n}",
-      R"(
-        optional_int32: 1
-        optional_int64: 2
-      )");
-  RunValidJsonTest(
-      "MultilineWithSpaces", RECOMMENDED,
-      "{\n  \"optionalInt32\"  :  1\n  ,\n  \"optionalInt64\"  :  2\n}\n",
-      R"(
-        optional_int32: 1
-        optional_int64: 2
-      )");
-  // Missing comma between key/value pairs.
-  ExpectParseFailureForJson(
-      "MissingCommaOneLine", RECOMMENDED,
-      "{ \"optionalInt32\": 1 \"optionalInt64\": 2 }");
-  ExpectParseFailureForJson(
-      "MissingCommaMultiline", RECOMMENDED,
-      "{\n  \"optionalInt32\": 1\n  \"optionalInt64\": 2\n}");
-  // Duplicated field names are not allowed.
-  ExpectParseFailureForJson(
-      "FieldNameDuplicate", RECOMMENDED,
-      R"({
-        "optionalNestedMessage": {a: 1},
-        "optionalNestedMessage": {}
-      })");
-  ExpectParseFailureForJson(
-      "FieldNameDuplicateDifferentCasing1", RECOMMENDED,
-      R"({
-        "optional_nested_message": {a: 1},
-        "optionalNestedMessage": {}
-      })");
-  ExpectParseFailureForJson(
-      "FieldNameDuplicateDifferentCasing2", RECOMMENDED,
-      R"({
-        "optionalNestedMessage": {a: 1},
-        "optional_nested_message": {}
-      })");
-  // Serializers should use lowerCamelCase by default.
-  RunValidJsonTestWithValidator(
-      "FieldNameInLowerCamelCase", REQUIRED,
-      R"({
-        "fieldname1": 1,
-        "fieldName2": 2,
-        "FieldName3": 3,
-        "fieldName4": 4
-      })",
-      [](const Json::Value& value) {
-        return value.isMember("fieldname1") &&
-            value.isMember("fieldName2") &&
-            value.isMember("FieldName3") &&
-            value.isMember("fieldName4");
-      });
-  RunValidJsonTestWithValidator(
-      "FieldNameWithNumbers", REQUIRED,
-      R"({
-        "field0name5": 5,
-        "field0Name6": 6
-      })",
-      [](const Json::Value& value) {
-        return value.isMember("field0name5") &&
-            value.isMember("field0Name6");
-      });
-  RunValidJsonTestWithValidator(
-      "FieldNameWithMixedCases", REQUIRED,
-      R"({
-        "fieldName7": 7,
-        "FieldName8": 8,
-        "fieldName9": 9,
-        "FieldName10": 10,
-        "FIELDNAME11": 11,
-        "FIELDName12": 12
-      })",
-      [](const Json::Value& value) {
-        return value.isMember("fieldName7") &&
-            value.isMember("FieldName8") &&
-            value.isMember("fieldName9") &&
-            value.isMember("FieldName10") &&
-            value.isMember("FIELDNAME11") &&
-            value.isMember("FIELDName12");
-      });
-  RunValidJsonTestWithValidator(
-      "FieldNameWithDoubleUnderscores", RECOMMENDED,
-      R"({
-        "FieldName13": 13,
-        "FieldName14": 14,
-        "fieldName15": 15,
-        "fieldName16": 16,
-        "fieldName17": 17,
-        "FieldName18": 18
-      })",
-      [](const Json::Value& value) {
-        return value.isMember("FieldName13") &&
-            value.isMember("FieldName14") &&
-            value.isMember("fieldName15") &&
-            value.isMember("fieldName16") &&
-            value.isMember("fieldName17") &&
-            value.isMember("FieldName18");
-      });
-
-  // Integer fields.
-  RunValidJsonTest(
-      "Int32FieldMaxValue", REQUIRED,
-      R"({"optionalInt32": 2147483647})",
-      "optional_int32: 2147483647");
-  RunValidJsonTest(
-      "Int32FieldMinValue", REQUIRED,
-      R"({"optionalInt32": -2147483648})",
-      "optional_int32: -2147483648");
-  RunValidJsonTest(
-      "Uint32FieldMaxValue", REQUIRED,
-      R"({"optionalUint32": 4294967295})",
-      "optional_uint32: 4294967295");
-  RunValidJsonTest(
-      "Int64FieldMaxValue", REQUIRED,
-      R"({"optionalInt64": "9223372036854775807"})",
-      "optional_int64: 9223372036854775807");
-  RunValidJsonTest(
-      "Int64FieldMinValue", REQUIRED,
-      R"({"optionalInt64": "-9223372036854775808"})",
-      "optional_int64: -9223372036854775808");
-  RunValidJsonTest(
-      "Uint64FieldMaxValue", REQUIRED,
-      R"({"optionalUint64": "18446744073709551615"})",
-      "optional_uint64: 18446744073709551615");
-  // While not the largest Int64, this is the largest
-  // Int64 which can be exactly represented within an
-  // IEEE-754 64-bit float, which is the expected level
-  // of interoperability guarantee. Larger values may
-  // work in some implementations, but should not be
-  // relied upon.
-  RunValidJsonTest(
-      "Int64FieldMaxValueNotQuoted", REQUIRED,
-      R"({"optionalInt64": 9223372036854774784})",
-      "optional_int64: 9223372036854774784");
-  RunValidJsonTest(
-      "Int64FieldMinValueNotQuoted", REQUIRED,
-      R"({"optionalInt64": -9223372036854775808})",
-      "optional_int64: -9223372036854775808");
-  // Largest interoperable Uint64; see comment above
-  // for Int64FieldMaxValueNotQuoted.
-  RunValidJsonTest(
-      "Uint64FieldMaxValueNotQuoted", REQUIRED,
-      R"({"optionalUint64": 18446744073709549568})",
-      "optional_uint64: 18446744073709549568");
-  // Values can be represented as JSON strings.
-  RunValidJsonTest(
-      "Int32FieldStringValue", REQUIRED,
-      R"({"optionalInt32": "2147483647"})",
-      "optional_int32: 2147483647");
-  RunValidJsonTest(
-      "Int32FieldStringValueEscaped", REQUIRED,
-      R"({"optionalInt32": "2\u003147483647"})",
-      "optional_int32: 2147483647");
-
-  // Parsers reject out-of-bound integer values.
-  ExpectParseFailureForJson(
-      "Int32FieldTooLarge", REQUIRED,
-      R"({"optionalInt32": 2147483648})");
-  ExpectParseFailureForJson(
-      "Int32FieldTooSmall", REQUIRED,
-      R"({"optionalInt32": -2147483649})");
-  ExpectParseFailureForJson(
-      "Uint32FieldTooLarge", REQUIRED,
-      R"({"optionalUint32": 4294967296})");
-  ExpectParseFailureForJson(
-      "Int64FieldTooLarge", REQUIRED,
-      R"({"optionalInt64": "9223372036854775808"})");
-  ExpectParseFailureForJson(
-      "Int64FieldTooSmall", REQUIRED,
-      R"({"optionalInt64": "-9223372036854775809"})");
-  ExpectParseFailureForJson(
-      "Uint64FieldTooLarge", REQUIRED,
-      R"({"optionalUint64": "18446744073709551616"})");
-  // Parser reject non-integer numeric values as well.
-  ExpectParseFailureForJson(
-      "Int32FieldNotInteger", REQUIRED,
-      R"({"optionalInt32": 0.5})");
-  ExpectParseFailureForJson(
-      "Uint32FieldNotInteger", REQUIRED,
-      R"({"optionalUint32": 0.5})");
-  ExpectParseFailureForJson(
-      "Int64FieldNotInteger", REQUIRED,
-      R"({"optionalInt64": "0.5"})");
-  ExpectParseFailureForJson(
-      "Uint64FieldNotInteger", REQUIRED,
-      R"({"optionalUint64": "0.5"})");
-
-  // Integers but represented as float values are accepted.
-  RunValidJsonTest(
-      "Int32FieldFloatTrailingZero", REQUIRED,
-      R"({"optionalInt32": 100000.000})",
-      "optional_int32: 100000");
-  RunValidJsonTest(
-      "Int32FieldExponentialFormat", REQUIRED,
-      R"({"optionalInt32": 1e5})",
-      "optional_int32: 100000");
-  RunValidJsonTest(
-      "Int32FieldMaxFloatValue", REQUIRED,
-      R"({"optionalInt32": 2.147483647e9})",
-      "optional_int32: 2147483647");
-  RunValidJsonTest(
-      "Int32FieldMinFloatValue", REQUIRED,
-      R"({"optionalInt32": -2.147483648e9})",
-      "optional_int32: -2147483648");
-  RunValidJsonTest(
-      "Uint32FieldMaxFloatValue", REQUIRED,
-      R"({"optionalUint32": 4.294967295e9})",
-      "optional_uint32: 4294967295");
-
-  // Parser reject non-numeric values.
-  ExpectParseFailureForJson(
-      "Int32FieldNotNumber", REQUIRED,
-      R"({"optionalInt32": "3x3"})");
-  ExpectParseFailureForJson(
-      "Uint32FieldNotNumber", REQUIRED,
-      R"({"optionalUint32": "3x3"})");
-  ExpectParseFailureForJson(
-      "Int64FieldNotNumber", REQUIRED,
-      R"({"optionalInt64": "3x3"})");
-  ExpectParseFailureForJson(
-      "Uint64FieldNotNumber", REQUIRED,
-      R"({"optionalUint64": "3x3"})");
-  // JSON does not allow "+" on numric values.
-  ExpectParseFailureForJson(
-      "Int32FieldPlusSign", REQUIRED,
-      R"({"optionalInt32": +1})");
-  // JSON doesn't allow leading 0s.
-  ExpectParseFailureForJson(
-      "Int32FieldLeadingZero", REQUIRED,
-      R"({"optionalInt32": 01})");
-  ExpectParseFailureForJson(
-      "Int32FieldNegativeWithLeadingZero", REQUIRED,
-      R"({"optionalInt32": -01})");
-  // String values must follow the same syntax rule. Specifically leading
-  // or trailing spaces are not allowed.
-  ExpectParseFailureForJson(
-      "Int32FieldLeadingSpace", REQUIRED,
-      R"({"optionalInt32": " 1"})");
-  ExpectParseFailureForJson(
-      "Int32FieldTrailingSpace", REQUIRED,
-      R"({"optionalInt32": "1 "})");
-
-  // 64-bit values are serialized as strings.
-  RunValidJsonTestWithValidator(
-      "Int64FieldBeString", RECOMMENDED,
-      R"({"optionalInt64": 1})",
-      [](const Json::Value& value) {
-        return value["optionalInt64"].type() == Json::stringValue &&
-            value["optionalInt64"].asString() == "1";
-      });
-  RunValidJsonTestWithValidator(
-      "Uint64FieldBeString", RECOMMENDED,
-      R"({"optionalUint64": 1})",
-      [](const Json::Value& value) {
-        return value["optionalUint64"].type() == Json::stringValue &&
-            value["optionalUint64"].asString() == "1";
-      });
-
-  // Bool fields.
-  RunValidJsonTest(
-      "BoolFieldTrue", REQUIRED,
-      R"({"optionalBool":true})",
-      "optional_bool: true");
-  RunValidJsonTest(
-      "BoolFieldFalse", REQUIRED,
-      R"({"optionalBool":false})",
-      "optional_bool: false");
-
-  // Other forms are not allowed.
-  ExpectParseFailureForJson(
-      "BoolFieldIntegerZero", RECOMMENDED,
-      R"({"optionalBool":0})");
-  ExpectParseFailureForJson(
-      "BoolFieldIntegerOne", RECOMMENDED,
-      R"({"optionalBool":1})");
-  ExpectParseFailureForJson(
-      "BoolFieldCamelCaseTrue", RECOMMENDED,
-      R"({"optionalBool":True})");
-  ExpectParseFailureForJson(
-      "BoolFieldCamelCaseFalse", RECOMMENDED,
-      R"({"optionalBool":False})");
-  ExpectParseFailureForJson(
-      "BoolFieldAllCapitalTrue", RECOMMENDED,
-      R"({"optionalBool":TRUE})");
-  ExpectParseFailureForJson(
-      "BoolFieldAllCapitalFalse", RECOMMENDED,
-      R"({"optionalBool":FALSE})");
-  ExpectParseFailureForJson(
-      "BoolFieldDoubleQuotedTrue", RECOMMENDED,
-      R"({"optionalBool":"true"})");
-  ExpectParseFailureForJson(
-      "BoolFieldDoubleQuotedFalse", RECOMMENDED,
-      R"({"optionalBool":"false"})");
-
-  // Float fields.
-  RunValidJsonTest(
-      "FloatFieldMinPositiveValue", REQUIRED,
-      R"({"optionalFloat": 1.175494e-38})",
-      "optional_float: 1.175494e-38");
-  RunValidJsonTest(
-      "FloatFieldMaxNegativeValue", REQUIRED,
-      R"({"optionalFloat": -1.175494e-38})",
-      "optional_float: -1.175494e-38");
-  RunValidJsonTest(
-      "FloatFieldMaxPositiveValue", REQUIRED,
-      R"({"optionalFloat": 3.402823e+38})",
-      "optional_float: 3.402823e+38");
-  RunValidJsonTest(
-      "FloatFieldMinNegativeValue", REQUIRED,
-      R"({"optionalFloat": 3.402823e+38})",
-      "optional_float: 3.402823e+38");
-  // Values can be quoted.
-  RunValidJsonTest(
-      "FloatFieldQuotedValue", REQUIRED,
-      R"({"optionalFloat": "1"})",
-      "optional_float: 1");
-  // Special values.
-  RunValidJsonTest(
-      "FloatFieldNan", REQUIRED,
-      R"({"optionalFloat": "NaN"})",
-      "optional_float: nan");
-  RunValidJsonTest(
-      "FloatFieldInfinity", REQUIRED,
-      R"({"optionalFloat": "Infinity"})",
-      "optional_float: inf");
-  RunValidJsonTest(
-      "FloatFieldNegativeInfinity", REQUIRED,
-      R"({"optionalFloat": "-Infinity"})",
-      "optional_float: -inf");
-  // Non-cannonical Nan will be correctly normalized.
-  {
-    TestAllTypesProto3 message;
-    // IEEE floating-point standard 32-bit quiet NaN:
-    //   0111 1111 1xxx xxxx xxxx xxxx xxxx xxxx
-    message.set_optional_float(
-        WireFormatLite::DecodeFloat(0x7FA12345));
-    RunValidJsonTestWithProtobufInput(
-        "FloatFieldNormalizeQuietNan", REQUIRED, message,
-        "optional_float: nan");
-    // IEEE floating-point standard 64-bit signaling NaN:
-    //   1111 1111 1xxx xxxx xxxx xxxx xxxx xxxx
-    message.set_optional_float(
-        WireFormatLite::DecodeFloat(0xFFB54321));
-    RunValidJsonTestWithProtobufInput(
-        "FloatFieldNormalizeSignalingNan", REQUIRED, message,
-        "optional_float: nan");
-  }
-
-  // Special values must be quoted.
-  ExpectParseFailureForJson(
-      "FloatFieldNanNotQuoted", RECOMMENDED,
-      R"({"optionalFloat": NaN})");
-  ExpectParseFailureForJson(
-      "FloatFieldInfinityNotQuoted", RECOMMENDED,
-      R"({"optionalFloat": Infinity})");
-  ExpectParseFailureForJson(
-      "FloatFieldNegativeInfinityNotQuoted", RECOMMENDED,
-      R"({"optionalFloat": -Infinity})");
-  // Parsers should reject out-of-bound values.
-  ExpectParseFailureForJson(
-      "FloatFieldTooSmall", REQUIRED,
-      R"({"optionalFloat": -3.502823e+38})");
-  ExpectParseFailureForJson(
-      "FloatFieldTooLarge", REQUIRED,
-      R"({"optionalFloat": 3.502823e+38})");
-
-  // Double fields.
-  RunValidJsonTest(
-      "DoubleFieldMinPositiveValue", REQUIRED,
-      R"({"optionalDouble": 2.22507e-308})",
-      "optional_double: 2.22507e-308");
-  RunValidJsonTest(
-      "DoubleFieldMaxNegativeValue", REQUIRED,
-      R"({"optionalDouble": -2.22507e-308})",
-      "optional_double: -2.22507e-308");
-  RunValidJsonTest(
-      "DoubleFieldMaxPositiveValue", REQUIRED,
-      R"({"optionalDouble": 1.79769e+308})",
-      "optional_double: 1.79769e+308");
-  RunValidJsonTest(
-      "DoubleFieldMinNegativeValue", REQUIRED,
-      R"({"optionalDouble": -1.79769e+308})",
-      "optional_double: -1.79769e+308");
-  // Values can be quoted.
-  RunValidJsonTest(
-      "DoubleFieldQuotedValue", REQUIRED,
-      R"({"optionalDouble": "1"})",
-      "optional_double: 1");
-  // Speical values.
-  RunValidJsonTest(
-      "DoubleFieldNan", REQUIRED,
-      R"({"optionalDouble": "NaN"})",
-      "optional_double: nan");
-  RunValidJsonTest(
-      "DoubleFieldInfinity", REQUIRED,
-      R"({"optionalDouble": "Infinity"})",
-      "optional_double: inf");
-  RunValidJsonTest(
-      "DoubleFieldNegativeInfinity", REQUIRED,
-      R"({"optionalDouble": "-Infinity"})",
-      "optional_double: -inf");
-  // Non-cannonical Nan will be correctly normalized.
-  {
-    TestAllTypesProto3 message;
-    message.set_optional_double(
-        WireFormatLite::DecodeDouble(0x7FFA123456789ABCLL));
-    RunValidJsonTestWithProtobufInput(
-        "DoubleFieldNormalizeQuietNan", REQUIRED, message,
-        "optional_double: nan");
-    message.set_optional_double(
-        WireFormatLite::DecodeDouble(0xFFFBCBA987654321LL));
-    RunValidJsonTestWithProtobufInput(
-        "DoubleFieldNormalizeSignalingNan", REQUIRED, message,
-        "optional_double: nan");
-  }
-
-  // Special values must be quoted.
-  ExpectParseFailureForJson(
-      "DoubleFieldNanNotQuoted", RECOMMENDED,
-      R"({"optionalDouble": NaN})");
-  ExpectParseFailureForJson(
-      "DoubleFieldInfinityNotQuoted", RECOMMENDED,
-      R"({"optionalDouble": Infinity})");
-  ExpectParseFailureForJson(
-      "DoubleFieldNegativeInfinityNotQuoted", RECOMMENDED,
-      R"({"optionalDouble": -Infinity})");
-
-  // Parsers should reject out-of-bound values.
-  ExpectParseFailureForJson(
-      "DoubleFieldTooSmall", REQUIRED,
-      R"({"optionalDouble": -1.89769e+308})");
-  ExpectParseFailureForJson(
-      "DoubleFieldTooLarge", REQUIRED,
-      R"({"optionalDouble": +1.89769e+308})");
-
-  // Enum fields.
-  RunValidJsonTest(
-      "EnumField", REQUIRED,
-      R"({"optionalNestedEnum": "FOO"})",
-      "optional_nested_enum: FOO");
-  // Enum values must be represented as strings.
-  ExpectParseFailureForJson(
-      "EnumFieldNotQuoted", REQUIRED,
-      R"({"optionalNestedEnum": FOO})");
-  // Numeric values are allowed.
-  RunValidJsonTest(
-      "EnumFieldNumericValueZero", REQUIRED,
-      R"({"optionalNestedEnum": 0})",
-      "optional_nested_enum: FOO");
-  RunValidJsonTest(
-      "EnumFieldNumericValueNonZero", REQUIRED,
-      R"({"optionalNestedEnum": 1})",
-      "optional_nested_enum: BAR");
-  // Unknown enum values are represented as numeric values.
-  RunValidJsonTestWithValidator(
-      "EnumFieldUnknownValue", REQUIRED,
-      R"({"optionalNestedEnum": 123})",
-      [](const Json::Value& value) {
-        return value["optionalNestedEnum"].type() == Json::intValue &&
-            value["optionalNestedEnum"].asInt() == 123;
-      });
-
-  // String fields.
-  RunValidJsonTest(
-      "StringField", REQUIRED,
-      R"({"optionalString": "Hello world!"})",
-      "optional_string: \"Hello world!\"");
-  RunValidJsonTest(
-      "StringFieldUnicode", REQUIRED,
-      // Google in Chinese.
-      R"({"optionalString": "谷歌"})",
-      R"(optional_string: "谷歌")");
-  RunValidJsonTest(
-      "StringFieldEscape", REQUIRED,
-      R"({"optionalString": "\"\\\/\b\f\n\r\t"})",
-      R"(optional_string: "\"\\/\b\f\n\r\t")");
-  RunValidJsonTest(
-      "StringFieldUnicodeEscape", REQUIRED,
-      R"({"optionalString": "\u8C37\u6B4C"})",
-      R"(optional_string: "谷歌")");
-  RunValidJsonTest(
-      "StringFieldUnicodeEscapeWithLowercaseHexLetters", REQUIRED,
-      R"({"optionalString": "\u8c37\u6b4c"})",
-      R"(optional_string: "谷歌")");
-  RunValidJsonTest(
-      "StringFieldSurrogatePair", REQUIRED,
-      // The character is an emoji: grinning face with smiling eyes. 😁
-      R"({"optionalString": "\uD83D\uDE01"})",
-      R"(optional_string: "\xF0\x9F\x98\x81")");
-
-  // Unicode escapes must start with "\u" (lowercase u).
-  ExpectParseFailureForJson(
-      "StringFieldUppercaseEscapeLetter", RECOMMENDED,
-      R"({"optionalString": "\U8C37\U6b4C"})");
-  ExpectParseFailureForJson(
-      "StringFieldInvalidEscape", RECOMMENDED,
-      R"({"optionalString": "\uXXXX\u6B4C"})");
-  ExpectParseFailureForJson(
-      "StringFieldUnterminatedEscape", RECOMMENDED,
-      R"({"optionalString": "\u8C3"})");
-  ExpectParseFailureForJson(
-      "StringFieldUnpairedHighSurrogate", RECOMMENDED,
-      R"({"optionalString": "\uD800"})");
-  ExpectParseFailureForJson(
-      "StringFieldUnpairedLowSurrogate", RECOMMENDED,
-      R"({"optionalString": "\uDC00"})");
-  ExpectParseFailureForJson(
-      "StringFieldSurrogateInWrongOrder", RECOMMENDED,
-      R"({"optionalString": "\uDE01\uD83D"})");
-  ExpectParseFailureForJson(
-      "StringFieldNotAString", REQUIRED,
-      R"({"optionalString": 12345})");
-
-  // Bytes fields.
-  RunValidJsonTest(
-      "BytesField", REQUIRED,
-      R"({"optionalBytes": "AQI="})",
-      R"(optional_bytes: "\x01\x02")");
-  RunValidJsonTest(
-      "BytesFieldBase64Url", RECOMMENDED,
-      R"({"optionalBytes": "-_"})",
-      R"(optional_bytes: "\xfb")");
-
-  // Message fields.
-  RunValidJsonTest(
-      "MessageField", REQUIRED,
-      R"({"optionalNestedMessage": {"a": 1234}})",
-      "optional_nested_message: {a: 1234}");
-
-  // Oneof fields.
-  ExpectParseFailureForJson(
-      "OneofFieldDuplicate", REQUIRED,
-      R"({"oneofUint32": 1, "oneofString": "test"})");
-  // Ensure zero values for oneof make it out/backs.
-  TestAllTypesProto3 messageProto3;
-  TestAllTypesProto2 messageProto2;
-  TestOneofMessage(messageProto3, true);
-  TestOneofMessage(messageProto2, false);
-  RunValidJsonTest(
-      "OneofZeroUint32", RECOMMENDED,
-      R"({"oneofUint32": 0})", "oneof_uint32: 0");
-  RunValidJsonTest(
-      "OneofZeroMessage", RECOMMENDED,
-      R"({"oneofNestedMessage": {}})", "oneof_nested_message: {}");
-  RunValidJsonTest(
-      "OneofZeroString", RECOMMENDED,
-      R"({"oneofString": ""})", "oneof_string: \"\"");
-  RunValidJsonTest(
-      "OneofZeroBytes", RECOMMENDED,
-      R"({"oneofBytes": ""})", "oneof_bytes: \"\"");
-  RunValidJsonTest(
-      "OneofZeroBool", RECOMMENDED,
-      R"({"oneofBool": false})", "oneof_bool: false");
-  RunValidJsonTest(
-      "OneofZeroUint64", RECOMMENDED,
-      R"({"oneofUint64": 0})", "oneof_uint64: 0");
-  RunValidJsonTest(
-      "OneofZeroFloat", RECOMMENDED,
-      R"({"oneofFloat": 0.0})", "oneof_float: 0");
-  RunValidJsonTest(
-      "OneofZeroDouble", RECOMMENDED,
-      R"({"oneofDouble": 0.0})", "oneof_double: 0");
-  RunValidJsonTest(
-      "OneofZeroEnum", RECOMMENDED,
-      R"({"oneofEnum":"FOO"})", "oneof_enum: FOO");
-
-  // Repeated fields.
-  RunValidJsonTest(
-      "PrimitiveRepeatedField", REQUIRED,
-      R"({"repeatedInt32": [1, 2, 3, 4]})",
-      "repeated_int32: [1, 2, 3, 4]");
-  RunValidJsonTest(
-      "EnumRepeatedField", REQUIRED,
-      R"({"repeatedNestedEnum": ["FOO", "BAR", "BAZ"]})",
-      "repeated_nested_enum: [FOO, BAR, BAZ]");
-  RunValidJsonTest(
-      "StringRepeatedField", REQUIRED,
-      R"({"repeatedString": ["Hello", "world"]})",
-      R"(repeated_string: ["Hello", "world"])");
-  RunValidJsonTest(
-      "BytesRepeatedField", REQUIRED,
-      R"({"repeatedBytes": ["AAEC", "AQI="]})",
-      R"(repeated_bytes: ["\x00\x01\x02", "\x01\x02"])");
-  RunValidJsonTest(
-      "MessageRepeatedField", REQUIRED,
-      R"({"repeatedNestedMessage": [{"a": 1234}, {"a": 5678}]})",
-      "repeated_nested_message: {a: 1234}"
-      "repeated_nested_message: {a: 5678}");
-
-  // Repeated field elements are of incorrect type.
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingIntegersGotBool", REQUIRED,
-      R"({"repeatedInt32": [1, false, 3, 4]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingIntegersGotString", REQUIRED,
-      R"({"repeatedInt32": [1, 2, "name", 4]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingIntegersGotMessage", REQUIRED,
-      R"({"repeatedInt32": [1, 2, 3, {"a": 4}]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingStringsGotInt", REQUIRED,
-      R"({"repeatedString": ["1", 2, "3", "4"]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingStringsGotBool", REQUIRED,
-      R"({"repeatedString": ["1", "2", false, "4"]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingStringsGotMessage", REQUIRED,
-      R"({"repeatedString": ["1", 2, "3", {"a": 4}]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingMessagesGotInt", REQUIRED,
-      R"({"repeatedNestedMessage": [{"a": 1}, 2]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingMessagesGotBool", REQUIRED,
-      R"({"repeatedNestedMessage": [{"a": 1}, false]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldWrongElementTypeExpectingMessagesGotString", REQUIRED,
-      R"({"repeatedNestedMessage": [{"a": 1}, "2"]})");
-  // Trailing comma in the repeated field is not allowed.
-  ExpectParseFailureForJson(
-      "RepeatedFieldTrailingComma", RECOMMENDED,
-      R"({"repeatedInt32": [1, 2, 3, 4,]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldTrailingCommaWithSpace", RECOMMENDED,
-      "{\"repeatedInt32\": [1, 2, 3, 4 ,]}");
-  ExpectParseFailureForJson(
-      "RepeatedFieldTrailingCommaWithSpaceCommaSpace", RECOMMENDED,
-      "{\"repeatedInt32\": [1, 2, 3, 4 , ]}");
-  ExpectParseFailureForJson(
-      "RepeatedFieldTrailingCommaWithNewlines", RECOMMENDED,
-      "{\"repeatedInt32\": [\n  1,\n  2,\n  3,\n  4,\n]}");
-
-  // Map fields.
-  RunValidJsonTest(
-      "Int32MapField", REQUIRED,
-      R"({"mapInt32Int32": {"1": 2, "3": 4}})",
-      "map_int32_int32: {key: 1 value: 2}"
-      "map_int32_int32: {key: 3 value: 4}");
-  ExpectParseFailureForJson(
-      "Int32MapFieldKeyNotQuoted", RECOMMENDED,
-      R"({"mapInt32Int32": {1: 2, 3: 4}})");
-  RunValidJsonTest(
-      "Uint32MapField", REQUIRED,
-      R"({"mapUint32Uint32": {"1": 2, "3": 4}})",
-      "map_uint32_uint32: {key: 1 value: 2}"
-      "map_uint32_uint32: {key: 3 value: 4}");
-  ExpectParseFailureForJson(
-      "Uint32MapFieldKeyNotQuoted", RECOMMENDED,
-      R"({"mapUint32Uint32": {1: 2, 3: 4}})");
-  RunValidJsonTest(
-      "Int64MapField", REQUIRED,
-      R"({"mapInt64Int64": {"1": 2, "3": 4}})",
-      "map_int64_int64: {key: 1 value: 2}"
-      "map_int64_int64: {key: 3 value: 4}");
-  ExpectParseFailureForJson(
-      "Int64MapFieldKeyNotQuoted", RECOMMENDED,
-      R"({"mapInt64Int64": {1: 2, 3: 4}})");
-  RunValidJsonTest(
-      "Uint64MapField", REQUIRED,
-      R"({"mapUint64Uint64": {"1": 2, "3": 4}})",
-      "map_uint64_uint64: {key: 1 value: 2}"
-      "map_uint64_uint64: {key: 3 value: 4}");
-  ExpectParseFailureForJson(
-      "Uint64MapFieldKeyNotQuoted", RECOMMENDED,
-      R"({"mapUint64Uint64": {1: 2, 3: 4}})");
-  RunValidJsonTest(
-      "BoolMapField", REQUIRED,
-      R"({"mapBoolBool": {"true": true, "false": false}})",
-      "map_bool_bool: {key: true value: true}"
-      "map_bool_bool: {key: false value: false}");
-  ExpectParseFailureForJson(
-      "BoolMapFieldKeyNotQuoted", RECOMMENDED,
-      R"({"mapBoolBool": {true: true, false: false}})");
-  RunValidJsonTest(
-      "MessageMapField", REQUIRED,
-      R"({
-        "mapStringNestedMessage": {
-          "hello": {"a": 1234},
-          "world": {"a": 5678}
-        }
-      })",
-      R"(
-        map_string_nested_message: {
-          key: "hello"
-          value: {a: 1234}
-        }
-        map_string_nested_message: {
-          key: "world"
-          value: {a: 5678}
-        }
-      )");
-  // Since Map keys are represented as JSON strings, escaping should be allowed.
-  RunValidJsonTest(
-      "Int32MapEscapedKey", REQUIRED,
-      R"({"mapInt32Int32": {"\u0031": 2}})",
-      "map_int32_int32: {key: 1 value: 2}");
-  RunValidJsonTest(
-      "Int64MapEscapedKey", REQUIRED,
-      R"({"mapInt64Int64": {"\u0031": 2}})",
-      "map_int64_int64: {key: 1 value: 2}");
-  RunValidJsonTest(
-      "BoolMapEscapedKey", REQUIRED,
-      R"({"mapBoolBool": {"tr\u0075e": true}})",
-      "map_bool_bool: {key: true value: true}");
-
-  // "null" is accepted for all fields types.
-  RunValidJsonTest(
-      "AllFieldAcceptNull", REQUIRED,
-      R"({
-        "optionalInt32": null,
-        "optionalInt64": null,
-        "optionalUint32": null,
-        "optionalUint64": null,
-        "optionalSint32": null,
-        "optionalSint64": null,
-        "optionalFixed32": null,
-        "optionalFixed64": null,
-        "optionalSfixed32": null,
-        "optionalSfixed64": null,
-        "optionalFloat": null,
-        "optionalDouble": null,
-        "optionalBool": null,
-        "optionalString": null,
-        "optionalBytes": null,
-        "optionalNestedEnum": null,
-        "optionalNestedMessage": null,
-        "repeatedInt32": null,
-        "repeatedInt64": null,
-        "repeatedUint32": null,
-        "repeatedUint64": null,
-        "repeatedSint32": null,
-        "repeatedSint64": null,
-        "repeatedFixed32": null,
-        "repeatedFixed64": null,
-        "repeatedSfixed32": null,
-        "repeatedSfixed64": null,
-        "repeatedFloat": null,
-        "repeatedDouble": null,
-        "repeatedBool": null,
-        "repeatedString": null,
-        "repeatedBytes": null,
-        "repeatedNestedEnum": null,
-        "repeatedNestedMessage": null,
-        "mapInt32Int32": null,
-        "mapBoolBool": null,
-        "mapStringNestedMessage": null
-      })",
-      "");
-
-  // Repeated field elements cannot be null.
-  ExpectParseFailureForJson(
-      "RepeatedFieldPrimitiveElementIsNull", RECOMMENDED,
-      R"({"repeatedInt32": [1, null, 2]})");
-  ExpectParseFailureForJson(
-      "RepeatedFieldMessageElementIsNull", RECOMMENDED,
-      R"({"repeatedNestedMessage": [{"a":1}, null, {"a":2}]})");
-  // Map field keys cannot be null.
-  ExpectParseFailureForJson(
-      "MapFieldKeyIsNull", RECOMMENDED,
-      R"({"mapInt32Int32": {null: 1}})");
-  // Map field values cannot be null.
-  ExpectParseFailureForJson(
-      "MapFieldValueIsNull", RECOMMENDED,
-      R"({"mapInt32Int32": {"0": null}})");
-
-  // http://www.rfc-editor.org/rfc/rfc7159.txt says strings have to use double
-  // quotes.
-  ExpectParseFailureForJson(
-      "StringFieldSingleQuoteKey", RECOMMENDED,
-      R"({'optionalString': "Hello world!"})");
-  ExpectParseFailureForJson(
-      "StringFieldSingleQuoteValue", RECOMMENDED,
-      R"({"optionalString": 'Hello world!'})");
-  ExpectParseFailureForJson(
-      "StringFieldSingleQuoteBoth", RECOMMENDED,
-      R"({'optionalString': 'Hello world!'})");
-
-  // Unknown fields.
-  {
-    TestAllTypesProto3 messageProto3;
-    TestAllTypesProto2 messageProto2;
-    TestUnknownMessage(messageProto3, true);
-    TestUnknownMessage(messageProto2, false);
-  }
-
-  // Wrapper types.
-  RunValidJsonTest(
-      "OptionalBoolWrapper", REQUIRED,
-      R"({"optionalBoolWrapper": false})",
-      "optional_bool_wrapper: {value: false}");
-  RunValidJsonTest(
-      "OptionalInt32Wrapper", REQUIRED,
-      R"({"optionalInt32Wrapper": 0})",
-      "optional_int32_wrapper: {value: 0}");
-  RunValidJsonTest(
-      "OptionalUint32Wrapper", REQUIRED,
-      R"({"optionalUint32Wrapper": 0})",
-      "optional_uint32_wrapper: {value: 0}");
-  RunValidJsonTest(
-      "OptionalInt64Wrapper", REQUIRED,
-      R"({"optionalInt64Wrapper": 0})",
-      "optional_int64_wrapper: {value: 0}");
-  RunValidJsonTest(
-      "OptionalUint64Wrapper", REQUIRED,
-      R"({"optionalUint64Wrapper": 0})",
-      "optional_uint64_wrapper: {value: 0}");
-  RunValidJsonTest(
-      "OptionalFloatWrapper", REQUIRED,
-      R"({"optionalFloatWrapper": 0})",
-      "optional_float_wrapper: {value: 0}");
-  RunValidJsonTest(
-      "OptionalDoubleWrapper", REQUIRED,
-      R"({"optionalDoubleWrapper": 0})",
-      "optional_double_wrapper: {value: 0}");
-  RunValidJsonTest(
-      "OptionalStringWrapper", REQUIRED,
-      R"({"optionalStringWrapper": ""})",
-      R"(optional_string_wrapper: {value: ""})");
-  RunValidJsonTest(
-      "OptionalBytesWrapper", REQUIRED,
-      R"({"optionalBytesWrapper": ""})",
-      R"(optional_bytes_wrapper: {value: ""})");
-  RunValidJsonTest(
-      "OptionalWrapperTypesWithNonDefaultValue", REQUIRED,
-      R"({
-        "optionalBoolWrapper": true,
-        "optionalInt32Wrapper": 1,
-        "optionalUint32Wrapper": 1,
-        "optionalInt64Wrapper": "1",
-        "optionalUint64Wrapper": "1",
-        "optionalFloatWrapper": 1,
-        "optionalDoubleWrapper": 1,
-        "optionalStringWrapper": "1",
-        "optionalBytesWrapper": "AQI="
-      })",
-      R"(
-        optional_bool_wrapper: {value: true}
-        optional_int32_wrapper: {value: 1}
-        optional_uint32_wrapper: {value: 1}
-        optional_int64_wrapper: {value: 1}
-        optional_uint64_wrapper: {value: 1}
-        optional_float_wrapper: {value: 1}
-        optional_double_wrapper: {value: 1}
-        optional_string_wrapper: {value: "1"}
-        optional_bytes_wrapper: {value: "\x01\x02"}
-      )");
-  RunValidJsonTest(
-      "RepeatedBoolWrapper", REQUIRED,
-      R"({"repeatedBoolWrapper": [true, false]})",
-      "repeated_bool_wrapper: {value: true}"
-      "repeated_bool_wrapper: {value: false}");
-  RunValidJsonTest(
-      "RepeatedInt32Wrapper", REQUIRED,
-      R"({"repeatedInt32Wrapper": [0, 1]})",
-      "repeated_int32_wrapper: {value: 0}"
-      "repeated_int32_wrapper: {value: 1}");
-  RunValidJsonTest(
-      "RepeatedUint32Wrapper", REQUIRED,
-      R"({"repeatedUint32Wrapper": [0, 1]})",
-      "repeated_uint32_wrapper: {value: 0}"
-      "repeated_uint32_wrapper: {value: 1}");
-  RunValidJsonTest(
-      "RepeatedInt64Wrapper", REQUIRED,
-      R"({"repeatedInt64Wrapper": [0, 1]})",
-      "repeated_int64_wrapper: {value: 0}"
-      "repeated_int64_wrapper: {value: 1}");
-  RunValidJsonTest(
-      "RepeatedUint64Wrapper", REQUIRED,
-      R"({"repeatedUint64Wrapper": [0, 1]})",
-      "repeated_uint64_wrapper: {value: 0}"
-      "repeated_uint64_wrapper: {value: 1}");
-  RunValidJsonTest(
-      "RepeatedFloatWrapper", REQUIRED,
-      R"({"repeatedFloatWrapper": [0, 1]})",
-      "repeated_float_wrapper: {value: 0}"
-      "repeated_float_wrapper: {value: 1}");
-  RunValidJsonTest(
-      "RepeatedDoubleWrapper", REQUIRED,
-      R"({"repeatedDoubleWrapper": [0, 1]})",
-      "repeated_double_wrapper: {value: 0}"
-      "repeated_double_wrapper: {value: 1}");
-  RunValidJsonTest(
-      "RepeatedStringWrapper", REQUIRED,
-      R"({"repeatedStringWrapper": ["", "AQI="]})",
-      R"(
-        repeated_string_wrapper: {value: ""}
-        repeated_string_wrapper: {value: "AQI="}
-      )");
-  RunValidJsonTest(
-      "RepeatedBytesWrapper", REQUIRED,
-      R"({"repeatedBytesWrapper": ["", "AQI="]})",
-      R"(
-        repeated_bytes_wrapper: {value: ""}
-        repeated_bytes_wrapper: {value: "\x01\x02"}
-      )");
-  RunValidJsonTest(
-      "WrapperTypesWithNullValue", REQUIRED,
-      R"({
-        "optionalBoolWrapper": null,
-        "optionalInt32Wrapper": null,
-        "optionalUint32Wrapper": null,
-        "optionalInt64Wrapper": null,
-        "optionalUint64Wrapper": null,
-        "optionalFloatWrapper": null,
-        "optionalDoubleWrapper": null,
-        "optionalStringWrapper": null,
-        "optionalBytesWrapper": null,
-        "repeatedBoolWrapper": null,
-        "repeatedInt32Wrapper": null,
-        "repeatedUint32Wrapper": null,
-        "repeatedInt64Wrapper": null,
-        "repeatedUint64Wrapper": null,
-        "repeatedFloatWrapper": null,
-        "repeatedDoubleWrapper": null,
-        "repeatedStringWrapper": null,
-        "repeatedBytesWrapper": null
-      })",
-      "");
-
-  // Duration
-  RunValidJsonTest(
-      "DurationMinValue", REQUIRED,
-      R"({"optionalDuration": "-315576000000.999999999s"})",
-      "optional_duration: {seconds: -315576000000 nanos: -999999999}");
-  RunValidJsonTest(
-      "DurationMaxValue", REQUIRED,
-      R"({"optionalDuration": "315576000000.999999999s"})",
-      "optional_duration: {seconds: 315576000000 nanos: 999999999}");
-  RunValidJsonTest(
-      "DurationRepeatedValue", REQUIRED,
-      R"({"repeatedDuration": ["1.5s", "-1.5s"]})",
-      "repeated_duration: {seconds: 1 nanos: 500000000}"
-      "repeated_duration: {seconds: -1 nanos: -500000000}");
-  RunValidJsonTest(
-      "DurationNull", REQUIRED,
-      R"({"optionalDuration": null})",
-      "");
-
-  ExpectParseFailureForJson(
-      "DurationMissingS", REQUIRED,
-      R"({"optionalDuration": "1"})");
-  ExpectParseFailureForJson(
-      "DurationJsonInputTooSmall", REQUIRED,
-      R"({"optionalDuration": "-315576000001.000000000s"})");
-  ExpectParseFailureForJson(
-      "DurationJsonInputTooLarge", REQUIRED,
-      R"({"optionalDuration": "315576000001.000000000s"})");
-  ExpectSerializeFailureForJson(
-      "DurationProtoInputTooSmall", REQUIRED,
-      "optional_duration: {seconds: -315576000001 nanos: 0}");
-  ExpectSerializeFailureForJson(
-      "DurationProtoInputTooLarge", REQUIRED,
-      "optional_duration: {seconds: 315576000001 nanos: 0}");
-
-  RunValidJsonTestWithValidator(
-      "DurationHasZeroFractionalDigit", RECOMMENDED,
-      R"({"optionalDuration": "1.000000000s"})",
-      [](const Json::Value& value) {
-        return value["optionalDuration"].asString() == "1s";
-      });
-  RunValidJsonTestWithValidator(
-      "DurationHas3FractionalDigits", RECOMMENDED,
-      R"({"optionalDuration": "1.010000000s"})",
-      [](const Json::Value& value) {
-        return value["optionalDuration"].asString() == "1.010s";
-      });
-  RunValidJsonTestWithValidator(
-      "DurationHas6FractionalDigits", RECOMMENDED,
-      R"({"optionalDuration": "1.000010000s"})",
-      [](const Json::Value& value) {
-        return value["optionalDuration"].asString() == "1.000010s";
-      });
-  RunValidJsonTestWithValidator(
-      "DurationHas9FractionalDigits", RECOMMENDED,
-      R"({"optionalDuration": "1.000000010s"})",
-      [](const Json::Value& value) {
-        return value["optionalDuration"].asString() == "1.000000010s";
-      });
-
-  // Timestamp
-  RunValidJsonTest(
-      "TimestampMinValue", REQUIRED,
-      R"({"optionalTimestamp": "0001-01-01T00:00:00Z"})",
-      "optional_timestamp: {seconds: -62135596800}");
-  RunValidJsonTest(
-      "TimestampMaxValue", REQUIRED,
-      R"({"optionalTimestamp": "9999-12-31T23:59:59.999999999Z"})",
-      "optional_timestamp: {seconds: 253402300799 nanos: 999999999}");
-  RunValidJsonTest(
-      "TimestampRepeatedValue", REQUIRED,
-      R"({
-        "repeatedTimestamp": [
-          "0001-01-01T00:00:00Z",
-          "9999-12-31T23:59:59.999999999Z"
-        ]
-      })",
-      "repeated_timestamp: {seconds: -62135596800}"
-      "repeated_timestamp: {seconds: 253402300799 nanos: 999999999}");
-  RunValidJsonTest(
-      "TimestampWithPositiveOffset", REQUIRED,
-      R"({"optionalTimestamp": "1970-01-01T08:00:00+08:00"})",
-      "optional_timestamp: {seconds: 0}");
-  RunValidJsonTest(
-      "TimestampWithNegativeOffset", REQUIRED,
-      R"({"optionalTimestamp": "1969-12-31T16:00:00-08:00"})",
-      "optional_timestamp: {seconds: 0}");
-  RunValidJsonTest(
-      "TimestampNull", REQUIRED,
-      R"({"optionalTimestamp": null})",
-      "");
-
-  ExpectParseFailureForJson(
-      "TimestampJsonInputTooSmall", REQUIRED,
-      R"({"optionalTimestamp": "0000-01-01T00:00:00Z"})");
-  ExpectParseFailureForJson(
-      "TimestampJsonInputTooLarge", REQUIRED,
-      R"({"optionalTimestamp": "10000-01-01T00:00:00Z"})");
-  ExpectParseFailureForJson(
-      "TimestampJsonInputMissingZ", REQUIRED,
-      R"({"optionalTimestamp": "0001-01-01T00:00:00"})");
-  ExpectParseFailureForJson(
-      "TimestampJsonInputMissingT", REQUIRED,
-      R"({"optionalTimestamp": "0001-01-01 00:00:00Z"})");
-  ExpectParseFailureForJson(
-      "TimestampJsonInputLowercaseZ", REQUIRED,
-      R"({"optionalTimestamp": "0001-01-01T00:00:00z"})");
-  ExpectParseFailureForJson(
-      "TimestampJsonInputLowercaseT", REQUIRED,
-      R"({"optionalTimestamp": "0001-01-01t00:00:00Z"})");
-  ExpectSerializeFailureForJson(
-      "TimestampProtoInputTooSmall", REQUIRED,
-      "optional_timestamp: {seconds: -62135596801}");
-  ExpectSerializeFailureForJson(
-      "TimestampProtoInputTooLarge", REQUIRED,
-      "optional_timestamp: {seconds: 253402300800}");
-  RunValidJsonTestWithValidator(
-      "TimestampZeroNormalized", RECOMMENDED,
-      R"({"optionalTimestamp": "1969-12-31T16:00:00-08:00"})",
-      [](const Json::Value& value) {
-        return value["optionalTimestamp"].asString() ==
-            "1970-01-01T00:00:00Z";
-      });
-  RunValidJsonTestWithValidator(
-      "TimestampHasZeroFractionalDigit", RECOMMENDED,
-      R"({"optionalTimestamp": "1970-01-01T00:00:00.000000000Z"})",
-      [](const Json::Value& value) {
-        return value["optionalTimestamp"].asString() ==
-            "1970-01-01T00:00:00Z";
-      });
-  RunValidJsonTestWithValidator(
-      "TimestampHas3FractionalDigits", RECOMMENDED,
-      R"({"optionalTimestamp": "1970-01-01T00:00:00.010000000Z"})",
-      [](const Json::Value& value) {
-        return value["optionalTimestamp"].asString() ==
-            "1970-01-01T00:00:00.010Z";
-      });
-  RunValidJsonTestWithValidator(
-      "TimestampHas6FractionalDigits", RECOMMENDED,
-      R"({"optionalTimestamp": "1970-01-01T00:00:00.000010000Z"})",
-      [](const Json::Value& value) {
-        return value["optionalTimestamp"].asString() ==
-            "1970-01-01T00:00:00.000010Z";
-      });
-  RunValidJsonTestWithValidator(
-      "TimestampHas9FractionalDigits", RECOMMENDED,
-      R"({"optionalTimestamp": "1970-01-01T00:00:00.000000010Z"})",
-      [](const Json::Value& value) {
-        return value["optionalTimestamp"].asString() ==
-            "1970-01-01T00:00:00.000000010Z";
-      });
-
-  // FieldMask
-  RunValidJsonTest(
-      "FieldMask", REQUIRED,
-      R"({"optionalFieldMask": "foo,barBaz"})",
-      R"(optional_field_mask: {paths: "foo" paths: "bar_baz"})");
-  ExpectParseFailureForJson(
-      "FieldMaskInvalidCharacter", RECOMMENDED,
-      R"({"optionalFieldMask": "foo,bar_bar"})");
-  ExpectSerializeFailureForJson(
-      "FieldMaskPathsDontRoundTrip", RECOMMENDED,
-      R"(optional_field_mask: {paths: "fooBar"})");
-  ExpectSerializeFailureForJson(
-      "FieldMaskNumbersDontRoundTrip", RECOMMENDED,
-      R"(optional_field_mask: {paths: "foo_3_bar"})");
-  ExpectSerializeFailureForJson(
-      "FieldMaskTooManyUnderscore", RECOMMENDED,
-      R"(optional_field_mask: {paths: "foo__bar"})");
-
-  // Struct
-  RunValidJsonTest(
-      "Struct", REQUIRED,
-      R"({
-        "optionalStruct": {
-          "nullValue": null,
-          "intValue": 1234,
-          "boolValue": true,
-          "doubleValue": 1234.5678,
-          "stringValue": "Hello world!",
-          "listValue": [1234, "5678"],
-          "objectValue": {
-            "value": 0
-          }
-        }
-      })",
-      R"(
-        optional_struct: {
-          fields: {
-            key: "nullValue"
-            value: {null_value: NULL_VALUE}
-          }
-          fields: {
-            key: "intValue"
-            value: {number_value: 1234}
-          }
-          fields: {
-            key: "boolValue"
-            value: {bool_value: true}
-          }
-          fields: {
-            key: "doubleValue"
-            value: {number_value: 1234.5678}
-          }
-          fields: {
-            key: "stringValue"
-            value: {string_value: "Hello world!"}
-          }
-          fields: {
-            key: "listValue"
-            value: {
-              list_value: {
-                values: {
-                  number_value: 1234
-                }
-                values: {
-                  string_value: "5678"
-                }
-              }
-            }
-          }
-          fields: {
-            key: "objectValue"
-            value: {
-              struct_value: {
-                fields: {
-                  key: "value"
-                  value: {
-                    number_value: 0
-                  }
-                }
-              }
-            }
-          }
-        }
-      )");
-  // Value
-  RunValidJsonTest(
-      "ValueAcceptInteger", REQUIRED,
-      R"({"optionalValue": 1})",
-      "optional_value: { number_value: 1}");
-  RunValidJsonTest(
-      "ValueAcceptFloat", REQUIRED,
-      R"({"optionalValue": 1.5})",
-      "optional_value: { number_value: 1.5}");
-  RunValidJsonTest(
-      "ValueAcceptBool", REQUIRED,
-      R"({"optionalValue": false})",
-      "optional_value: { bool_value: false}");
-  RunValidJsonTest(
-      "ValueAcceptNull", REQUIRED,
-      R"({"optionalValue": null})",
-      "optional_value: { null_value: NULL_VALUE}");
-  RunValidJsonTest(
-      "ValueAcceptString", REQUIRED,
-      R"({"optionalValue": "hello"})",
-      R"(optional_value: { string_value: "hello"})");
-  RunValidJsonTest(
-      "ValueAcceptList", REQUIRED,
-      R"({"optionalValue": [0, "hello"]})",
-      R"(
-        optional_value: {
-          list_value: {
-            values: {
-              number_value: 0
-            }
-            values: {
-              string_value: "hello"
-            }
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "ValueAcceptObject", REQUIRED,
-      R"({"optionalValue": {"value": 1}})",
-      R"(
-        optional_value: {
-          struct_value: {
-            fields: {
-              key: "value"
-              value: {
-                number_value: 1
-              }
-            }
-          }
-        }
-      )");
-
-  // Any
-  RunValidJsonTest(
-      "Any", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3",
-          "optionalInt32": 12345
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
-            optional_int32: 12345
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyNested", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Any",
-          "value": {
-            "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3",
-            "optionalInt32": 12345
-          }
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Any] {
-            [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
-              optional_int32: 12345
-            }
-          }
-        }
-      )");
-  // The special "@type" tag is not required to appear first.
-  RunValidJsonTest(
-      "AnyUnorderedTypeTag", REQUIRED,
-      R"({
-        "optionalAny": {
-          "optionalInt32": 12345,
-          "@type": "type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3"
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/protobuf_test_messages.proto3.TestAllTypesProto3] {
-            optional_int32: 12345
-          }
-        }
-      )");
-  // Well-known types in Any.
-  RunValidJsonTest(
-      "AnyWithInt32ValueWrapper", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Int32Value",
-          "value": 12345
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Int32Value] {
-            value: 12345
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyWithDuration", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Duration",
-          "value": "1.5s"
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Duration] {
-            seconds: 1
-            nanos: 500000000
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyWithTimestamp", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Timestamp",
-          "value": "1970-01-01T00:00:00Z"
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Timestamp] {
-            seconds: 0
-            nanos: 0
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyWithFieldMask", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.FieldMask",
-          "value": "foo,barBaz"
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.FieldMask] {
-            paths: ["foo", "bar_baz"]
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyWithStruct", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Struct",
-          "value": {
-            "foo": 1
-          }
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Struct] {
-            fields: {
-              key: "foo"
-              value: {
-                number_value: 1
-              }
-            }
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyWithValueForJsonObject", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Value",
-          "value": {
-            "foo": 1
-          }
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Value] {
-            struct_value: {
-              fields: {
-                key: "foo"
-                value: {
-                  number_value: 1
-                }
-              }
-            }
-          }
-        }
-      )");
-  RunValidJsonTest(
-      "AnyWithValueForInteger", REQUIRED,
-      R"({
-        "optionalAny": {
-          "@type": "type.googleapis.com/google.protobuf.Value",
-          "value": 1
-        }
-      })",
-      R"(
-        optional_any: {
-          [type.googleapis.com/google.protobuf.Value] {
-            number_value: 1
-          }
-        }
-      )");
-
-  bool ok = true;
-  if (!CheckSetEmpty(expected_to_fail_, "nonexistent_tests.txt",
-                     "These tests were listed in the failure list, but they "
-                     "don't exist.  Remove them from the failure list by "
-                     "running:\n"
-                     "  ./update_failure_list.py " + failure_list_filename_ +
-                     " --remove nonexistent_tests.txt")) {
-    ok = false;
-  }
-  if (!CheckSetEmpty(unexpected_failing_tests_, "failing_tests.txt",
-                     "These tests failed.  If they can't be fixed right now, "
-                     "you can add them to the failure list so the overall "
-                     "suite can succeed.  Add them to the failure list by "
-                     "running:\n"
-                     "  ./update_failure_list.py " + failure_list_filename_ +
-                     " --add failing_tests.txt")) {
-    ok = false;
-  }
-  if (!CheckSetEmpty(unexpected_succeeding_tests_, "succeeding_tests.txt",
-                     "These tests succeeded, even though they were listed in "
-                     "the failure list.  Remove them from the failure list "
-                     "by running:\n"
-                     "  ./update_failure_list.py " + failure_list_filename_ +
-                     " --remove succeeding_tests.txt")) {
-    ok = false;
-  }
-
-  if (verbose_) {
-    CheckSetEmpty(skipped_, "",
-                  "These tests were skipped (probably because support for some "
-                  "features is not implemented)");
-  }
-
-  StringAppendF(&output_,
-                "CONFORMANCE SUITE %s: %d successes, %d skipped, "
-                "%d expected failures, %d unexpected failures.\n",
-                ok ? "PASSED" : "FAILED", successes_, skipped_.size(),
-                expected_failures_, unexpected_failing_tests_.size());
-  StringAppendF(&output_, "\n");
-
-  output->assign(output_);
-
-  return ok;
-}
-
-}  // namespace protobuf
-}  // namespace google

+ 0 - 267
conformance/conformance_test.h

@@ -1,267 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-// This file defines a protocol for running the conformance test suite
-// in-process.  In other words, the suite itself will run in the same process as
-// the code under test.
-//
-// For pros and cons of this approach, please see conformance.proto.
-
-#ifndef CONFORMANCE_CONFORMANCE_TEST_H
-#define CONFORMANCE_CONFORMANCE_TEST_H
-
-#include <functional>
-#include <string>
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/util/type_resolver.h>
-#include <google/protobuf/wire_format_lite.h>
-
-#include "third_party/jsoncpp/json.h"
-
-namespace conformance {
-class ConformanceRequest;
-class ConformanceResponse;
-}  // namespace conformance
-
-namespace protobuf_test_messages {
-namespace proto3 {
-class TestAllTypesProto3;
-}  // namespace proto3
-}  // namespace protobuf_test_messages
-
-namespace google {
-namespace protobuf {
-
-class ConformanceTestRunner {
- public:
-  virtual ~ConformanceTestRunner() {}
-
-  // Call to run a single conformance test.
-  //
-  // "input" is a serialized conformance.ConformanceRequest.
-  // "output" should be set to a serialized conformance.ConformanceResponse.
-  //
-  // If there is any error in running the test itself, set "runtime_error" in
-  // the response.
-  virtual void RunTest(const std::string& test_name,
-                       const std::string& input,
-                       std::string* output) = 0;
-};
-
-// Class representing the test suite itself.  To run it, implement your own
-// class derived from ConformanceTestRunner and then write code like:
-//
-//    class MyConformanceTestRunner : public ConformanceTestRunner {
-//     public:
-//      virtual void RunTest(...) {
-//        // INSERT YOUR FRAMEWORK-SPECIFIC CODE HERE.
-//      }
-//    };
-//
-//    int main() {
-//      MyConformanceTestRunner runner;
-//      google::protobuf::ConformanceTestSuite suite;
-//
-//      std::string output;
-//      suite.RunSuite(&runner, &output);
-//    }
-//
-class ConformanceTestSuite {
- public:
-  ConformanceTestSuite() : verbose_(false), enforce_recommended_(false) {}
-
-  void SetVerbose(bool verbose) { verbose_ = verbose; }
-
-  // Sets the list of tests that are expected to fail when RunSuite() is called.
-  // RunSuite() will fail unless the set of failing tests is exactly the same
-  // as this list.
-  //
-  // The filename here is *only* used to create/format useful error messages for
-  // how to update the failure list.  We do NOT read this file at all.
-  void SetFailureList(const std::string& filename,
-                      const std::vector<std::string>& failure_list);
-
-  // Whether to require the testee to pass RECOMMENDED tests. By default failing
-  // a RECOMMENDED test case will not fail the entire suite but will only
-  // generated a warning. If this flag is set to true, RECOMMENDED tests will
-  // be treated the same way as REQUIRED tests and failing a RECOMMENDED test
-  // case will cause the entire test suite to fail as well. An implementation
-  // can enable this if it wants to be strictly conforming to protobuf spec.
-  // See the comments about ConformanceLevel below to learn more about the
-  // difference between REQUIRED and RECOMMENDED test cases.
-  void SetEnforceRecommended(bool value) {
-    enforce_recommended_ = value;
-  }
-
-  // Run all the conformance tests against the given test runner.
-  // Test output will be stored in "output".
-  //
-  // Returns true if the set of failing tests was exactly the same as the
-  // failure list.  If SetFailureList() was not called, returns true if all
-  // tests passed.
-  bool RunSuite(ConformanceTestRunner* runner, std::string* output);
-
- private:
-  // Test cases are classified into a few categories:
-  //   REQUIRED: the test case must be passed for an implementation to be
-  //             interoperable with other implementations. For example, a
-  //             parser implementaiton must accept both packed and unpacked
-  //             form of repeated primitive fields.
-  //   RECOMMENDED: the test case is not required for the implementation to
-  //                be interoperable with other implementations, but is
-  //                recommended for best performance and compatibility. For
-  //                example, a proto3 serializer should serialize repeated
-  //                primitive fields in packed form, but an implementation
-  //                failing to do so will still be able to communicate with
-  //                other implementations.
-  enum ConformanceLevel {
-    REQUIRED = 0,
-    RECOMMENDED = 1,
-  };
-  string ConformanceLevelToString(ConformanceLevel level);
-
-  void ReportSuccess(const std::string& test_name);
-  void ReportFailure(const string& test_name,
-                     ConformanceLevel level,
-                     const conformance::ConformanceRequest& request,
-                     const conformance::ConformanceResponse& response,
-                     const char* fmt, ...);
-  void ReportSkip(const string& test_name,
-                  const conformance::ConformanceRequest& request,
-                  const conformance::ConformanceResponse& response);
-  void RunTest(const std::string& test_name,
-               const conformance::ConformanceRequest& request,
-               conformance::ConformanceResponse* response);
-  void RunValidInputTest(const string& test_name,
-                         ConformanceLevel level,
-                         const string& input,
-                         conformance::WireFormat input_format,
-                         const string& equivalent_text_format,
-                         conformance::WireFormat requested_output,
-                         bool isProto3);
-  void RunValidBinaryInputTest(const string& test_name,
-                               ConformanceLevel level,
-                               const string& input,
-                               conformance::WireFormat input_format,
-                               const string& equivalent_wire_format,
-                               conformance::WireFormat requested_output,
-                               bool isProto3);
-  void RunValidJsonTest(const string& test_name,
-                        ConformanceLevel level,
-                        const string& input_json,
-                        const string& equivalent_text_format);
-  void RunValidJsonTestWithProtobufInput(
-      const string& test_name,
-      ConformanceLevel level,
-      const protobuf_test_messages::proto3::TestAllTypesProto3& input,
-      const string& equivalent_text_format);
-  void RunValidProtobufTest(const string& test_name, ConformanceLevel level,
-                            const string& input_protobuf,
-                            const string& equivalent_text_format,
-                            bool isProto3);
-  void RunValidBinaryProtobufTest(const string& test_name,
-                                  ConformanceLevel level,
-                                  const string& input_protobuf,
-                                  bool isProto3);
-  void RunValidProtobufTestWithMessage(
-      const string& test_name, ConformanceLevel level,
-      const Message *input,
-      const string& equivalent_text_format,
-      bool isProto3);
-
-  typedef std::function<bool(const Json::Value&)> Validator;
-  void RunValidJsonTestWithValidator(const string& test_name,
-                                     ConformanceLevel level,
-                                     const string& input_json,
-                                     const Validator& validator);
-  void ExpectParseFailureForJson(const string& test_name,
-                                 ConformanceLevel level,
-                                 const string& input_json);
-  void ExpectSerializeFailureForJson(const string& test_name,
-                                     ConformanceLevel level,
-                                     const string& text_format);
-  void ExpectParseFailureForProtoWithProtoVersion (const string& proto,
-                                                   const string& test_name,
-                                                   ConformanceLevel level,
-                                                   bool isProto3);
-  void ExpectParseFailureForProto(const std::string& proto,
-                                  const std::string& test_name,
-                                  ConformanceLevel level);
-  void ExpectHardParseFailureForProto(const std::string& proto,
-                                      const std::string& test_name,
-                                      ConformanceLevel level);
-  void TestPrematureEOFForType(google::protobuf::FieldDescriptor::Type type);
-  void TestIllegalTags();
-  template <class MessageType>
-  void TestOneofMessage (MessageType &message,
-                         bool isProto3);
-  template <class MessageType>
-  void TestUnknownMessage (MessageType &message,
-                           bool isProto3);
-  void TestValidDataForType(
-      google::protobuf::FieldDescriptor::Type,
-      std::vector<std::pair<std::string, std::string>> values);
-  bool CheckSetEmpty(const std::set<string>& set_to_check,
-                     const std::string& write_to_file, const std::string& msg);
-  ConformanceTestRunner* runner_;
-  int successes_;
-  int expected_failures_;
-  bool verbose_;
-  bool enforce_recommended_;
-  std::string output_;
-  std::string failure_list_filename_;
-
-  // The set of test names that are expected to fail in this run, but haven't
-  // failed yet.
-  std::set<std::string> expected_to_fail_;
-
-  // The set of test names that have been run.  Used to ensure that there are no
-  // duplicate names in the suite.
-  std::set<std::string> test_names_;
-
-  // The set of tests that failed, but weren't expected to.
-  std::set<std::string> unexpected_failing_tests_;
-
-  // The set of tests that succeeded, but weren't expected to.
-  std::set<std::string> unexpected_succeeding_tests_;
-
-  // The set of tests that the testee opted out of;
-  std::set<std::string> skipped_;
-
-  google::protobuf::internal::scoped_ptr<google::protobuf::util::TypeResolver>
-      type_resolver_;
-  std::string type_url_;
-};
-
-}  // namespace protobuf
-}  // namespace google
-
-#endif  // CONFORMANCE_CONFORMANCE_TEST_H

+ 0 - 326
conformance/conformance_test_runner.cc

@@ -1,326 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// This file contains a program for running the test suite in a separate
-// process.  The other alternative is to run the suite in-process.  See
-// conformance.proto for pros/cons of these two options.
-//
-// This program will fork the process under test and communicate with it over
-// its stdin/stdout:
-//
-//     +--------+   pipe   +----------+
-//     | tester | <------> | testee   |
-//     |        |          |          |
-//     |  C++   |          | any lang |
-//     +--------+          +----------+
-//
-// The tester contains all of the test cases and their expected output.
-// The testee is a simple program written in the target language that reads
-// each test case and attempts to produce acceptable output for it.
-//
-// Every test consists of a ConformanceRequest/ConformanceResponse
-// request/reply pair.  The protocol on the pipe is simply:
-//
-//   1. tester sends 4-byte length N (little endian)
-//   2. tester sends N bytes representing a ConformanceRequest proto
-//   3. testee sends 4-byte length M (little endian)
-//   4. testee sends M bytes representing a ConformanceResponse proto
-
-#include <algorithm>
-#include <errno.h>
-#include <fstream>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <vector>
-
-#include <google/protobuf/stubs/stringprintf.h>
-
-#include "conformance.pb.h"
-#include "conformance_test.h"
-
-using conformance::ConformanceRequest;
-using conformance::ConformanceResponse;
-using google::protobuf::internal::scoped_array;
-using google::protobuf::StringAppendF;
-using std::string;
-using std::vector;
-
-#define STRINGIFY(x) #x
-#define TOSTRING(x) STRINGIFY(x)
-#define CHECK_SYSCALL(call) \
-  if (call < 0) { \
-    perror(#call " " __FILE__ ":" TOSTRING(__LINE__)); \
-    exit(1); \
-  }
-
-// Test runner that spawns the process being tested and communicates with it
-// over a pipe.
-class ForkPipeRunner : public google::protobuf::ConformanceTestRunner {
- public:
-  ForkPipeRunner(const std::string &executable)
-      : child_pid_(-1), executable_(executable) {}
-
-  virtual ~ForkPipeRunner() {}
-
-  void RunTest(const std::string& test_name,
-               const std::string& request,
-               std::string* response) {
-    if (child_pid_ < 0) {
-      SpawnTestProgram();
-    }
-
-    current_test_name_ = test_name;
-
-    uint32_t len = request.size();
-    CheckedWrite(write_fd_, &len, sizeof(uint32_t));
-    CheckedWrite(write_fd_, request.c_str(), request.size());
-
-    if (!TryRead(read_fd_, &len, sizeof(uint32_t))) {
-      // We failed to read from the child, assume a crash and try to reap.
-      GOOGLE_LOG(INFO) << "Trying to reap child, pid=" << child_pid_;
-
-      int status;
-      waitpid(child_pid_, &status, WEXITED);
-
-      string error_msg;
-      if (WIFEXITED(status)) {
-        StringAppendF(&error_msg,
-                      "child exited, status=%d", WEXITSTATUS(status));
-      } else if (WIFSIGNALED(status)) {
-        StringAppendF(&error_msg,
-                      "child killed by signal %d", WTERMSIG(status));
-      }
-      GOOGLE_LOG(INFO) << error_msg;
-      child_pid_ = -1;
-
-      conformance::ConformanceResponse response_obj;
-      response_obj.set_runtime_error(error_msg);
-      response_obj.SerializeToString(response);
-      return;
-    }
-
-    response->resize(len);
-    CheckedRead(read_fd_, (void*)response->c_str(), len);
-  }
-
- private:
-  // TODO(haberman): make this work on Windows, instead of using these
-  // UNIX-specific APIs.
-  //
-  // There is a platform-agnostic API in
-  //    src/google/protobuf/compiler/subprocess.h
-  //
-  // However that API only supports sending a single message to the subprocess.
-  // We really want to be able to send messages and receive responses one at a
-  // time:
-  //
-  // 1. Spawning a new process for each test would take way too long for thousands
-  //    of tests and subprocesses like java that can take 100ms or more to start
-  //    up.
-  //
-  // 2. Sending all the tests in one big message and receiving all results in one
-  //    big message would take away our visibility about which test(s) caused a
-  //    crash or other fatal error.  It would also give us only a single failure
-  //    instead of all of them.
-  void SpawnTestProgram() {
-    int toproc_pipe_fd[2];
-    int fromproc_pipe_fd[2];
-    if (pipe(toproc_pipe_fd) < 0 || pipe(fromproc_pipe_fd) < 0) {
-      perror("pipe");
-      exit(1);
-    }
-
-    pid_t pid = fork();
-    if (pid < 0) {
-      perror("fork");
-      exit(1);
-    }
-
-    if (pid) {
-      // Parent.
-      CHECK_SYSCALL(close(toproc_pipe_fd[0]));
-      CHECK_SYSCALL(close(fromproc_pipe_fd[1]));
-      write_fd_ = toproc_pipe_fd[1];
-      read_fd_ = fromproc_pipe_fd[0];
-      child_pid_ = pid;
-    } else {
-      // Child.
-      CHECK_SYSCALL(close(STDIN_FILENO));
-      CHECK_SYSCALL(close(STDOUT_FILENO));
-      CHECK_SYSCALL(dup2(toproc_pipe_fd[0], STDIN_FILENO));
-      CHECK_SYSCALL(dup2(fromproc_pipe_fd[1], STDOUT_FILENO));
-
-      CHECK_SYSCALL(close(toproc_pipe_fd[0]));
-      CHECK_SYSCALL(close(fromproc_pipe_fd[1]));
-      CHECK_SYSCALL(close(toproc_pipe_fd[1]));
-      CHECK_SYSCALL(close(fromproc_pipe_fd[0]));
-
-      scoped_array<char> executable(new char[executable_.size() + 1]);
-      memcpy(executable.get(), executable_.c_str(), executable_.size());
-      executable[executable_.size()] = '\0';
-
-      char *const argv[] = {executable.get(), NULL};
-      CHECK_SYSCALL(execv(executable.get(), argv));  // Never returns.
-    }
-  }
-
-  void CheckedWrite(int fd, const void *buf, size_t len) {
-    if (write(fd, buf, len) != len) {
-      GOOGLE_LOG(FATAL) << current_test_name_
-                        << ": error writing to test program: "
-                        << strerror(errno);
-    }
-  }
-
-  bool TryRead(int fd, void *buf, size_t len) {
-    size_t ofs = 0;
-    while (len > 0) {
-      ssize_t bytes_read = read(fd, (char*)buf + ofs, len);
-
-      if (bytes_read == 0) {
-        GOOGLE_LOG(ERROR) << current_test_name_
-                          << ": unexpected EOF from test program";
-        return false;
-      } else if (bytes_read < 0) {
-        GOOGLE_LOG(ERROR) << current_test_name_
-                          << ": error reading from test program: "
-                          << strerror(errno);
-        return false;
-      }
-
-      len -= bytes_read;
-      ofs += bytes_read;
-    }
-
-    return true;
-  }
-
-  void CheckedRead(int fd, void *buf, size_t len) {
-    if (!TryRead(fd, buf, len)) {
-      GOOGLE_LOG(FATAL) << current_test_name_
-                        << ": error reading from test program: "
-                        << strerror(errno);
-    }
-  }
-
-  int write_fd_;
-  int read_fd_;
-  pid_t child_pid_;
-  std::string executable_;
-  std::string current_test_name_;
-};
-
-void UsageError() {
-  fprintf(stderr,
-          "Usage: conformance-test-runner [options] <test-program>\n");
-  fprintf(stderr, "\n");
-  fprintf(stderr, "Options:\n");
-  fprintf(stderr,
-          "  --failure_list <filename>   Use to specify list of tests\n");
-  fprintf(stderr,
-          "                              that are expected to fail.  File\n");
-  fprintf(stderr,
-          "                              should contain one test name per\n");
-  fprintf(stderr,
-          "                              line.  Use '#' for comments.\n");
-  fprintf(stderr,
-          "  --enforce_recommended       Enforce that recommended test\n");
-  fprintf(stderr,
-          "                              cases are also passing. Specify\n");
-  fprintf(stderr,
-          "                              this flag if you want to be\n");
-  fprintf(stderr,
-          "                              strictly conforming to protobuf\n");
-  fprintf(stderr,
-          "                              spec.\n");
-  exit(1);
-}
-
-void ParseFailureList(const char *filename, vector<string>* failure_list) {
-  std::ifstream infile(filename);
-
-  if (!infile.is_open()) {
-    fprintf(stderr, "Couldn't open failure list file: %s\n", filename);
-    exit(1);
-  }
-
-  for (string line; getline(infile, line);) {
-    // Remove whitespace.
-    line.erase(std::remove_if(line.begin(), line.end(), ::isspace),
-               line.end());
-
-    // Remove comments.
-    line = line.substr(0, line.find("#"));
-
-    if (!line.empty()) {
-      failure_list->push_back(line);
-    }
-  }
-}
-
-int main(int argc, char *argv[]) {
-  char *program;
-  google::protobuf::ConformanceTestSuite suite;
-
-  string failure_list_filename;
-  vector<string> failure_list;
-
-  for (int arg = 1; arg < argc; ++arg) {
-    if (strcmp(argv[arg], "--failure_list") == 0) {
-      if (++arg == argc) UsageError();
-      failure_list_filename = argv[arg];
-      ParseFailureList(argv[arg], &failure_list);
-    } else if (strcmp(argv[arg], "--verbose") == 0) {
-      suite.SetVerbose(true);
-    } else if (strcmp(argv[arg], "--enforce_recommended") == 0) {
-      suite.SetEnforceRecommended(true);
-    } else if (argv[arg][0] == '-') {
-      fprintf(stderr, "Unknown option: %s\n", argv[arg]);
-      UsageError();
-    } else {
-      if (arg != argc - 1) {
-        fprintf(stderr, "Too many arguments.\n");
-        UsageError();
-      }
-      program = argv[arg];
-    }
-  }
-
-  suite.SetFailureList(failure_list_filename, failure_list);
-  ForkPipeRunner runner(program);
-
-  std::string output;
-  bool ok = suite.RunSuite(&runner, &output);
-
-  fwrite(output.c_str(), 1, output.size(), stderr);
-
-  return ok ? EXIT_SUCCESS : EXIT_FAILURE;
-}

+ 0 - 56
conformance/failure_list_cpp.txt

@@ -1,56 +0,0 @@
-# This is the list of conformance tests that are known to fail for the C++
-# implementation right now.  These should be fixed.
-#
-# By listing them here we can keep tabs on which ones are failing and be sure
-# that we don't introduce regressions in other tests.
-#
-# TODO(haberman): insert links to corresponding bugs tracking the issue.
-# Should we use GitHub issues or the Google-internal bug tracker?
-
-Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput
-Recommended.FieldMaskPathsDontRoundTrip.JsonOutput
-Recommended.FieldMaskTooManyUnderscore.JsonOutput
-Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedFalse
-Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedTrue
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput
-Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter
-Recommended.Proto3.JsonInput.FieldNameDuplicate
-Recommended.Proto3.JsonInput.FieldNameDuplicateDifferentCasing1
-Recommended.Proto3.JsonInput.FieldNameDuplicateDifferentCasing2
-Recommended.Proto3.JsonInput.FieldNameNotQuoted
-Recommended.Proto3.JsonInput.MapFieldValueIsNull
-Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull
-Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull
-Recommended.Proto3.JsonInput.RepeatedFieldTrailingComma
-Recommended.Proto3.JsonInput.RepeatedFieldTrailingCommaWithNewlines
-Recommended.Proto3.JsonInput.RepeatedFieldTrailingCommaWithSpace
-Recommended.Proto3.JsonInput.RepeatedFieldTrailingCommaWithSpaceCommaSpace
-Recommended.Proto3.JsonInput.StringFieldSingleQuoteBoth
-Recommended.Proto3.JsonInput.StringFieldSingleQuoteKey
-Recommended.Proto3.JsonInput.StringFieldSingleQuoteValue
-Recommended.Proto3.JsonInput.StringFieldUppercaseEscapeLetter
-Recommended.Proto3.JsonInput.TrailingCommaInAnObject
-Recommended.Proto3.JsonInput.TrailingCommaInAnObjectWithNewlines
-Recommended.Proto3.JsonInput.TrailingCommaInAnObjectWithSpace
-Recommended.Proto3.JsonInput.TrailingCommaInAnObjectWithSpaceCommaSpace
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64
-Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
-Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64

+ 0 - 2
conformance/failure_list_csharp.txt

@@ -1,2 +0,0 @@
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput

+ 0 - 47
conformance/failure_list_java.txt

@@ -1,47 +0,0 @@
-# This is the list of conformance tests that are known to fail for the Java
-# implementation right now.  These should be fixed.
-#
-# By listing them here we can keep tabs on which ones are failing and be sure
-# that we don't introduce regressions in other tests.
-
-Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput
-Recommended.FieldMaskPathsDontRoundTrip.JsonOutput
-Recommended.FieldMaskTooManyUnderscore.JsonOutput
-Recommended.Proto3.JsonInput.BoolFieldAllCapitalFalse
-Recommended.Proto3.JsonInput.BoolFieldAllCapitalTrue
-Recommended.Proto3.JsonInput.BoolFieldCamelCaseFalse
-Recommended.Proto3.JsonInput.BoolFieldCamelCaseTrue
-Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedFalse
-Recommended.Proto3.JsonInput.BoolFieldDoubleQuotedTrue
-Recommended.Proto3.JsonInput.BoolMapFieldKeyNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted
-Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter
-Recommended.Proto3.JsonInput.FieldNameDuplicate
-Recommended.Proto3.JsonInput.FieldNameNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted
-Recommended.Proto3.JsonInput.Int32MapFieldKeyNotQuoted
-Recommended.Proto3.JsonInput.Int64MapFieldKeyNotQuoted
-Recommended.Proto3.JsonInput.JsonWithComments
-Recommended.Proto3.JsonInput.StringFieldSingleQuoteBoth
-Recommended.Proto3.JsonInput.StringFieldSingleQuoteKey
-Recommended.Proto3.JsonInput.StringFieldSingleQuoteValue
-Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder
-Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate
-Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate
-Recommended.Proto3.JsonInput.Uint32MapFieldKeyNotQuoted
-Recommended.Proto3.JsonInput.Uint64MapFieldKeyNotQuoted
-Required.Proto3.JsonInput.EnumFieldNotQuoted
-Required.Proto3.JsonInput.Int32FieldLeadingZero
-Required.Proto3.JsonInput.Int32FieldNegativeWithLeadingZero
-Required.Proto3.JsonInput.Int32FieldPlusSign
-Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotBool
-Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt
-Required.Proto3.JsonInput.StringFieldNotAString
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE
-Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
-Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE

+ 0 - 13
conformance/failure_list_js.txt

@@ -1,13 +0,0 @@
-Required.Proto3.ProtobufInput.ValidDataRepeated.BOOL.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.DOUBLE.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.FIXED32.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.FIXED64.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.INT32.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.INT64.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.SFIXED32.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.SFIXED64.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.SINT32.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.SINT64.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.UINT32.ProtobufOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.UINT64.ProtobufOutput

+ 0 - 2
conformance/failure_list_objc.txt

@@ -1,2 +0,0 @@
-# JSON input or output tests are skipped (in conformance_objc.m) as mobile
-# platforms don't support JSON wire format to avoid code bloat.

+ 0 - 20
conformance/failure_list_php.txt

@@ -1,20 +0,0 @@
-Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput
-Recommended.FieldMaskPathsDontRoundTrip.JsonOutput
-Recommended.FieldMaskTooManyUnderscore.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput
-Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator
-Recommended.Proto3.JsonInput.FieldMaskInvalidCharacter
-Required.Proto3.JsonInput.FloatFieldTooLarge
-Required.Proto3.JsonInput.FloatFieldTooSmall
-Required.Proto3.JsonInput.DoubleFieldTooSmall
-Required.Proto3.JsonInput.Int32FieldNotInteger
-Required.Proto3.JsonInput.Int64FieldNotInteger
-Required.Proto3.JsonInput.Uint32FieldNotInteger
-Required.Proto3.JsonInput.Uint64FieldNotInteger
-Required.Proto3.JsonInput.Int32FieldLeadingSpace
-Required.Proto3.JsonInput.OneofFieldDuplicate
-Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput

+ 0 - 182
conformance/failure_list_php_c.txt

@@ -1,182 +0,0 @@
-Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput
-Recommended.FieldMaskPathsDontRoundTrip.JsonOutput
-Recommended.FieldMaskTooManyUnderscore.JsonOutput
-Recommended.Proto3.JsonInput.BoolFieldIntegerOne
-Recommended.Proto3.JsonInput.BoolFieldIntegerZero
-Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator
-Recommended.Proto3.JsonInput.Int64FieldBeString.Validator
-Recommended.Proto3.JsonInput.MapFieldValueIsNull
-Recommended.Proto3.JsonInput.OneofZeroBytes.JsonOutput
-Recommended.Proto3.JsonInput.OneofZeroBytes.ProtobufOutput
-Recommended.Proto3.JsonInput.OneofZeroString.JsonOutput
-Recommended.Proto3.JsonInput.OneofZeroString.ProtobufOutput
-Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull
-Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull
-Recommended.Proto3.JsonInput.StringEndsWithEscapeChar
-Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder
-Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate
-Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate
-Recommended.Proto3.JsonInput.Uint64FieldBeString.Validator
-Recommended.Proto3.ProtobufInput.OneofZeroBytes.JsonOutput
-Recommended.Proto3.ProtobufInput.OneofZeroBytes.ProtobufOutput
-Recommended.Proto3.ProtobufInput.OneofZeroString.JsonOutput
-Recommended.Proto3.ProtobufInput.OneofZeroString.ProtobufOutput
-Required.DurationProtoInputTooLarge.JsonOutput
-Required.DurationProtoInputTooSmall.JsonOutput
-Required.Proto3.JsonInput.Any.JsonOutput
-Required.Proto3.JsonInput.Any.ProtobufOutput
-Required.Proto3.JsonInput.AnyNested.JsonOutput
-Required.Proto3.JsonInput.AnyNested.ProtobufOutput
-Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput
-Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithDuration.JsonOutput
-Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput
-Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput
-Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithStruct.JsonOutput
-Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput
-Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput
-Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput
-Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput
-Required.Proto3.JsonInput.BoolMapField.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldInfinity.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldInfinity.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldMaxPositiveValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldMaxPositiveValue.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldMinNegativeValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldMinNegativeValue.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldNan.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldNegativeInfinity.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldNegativeInfinity.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldQuotedValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldQuotedValue.ProtobufOutput
-Required.Proto3.JsonInput.DurationMaxValue.JsonOutput
-Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput
-Required.Proto3.JsonInput.DurationMinValue.JsonOutput
-Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput
-Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput
-Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput
-Required.Proto3.JsonInput.EnumFieldNumericValueNonZero.JsonOutput
-Required.Proto3.JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput
-Required.Proto3.JsonInput.EnumFieldNumericValueZero.JsonOutput
-Required.Proto3.JsonInput.EnumFieldNumericValueZero.ProtobufOutput
-Required.Proto3.JsonInput.EnumFieldUnknownValue.Validator
-Required.Proto3.JsonInput.FieldMask.JsonOutput
-Required.Proto3.JsonInput.FieldMask.ProtobufOutput
-Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput
-Required.Proto3.JsonInput.FloatFieldInfinity.ProtobufOutput
-Required.Proto3.JsonInput.FloatFieldNan.JsonOutput
-Required.Proto3.JsonInput.FloatFieldNan.ProtobufOutput
-Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput
-Required.Proto3.JsonInput.FloatFieldNegativeInfinity.ProtobufOutput
-Required.Proto3.JsonInput.FloatFieldQuotedValue.JsonOutput
-Required.Proto3.JsonInput.FloatFieldQuotedValue.ProtobufOutput
-Required.Proto3.JsonInput.FloatFieldTooLarge
-Required.Proto3.JsonInput.FloatFieldTooSmall
-Required.Proto3.JsonInput.Int32FieldExponentialFormat.JsonOutput
-Required.Proto3.JsonInput.Int32FieldExponentialFormat.ProtobufOutput
-Required.Proto3.JsonInput.Int32FieldFloatTrailingZero.JsonOutput
-Required.Proto3.JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput
-Required.Proto3.JsonInput.Int32FieldMaxFloatValue.JsonOutput
-Required.Proto3.JsonInput.Int32FieldMaxFloatValue.ProtobufOutput
-Required.Proto3.JsonInput.Int32FieldMinFloatValue.JsonOutput
-Required.Proto3.JsonInput.Int32FieldMinFloatValue.ProtobufOutput
-Required.Proto3.JsonInput.Int32FieldStringValue.JsonOutput
-Required.Proto3.JsonInput.Int32FieldStringValue.ProtobufOutput
-Required.Proto3.JsonInput.Int32FieldStringValueEscaped.JsonOutput
-Required.Proto3.JsonInput.Int32FieldStringValueEscaped.ProtobufOutput
-Required.Proto3.JsonInput.Int64FieldMaxValue.JsonOutput
-Required.Proto3.JsonInput.Int64FieldMaxValue.ProtobufOutput
-Required.Proto3.JsonInput.Int64FieldMinValue.JsonOutput
-Required.Proto3.JsonInput.Int64FieldMinValue.ProtobufOutput
-Required.Proto3.JsonInput.MessageField.JsonOutput
-Required.Proto3.JsonInput.MessageField.ProtobufOutput
-Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput
-Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingMessagesGotInt
-Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt
-Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.StringFieldEscape.JsonOutput
-Required.Proto3.JsonInput.StringFieldEscape.ProtobufOutput
-Required.Proto3.JsonInput.StringFieldNotAString
-Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput
-Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput
-Required.Proto3.JsonInput.StringFieldUnicodeEscape.JsonOutput
-Required.Proto3.JsonInput.StringFieldUnicodeEscape.ProtobufOutput
-Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput
-Required.Proto3.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput
-Required.Proto3.JsonInput.Struct.JsonOutput
-Required.Proto3.JsonInput.Struct.ProtobufOutput
-Required.Proto3.JsonInput.Uint32FieldMaxFloatValue.JsonOutput
-Required.Proto3.JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput
-Required.Proto3.JsonInput.Uint64FieldMaxValue.JsonOutput
-Required.Proto3.JsonInput.Uint64FieldMaxValue.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptList.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptString.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput
-Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput
-Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput
-Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
-Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput
-Required.TimestampProtoInputTooLarge.JsonOutput
-Required.TimestampProtoInputTooSmall.JsonOutput

+ 0 - 225
conformance/failure_list_php_zts_c.txt

@@ -1,225 +0,0 @@
-Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput
-Recommended.FieldMaskPathsDontRoundTrip.JsonOutput
-Recommended.FieldMaskTooManyUnderscore.JsonOutput
-Recommended.JsonInput.BoolFieldIntegerOne
-Recommended.JsonInput.BoolFieldIntegerZero
-Recommended.JsonInput.DurationHas3FractionalDigits.Validator
-Recommended.JsonInput.DurationHas6FractionalDigits.Validator
-Recommended.JsonInput.DurationHas9FractionalDigits.Validator
-Recommended.JsonInput.DurationHasZeroFractionalDigit.Validator
-Recommended.JsonInput.Int64FieldBeString.Validator
-Recommended.JsonInput.OneofZeroBytes.JsonOutput
-Recommended.JsonInput.OneofZeroBytes.ProtobufOutput
-Recommended.JsonInput.OneofZeroDouble.JsonOutput
-Recommended.JsonInput.OneofZeroDouble.ProtobufOutput
-Recommended.JsonInput.OneofZeroFloat.JsonOutput
-Recommended.JsonInput.OneofZeroFloat.ProtobufOutput
-Recommended.JsonInput.OneofZeroString.JsonOutput
-Recommended.JsonInput.OneofZeroString.ProtobufOutput
-Recommended.JsonInput.OneofZeroUint32.JsonOutput
-Recommended.JsonInput.OneofZeroUint32.ProtobufOutput
-Recommended.JsonInput.OneofZeroUint64.JsonOutput
-Recommended.JsonInput.OneofZeroUint64.ProtobufOutput
-Recommended.JsonInput.StringEndsWithEscapeChar
-Recommended.JsonInput.StringFieldSurrogateInWrongOrder
-Recommended.JsonInput.StringFieldUnpairedHighSurrogate
-Recommended.JsonInput.StringFieldUnpairedLowSurrogate
-Recommended.JsonInput.TimestampHas3FractionalDigits.Validator
-Recommended.JsonInput.TimestampHas6FractionalDigits.Validator
-Recommended.JsonInput.TimestampHas9FractionalDigits.Validator
-Recommended.JsonInput.TimestampHasZeroFractionalDigit.Validator
-Recommended.JsonInput.TimestampZeroNormalized.Validator
-Recommended.JsonInput.Uint64FieldBeString.Validator
-Recommended.ProtobufInput.OneofZeroBytes.JsonOutput
-Recommended.ProtobufInput.OneofZeroBytes.ProtobufOutput
-Recommended.ProtobufInput.OneofZeroString.JsonOutput
-Recommended.ProtobufInput.OneofZeroString.ProtobufOutput
-Required.DurationProtoInputTooLarge.JsonOutput
-Required.DurationProtoInputTooSmall.JsonOutput
-Required.JsonInput.AllFieldAcceptNull.ProtobufOutput
-Required.JsonInput.Any.JsonOutput
-Required.JsonInput.Any.ProtobufOutput
-Required.JsonInput.AnyNested.JsonOutput
-Required.JsonInput.AnyNested.ProtobufOutput
-Required.JsonInput.AnyUnorderedTypeTag.JsonOutput
-Required.JsonInput.AnyUnorderedTypeTag.ProtobufOutput
-Required.JsonInput.AnyWithDuration.JsonOutput
-Required.JsonInput.AnyWithDuration.ProtobufOutput
-Required.JsonInput.AnyWithFieldMask.JsonOutput
-Required.JsonInput.AnyWithFieldMask.ProtobufOutput
-Required.JsonInput.AnyWithInt32ValueWrapper.JsonOutput
-Required.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput
-Required.JsonInput.AnyWithStruct.JsonOutput
-Required.JsonInput.AnyWithStruct.ProtobufOutput
-Required.JsonInput.AnyWithTimestamp.JsonOutput
-Required.JsonInput.AnyWithTimestamp.ProtobufOutput
-Required.JsonInput.AnyWithValueForInteger.JsonOutput
-Required.JsonInput.AnyWithValueForInteger.ProtobufOutput
-Required.JsonInput.AnyWithValueForJsonObject.JsonOutput
-Required.JsonInput.AnyWithValueForJsonObject.ProtobufOutput
-Required.JsonInput.BoolFieldFalse.ProtobufOutput
-Required.JsonInput.BoolMapField.JsonOutput
-Required.JsonInput.DoubleFieldInfinity.JsonOutput
-Required.JsonInput.DoubleFieldInfinity.ProtobufOutput
-Required.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
-Required.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput
-Required.JsonInput.DoubleFieldMaxPositiveValue.JsonOutput
-Required.JsonInput.DoubleFieldMaxPositiveValue.ProtobufOutput
-Required.JsonInput.DoubleFieldMinNegativeValue.JsonOutput
-Required.JsonInput.DoubleFieldMinNegativeValue.ProtobufOutput
-Required.JsonInput.DoubleFieldMinPositiveValue.JsonOutput
-Required.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput
-Required.JsonInput.DoubleFieldNan.JsonOutput
-Required.JsonInput.DoubleFieldNan.ProtobufOutput
-Required.JsonInput.DoubleFieldNegativeInfinity.JsonOutput
-Required.JsonInput.DoubleFieldNegativeInfinity.ProtobufOutput
-Required.JsonInput.DoubleFieldQuotedValue.JsonOutput
-Required.JsonInput.DoubleFieldQuotedValue.ProtobufOutput
-Required.JsonInput.DurationMaxValue.JsonOutput
-Required.JsonInput.DurationMaxValue.ProtobufOutput
-Required.JsonInput.DurationMinValue.JsonOutput
-Required.JsonInput.DurationMinValue.ProtobufOutput
-Required.JsonInput.DurationRepeatedValue.JsonOutput
-Required.JsonInput.DurationRepeatedValue.ProtobufOutput
-Required.JsonInput.EnumField.ProtobufOutput
-Required.JsonInput.EnumFieldNumericValueNonZero.JsonOutput
-Required.JsonInput.EnumFieldNumericValueNonZero.ProtobufOutput
-Required.JsonInput.EnumFieldNumericValueZero.JsonOutput
-Required.JsonInput.EnumFieldNumericValueZero.ProtobufOutput
-Required.JsonInput.EnumFieldUnknownValue.Validator
-Required.JsonInput.FieldMask.JsonOutput
-Required.JsonInput.FieldMask.ProtobufOutput
-Required.JsonInput.FloatFieldInfinity.JsonOutput
-Required.JsonInput.FloatFieldInfinity.ProtobufOutput
-Required.JsonInput.FloatFieldNan.JsonOutput
-Required.JsonInput.FloatFieldNan.ProtobufOutput
-Required.JsonInput.FloatFieldNegativeInfinity.JsonOutput
-Required.JsonInput.FloatFieldNegativeInfinity.ProtobufOutput
-Required.JsonInput.FloatFieldQuotedValue.JsonOutput
-Required.JsonInput.FloatFieldQuotedValue.ProtobufOutput
-Required.JsonInput.FloatFieldTooLarge
-Required.JsonInput.FloatFieldTooSmall
-Required.JsonInput.Int32FieldExponentialFormat.JsonOutput
-Required.JsonInput.Int32FieldExponentialFormat.ProtobufOutput
-Required.JsonInput.Int32FieldFloatTrailingZero.JsonOutput
-Required.JsonInput.Int32FieldFloatTrailingZero.ProtobufOutput
-Required.JsonInput.Int32FieldMaxFloatValue.JsonOutput
-Required.JsonInput.Int32FieldMaxFloatValue.ProtobufOutput
-Required.JsonInput.Int32FieldMinFloatValue.JsonOutput
-Required.JsonInput.Int32FieldMinFloatValue.ProtobufOutput
-Required.JsonInput.Int32FieldStringValue.JsonOutput
-Required.JsonInput.Int32FieldStringValue.ProtobufOutput
-Required.JsonInput.Int32FieldStringValueEscaped.JsonOutput
-Required.JsonInput.Int32FieldStringValueEscaped.ProtobufOutput
-Required.JsonInput.Int32MapEscapedKey.JsonOutput
-Required.JsonInput.Int32MapEscapedKey.ProtobufOutput
-Required.JsonInput.Int32MapField.JsonOutput
-Required.JsonInput.Int32MapField.ProtobufOutput
-Required.JsonInput.Int64FieldMaxValue.JsonOutput
-Required.JsonInput.Int64FieldMaxValue.ProtobufOutput
-Required.JsonInput.Int64FieldMinValue.JsonOutput
-Required.JsonInput.Int64FieldMinValue.ProtobufOutput
-Required.JsonInput.Int64MapEscapedKey.JsonOutput
-Required.JsonInput.Int64MapEscapedKey.ProtobufOutput
-Required.JsonInput.Int64MapField.JsonOutput
-Required.JsonInput.Int64MapField.ProtobufOutput
-Required.JsonInput.MessageField.JsonOutput
-Required.JsonInput.MessageField.ProtobufOutput
-Required.JsonInput.MessageMapField.JsonOutput
-Required.JsonInput.MessageMapField.ProtobufOutput
-Required.JsonInput.MessageRepeatedField.JsonOutput
-Required.JsonInput.MessageRepeatedField.ProtobufOutput
-Required.JsonInput.OptionalBoolWrapper.JsonOutput
-Required.JsonInput.OptionalBoolWrapper.ProtobufOutput
-Required.JsonInput.OptionalBytesWrapper.JsonOutput
-Required.JsonInput.OptionalBytesWrapper.ProtobufOutput
-Required.JsonInput.OptionalDoubleWrapper.JsonOutput
-Required.JsonInput.OptionalDoubleWrapper.ProtobufOutput
-Required.JsonInput.OptionalFloatWrapper.JsonOutput
-Required.JsonInput.OptionalFloatWrapper.ProtobufOutput
-Required.JsonInput.OptionalInt32Wrapper.JsonOutput
-Required.JsonInput.OptionalInt32Wrapper.ProtobufOutput
-Required.JsonInput.OptionalInt64Wrapper.JsonOutput
-Required.JsonInput.OptionalInt64Wrapper.ProtobufOutput
-Required.JsonInput.OptionalStringWrapper.JsonOutput
-Required.JsonInput.OptionalStringWrapper.ProtobufOutput
-Required.JsonInput.OptionalUint32Wrapper.JsonOutput
-Required.JsonInput.OptionalUint32Wrapper.ProtobufOutput
-Required.JsonInput.OptionalUint64Wrapper.JsonOutput
-Required.JsonInput.OptionalUint64Wrapper.ProtobufOutput
-Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput
-Required.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput
-Required.JsonInput.PrimitiveRepeatedField.JsonOutput
-Required.JsonInput.PrimitiveRepeatedField.ProtobufOutput
-Required.JsonInput.RepeatedBoolWrapper.JsonOutput
-Required.JsonInput.RepeatedBoolWrapper.ProtobufOutput
-Required.JsonInput.RepeatedBytesWrapper.JsonOutput
-Required.JsonInput.RepeatedBytesWrapper.ProtobufOutput
-Required.JsonInput.RepeatedDoubleWrapper.JsonOutput
-Required.JsonInput.RepeatedDoubleWrapper.ProtobufOutput
-Required.JsonInput.RepeatedFieldWrongElementTypeExpectingStringsGotInt
-Required.JsonInput.RepeatedFloatWrapper.JsonOutput
-Required.JsonInput.RepeatedFloatWrapper.ProtobufOutput
-Required.JsonInput.RepeatedInt32Wrapper.JsonOutput
-Required.JsonInput.RepeatedInt32Wrapper.ProtobufOutput
-Required.JsonInput.RepeatedInt64Wrapper.JsonOutput
-Required.JsonInput.RepeatedInt64Wrapper.ProtobufOutput
-Required.JsonInput.RepeatedStringWrapper.JsonOutput
-Required.JsonInput.RepeatedStringWrapper.ProtobufOutput
-Required.JsonInput.RepeatedUint32Wrapper.JsonOutput
-Required.JsonInput.RepeatedUint32Wrapper.ProtobufOutput
-Required.JsonInput.RepeatedUint64Wrapper.JsonOutput
-Required.JsonInput.RepeatedUint64Wrapper.ProtobufOutput
-Required.JsonInput.StringFieldEscape.JsonOutput
-Required.JsonInput.StringFieldEscape.ProtobufOutput
-Required.JsonInput.StringFieldNotAString
-Required.JsonInput.StringFieldSurrogatePair.JsonOutput
-Required.JsonInput.StringFieldSurrogatePair.ProtobufOutput
-Required.JsonInput.StringFieldUnicodeEscape.JsonOutput
-Required.JsonInput.StringFieldUnicodeEscape.ProtobufOutput
-Required.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.JsonOutput
-Required.JsonInput.StringFieldUnicodeEscapeWithLowercaseHexLetters.ProtobufOutput
-Required.JsonInput.Struct.JsonOutput
-Required.JsonInput.Struct.ProtobufOutput
-Required.JsonInput.TimestampMaxValue.JsonOutput
-Required.JsonInput.TimestampMaxValue.ProtobufOutput
-Required.JsonInput.TimestampMinValue.JsonOutput
-Required.JsonInput.TimestampMinValue.ProtobufOutput
-Required.JsonInput.TimestampRepeatedValue.JsonOutput
-Required.JsonInput.TimestampRepeatedValue.ProtobufOutput
-Required.JsonInput.TimestampWithNegativeOffset.JsonOutput
-Required.JsonInput.TimestampWithNegativeOffset.ProtobufOutput
-Required.JsonInput.TimestampWithPositiveOffset.JsonOutput
-Required.JsonInput.TimestampWithPositiveOffset.ProtobufOutput
-Required.JsonInput.Uint32FieldMaxFloatValue.JsonOutput
-Required.JsonInput.Uint32FieldMaxFloatValue.ProtobufOutput
-Required.JsonInput.Uint32MapField.JsonOutput
-Required.JsonInput.Uint32MapField.ProtobufOutput
-Required.JsonInput.Uint64FieldMaxValue.JsonOutput
-Required.JsonInput.Uint64FieldMaxValue.ProtobufOutput
-Required.JsonInput.Uint64MapField.JsonOutput
-Required.JsonInput.Uint64MapField.ProtobufOutput
-Required.JsonInput.ValueAcceptBool.JsonOutput
-Required.JsonInput.ValueAcceptBool.ProtobufOutput
-Required.JsonInput.ValueAcceptFloat.JsonOutput
-Required.JsonInput.ValueAcceptFloat.ProtobufOutput
-Required.JsonInput.ValueAcceptInteger.JsonOutput
-Required.JsonInput.ValueAcceptInteger.ProtobufOutput
-Required.JsonInput.ValueAcceptList.JsonOutput
-Required.JsonInput.ValueAcceptList.ProtobufOutput
-Required.JsonInput.ValueAcceptNull.JsonOutput
-Required.JsonInput.ValueAcceptNull.ProtobufOutput
-Required.JsonInput.ValueAcceptObject.JsonOutput
-Required.JsonInput.ValueAcceptObject.ProtobufOutput
-Required.JsonInput.ValueAcceptString.JsonOutput
-Required.JsonInput.ValueAcceptString.ProtobufOutput
-Required.JsonInput.WrapperTypesWithNullValue.ProtobufOutput
-Required.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput
-Required.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput
-Required.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
-Required.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput
-Required.ProtobufInput.RepeatedScalarSelectsLast.FIXED32.ProtobufOutput
-Required.ProtobufInput.RepeatedScalarSelectsLast.FIXED64.ProtobufOutput
-Required.ProtobufInput.RepeatedScalarSelectsLast.UINT64.ProtobufOutput
-Required.TimestampProtoInputTooLarge.JsonOutput
-Required.TimestampProtoInputTooSmall.JsonOutput

+ 0 - 2
conformance/failure_list_python-post26.txt

@@ -1,2 +0,0 @@
-JsonInput.StringFieldSurrogateInWrongOrder
-JsonInput.StringFieldUnpairedHighSurrogate

+ 0 - 21
conformance/failure_list_python.txt

@@ -1,21 +0,0 @@
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput
-Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted
-Required.Proto3.JsonInput.DoubleFieldTooSmall
-Required.Proto3.JsonInput.FloatFieldTooLarge
-Required.Proto3.JsonInput.FloatFieldTooSmall
-Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool
-Required.Proto3.JsonInput.TimestampJsonInputLowercaseT
-Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_0
-Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_1
-Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_2
-Required.Proto2.ProtobufInput.IllegalZeroFieldNum_Case_3
-Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_0
-Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_1
-Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_2
-Required.Proto3.ProtobufInput.IllegalZeroFieldNum_Case_3

+ 0 - 54
conformance/failure_list_python_cpp.txt

@@ -1,54 +0,0 @@
-# This is the list of conformance tests that are known to fail for the
-# Python/C++ implementation right now.  These should be fixed.
-#
-# By listing them here we can keep tabs on which ones are failing and be sure
-# that we don't introduce regressions in other tests.
-#
-# TODO(haberman): insert links to corresponding bugs tracking the issue.
-# Should we use GitHub issues or the Google-internal bug tracker?
-
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput
-Recommended.Proto3.JsonInput.DoubleFieldInfinityNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldNanNotQuoted
-Recommended.Proto3.JsonInput.DoubleFieldNegativeInfinityNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldInfinityNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldNanNotQuoted
-Recommended.Proto3.JsonInput.FloatFieldNegativeInfinityNotQuoted
-Required.Proto3.JsonInput.DoubleFieldTooSmall
-Required.Proto3.JsonInput.FloatFieldTooLarge
-Required.Proto3.JsonInput.FloatFieldTooSmall
-Required.Proto3.JsonInput.RepeatedFieldWrongElementTypeExpectingIntegersGotBool
-Required.Proto3.JsonInput.TimestampJsonInputLowercaseT
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
-Required.Proto3.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.BOOL
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.DOUBLE
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.ENUM
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.FIXED64
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.FLOAT
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.INT64
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.SFIXED64
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.SINT64
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT32
-Required.Proto3.ProtobufInput.PrematureEofInPackedField.UINT64
-Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownNonRepeatedValue.MESSAGE
-Required.Proto2.ProtobufInput.PrematureEofInDelimitedDataForKnownRepeatedValue.MESSAGE
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.BOOL
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.DOUBLE
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.ENUM
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.FIXED64
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.FLOAT
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.INT64
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.SFIXED64
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.SINT64
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT32
-Required.Proto2.ProtobufInput.PrematureEofInPackedField.UINT64

+ 0 - 135
conformance/failure_list_ruby.txt

@@ -1,135 +0,0 @@
-Recommended.FieldMaskNumbersDontRoundTrip.JsonOutput
-Recommended.FieldMaskPathsDontRoundTrip.JsonOutput
-Recommended.FieldMaskTooManyUnderscore.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.JsonOutput
-Recommended.Proto3.JsonInput.BytesFieldBase64Url.ProtobufOutput
-Recommended.Proto3.JsonInput.DurationHas3FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHas6FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHas9FractionalDigits.Validator
-Recommended.Proto3.JsonInput.DurationHasZeroFractionalDigit.Validator
-Recommended.Proto3.JsonInput.Int64FieldBeString.Validator
-Recommended.Proto3.JsonInput.MapFieldValueIsNull
-Recommended.Proto3.JsonInput.RepeatedFieldMessageElementIsNull
-Recommended.Proto3.JsonInput.RepeatedFieldPrimitiveElementIsNull
-Recommended.Proto3.JsonInput.StringEndsWithEscapeChar
-Recommended.Proto3.JsonInput.StringFieldSurrogateInWrongOrder
-Recommended.Proto3.JsonInput.StringFieldUnpairedHighSurrogate
-Recommended.Proto3.JsonInput.StringFieldUnpairedLowSurrogate
-Recommended.Proto3.JsonInput.TimestampHas3FractionalDigits.Validator
-Recommended.Proto3.JsonInput.TimestampHas6FractionalDigits.Validator
-Recommended.Proto3.JsonInput.TimestampHas9FractionalDigits.Validator
-Recommended.Proto3.JsonInput.TimestampHasZeroFractionalDigit.Validator
-Recommended.Proto3.JsonInput.TimestampZeroNormalized.Validator
-Recommended.Proto3.JsonInput.Uint64FieldBeString.Validator
-Required.DurationProtoInputTooLarge.JsonOutput
-Required.DurationProtoInputTooSmall.JsonOutput
-Required.Proto3.JsonInput.Any.JsonOutput
-Required.Proto3.JsonInput.Any.ProtobufOutput
-Required.Proto3.JsonInput.AnyNested.JsonOutput
-Required.Proto3.JsonInput.AnyNested.ProtobufOutput
-Required.Proto3.JsonInput.AnyUnorderedTypeTag.JsonOutput
-Required.Proto3.JsonInput.AnyUnorderedTypeTag.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithDuration.JsonOutput
-Required.Proto3.JsonInput.AnyWithDuration.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithFieldMask.JsonOutput
-Required.Proto3.JsonInput.AnyWithFieldMask.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.JsonOutput
-Required.Proto3.JsonInput.AnyWithInt32ValueWrapper.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithStruct.JsonOutput
-Required.Proto3.JsonInput.AnyWithStruct.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithTimestamp.JsonOutput
-Required.Proto3.JsonInput.AnyWithTimestamp.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithValueForInteger.JsonOutput
-Required.Proto3.JsonInput.AnyWithValueForInteger.ProtobufOutput
-Required.Proto3.JsonInput.AnyWithValueForJsonObject.JsonOutput
-Required.Proto3.JsonInput.AnyWithValueForJsonObject.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldMaxNegativeValue.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.JsonOutput
-Required.Proto3.JsonInput.DoubleFieldMinPositiveValue.ProtobufOutput
-Required.Proto3.JsonInput.DoubleFieldNan.JsonOutput
-Required.Proto3.JsonInput.DurationMaxValue.JsonOutput
-Required.Proto3.JsonInput.DurationMaxValue.ProtobufOutput
-Required.Proto3.JsonInput.DurationMinValue.JsonOutput
-Required.Proto3.JsonInput.DurationMinValue.ProtobufOutput
-Required.Proto3.JsonInput.DurationRepeatedValue.JsonOutput
-Required.Proto3.JsonInput.DurationRepeatedValue.ProtobufOutput
-Required.Proto3.JsonInput.FieldMask.JsonOutput
-Required.Proto3.JsonInput.FieldMask.ProtobufOutput
-Required.Proto3.JsonInput.FloatFieldInfinity.JsonOutput
-Required.Proto3.JsonInput.FloatFieldNan.JsonOutput
-Required.Proto3.JsonInput.FloatFieldNegativeInfinity.JsonOutput
-Required.Proto3.JsonInput.OneofFieldDuplicate
-Required.Proto3.JsonInput.OptionalBoolWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalBoolWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalBytesWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalBytesWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalDoubleWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalDoubleWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalFloatWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalFloatWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalInt32Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalInt32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalInt64Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalInt64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalStringWrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalStringWrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalUint32Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalUint32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalUint64Wrapper.JsonOutput
-Required.Proto3.JsonInput.OptionalUint64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.JsonOutput
-Required.Proto3.JsonInput.OptionalWrapperTypesWithNonDefaultValue.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedBoolWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedBoolWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedBytesWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedBytesWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedDoubleWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedDoubleWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedFloatWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedFloatWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedInt32Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedInt32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedInt64Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedInt64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedStringWrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedStringWrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedUint32Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedUint32Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.RepeatedUint64Wrapper.JsonOutput
-Required.Proto3.JsonInput.RepeatedUint64Wrapper.ProtobufOutput
-Required.Proto3.JsonInput.StringFieldSurrogatePair.JsonOutput
-Required.Proto3.JsonInput.StringFieldSurrogatePair.ProtobufOutput
-Required.Proto3.JsonInput.Struct.JsonOutput
-Required.Proto3.JsonInput.Struct.ProtobufOutput
-Required.Proto3.JsonInput.TimestampMaxValue.JsonOutput
-Required.Proto3.JsonInput.TimestampMaxValue.ProtobufOutput
-Required.Proto3.JsonInput.TimestampMinValue.JsonOutput
-Required.Proto3.JsonInput.TimestampMinValue.ProtobufOutput
-Required.Proto3.JsonInput.TimestampRepeatedValue.JsonOutput
-Required.Proto3.JsonInput.TimestampRepeatedValue.ProtobufOutput
-Required.Proto3.JsonInput.TimestampWithNegativeOffset.JsonOutput
-Required.Proto3.JsonInput.TimestampWithNegativeOffset.ProtobufOutput
-Required.Proto3.JsonInput.TimestampWithPositiveOffset.JsonOutput
-Required.Proto3.JsonInput.TimestampWithPositiveOffset.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptBool.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptBool.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptFloat.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptFloat.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptInteger.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptInteger.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptList.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptList.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptNull.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptNull.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptObject.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptObject.ProtobufOutput
-Required.Proto3.JsonInput.ValueAcceptString.JsonOutput
-Required.Proto3.JsonInput.ValueAcceptString.ProtobufOutput
-Required.Proto3.ProtobufInput.DoubleFieldNormalizeQuietNan.JsonOutput
-Required.Proto3.ProtobufInput.DoubleFieldNormalizeSignalingNan.JsonOutput
-Required.Proto3.ProtobufInput.FloatFieldNormalizeQuietNan.JsonOutput
-Required.Proto3.ProtobufInput.FloatFieldNormalizeSignalingNan.JsonOutput
-Required.Proto3.ProtobufInput.ValidDataRepeated.FLOAT.JsonOutput
-Required.TimestampProtoInputTooLarge.JsonOutput
-Required.TimestampProtoInputTooSmall.JsonOutput

+ 0 - 2075
conformance/third_party/jsoncpp/json.h

@@ -1,2075 +0,0 @@
-/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).
-/// It is intended to be used with #include "json/json.h"
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: LICENSE
-// //////////////////////////////////////////////////////////////////////
-
-/*
-The JsonCpp library's source code, including accompanying documentation, 
-tests and demonstration applications, are licensed under the following
-conditions...
-
-The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
-jurisdictions which recognize such a disclaimer. In such jurisdictions, 
-this software is released into the Public Domain.
-
-In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
-2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
-released under the terms of the MIT License (see below).
-
-In jurisdictions which recognize Public Domain property, the user of this 
-software may choose to accept it either as 1) Public Domain, 2) under the 
-conditions of the MIT License (see below), or 3) under the terms of dual 
-Public Domain/MIT License conditions described here, as they choose.
-
-The MIT License is about as close to Public Domain as a license can get, and is
-described in clear, concise terms at:
-
-   http://en.wikipedia.org/wiki/MIT_License
-   
-The full text of the MIT License follows:
-
-========================================================================
-Copyright (c) 2007-2010 Baptiste Lepilleur
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use, copy,
-modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-========================================================================
-(END LICENSE TEXT)
-
-The MIT license is compatible with both the GPL and commercial
-software, affording one all of the rights of Public Domain with the
-minor nuisance of being required to keep the above copyright notice
-and license text in the source code. Note also that by accepting the
-Public Domain "license" you can re-license your copy using whatever
-license you like.
-
-*/
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: LICENSE
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-#ifndef JSON_AMALGATED_H_INCLUDED
-# define JSON_AMALGATED_H_INCLUDED
-/// If defined, indicates that the source file is amalgated
-/// to prevent private header inclusion.
-#define JSON_IS_AMALGAMATION
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/version.h
-// //////////////////////////////////////////////////////////////////////
-
-// DO NOT EDIT. This file (and "version") is generated by CMake.
-// Run CMake configure step to update it.
-#ifndef JSON_VERSION_H_INCLUDED
-# define JSON_VERSION_H_INCLUDED
-
-# define JSONCPP_VERSION_STRING "1.6.5"
-# define JSONCPP_VERSION_MAJOR 1
-# define JSONCPP_VERSION_MINOR 6
-# define JSONCPP_VERSION_PATCH 5
-# define JSONCPP_VERSION_QUALIFIER
-# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
-
-#endif // JSON_VERSION_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/version.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/config.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_CONFIG_H_INCLUDED
-#define JSON_CONFIG_H_INCLUDED
-
-/// If defined, indicates that json library is embedded in CppTL library.
-//# define JSON_IN_CPPTL 1
-
-/// If defined, indicates that json may leverage CppTL library
-//#  define JSON_USE_CPPTL 1
-/// If defined, indicates that cpptl vector based map should be used instead of
-/// std::map
-/// as Value container.
-//#  define JSON_USE_CPPTL_SMALLMAP 1
-
-// If non-zero, the library uses exceptions to report bad input instead of C
-// assertion macros. The default is to use exceptions.
-#ifndef JSON_USE_EXCEPTION
-#define JSON_USE_EXCEPTION 1
-#endif
-
-/// If defined, indicates that the source file is amalgated
-/// to prevent private header inclusion.
-/// Remarks: it is automatically defined in the generated amalgated header.
-// #define JSON_IS_AMALGAMATION
-
-#ifdef JSON_IN_CPPTL
-#include <cpptl/config.h>
-#ifndef JSON_USE_CPPTL
-#define JSON_USE_CPPTL 1
-#endif
-#endif
-
-#ifdef JSON_IN_CPPTL
-#define JSON_API CPPTL_API
-#elif defined(JSON_DLL_BUILD)
-#if defined(_MSC_VER)
-#define JSON_API __declspec(dllexport)
-#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
-#endif // if defined(_MSC_VER)
-#elif defined(JSON_DLL)
-#if defined(_MSC_VER)
-#define JSON_API __declspec(dllimport)
-#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
-#endif // if defined(_MSC_VER)
-#endif // ifdef JSON_IN_CPPTL
-#if !defined(JSON_API)
-#define JSON_API
-#endif
-
-// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
-// integer
-// Storages, and 64 bits integer support is disabled.
-// #define JSON_NO_INT64 1
-
-#if defined(_MSC_VER) // MSVC
-#  if _MSC_VER <= 1200 // MSVC 6
-    // Microsoft Visual Studio 6 only support conversion from __int64 to double
-    // (no conversion from unsigned __int64).
-#    define JSON_USE_INT64_DOUBLE_CONVERSION 1
-    // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
-    // characters in the debug information)
-    // All projects I've ever seen with VS6 were using this globally (not bothering
-    // with pragma push/pop).
-#    pragma warning(disable : 4786)
-#  endif // MSVC 6
-
-#  if _MSC_VER >= 1500 // MSVC 2008
-    /// Indicates that the following function is deprecated.
-#    define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
-#  endif
-
-#endif // defined(_MSC_VER)
-
-
-#ifndef JSON_HAS_RVALUE_REFERENCES
-
-#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010
-#define JSON_HAS_RVALUE_REFERENCES 1
-#endif // MSVC >= 2010
-
-#ifdef __clang__
-#if __has_feature(cxx_rvalue_references)
-#define JSON_HAS_RVALUE_REFERENCES 1
-#endif  // has_feature
-
-#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
-#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
-#define JSON_HAS_RVALUE_REFERENCES 1
-#endif  // GXX_EXPERIMENTAL
-
-#endif // __clang__ || __GNUC__
-
-#endif // not defined JSON_HAS_RVALUE_REFERENCES
-
-#ifndef JSON_HAS_RVALUE_REFERENCES
-#define JSON_HAS_RVALUE_REFERENCES 0
-#endif
-
-#ifdef __clang__
-#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
-#  if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
-#    define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
-#  elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-#    define JSONCPP_DEPRECATED(message)  __attribute__((__deprecated__))
-#  endif  // GNUC version
-#endif // __clang__ || __GNUC__
-
-#if !defined(JSONCPP_DEPRECATED)
-#define JSONCPP_DEPRECATED(message)
-#endif // if !defined(JSONCPP_DEPRECATED)
-
-namespace Json {
-typedef int Int;
-typedef unsigned int UInt;
-#if defined(JSON_NO_INT64)
-typedef int LargestInt;
-typedef unsigned int LargestUInt;
-#undef JSON_HAS_INT64
-#else                 // if defined(JSON_NO_INT64)
-// For Microsoft Visual use specific types as long long is not supported
-#if defined(_MSC_VER) // Microsoft Visual Studio
-typedef __int64 Int64;
-typedef unsigned __int64 UInt64;
-#else                 // if defined(_MSC_VER) // Other platforms, use long long
-typedef long long int Int64;
-typedef unsigned long long int UInt64;
-#endif // if defined(_MSC_VER)
-typedef Int64 LargestInt;
-typedef UInt64 LargestUInt;
-#define JSON_HAS_INT64
-#endif // if defined(JSON_NO_INT64)
-} // end namespace Json
-
-#endif // JSON_CONFIG_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/config.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/forwards.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_FORWARDS_H_INCLUDED
-#define JSON_FORWARDS_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "config.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-namespace Json {
-
-// writer.h
-class FastWriter;
-class StyledWriter;
-
-// reader.h
-class Reader;
-
-// features.h
-class Features;
-
-// value.h
-typedef unsigned int ArrayIndex;
-class StaticString;
-class Path;
-class PathArgument;
-class Value;
-class ValueIteratorBase;
-class ValueIterator;
-class ValueConstIterator;
-
-} // namespace Json
-
-#endif // JSON_FORWARDS_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/forwards.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/features.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_FEATURES_H_INCLUDED
-#define CPPTL_JSON_FEATURES_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "forwards.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-namespace Json {
-
-/** \brief Configuration passed to reader and writer.
- * This configuration object can be used to force the Reader or Writer
- * to behave in a standard conforming way.
- */
-class JSON_API Features {
-public:
-  /** \brief A configuration that allows all features and assumes all strings
-   * are UTF-8.
-   * - C & C++ comments are allowed
-   * - Root object can be any JSON value
-   * - Assumes Value strings are encoded in UTF-8
-   */
-  static Features all();
-
-  /** \brief A configuration that is strictly compatible with the JSON
-   * specification.
-   * - Comments are forbidden.
-   * - Root object must be either an array or an object value.
-   * - Assumes Value strings are encoded in UTF-8
-   */
-  static Features strictMode();
-
-  /** \brief Initialize the configuration like JsonConfig::allFeatures;
-   */
-  Features();
-
-  /// \c true if comments are allowed. Default: \c true.
-  bool allowComments_;
-
-  /// \c true if root must be either an array or an object value. Default: \c
-  /// false.
-  bool strictRoot_;
-
-  /// \c true if dropped null placeholders are allowed. Default: \c false.
-  bool allowDroppedNullPlaceholders_;
-
-  /// \c true if numeric object key are allowed. Default: \c false.
-  bool allowNumericKeys_;
-};
-
-} // namespace Json
-
-#endif // CPPTL_JSON_FEATURES_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/features.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/value.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_H_INCLUDED
-#define CPPTL_JSON_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "forwards.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <string>
-#include <vector>
-#include <exception>
-
-#ifndef JSON_USE_CPPTL_SMALLMAP
-#include <map>
-#else
-#include <cpptl/smallmap.h>
-#endif
-#ifdef JSON_USE_CPPTL
-#include <cpptl/forwards.h>
-#endif
-
-// Disable warning C4251: <data member>: <type> needs to have dll-interface to
-// be used by...
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(push)
-#pragma warning(disable : 4251)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-/** \brief JSON (JavaScript Object Notation).
- */
-namespace Json {
-
-/** Base class for all exceptions we throw.
- *
- * We use nothing but these internally. Of course, STL can throw others.
- */
-class JSON_API Exception : public std::exception {
-public:
-  Exception(std::string const& msg);
-  ~Exception() throw() override;
-  char const* what() const throw() override;
-protected:
-  std::string msg_;
-};
-
-/** Exceptions which the user cannot easily avoid.
- *
- * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input
- * 
- * \remark derived from Json::Exception
- */
-class JSON_API RuntimeError : public Exception {
-public:
-  RuntimeError(std::string const& msg);
-};
-
-/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
- *
- * These are precondition-violations (user bugs) and internal errors (our bugs).
- * 
- * \remark derived from Json::Exception
- */
-class JSON_API LogicError : public Exception {
-public:
-  LogicError(std::string const& msg);
-};
-
-/// used internally
-void throwRuntimeError(std::string const& msg);
-/// used internally
-void throwLogicError(std::string const& msg);
-
-/** \brief Type of the value held by a Value object.
- */
-enum ValueType {
-  nullValue = 0, ///< 'null' value
-  intValue,      ///< signed integer value
-  uintValue,     ///< unsigned integer value
-  realValue,     ///< double value
-  stringValue,   ///< UTF-8 string value
-  booleanValue,  ///< bool value
-  arrayValue,    ///< array value (ordered list)
-  objectValue    ///< object value (collection of name/value pairs).
-};
-
-enum CommentPlacement {
-  commentBefore = 0,      ///< a comment placed on the line before a value
-  commentAfterOnSameLine, ///< a comment just after a value on the same line
-  commentAfter, ///< a comment on the line after a value (only make sense for
-  /// root value)
-  numberOfCommentPlacement
-};
-
-//# ifdef JSON_USE_CPPTL
-//   typedef CppTL::AnyEnumerator<const char *> EnumMemberNames;
-//   typedef CppTL::AnyEnumerator<const Value &> EnumValues;
-//# endif
-
-/** \brief Lightweight wrapper to tag static string.
- *
- * Value constructor and objectValue member assignement takes advantage of the
- * StaticString and avoid the cost of string duplication when storing the
- * string or the member name.
- *
- * Example of usage:
- * \code
- * Json::Value aValue( StaticString("some text") );
- * Json::Value object;
- * static const StaticString code("code");
- * object[code] = 1234;
- * \endcode
- */
-class JSON_API StaticString {
-public:
-  explicit StaticString(const char* czstring) : c_str_(czstring) {}
-
-  operator const char*() const { return c_str_; }
-
-  const char* c_str() const { return c_str_; }
-
-private:
-  const char* c_str_;
-};
-
-/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
- *
- * This class is a discriminated union wrapper that can represents a:
- * - signed integer [range: Value::minInt - Value::maxInt]
- * - unsigned integer (range: 0 - Value::maxUInt)
- * - double
- * - UTF-8 string
- * - boolean
- * - 'null'
- * - an ordered list of Value
- * - collection of name/value pairs (javascript object)
- *
- * The type of the held value is represented by a #ValueType and
- * can be obtained using type().
- *
- * Values of an #objectValue or #arrayValue can be accessed using operator[]()
- * methods.
- * Non-const methods will automatically create the a #nullValue element
- * if it does not exist.
- * The sequence of an #arrayValue will be automatically resized and initialized
- * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
- *
- * The get() methods can be used to obtain default value in the case the
- * required element does not exist.
- *
- * It is possible to iterate over the list of a #objectValue values using
- * the getMemberNames() method.
- *
- * \note #Value string-length fit in size_t, but keys must be < 2^30.
- * (The reason is an implementation detail.) A #CharReader will raise an
- * exception if a bound is exceeded to avoid security holes in your app,
- * but the Value API does *not* check bounds. That is the responsibility
- * of the caller.
- */
-class JSON_API Value {
-  friend class ValueIteratorBase;
-public:
-  typedef std::vector<std::string> Members;
-  typedef ValueIterator iterator;
-  typedef ValueConstIterator const_iterator;
-  typedef Json::UInt UInt;
-  typedef Json::Int Int;
-#if defined(JSON_HAS_INT64)
-  typedef Json::UInt64 UInt64;
-  typedef Json::Int64 Int64;
-#endif // defined(JSON_HAS_INT64)
-  typedef Json::LargestInt LargestInt;
-  typedef Json::LargestUInt LargestUInt;
-  typedef Json::ArrayIndex ArrayIndex;
-
-  static const Value& null;  ///< We regret this reference to a global instance; prefer the simpler Value().
-  static const Value& nullRef;  ///< just a kludge for binary-compatibility; same as null
-  /// Minimum signed integer value that can be stored in a Json::Value.
-  static const LargestInt minLargestInt;
-  /// Maximum signed integer value that can be stored in a Json::Value.
-  static const LargestInt maxLargestInt;
-  /// Maximum unsigned integer value that can be stored in a Json::Value.
-  static const LargestUInt maxLargestUInt;
-
-  /// Minimum signed int value that can be stored in a Json::Value.
-  static const Int minInt;
-  /// Maximum signed int value that can be stored in a Json::Value.
-  static const Int maxInt;
-  /// Maximum unsigned int value that can be stored in a Json::Value.
-  static const UInt maxUInt;
-
-#if defined(JSON_HAS_INT64)
-  /// Minimum signed 64 bits int value that can be stored in a Json::Value.
-  static const Int64 minInt64;
-  /// Maximum signed 64 bits int value that can be stored in a Json::Value.
-  static const Int64 maxInt64;
-  /// Maximum unsigned 64 bits int value that can be stored in a Json::Value.
-  static const UInt64 maxUInt64;
-#endif // defined(JSON_HAS_INT64)
-
-private:
-#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-  class CZString {
-  public:
-    enum DuplicationPolicy {
-      noDuplication = 0,
-      duplicate,
-      duplicateOnCopy
-    };
-    CZString(ArrayIndex index);
-    CZString(char const* str, unsigned length, DuplicationPolicy allocate);
-    CZString(CZString const& other);
-#if JSON_HAS_RVALUE_REFERENCES
-    CZString(CZString&& other);
-#endif
-    ~CZString();
-    CZString& operator=(CZString other);
-    bool operator<(CZString const& other) const;
-    bool operator==(CZString const& other) const;
-    ArrayIndex index() const;
-    //const char* c_str() const; ///< \deprecated
-    char const* data() const;
-    unsigned length() const;
-    bool isStaticString() const;
-
-  private:
-    void swap(CZString& other);
-
-    struct StringStorage {
-      unsigned policy_: 2;
-      unsigned length_: 30; // 1GB max
-    };
-
-    char const* cstr_;  // actually, a prefixed string, unless policy is noDup
-    union {
-      ArrayIndex index_;
-      StringStorage storage_;
-    };
-  };
-
-public:
-#ifndef JSON_USE_CPPTL_SMALLMAP
-  typedef std::map<CZString, Value> ObjectValues;
-#else
-  typedef CppTL::SmallMap<CZString, Value> ObjectValues;
-#endif // ifndef JSON_USE_CPPTL_SMALLMAP
-#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
-
-public:
-  /** \brief Create a default Value of the given type.
-
-    This is a very useful constructor.
-    To create an empty array, pass arrayValue.
-    To create an empty object, pass objectValue.
-    Another Value can then be set to this one by assignment.
-This is useful since clear() and resize() will not alter types.
-
-    Examples:
-\code
-Json::Value null_value; // null
-Json::Value arr_value(Json::arrayValue); // []
-Json::Value obj_value(Json::objectValue); // {}
-\endcode
-  */
-  Value(ValueType type = nullValue);
-  Value(Int value);
-  Value(UInt value);
-#if defined(JSON_HAS_INT64)
-  Value(Int64 value);
-  Value(UInt64 value);
-#endif // if defined(JSON_HAS_INT64)
-  Value(double value);
-  Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)
-  Value(const char* begin, const char* end); ///< Copy all, incl zeroes.
-  /** \brief Constructs a value from a static string.
-
-   * Like other value string constructor but do not duplicate the string for
-   * internal storage. The given string must remain alive after the call to this
-   * constructor.
-   * \note This works only for null-terminated strings. (We cannot change the
-   *   size of this class, so we have nowhere to store the length,
-   *   which might be computed later for various operations.)
-   *
-   * Example of usage:
-   * \code
-   * static StaticString foo("some text");
-   * Json::Value aValue(foo);
-   * \endcode
-   */
-  Value(const StaticString& value);
-  Value(const std::string& value); ///< Copy data() til size(). Embedded zeroes too.
-#ifdef JSON_USE_CPPTL
-  Value(const CppTL::ConstString& value);
-#endif
-  Value(bool value);
-  /// Deep copy.
-  Value(const Value& other);
-#if JSON_HAS_RVALUE_REFERENCES
-  /// Move constructor
-  Value(Value&& other);
-#endif
-  ~Value();
-
-  /// Deep copy, then swap(other).
-  /// \note Over-write existing comments. To preserve comments, use #swapPayload().
-  Value& operator=(Value other);
-  /// Swap everything.
-  void swap(Value& other);
-  /// Swap values but leave comments and source offsets in place.
-  void swapPayload(Value& other);
-
-  ValueType type() const;
-
-  /// Compare payload only, not comments etc.
-  bool operator<(const Value& other) const;
-  bool operator<=(const Value& other) const;
-  bool operator>=(const Value& other) const;
-  bool operator>(const Value& other) const;
-  bool operator==(const Value& other) const;
-  bool operator!=(const Value& other) const;
-  int compare(const Value& other) const;
-
-  const char* asCString() const; ///< Embedded zeroes could cause you trouble!
-  std::string asString() const; ///< Embedded zeroes are possible.
-  /** Get raw char* of string-value.
-   *  \return false if !string. (Seg-fault if str or end are NULL.)
-   */
-  bool getString(
-      char const** begin, char const** end) const;
-#ifdef JSON_USE_CPPTL
-  CppTL::ConstString asConstString() const;
-#endif
-  Int asInt() const;
-  UInt asUInt() const;
-#if defined(JSON_HAS_INT64)
-  Int64 asInt64() const;
-  UInt64 asUInt64() const;
-#endif // if defined(JSON_HAS_INT64)
-  LargestInt asLargestInt() const;
-  LargestUInt asLargestUInt() const;
-  float asFloat() const;
-  double asDouble() const;
-  bool asBool() const;
-
-  bool isNull() const;
-  bool isBool() const;
-  bool isInt() const;
-  bool isInt64() const;
-  bool isUInt() const;
-  bool isUInt64() const;
-  bool isIntegral() const;
-  bool isDouble() const;
-  bool isNumeric() const;
-  bool isString() const;
-  bool isArray() const;
-  bool isObject() const;
-
-  bool isConvertibleTo(ValueType other) const;
-
-  /// Number of values in array or object
-  ArrayIndex size() const;
-
-  /// \brief Return true if empty array, empty object, or null;
-  /// otherwise, false.
-  bool empty() const;
-
-  /// Return isNull()
-  bool operator!() const;
-
-  /// Remove all object members and array elements.
-  /// \pre type() is arrayValue, objectValue, or nullValue
-  /// \post type() is unchanged
-  void clear();
-
-  /// Resize the array to size elements.
-  /// New elements are initialized to null.
-  /// May only be called on nullValue or arrayValue.
-  /// \pre type() is arrayValue or nullValue
-  /// \post type() is arrayValue
-  void resize(ArrayIndex size);
-
-  /// Access an array element (zero based index ).
-  /// If the array contains less than index element, then null value are
-  /// inserted
-  /// in the array so that its size is index+1.
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  Value& operator[](ArrayIndex index);
-
-  /// Access an array element (zero based index ).
-  /// If the array contains less than index element, then null value are
-  /// inserted
-  /// in the array so that its size is index+1.
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  Value& operator[](int index);
-
-  /// Access an array element (zero based index )
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  const Value& operator[](ArrayIndex index) const;
-
-  /// Access an array element (zero based index )
-  /// (You may need to say 'value[0u]' to get your compiler to distinguish
-  ///  this from the operator[] which takes a string.)
-  const Value& operator[](int index) const;
-
-  /// If the array contains at least index+1 elements, returns the element
-  /// value,
-  /// otherwise returns defaultValue.
-  Value get(ArrayIndex index, const Value& defaultValue) const;
-  /// Return true if index < size().
-  bool isValidIndex(ArrayIndex index) const;
-  /// \brief Append value to array at the end.
-  ///
-  /// Equivalent to jsonvalue[jsonvalue.size()] = value;
-  Value& append(const Value& value);
-
-  /// Access an object value by name, create a null member if it does not exist.
-  /// \note Because of our implementation, keys are limited to 2^30 -1 chars.
-  ///  Exceeding that will cause an exception.
-  Value& operator[](const char* key);
-  /// Access an object value by name, returns null if there is no member with
-  /// that name.
-  const Value& operator[](const char* key) const;
-  /// Access an object value by name, create a null member if it does not exist.
-  /// \param key may contain embedded nulls.
-  Value& operator[](const std::string& key);
-  /// Access an object value by name, returns null if there is no member with
-  /// that name.
-  /// \param key may contain embedded nulls.
-  const Value& operator[](const std::string& key) const;
-  /** \brief Access an object value by name, create a null member if it does not
-   exist.
-
-   * If the object has no entry for that name, then the member name used to store
-   * the new entry is not duplicated.
-   * Example of use:
-   * \code
-   * Json::Value object;
-   * static const StaticString code("code");
-   * object[code] = 1234;
-   * \endcode
-   */
-  Value& operator[](const StaticString& key);
-#ifdef JSON_USE_CPPTL
-  /// Access an object value by name, create a null member if it does not exist.
-  Value& operator[](const CppTL::ConstString& key);
-  /// Access an object value by name, returns null if there is no member with
-  /// that name.
-  const Value& operator[](const CppTL::ConstString& key) const;
-#endif
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  Value get(const char* key, const Value& defaultValue) const;
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  /// \note key may contain embedded nulls.
-  Value get(const char* begin, const char* end, const Value& defaultValue) const;
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  /// \param key may contain embedded nulls.
-  Value get(const std::string& key, const Value& defaultValue) const;
-#ifdef JSON_USE_CPPTL
-  /// Return the member named key if it exist, defaultValue otherwise.
-  /// \note deep copy
-  Value get(const CppTL::ConstString& key, const Value& defaultValue) const;
-#endif
-  /// Most general and efficient version of isMember()const, get()const,
-  /// and operator[]const
-  /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
-  Value const* find(char const* begin, char const* end) const;
-  /// Most general and efficient version of object-mutators.
-  /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
-  /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
-  Value const* demand(char const* begin, char const* end);
-  /// \brief Remove and return the named member.
-  ///
-  /// Do nothing if it did not exist.
-  /// \return the removed Value, or null.
-  /// \pre type() is objectValue or nullValue
-  /// \post type() is unchanged
-  /// \deprecated
-  Value removeMember(const char* key);
-  /// Same as removeMember(const char*)
-  /// \param key may contain embedded nulls.
-  /// \deprecated
-  Value removeMember(const std::string& key);
-  /// Same as removeMember(const char* begin, const char* end, Value* removed),
-  /// but 'key' is null-terminated.
-  bool removeMember(const char* key, Value* removed);
-  /** \brief Remove the named map member.
-
-      Update 'removed' iff removed.
-      \param key may contain embedded nulls.
-      \return true iff removed (no exceptions)
-  */
-  bool removeMember(std::string const& key, Value* removed);
-  /// Same as removeMember(std::string const& key, Value* removed)
-  bool removeMember(const char* begin, const char* end, Value* removed);
-  /** \brief Remove the indexed array element.
-
-      O(n) expensive operations.
-      Update 'removed' iff removed.
-      \return true iff removed (no exceptions)
-  */
-  bool removeIndex(ArrayIndex i, Value* removed);
-
-  /// Return true if the object has a member named key.
-  /// \note 'key' must be null-terminated.
-  bool isMember(const char* key) const;
-  /// Return true if the object has a member named key.
-  /// \param key may contain embedded nulls.
-  bool isMember(const std::string& key) const;
-  /// Same as isMember(std::string const& key)const
-  bool isMember(const char* begin, const char* end) const;
-#ifdef JSON_USE_CPPTL
-  /// Return true if the object has a member named key.
-  bool isMember(const CppTL::ConstString& key) const;
-#endif
-
-  /// \brief Return a list of the member names.
-  ///
-  /// If null, return an empty list.
-  /// \pre type() is objectValue or nullValue
-  /// \post if type() was nullValue, it remains nullValue
-  Members getMemberNames() const;
-
-  //# ifdef JSON_USE_CPPTL
-  //      EnumMemberNames enumMemberNames() const;
-  //      EnumValues enumValues() const;
-  //# endif
-
-  /// \deprecated Always pass len.
-  JSONCPP_DEPRECATED("Use setComment(std::string const&) instead.")
-  void setComment(const char* comment, CommentPlacement placement);
-  /// Comments must be //... or /* ... */
-  void setComment(const char* comment, size_t len, CommentPlacement placement);
-  /// Comments must be //... or /* ... */
-  void setComment(const std::string& comment, CommentPlacement placement);
-  bool hasComment(CommentPlacement placement) const;
-  /// Include delimiters and embedded newlines.
-  std::string getComment(CommentPlacement placement) const;
-
-  std::string toStyledString() const;
-
-  const_iterator begin() const;
-  const_iterator end() const;
-
-  iterator begin();
-  iterator end();
-
-  // Accessors for the [start, limit) range of bytes within the JSON text from
-  // which this value was parsed, if any.
-  void setOffsetStart(size_t start);
-  void setOffsetLimit(size_t limit);
-  size_t getOffsetStart() const;
-  size_t getOffsetLimit() const;
-
-private:
-  void initBasic(ValueType type, bool allocated = false);
-
-  Value& resolveReference(const char* key);
-  Value& resolveReference(const char* key, const char* end);
-
-  struct CommentInfo {
-    CommentInfo();
-    ~CommentInfo();
-
-    void setComment(const char* text, size_t len);
-
-    char* comment_;
-  };
-
-  // struct MemberNamesTransform
-  //{
-  //   typedef const char *result_type;
-  //   const char *operator()( const CZString &name ) const
-  //   {
-  //      return name.c_str();
-  //   }
-  //};
-
-  union ValueHolder {
-    LargestInt int_;
-    LargestUInt uint_;
-    double real_;
-    bool bool_;
-    char* string_;  // actually ptr to unsigned, followed by str, unless !allocated_
-    ObjectValues* map_;
-  } value_;
-  ValueType type_ : 8;
-  unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless.
-                               // If not allocated_, string_ must be null-terminated.
-  CommentInfo* comments_;
-
-  // [start, limit) byte offsets in the source JSON text from which this Value
-  // was extracted.
-  size_t start_;
-  size_t limit_;
-};
-
-/** \brief Experimental and untested: represents an element of the "path" to
- * access a node.
- */
-class JSON_API PathArgument {
-public:
-  friend class Path;
-
-  PathArgument();
-  PathArgument(ArrayIndex index);
-  PathArgument(const char* key);
-  PathArgument(const std::string& key);
-
-private:
-  enum Kind {
-    kindNone = 0,
-    kindIndex,
-    kindKey
-  };
-  std::string key_;
-  ArrayIndex index_;
-  Kind kind_;
-};
-
-/** \brief Experimental and untested: represents a "path" to access a node.
- *
- * Syntax:
- * - "." => root node
- * - ".[n]" => elements at index 'n' of root node (an array value)
- * - ".name" => member named 'name' of root node (an object value)
- * - ".name1.name2.name3"
- * - ".[0][1][2].name1[3]"
- * - ".%" => member name is provided as parameter
- * - ".[%]" => index is provied as parameter
- */
-class JSON_API Path {
-public:
-  Path(const std::string& path,
-       const PathArgument& a1 = PathArgument(),
-       const PathArgument& a2 = PathArgument(),
-       const PathArgument& a3 = PathArgument(),
-       const PathArgument& a4 = PathArgument(),
-       const PathArgument& a5 = PathArgument());
-
-  const Value& resolve(const Value& root) const;
-  Value resolve(const Value& root, const Value& defaultValue) const;
-  /// Creates the "path" to access the specified node and returns a reference on
-  /// the node.
-  Value& make(Value& root) const;
-
-private:
-  typedef std::vector<const PathArgument*> InArgs;
-  typedef std::vector<PathArgument> Args;
-
-  void makePath(const std::string& path, const InArgs& in);
-  void addPathInArg(const std::string& path,
-                    const InArgs& in,
-                    InArgs::const_iterator& itInArg,
-                    PathArgument::Kind kind);
-  void invalidPath(const std::string& path, int location);
-
-  Args args_;
-};
-
-/** \brief base class for Value iterators.
- *
- */
-class JSON_API ValueIteratorBase {
-public:
-  typedef std::bidirectional_iterator_tag iterator_category;
-  typedef unsigned int size_t;
-  typedef int difference_type;
-  typedef ValueIteratorBase SelfType;
-
-  bool operator==(const SelfType& other) const { return isEqual(other); }
-
-  bool operator!=(const SelfType& other) const { return !isEqual(other); }
-
-  difference_type operator-(const SelfType& other) const {
-    return other.computeDistance(*this);
-  }
-
-  /// Return either the index or the member name of the referenced value as a
-  /// Value.
-  Value key() const;
-
-  /// Return the index of the referenced Value, or -1 if it is not an arrayValue.
-  UInt index() const;
-
-  /// Return the member name of the referenced Value, or "" if it is not an
-  /// objectValue.
-  /// \note Avoid `c_str()` on result, as embedded zeroes are possible.
-  std::string name() const;
-
-  /// Return the member name of the referenced Value. "" if it is not an
-  /// objectValue.
-  /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls.
-  JSONCPP_DEPRECATED("Use `key = name();` instead.")
-  char const* memberName() const;
-  /// Return the member name of the referenced Value, or NULL if it is not an
-  /// objectValue.
-  /// \note Better version than memberName(). Allows embedded nulls.
-  char const* memberName(char const** end) const;
-
-protected:
-  Value& deref() const;
-
-  void increment();
-
-  void decrement();
-
-  difference_type computeDistance(const SelfType& other) const;
-
-  bool isEqual(const SelfType& other) const;
-
-  void copy(const SelfType& other);
-
-private:
-  Value::ObjectValues::iterator current_;
-  // Indicates that iterator is for a null value.
-  bool isNull_;
-
-public:
-  // For some reason, BORLAND needs these at the end, rather
-  // than earlier. No idea why.
-  ValueIteratorBase();
-  explicit ValueIteratorBase(const Value::ObjectValues::iterator& current);
-};
-
-/** \brief const iterator for object and array value.
- *
- */
-class JSON_API ValueConstIterator : public ValueIteratorBase {
-  friend class Value;
-
-public:
-  typedef const Value value_type;
-  //typedef unsigned int size_t;
-  //typedef int difference_type;
-  typedef const Value& reference;
-  typedef const Value* pointer;
-  typedef ValueConstIterator SelfType;
-
-  ValueConstIterator();
-  ValueConstIterator(ValueIterator const& other);
-
-private:
-/*! \internal Use by Value to create an iterator.
- */
-  explicit ValueConstIterator(const Value::ObjectValues::iterator& current);
-public:
-  SelfType& operator=(const ValueIteratorBase& other);
-
-  SelfType operator++(int) {
-    SelfType temp(*this);
-    ++*this;
-    return temp;
-  }
-
-  SelfType operator--(int) {
-    SelfType temp(*this);
-    --*this;
-    return temp;
-  }
-
-  SelfType& operator--() {
-    decrement();
-    return *this;
-  }
-
-  SelfType& operator++() {
-    increment();
-    return *this;
-  }
-
-  reference operator*() const { return deref(); }
-
-  pointer operator->() const { return &deref(); }
-};
-
-/** \brief Iterator for object and array value.
- */
-class JSON_API ValueIterator : public ValueIteratorBase {
-  friend class Value;
-
-public:
-  typedef Value value_type;
-  typedef unsigned int size_t;
-  typedef int difference_type;
-  typedef Value& reference;
-  typedef Value* pointer;
-  typedef ValueIterator SelfType;
-
-  ValueIterator();
-  explicit ValueIterator(const ValueConstIterator& other);
-  ValueIterator(const ValueIterator& other);
-
-private:
-/*! \internal Use by Value to create an iterator.
- */
-  explicit ValueIterator(const Value::ObjectValues::iterator& current);
-public:
-  SelfType& operator=(const SelfType& other);
-
-  SelfType operator++(int) {
-    SelfType temp(*this);
-    ++*this;
-    return temp;
-  }
-
-  SelfType operator--(int) {
-    SelfType temp(*this);
-    --*this;
-    return temp;
-  }
-
-  SelfType& operator--() {
-    decrement();
-    return *this;
-  }
-
-  SelfType& operator++() {
-    increment();
-    return *this;
-  }
-
-  reference operator*() const { return deref(); }
-
-  pointer operator->() const { return &deref(); }
-};
-
-} // namespace Json
-
-
-namespace std {
-/// Specialize std::swap() for Json::Value.
-template<>
-inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); }
-}
-
-
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(pop)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#endif // CPPTL_JSON_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/value.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/reader.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_READER_H_INCLUDED
-#define CPPTL_JSON_READER_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "features.h"
-#include "value.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <deque>
-#include <iosfwd>
-#include <stack>
-#include <string>
-#include <istream>
-
-// Disable warning C4251: <data member>: <type> needs to have dll-interface to
-// be used by...
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(push)
-#pragma warning(disable : 4251)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-namespace Json {
-
-/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a
- *Value.
- *
- * \deprecated Use CharReader and CharReaderBuilder.
- */
-class JSON_API Reader {
-public:
-  typedef char Char;
-  typedef const Char* Location;
-
-  /** \brief An error tagged with where in the JSON text it was encountered.
-   *
-   * The offsets give the [start, limit) range of bytes within the text. Note
-   * that this is bytes, not codepoints.
-   *
-   */
-  struct StructuredError {
-    size_t offset_start;
-    size_t offset_limit;
-    std::string message;
-  };
-
-  /** \brief Constructs a Reader allowing all features
-   * for parsing.
-   */
-  Reader();
-
-  /** \brief Constructs a Reader allowing the specified feature set
-   * for parsing.
-   */
-  Reader(const Features& features);
-
-  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
-   * document.
-   * \param document UTF-8 encoded string containing the document to read.
-   * \param root [out] Contains the root value of the document if it was
-   *             successfully parsed.
-   * \param collectComments \c true to collect comment and allow writing them
-   * back during
-   *                        serialization, \c false to discard comments.
-   *                        This parameter is ignored if
-   * Features::allowComments_
-   *                        is \c false.
-   * \return \c true if the document was successfully parsed, \c false if an
-   * error occurred.
-   */
-  bool
-  parse(const std::string& document, Value& root, bool collectComments = true);
-
-  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
-   document.
-   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
-   document to read.
-   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
-   document to read.
-   *               Must be >= beginDoc.
-   * \param root [out] Contains the root value of the document if it was
-   *             successfully parsed.
-   * \param collectComments \c true to collect comment and allow writing them
-   back during
-   *                        serialization, \c false to discard comments.
-   *                        This parameter is ignored if
-   Features::allowComments_
-   *                        is \c false.
-   * \return \c true if the document was successfully parsed, \c false if an
-   error occurred.
-   */
-  bool parse(const char* beginDoc,
-             const char* endDoc,
-             Value& root,
-             bool collectComments = true);
-
-  /// \brief Parse from input stream.
-  /// \see Json::operator>>(std::istream&, Json::Value&).
-  bool parse(std::istream& is, Value& root, bool collectComments = true);
-
-  /** \brief Returns a user friendly string that list errors in the parsed
-   * document.
-   * \return Formatted error message with the list of errors with their location
-   * in
-   *         the parsed document. An empty string is returned if no error
-   * occurred
-   *         during parsing.
-   * \deprecated Use getFormattedErrorMessages() instead (typo fix).
-   */
-  JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
-  std::string getFormatedErrorMessages() const;
-
-  /** \brief Returns a user friendly string that list errors in the parsed
-   * document.
-   * \return Formatted error message with the list of errors with their location
-   * in
-   *         the parsed document. An empty string is returned if no error
-   * occurred
-   *         during parsing.
-   */
-  std::string getFormattedErrorMessages() const;
-
-  /** \brief Returns a vector of structured erros encounted while parsing.
-   * \return A (possibly empty) vector of StructuredError objects. Currently
-   *         only one error can be returned, but the caller should tolerate
-   * multiple
-   *         errors.  This can occur if the parser recovers from a non-fatal
-   *         parse error and then encounters additional errors.
-   */
-  std::vector<StructuredError> getStructuredErrors() const;
-
-  /** \brief Add a semantic error message.
-   * \param value JSON Value location associated with the error
-   * \param message The error message.
-   * \return \c true if the error was successfully added, \c false if the
-   * Value offset exceeds the document size.
-   */
-  bool pushError(const Value& value, const std::string& message);
-
-  /** \brief Add a semantic error message with extra context.
-   * \param value JSON Value location associated with the error
-   * \param message The error message.
-   * \param extra Additional JSON Value location to contextualize the error
-   * \return \c true if the error was successfully added, \c false if either
-   * Value offset exceeds the document size.
-   */
-  bool pushError(const Value& value, const std::string& message, const Value& extra);
-
-  /** \brief Return whether there are any errors.
-   * \return \c true if there are no errors to report \c false if
-   * errors have occurred.
-   */
-  bool good() const;
-
-private:
-  enum TokenType {
-    tokenEndOfStream = 0,
-    tokenObjectBegin,
-    tokenObjectEnd,
-    tokenArrayBegin,
-    tokenArrayEnd,
-    tokenString,
-    tokenNumber,
-    tokenTrue,
-    tokenFalse,
-    tokenNull,
-    tokenArraySeparator,
-    tokenMemberSeparator,
-    tokenComment,
-    tokenError
-  };
-
-  class Token {
-  public:
-    TokenType type_;
-    Location start_;
-    Location end_;
-  };
-
-  class ErrorInfo {
-  public:
-    Token token_;
-    std::string message_;
-    Location extra_;
-  };
-
-  typedef std::deque<ErrorInfo> Errors;
-
-  bool readToken(Token& token);
-  void skipSpaces();
-  bool match(Location pattern, int patternLength);
-  bool readComment();
-  bool readCStyleComment();
-  bool readCppStyleComment();
-  bool readString();
-  void readNumber();
-  bool readValue();
-  bool readObject(Token& token);
-  bool readArray(Token& token);
-  bool decodeNumber(Token& token);
-  bool decodeNumber(Token& token, Value& decoded);
-  bool decodeString(Token& token);
-  bool decodeString(Token& token, std::string& decoded);
-  bool decodeDouble(Token& token);
-  bool decodeDouble(Token& token, Value& decoded);
-  bool decodeUnicodeCodePoint(Token& token,
-                              Location& current,
-                              Location end,
-                              unsigned int& unicode);
-  bool decodeUnicodeEscapeSequence(Token& token,
-                                   Location& current,
-                                   Location end,
-                                   unsigned int& unicode);
-  bool addError(const std::string& message, Token& token, Location extra = 0);
-  bool recoverFromError(TokenType skipUntilToken);
-  bool addErrorAndRecover(const std::string& message,
-                          Token& token,
-                          TokenType skipUntilToken);
-  void skipUntilSpace();
-  Value& currentValue();
-  Char getNextChar();
-  void
-  getLocationLineAndColumn(Location location, int& line, int& column) const;
-  std::string getLocationLineAndColumn(Location location) const;
-  void addComment(Location begin, Location end, CommentPlacement placement);
-  void skipCommentTokens(Token& token);
-
-  typedef std::stack<Value*> Nodes;
-  Nodes nodes_;
-  Errors errors_;
-  std::string document_;
-  Location begin_;
-  Location end_;
-  Location current_;
-  Location lastValueEnd_;
-  Value* lastValue_;
-  std::string commentsBefore_;
-  Features features_;
-  bool collectComments_;
-};  // Reader
-
-/** Interface for reading JSON from a char array.
- */
-class JSON_API CharReader {
-public:
-  virtual ~CharReader() {}
-  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
-   document.
-   * The document must be a UTF-8 encoded string containing the document to read.
-   *
-   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
-   document to read.
-   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
-   document to read.
-   *        Must be >= beginDoc.
-   * \param root [out] Contains the root value of the document if it was
-   *             successfully parsed.
-   * \param errs [out] Formatted error messages (if not NULL)
-   *        a user friendly string that lists errors in the parsed
-   * document.
-   * \return \c true if the document was successfully parsed, \c false if an
-   error occurred.
-   */
-  virtual bool parse(
-      char const* beginDoc, char const* endDoc,
-      Value* root, std::string* errs) = 0;
-
-  class JSON_API Factory {
-  public:
-    virtual ~Factory() {}
-    /** \brief Allocate a CharReader via operator new().
-     * \throw std::exception if something goes wrong (e.g. invalid settings)
-     */
-    virtual CharReader* newCharReader() const = 0;
-  };  // Factory
-};  // CharReader
-
-/** \brief Build a CharReader implementation.
-
-Usage:
-\code
-  using namespace Json;
-  CharReaderBuilder builder;
-  builder["collectComments"] = false;
-  Value value;
-  std::string errs;
-  bool ok = parseFromStream(builder, std::cin, &value, &errs);
-\endcode
-*/
-class JSON_API CharReaderBuilder : public CharReader::Factory {
-public:
-  // Note: We use a Json::Value so that we can add data-members to this class
-  // without a major version bump.
-  /** Configuration of this builder.
-    These are case-sensitive.
-    Available settings (case-sensitive):
-    - `"collectComments": false or true`
-      - true to collect comment and allow writing them
-        back during serialization, false to discard comments.
-        This parameter is ignored if allowComments is false.
-    - `"allowComments": false or true`
-      - true if comments are allowed.
-    - `"strictRoot": false or true`
-      - true if root must be either an array or an object value
-    - `"allowDroppedNullPlaceholders": false or true`
-      - true if dropped null placeholders are allowed. (See StreamWriterBuilder.)
-    - `"allowNumericKeys": false or true`
-      - true if numeric object keys are allowed.
-    - `"allowSingleQuotes": false or true`
-      - true if '' are allowed for strings (both keys and values)
-    - `"stackLimit": integer`
-      - Exceeding stackLimit (recursive depth of `readValue()`) will
-        cause an exception.
-      - This is a security issue (seg-faults caused by deeply nested JSON),
-        so the default is low.
-    - `"failIfExtra": false or true`
-      - If true, `parse()` returns false when extra non-whitespace trails
-        the JSON value in the input string.
-    - `"rejectDupKeys": false or true`
-      - If true, `parse()` returns false when a key is duplicated within an object.
-    - `"allowSpecialFloats": false or true`
-      - If true, special float values (NaNs and infinities) are allowed 
-        and their values are lossfree restorable.
-
-    You can examine 'settings_` yourself
-    to see the defaults. You can also write and read them just like any
-    JSON Value.
-    \sa setDefaults()
-    */
-  Json::Value settings_;
-
-  CharReaderBuilder();
-  ~CharReaderBuilder() override;
-
-  CharReader* newCharReader() const override;
-
-  /** \return true if 'settings' are legal and consistent;
-   *   otherwise, indicate bad settings via 'invalid'.
-   */
-  bool validate(Json::Value* invalid) const;
-
-  /** A simple way to update a specific setting.
-   */
-  Value& operator[](std::string key);
-
-  /** Called by ctor, but you can use this to reset settings_.
-   * \pre 'settings' != NULL (but Json::null is fine)
-   * \remark Defaults:
-   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
-   */
-  static void setDefaults(Json::Value* settings);
-  /** Same as old Features::strictMode().
-   * \pre 'settings' != NULL (but Json::null is fine)
-   * \remark Defaults:
-   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
-   */
-  static void strictMode(Json::Value* settings);
-};
-
-/** Consume entire stream and use its begin/end.
-  * Someday we might have a real StreamReader, but for now this
-  * is convenient.
-  */
-bool JSON_API parseFromStream(
-    CharReader::Factory const&,
-    std::istream&,
-    Value* root, std::string* errs);
-
-/** \brief Read from 'sin' into 'root'.
-
- Always keep comments from the input JSON.
-
- This can be used to read a file into a particular sub-object.
- For example:
- \code
- Json::Value root;
- cin >> root["dir"]["file"];
- cout << root;
- \endcode
- Result:
- \verbatim
- {
- "dir": {
-     "file": {
-     // The input stream JSON would be nested here.
-     }
- }
- }
- \endverbatim
- \throw std::exception on parse error.
- \see Json::operator<<()
-*/
-JSON_API std::istream& operator>>(std::istream&, Value&);
-
-} // namespace Json
-
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(pop)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#endif // CPPTL_JSON_READER_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/reader.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/writer.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef JSON_WRITER_H_INCLUDED
-#define JSON_WRITER_H_INCLUDED
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "value.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <vector>
-#include <string>
-#include <ostream>
-
-// Disable warning C4251: <data member>: <type> needs to have dll-interface to
-// be used by...
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(push)
-#pragma warning(disable : 4251)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-namespace Json {
-
-class Value;
-
-/**
-
-Usage:
-\code
-  using namespace Json;
-  void writeToStdout(StreamWriter::Factory const& factory, Value const& value) {
-    std::unique_ptr<StreamWriter> const writer(
-      factory.newStreamWriter());
-    writer->write(value, &std::cout);
-    std::cout << std::endl;  // add lf and flush
-  }
-\endcode
-*/
-class JSON_API StreamWriter {
-protected:
-  std::ostream* sout_;  // not owned; will not delete
-public:
-  StreamWriter();
-  virtual ~StreamWriter();
-  /** Write Value into document as configured in sub-class.
-      Do not take ownership of sout, but maintain a reference during function.
-      \pre sout != NULL
-      \return zero on success (For now, we always return zero, so check the stream instead.)
-      \throw std::exception possibly, depending on configuration
-   */
-  virtual int write(Value const& root, std::ostream* sout) = 0;
-
-  /** \brief A simple abstract factory.
-   */
-  class JSON_API Factory {
-  public:
-    virtual ~Factory();
-    /** \brief Allocate a CharReader via operator new().
-     * \throw std::exception if something goes wrong (e.g. invalid settings)
-     */
-    virtual StreamWriter* newStreamWriter() const = 0;
-  };  // Factory
-};  // StreamWriter
-
-/** \brief Write into stringstream, then return string, for convenience.
- * A StreamWriter will be created from the factory, used, and then deleted.
- */
-std::string JSON_API writeString(StreamWriter::Factory const& factory, Value const& root);
-
-
-/** \brief Build a StreamWriter implementation.
-
-Usage:
-\code
-  using namespace Json;
-  Value value = ...;
-  StreamWriterBuilder builder;
-  builder["commentStyle"] = "None";
-  builder["indentation"] = "   ";  // or whatever you like
-  std::unique_ptr<Json::StreamWriter> writer(
-      builder.newStreamWriter());
-  writer->write(value, &std::cout);
-  std::cout << std::endl;  // add lf and flush
-\endcode
-*/
-class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
-public:
-  // Note: We use a Json::Value so that we can add data-members to this class
-  // without a major version bump.
-  /** Configuration of this builder.
-    Available settings (case-sensitive):
-    - "commentStyle": "None" or "All"
-    - "indentation":  "<anything>"
-    - "enableYAMLCompatibility": false or true
-      - slightly change the whitespace around colons
-    - "dropNullPlaceholders": false or true
-      - Drop the "null" string from the writer's output for nullValues.
-        Strictly speaking, this is not valid JSON. But when the output is being
-        fed to a browser's Javascript, it makes for smaller output and the
-        browser can handle the output just fine.
-    - "useSpecialFloats": false or true
-      - If true, outputs non-finite floating point values in the following way:
-        NaN values as "NaN", positive infinity as "Infinity", and negative infinity
-        as "-Infinity".
-
-    You can examine 'settings_` yourself
-    to see the defaults. You can also write and read them just like any
-    JSON Value.
-    \sa setDefaults()
-    */
-  Json::Value settings_;
-
-  StreamWriterBuilder();
-  ~StreamWriterBuilder() override;
-
-  /**
-   * \throw std::exception if something goes wrong (e.g. invalid settings)
-   */
-  StreamWriter* newStreamWriter() const override;
-
-  /** \return true if 'settings' are legal and consistent;
-   *   otherwise, indicate bad settings via 'invalid'.
-   */
-  bool validate(Json::Value* invalid) const;
-  /** A simple way to update a specific setting.
-   */
-  Value& operator[](std::string key);
-
-  /** Called by ctor, but you can use this to reset settings_.
-   * \pre 'settings' != NULL (but Json::null is fine)
-   * \remark Defaults:
-   * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults
-   */
-  static void setDefaults(Json::Value* settings);
-};
-
-/** \brief Abstract class for writers.
- * \deprecated Use StreamWriter. (And really, this is an implementation detail.)
- */
-class JSON_API Writer {
-public:
-  virtual ~Writer();
-
-  virtual std::string write(const Value& root) = 0;
-};
-
-/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format
- *without formatting (not human friendly).
- *
- * The JSON document is written in a single line. It is not intended for 'human'
- *consumption,
- * but may be usefull to support feature such as RPC where bandwith is limited.
- * \sa Reader, Value
- * \deprecated Use StreamWriterBuilder.
- */
-class JSON_API FastWriter : public Writer {
-
-public:
-  FastWriter();
-  ~FastWriter() override {}
-
-  void enableYAMLCompatibility();
-
-  /** \brief Drop the "null" string from the writer's output for nullValues.
-   * Strictly speaking, this is not valid JSON. But when the output is being
-   * fed to a browser's Javascript, it makes for smaller output and the
-   * browser can handle the output just fine.
-   */
-  void dropNullPlaceholders();
-
-  void omitEndingLineFeed();
-
-public: // overridden from Writer
-  std::string write(const Value& root) override;
-
-private:
-  void writeValue(const Value& value);
-
-  std::string document_;
-  bool yamlCompatiblityEnabled_;
-  bool dropNullPlaceholders_;
-  bool omitEndingLineFeed_;
-};
-
-/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
- *human friendly way.
- *
- * The rules for line break and indent are as follow:
- * - Object value:
- *     - if empty then print {} without indent and line break
- *     - if not empty the print '{', line break & indent, print one value per
- *line
- *       and then unindent and line break and print '}'.
- * - Array value:
- *     - if empty then print [] without indent and line break
- *     - if the array contains no object value, empty array or some other value
- *types,
- *       and all the values fit on one lines, then print the array on a single
- *line.
- *     - otherwise, it the values do not fit on one line, or the array contains
- *       object or non empty array, then print one value per line.
- *
- * If the Value have comments then they are outputed according to their
- *#CommentPlacement.
- *
- * \sa Reader, Value, Value::setComment()
- * \deprecated Use StreamWriterBuilder.
- */
-class JSON_API StyledWriter : public Writer {
-public:
-  StyledWriter();
-  ~StyledWriter() override {}
-
-public: // overridden from Writer
-  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
-   * \param root Value to serialize.
-   * \return String containing the JSON document that represents the root value.
-   */
-  std::string write(const Value& root) override;
-
-private:
-  void writeValue(const Value& value);
-  void writeArrayValue(const Value& value);
-  bool isMultineArray(const Value& value);
-  void pushValue(const std::string& value);
-  void writeIndent();
-  void writeWithIndent(const std::string& value);
-  void indent();
-  void unindent();
-  void writeCommentBeforeValue(const Value& root);
-  void writeCommentAfterValueOnSameLine(const Value& root);
-  bool hasCommentForValue(const Value& value);
-  static std::string normalizeEOL(const std::string& text);
-
-  typedef std::vector<std::string> ChildValues;
-
-  ChildValues childValues_;
-  std::string document_;
-  std::string indentString_;
-  int rightMargin_;
-  int indentSize_;
-  bool addChildValues_;
-};
-
-/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
- human friendly way,
-     to a stream rather than to a string.
- *
- * The rules for line break and indent are as follow:
- * - Object value:
- *     - if empty then print {} without indent and line break
- *     - if not empty the print '{', line break & indent, print one value per
- line
- *       and then unindent and line break and print '}'.
- * - Array value:
- *     - if empty then print [] without indent and line break
- *     - if the array contains no object value, empty array or some other value
- types,
- *       and all the values fit on one lines, then print the array on a single
- line.
- *     - otherwise, it the values do not fit on one line, or the array contains
- *       object or non empty array, then print one value per line.
- *
- * If the Value have comments then they are outputed according to their
- #CommentPlacement.
- *
- * \param indentation Each level will be indented by this amount extra.
- * \sa Reader, Value, Value::setComment()
- * \deprecated Use StreamWriterBuilder.
- */
-class JSON_API StyledStreamWriter {
-public:
-  StyledStreamWriter(std::string indentation = "\t");
-  ~StyledStreamWriter() {}
-
-public:
-  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
-   * \param out Stream to write to. (Can be ostringstream, e.g.)
-   * \param root Value to serialize.
-   * \note There is no point in deriving from Writer, since write() should not
-   * return a value.
-   */
-  void write(std::ostream& out, const Value& root);
-
-private:
-  void writeValue(const Value& value);
-  void writeArrayValue(const Value& value);
-  bool isMultineArray(const Value& value);
-  void pushValue(const std::string& value);
-  void writeIndent();
-  void writeWithIndent(const std::string& value);
-  void indent();
-  void unindent();
-  void writeCommentBeforeValue(const Value& root);
-  void writeCommentAfterValueOnSameLine(const Value& root);
-  bool hasCommentForValue(const Value& value);
-  static std::string normalizeEOL(const std::string& text);
-
-  typedef std::vector<std::string> ChildValues;
-
-  ChildValues childValues_;
-  std::ostream* document_;
-  std::string indentString_;
-  int rightMargin_;
-  std::string indentation_;
-  bool addChildValues_ : 1;
-  bool indented_ : 1;
-};
-
-#if defined(JSON_HAS_INT64)
-std::string JSON_API valueToString(Int value);
-std::string JSON_API valueToString(UInt value);
-#endif // if defined(JSON_HAS_INT64)
-std::string JSON_API valueToString(LargestInt value);
-std::string JSON_API valueToString(LargestUInt value);
-std::string JSON_API valueToString(double value);
-std::string JSON_API valueToString(bool value);
-std::string JSON_API valueToQuotedString(const char* value);
-
-/// \brief Output using the StyledStreamWriter.
-/// \see Json::operator>>()
-JSON_API std::ostream& operator<<(std::ostream&, const Value& root);
-
-} // namespace Json
-
-#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-#pragma warning(pop)
-#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
-
-#endif // JSON_WRITER_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/writer.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: include/json/assertions.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED
-#define CPPTL_JSON_ASSERTIONS_H_INCLUDED
-
-#include <stdlib.h>
-#include <sstream>
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include "config.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-/** It should not be possible for a maliciously designed file to
- *  cause an abort() or seg-fault, so these macros are used only
- *  for pre-condition violations and internal logic errors.
- */
-#if JSON_USE_EXCEPTION
-
-// @todo <= add detail about condition in exception
-# define JSON_ASSERT(condition)                                                \
-  {if (!(condition)) {Json::throwLogicError( "assert json failed" );}}
-
-# define JSON_FAIL_MESSAGE(message)                                            \
-  {                                                                            \
-    std::ostringstream oss; oss << message;                                    \
-    Json::throwLogicError(oss.str());                                          \
-    abort();                                                                   \
-  }
-
-#else // JSON_USE_EXCEPTION
-
-# define JSON_ASSERT(condition) assert(condition)
-
-// The call to assert() will show the failure message in debug builds. In
-// release builds we abort, for a core-dump or debugger.
-# define JSON_FAIL_MESSAGE(message)                                            \
-  {                                                                            \
-    std::ostringstream oss; oss << message;                                    \
-    assert(false && oss.str().c_str());                                        \
-    abort();                                                                   \
-  }
-
-
-#endif
-
-#define JSON_ASSERT_MESSAGE(condition, message)                                \
-  if (!(condition)) {                                                          \
-    JSON_FAIL_MESSAGE(message);                                                \
-  }
-
-#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: include/json/assertions.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-#endif //ifndef JSON_AMALGATED_H_INCLUDED

+ 0 - 5192
conformance/third_party/jsoncpp/jsoncpp.cpp

@@ -1,5192 +0,0 @@
-/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).
-/// It is intended to be used with #include "json/json.h"
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: LICENSE
-// //////////////////////////////////////////////////////////////////////
-
-/*
-The JsonCpp library's source code, including accompanying documentation, 
-tests and demonstration applications, are licensed under the following
-conditions...
-
-The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
-jurisdictions which recognize such a disclaimer. In such jurisdictions, 
-this software is released into the Public Domain.
-
-In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
-2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
-released under the terms of the MIT License (see below).
-
-In jurisdictions which recognize Public Domain property, the user of this 
-software may choose to accept it either as 1) Public Domain, 2) under the 
-conditions of the MIT License (see below), or 3) under the terms of dual 
-Public Domain/MIT License conditions described here, as they choose.
-
-The MIT License is about as close to Public Domain as a license can get, and is
-described in clear, concise terms at:
-
-   http://en.wikipedia.org/wiki/MIT_License
-   
-The full text of the MIT License follows:
-
-========================================================================
-Copyright (c) 2007-2010 Baptiste Lepilleur
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use, copy,
-modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-========================================================================
-(END LICENSE TEXT)
-
-The MIT license is compatible with both the GPL and commercial
-software, affording one all of the rights of Public Domain with the
-minor nuisance of being required to keep the above copyright notice
-and license text in the source code. Note also that by accepting the
-Public Domain "license" you can re-license your copy using whatever
-license you like.
-
-*/
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: LICENSE
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-#include "third_party/jsoncpp/json.h"
-
-#ifndef JSON_IS_AMALGAMATION
-#error "Compile with -I PATH_TO_JSON_DIRECTORY"
-#endif
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: src/lib_json/json_tool.h
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
-#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
-
-/* This header provides common string manipulation support, such as UTF-8,
- * portable conversion from/to string...
- *
- * It is an internal header that must not be exposed.
- */
-
-namespace Json {
-
-/// Converts a unicode code-point to UTF-8.
-static inline std::string codePointToUTF8(unsigned int cp) {
-  std::string result;
-
-  // based on description from http://en.wikipedia.org/wiki/UTF-8
-
-  if (cp <= 0x7f) {
-    result.resize(1);
-    result[0] = static_cast<char>(cp);
-  } else if (cp <= 0x7FF) {
-    result.resize(2);
-    result[1] = static_cast<char>(0x80 | (0x3f & cp));
-    result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
-  } else if (cp <= 0xFFFF) {
-    result.resize(3);
-    result[2] = static_cast<char>(0x80 | (0x3f & cp));
-    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
-    result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12)));
-  } else if (cp <= 0x10FFFF) {
-    result.resize(4);
-    result[3] = static_cast<char>(0x80 | (0x3f & cp));
-    result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
-    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
-    result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
-  }
-
-  return result;
-}
-
-/// Returns true if ch is a control character (in range [1,31]).
-static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; }
-
-enum {
-  /// Constant that specify the size of the buffer that must be passed to
-  /// uintToString.
-  uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1
-};
-
-// Defines a char buffer for use with uintToString().
-typedef char UIntToStringBuffer[uintToStringBufferSize];
-
-/** Converts an unsigned integer to string.
- * @param value Unsigned interger to convert to string
- * @param current Input/Output string buffer.
- *        Must have at least uintToStringBufferSize chars free.
- */
-static inline void uintToString(LargestUInt value, char*& current) {
-  *--current = 0;
-  do {
-    *--current = static_cast<signed char>(value % 10U + static_cast<unsigned>('0'));
-    value /= 10;
-  } while (value != 0);
-}
-
-/** Change ',' to '.' everywhere in buffer.
- *
- * We had a sophisticated way, but it did not work in WinCE.
- * @see https://github.com/open-source-parsers/jsoncpp/pull/9
- */
-static inline void fixNumericLocale(char* begin, char* end) {
-  while (begin < end) {
-    if (*begin == ',') {
-      *begin = '.';
-    }
-    ++begin;
-  }
-}
-
-} // namespace Json {
-
-#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: src/lib_json/json_tool.h
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: src/lib_json/json_reader.cpp
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2011 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include <json/assertions.h>
-#include <json/reader.h>
-#include <json/value.h>
-#include "json_tool.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <utility>
-#include <cstdio>
-#include <cassert>
-#include <cstring>
-#include <istream>
-#include <sstream>
-#include <memory>
-#include <set>
-#include <limits>
-
-#if defined(_MSC_VER)
-#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above 
-#define snprintf sprintf_s
-#elif _MSC_VER >= 1900 // VC++ 14.0 and above
-#define snprintf std::snprintf
-#else
-#define snprintf _snprintf
-#endif
-#elif defined(__ANDROID__) || defined(__QNXNTO__)
-#define snprintf snprintf
-#elif __cplusplus >= 201103L
-#define snprintf std::snprintf
-#endif
-
-#if defined(__QNXNTO__)
-#define sscanf std::sscanf
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
-// Disable warning about strdup being deprecated.
-#pragma warning(disable : 4996)
-#endif
-
-static int const stackLimit_g = 1000;
-static int       stackDepth_g = 0;  // see readValue()
-
-namespace Json {
-
-#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
-typedef std::unique_ptr<CharReader> CharReaderPtr;
-#else
-typedef std::auto_ptr<CharReader>   CharReaderPtr;
-#endif
-
-// Implementation of class Features
-// ////////////////////////////////
-
-Features::Features()
-    : allowComments_(true), strictRoot_(false),
-      allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {}
-
-Features Features::all() { return Features(); }
-
-Features Features::strictMode() {
-  Features features;
-  features.allowComments_ = false;
-  features.strictRoot_ = true;
-  features.allowDroppedNullPlaceholders_ = false;
-  features.allowNumericKeys_ = false;
-  return features;
-}
-
-// Implementation of class Reader
-// ////////////////////////////////
-
-static bool containsNewLine(Reader::Location begin, Reader::Location end) {
-  for (; begin < end; ++begin)
-    if (*begin == '\n' || *begin == '\r')
-      return true;
-  return false;
-}
-
-// Class Reader
-// //////////////////////////////////////////////////////////////////
-
-Reader::Reader()
-    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
-      lastValue_(), commentsBefore_(), features_(Features::all()),
-      collectComments_() {}
-
-Reader::Reader(const Features& features)
-    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
-      lastValue_(), commentsBefore_(), features_(features), collectComments_() {
-}
-
-bool
-Reader::parse(const std::string& document, Value& root, bool collectComments) {
-  document_ = document;
-  const char* begin = document_.c_str();
-  const char* end = begin + document_.length();
-  return parse(begin, end, root, collectComments);
-}
-
-bool Reader::parse(std::istream& sin, Value& root, bool collectComments) {
-  // std::istream_iterator<char> begin(sin);
-  // std::istream_iterator<char> end;
-  // Those would allow streamed input from a file, if parse() were a
-  // template function.
-
-  // Since std::string is reference-counted, this at least does not
-  // create an extra copy.
-  std::string doc;
-  std::getline(sin, doc, (char)EOF);
-  return parse(doc, root, collectComments);
-}
-
-bool Reader::parse(const char* beginDoc,
-                   const char* endDoc,
-                   Value& root,
-                   bool collectComments) {
-  if (!features_.allowComments_) {
-    collectComments = false;
-  }
-
-  begin_ = beginDoc;
-  end_ = endDoc;
-  collectComments_ = collectComments;
-  current_ = begin_;
-  lastValueEnd_ = 0;
-  lastValue_ = 0;
-  commentsBefore_ = "";
-  errors_.clear();
-  while (!nodes_.empty())
-    nodes_.pop();
-  nodes_.push(&root);
-
-  stackDepth_g = 0;  // Yes, this is bad coding, but options are limited.
-  bool successful = readValue();
-  Token token;
-  skipCommentTokens(token);
-  if (collectComments_ && !commentsBefore_.empty())
-    root.setComment(commentsBefore_, commentAfter);
-  if (features_.strictRoot_) {
-    if (!root.isArray() && !root.isObject()) {
-      // Set error location to start of doc, ideally should be first token found
-      // in doc
-      token.type_ = tokenError;
-      token.start_ = beginDoc;
-      token.end_ = endDoc;
-      addError(
-          "A valid JSON document must be either an array or an object value.",
-          token);
-      return false;
-    }
-  }
-  return successful;
-}
-
-bool Reader::readValue() {
-  // This is a non-reentrant way to support a stackLimit. Terrible!
-  // But this deprecated class has a security problem: Bad input can
-  // cause a seg-fault. This seems like a fair, binary-compatible way
-  // to prevent the problem.
-  if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue().");
-  ++stackDepth_g;
-
-  Token token;
-  skipCommentTokens(token);
-  bool successful = true;
-
-  if (collectComments_ && !commentsBefore_.empty()) {
-    currentValue().setComment(commentsBefore_, commentBefore);
-    commentsBefore_ = "";
-  }
-
-  switch (token.type_) {
-  case tokenObjectBegin:
-    successful = readObject(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenArrayBegin:
-    successful = readArray(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenNumber:
-    successful = decodeNumber(token);
-    break;
-  case tokenString:
-    successful = decodeString(token);
-    break;
-  case tokenTrue:
-    {
-    Value v(true);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenFalse:
-    {
-    Value v(false);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNull:
-    {
-    Value v;
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenArraySeparator:
-  case tokenObjectEnd:
-  case tokenArrayEnd:
-    if (features_.allowDroppedNullPlaceholders_) {
-      // "Un-read" the current token and mark the current value as a null
-      // token.
-      current_--;
-      Value v;
-      currentValue().swapPayload(v);
-      currentValue().setOffsetStart(current_ - begin_ - 1);
-      currentValue().setOffsetLimit(current_ - begin_);
-      break;
-    } // Else, fall through...
-  default:
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    return addError("Syntax error: value, object or array expected.", token);
-  }
-
-  if (collectComments_) {
-    lastValueEnd_ = current_;
-    lastValue_ = &currentValue();
-  }
-
-  --stackDepth_g;
-  return successful;
-}
-
-void Reader::skipCommentTokens(Token& token) {
-  if (features_.allowComments_) {
-    do {
-      readToken(token);
-    } while (token.type_ == tokenComment);
-  } else {
-    readToken(token);
-  }
-}
-
-bool Reader::readToken(Token& token) {
-  skipSpaces();
-  token.start_ = current_;
-  Char c = getNextChar();
-  bool ok = true;
-  switch (c) {
-  case '{':
-    token.type_ = tokenObjectBegin;
-    break;
-  case '}':
-    token.type_ = tokenObjectEnd;
-    break;
-  case '[':
-    token.type_ = tokenArrayBegin;
-    break;
-  case ']':
-    token.type_ = tokenArrayEnd;
-    break;
-  case '"':
-    token.type_ = tokenString;
-    ok = readString();
-    break;
-  case '/':
-    token.type_ = tokenComment;
-    ok = readComment();
-    break;
-  case '0':
-  case '1':
-  case '2':
-  case '3':
-  case '4':
-  case '5':
-  case '6':
-  case '7':
-  case '8':
-  case '9':
-  case '-':
-    token.type_ = tokenNumber;
-    readNumber();
-    break;
-  case 't':
-    token.type_ = tokenTrue;
-    ok = match("rue", 3);
-    break;
-  case 'f':
-    token.type_ = tokenFalse;
-    ok = match("alse", 4);
-    break;
-  case 'n':
-    token.type_ = tokenNull;
-    ok = match("ull", 3);
-    break;
-  case ',':
-    token.type_ = tokenArraySeparator;
-    break;
-  case ':':
-    token.type_ = tokenMemberSeparator;
-    break;
-  case 0:
-    token.type_ = tokenEndOfStream;
-    break;
-  default:
-    ok = false;
-    break;
-  }
-  if (!ok)
-    token.type_ = tokenError;
-  token.end_ = current_;
-  return true;
-}
-
-void Reader::skipSpaces() {
-  while (current_ != end_) {
-    Char c = *current_;
-    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
-      ++current_;
-    else
-      break;
-  }
-}
-
-bool Reader::match(Location pattern, int patternLength) {
-  if (end_ - current_ < patternLength)
-    return false;
-  int index = patternLength;
-  while (index--)
-    if (current_[index] != pattern[index])
-      return false;
-  current_ += patternLength;
-  return true;
-}
-
-bool Reader::readComment() {
-  Location commentBegin = current_ - 1;
-  Char c = getNextChar();
-  bool successful = false;
-  if (c == '*')
-    successful = readCStyleComment();
-  else if (c == '/')
-    successful = readCppStyleComment();
-  if (!successful)
-    return false;
-
-  if (collectComments_) {
-    CommentPlacement placement = commentBefore;
-    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
-      if (c != '*' || !containsNewLine(commentBegin, current_))
-        placement = commentAfterOnSameLine;
-    }
-
-    addComment(commentBegin, current_, placement);
-  }
-  return true;
-}
-
-static std::string normalizeEOL(Reader::Location begin, Reader::Location end) {
-  std::string normalized;
-  normalized.reserve(end - begin);
-  Reader::Location current = begin;
-  while (current != end) {
-    char c = *current++;
-    if (c == '\r') {
-      if (current != end && *current == '\n')
-         // convert dos EOL
-         ++current;
-      // convert Mac EOL
-      normalized += '\n';
-    } else {
-      normalized += c;
-    }
-  }
-  return normalized;
-}
-
-void
-Reader::addComment(Location begin, Location end, CommentPlacement placement) {
-  assert(collectComments_);
-  const std::string& normalized = normalizeEOL(begin, end);
-  if (placement == commentAfterOnSameLine) {
-    assert(lastValue_ != 0);
-    lastValue_->setComment(normalized, placement);
-  } else {
-    commentsBefore_ += normalized;
-  }
-}
-
-bool Reader::readCStyleComment() {
-  while (current_ != end_) {
-    Char c = getNextChar();
-    if (c == '*' && *current_ == '/')
-      break;
-  }
-  return getNextChar() == '/';
-}
-
-bool Reader::readCppStyleComment() {
-  while (current_ != end_) {
-    Char c = getNextChar();
-    if (c == '\n')
-      break;
-    if (c == '\r') {
-      // Consume DOS EOL. It will be normalized in addComment.
-      if (current_ != end_ && *current_ == '\n')
-        getNextChar();
-      // Break on Moc OS 9 EOL.
-      break;
-    }
-  }
-  return true;
-}
-
-void Reader::readNumber() {
-  const char *p = current_;
-  char c = '0'; // stopgap for already consumed character
-  // integral part
-  while (c >= '0' && c <= '9')
-    c = (current_ = p) < end_ ? *p++ : 0;
-  // fractional part
-  if (c == '.') {
-    c = (current_ = p) < end_ ? *p++ : 0;
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : 0;
-  }
-  // exponential part
-  if (c == 'e' || c == 'E') {
-    c = (current_ = p) < end_ ? *p++ : 0;
-    if (c == '+' || c == '-')
-      c = (current_ = p) < end_ ? *p++ : 0;
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : 0;
-  }
-}
-
-bool Reader::readString() {
-  Char c = 0;
-  while (current_ != end_) {
-    c = getNextChar();
-    if (c == '\\')
-      getNextChar();
-    else if (c == '"')
-      break;
-  }
-  return c == '"';
-}
-
-bool Reader::readObject(Token& tokenStart) {
-  Token tokenName;
-  std::string name;
-  Value init(objectValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  while (readToken(tokenName)) {
-    bool initialTokenOk = true;
-    while (tokenName.type_ == tokenComment && initialTokenOk)
-      initialTokenOk = readToken(tokenName);
-    if (!initialTokenOk)
-      break;
-    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
-      return true;
-    name = "";
-    if (tokenName.type_ == tokenString) {
-      if (!decodeString(tokenName, name))
-        return recoverFromError(tokenObjectEnd);
-    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
-      Value numberName;
-      if (!decodeNumber(tokenName, numberName))
-        return recoverFromError(tokenObjectEnd);
-      name = numberName.asString();
-    } else {
-      break;
-    }
-
-    Token colon;
-    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
-      return addErrorAndRecover(
-          "Missing ':' after object member name", colon, tokenObjectEnd);
-    }
-    Value& value = currentValue()[name];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenObjectEnd);
-
-    Token comma;
-    if (!readToken(comma) ||
-        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
-         comma.type_ != tokenComment)) {
-      return addErrorAndRecover(
-          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
-    }
-    bool finalizeTokenOk = true;
-    while (comma.type_ == tokenComment && finalizeTokenOk)
-      finalizeTokenOk = readToken(comma);
-    if (comma.type_ == tokenObjectEnd)
-      return true;
-  }
-  return addErrorAndRecover(
-      "Missing '}' or object member name", tokenName, tokenObjectEnd);
-}
-
-bool Reader::readArray(Token& tokenStart) {
-  Value init(arrayValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  skipSpaces();
-  if (*current_ == ']') // empty array
-  {
-    Token endArray;
-    readToken(endArray);
-    return true;
-  }
-  int index = 0;
-  for (;;) {
-    Value& value = currentValue()[index++];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenArrayEnd);
-
-    Token token;
-    // Accept Comment after last item in the array.
-    ok = readToken(token);
-    while (token.type_ == tokenComment && ok) {
-      ok = readToken(token);
-    }
-    bool badTokenType =
-        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
-    if (!ok || badTokenType) {
-      return addErrorAndRecover(
-          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
-    }
-    if (token.type_ == tokenArrayEnd)
-      break;
-  }
-  return true;
-}
-
-bool Reader::decodeNumber(Token& token) {
-  Value decoded;
-  if (!decodeNumber(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool Reader::decodeNumber(Token& token, Value& decoded) {
-  // Attempts to parse the number as an integer. If the number is
-  // larger than the maximum supported value of an integer then
-  // we decode the number as a double.
-  Location current = token.start_;
-  bool isNegative = *current == '-';
-  if (isNegative)
-    ++current;
-  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
-  Value::LargestUInt maxIntegerValue =
-      isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1
-                 : Value::maxLargestUInt;
-  Value::LargestUInt threshold = maxIntegerValue / 10;
-  Value::LargestUInt value = 0;
-  while (current < token.end_) {
-    Char c = *current++;
-    if (c < '0' || c > '9')
-      return decodeDouble(token, decoded);
-    Value::UInt digit(c - '0');
-    if (value >= threshold) {
-      // We've hit or exceeded the max value divided by 10 (rounded down). If
-      // a) we've only just touched the limit, b) this is the last digit, and
-      // c) it's small enough to fit in that rounding delta, we're okay.
-      // Otherwise treat this number as a double to avoid overflow.
-      if (value > threshold || current != token.end_ ||
-          digit > maxIntegerValue % 10) {
-        return decodeDouble(token, decoded);
-      }
-    }
-    value = value * 10 + digit;
-  }
-  if (isNegative && value == maxIntegerValue)
-    decoded = Value::minLargestInt;
-  else if (isNegative)
-    decoded = -Value::LargestInt(value);
-  else if (value <= Value::LargestUInt(Value::maxInt))
-    decoded = Value::LargestInt(value);
-  else
-    decoded = value;
-  return true;
-}
-
-bool Reader::decodeDouble(Token& token) {
-  Value decoded;
-  if (!decodeDouble(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool Reader::decodeDouble(Token& token, Value& decoded) {
-  double value = 0;
-  std::string buffer(token.start_, token.end_);
-  std::istringstream is(buffer);
-  if (!(is >> value))
-    return addError("'" + std::string(token.start_, token.end_) +
-                        "' is not a number.",
-                    token);
-  decoded = value;
-  return true;
-}
-
-bool Reader::decodeString(Token& token) {
-  std::string decoded_string;
-  if (!decodeString(token, decoded_string))
-    return false;
-  Value decoded(decoded_string);
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool Reader::decodeString(Token& token, std::string& decoded) {
-  decoded.reserve(token.end_ - token.start_ - 2);
-  Location current = token.start_ + 1; // skip '"'
-  Location end = token.end_ - 1;       // do not include '"'
-  while (current != end) {
-    Char c = *current++;
-    if (c == '"')
-      break;
-    else if (c == '\\') {
-      if (current == end)
-        return addError("Empty escape sequence in string", token, current);
-      Char escape = *current++;
-      switch (escape) {
-      case '"':
-        decoded += '"';
-        break;
-      case '/':
-        decoded += '/';
-        break;
-      case '\\':
-        decoded += '\\';
-        break;
-      case 'b':
-        decoded += '\b';
-        break;
-      case 'f':
-        decoded += '\f';
-        break;
-      case 'n':
-        decoded += '\n';
-        break;
-      case 'r':
-        decoded += '\r';
-        break;
-      case 't':
-        decoded += '\t';
-        break;
-      case 'u': {
-        unsigned int unicode;
-        if (!decodeUnicodeCodePoint(token, current, end, unicode))
-          return false;
-        decoded += codePointToUTF8(unicode);
-      } break;
-      default:
-        return addError("Bad escape sequence in string", token, current);
-      }
-    } else {
-      decoded += c;
-    }
-  }
-  return true;
-}
-
-bool Reader::decodeUnicodeCodePoint(Token& token,
-                                    Location& current,
-                                    Location end,
-                                    unsigned int& unicode) {
-
-  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
-    return false;
-  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
-    // surrogate pairs
-    if (end - current < 6)
-      return addError(
-          "additional six characters expected to parse unicode surrogate pair.",
-          token,
-          current);
-    unsigned int surrogatePair;
-    if (*(current++) == '\\' && *(current++) == 'u') {
-      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
-        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
-      } else
-        return false;
-    } else
-      return addError("expecting another \\u token to begin the second half of "
-                      "a unicode surrogate pair",
-                      token,
-                      current);
-  }
-  return true;
-}
-
-bool Reader::decodeUnicodeEscapeSequence(Token& token,
-                                         Location& current,
-                                         Location end,
-                                         unsigned int& unicode) {
-  if (end - current < 4)
-    return addError(
-        "Bad unicode escape sequence in string: four digits expected.",
-        token,
-        current);
-  unicode = 0;
-  for (int index = 0; index < 4; ++index) {
-    Char c = *current++;
-    unicode *= 16;
-    if (c >= '0' && c <= '9')
-      unicode += c - '0';
-    else if (c >= 'a' && c <= 'f')
-      unicode += c - 'a' + 10;
-    else if (c >= 'A' && c <= 'F')
-      unicode += c - 'A' + 10;
-    else
-      return addError(
-          "Bad unicode escape sequence in string: hexadecimal digit expected.",
-          token,
-          current);
-  }
-  return true;
-}
-
-bool
-Reader::addError(const std::string& message, Token& token, Location extra) {
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = extra;
-  errors_.push_back(info);
-  return false;
-}
-
-bool Reader::recoverFromError(TokenType skipUntilToken) {
-  int errorCount = int(errors_.size());
-  Token skip;
-  for (;;) {
-    if (!readToken(skip))
-      errors_.resize(errorCount); // discard errors caused by recovery
-    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
-      break;
-  }
-  errors_.resize(errorCount);
-  return false;
-}
-
-bool Reader::addErrorAndRecover(const std::string& message,
-                                Token& token,
-                                TokenType skipUntilToken) {
-  addError(message, token);
-  return recoverFromError(skipUntilToken);
-}
-
-Value& Reader::currentValue() { return *(nodes_.top()); }
-
-Reader::Char Reader::getNextChar() {
-  if (current_ == end_)
-    return 0;
-  return *current_++;
-}
-
-void Reader::getLocationLineAndColumn(Location location,
-                                      int& line,
-                                      int& column) const {
-  Location current = begin_;
-  Location lastLineStart = current;
-  line = 0;
-  while (current < location && current != end_) {
-    Char c = *current++;
-    if (c == '\r') {
-      if (*current == '\n')
-        ++current;
-      lastLineStart = current;
-      ++line;
-    } else if (c == '\n') {
-      lastLineStart = current;
-      ++line;
-    }
-  }
-  // column & line start at 1
-  column = int(location - lastLineStart) + 1;
-  ++line;
-}
-
-std::string Reader::getLocationLineAndColumn(Location location) const {
-  int line, column;
-  getLocationLineAndColumn(location, line, column);
-  char buffer[18 + 16 + 16 + 1];
-  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
-  return buffer;
-}
-
-// Deprecated. Preserved for backward compatibility
-std::string Reader::getFormatedErrorMessages() const {
-  return getFormattedErrorMessages();
-}
-
-std::string Reader::getFormattedErrorMessages() const {
-  std::string formattedMessage;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    formattedMessage +=
-        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
-    formattedMessage += "  " + error.message_ + "\n";
-    if (error.extra_)
-      formattedMessage +=
-          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
-  }
-  return formattedMessage;
-}
-
-std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
-  std::vector<Reader::StructuredError> allErrors;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    Reader::StructuredError structured;
-    structured.offset_start = error.token_.start_ - begin_;
-    structured.offset_limit = error.token_.end_ - begin_;
-    structured.message = error.message_;
-    allErrors.push_back(structured);
-  }
-  return allErrors;
-}
-
-bool Reader::pushError(const Value& value, const std::string& message) {
-  size_t length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = end_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = 0;
-  errors_.push_back(info);
-  return true;
-}
-
-bool Reader::pushError(const Value& value, const std::string& message, const Value& extra) {
-  size_t length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length
-    || extra.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = begin_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = begin_ + extra.getOffsetStart();
-  errors_.push_back(info);
-  return true;
-}
-
-bool Reader::good() const {
-  return !errors_.size();
-}
-
-// exact copy of Features
-class OurFeatures {
-public:
-  static OurFeatures all();
-  bool allowComments_;
-  bool strictRoot_;
-  bool allowDroppedNullPlaceholders_;
-  bool allowNumericKeys_;
-  bool allowSingleQuotes_;
-  bool failIfExtra_;
-  bool rejectDupKeys_;
-  bool allowSpecialFloats_;
-  int stackLimit_;
-};  // OurFeatures
-
-// exact copy of Implementation of class Features
-// ////////////////////////////////
-
-OurFeatures OurFeatures::all() { return OurFeatures(); }
-
-// Implementation of class Reader
-// ////////////////////////////////
-
-// exact copy of Reader, renamed to OurReader
-class OurReader {
-public:
-  typedef char Char;
-  typedef const Char* Location;
-  struct StructuredError {
-    size_t offset_start;
-    size_t offset_limit;
-    std::string message;
-  };
-
-  OurReader(OurFeatures const& features);
-  bool parse(const char* beginDoc,
-             const char* endDoc,
-             Value& root,
-             bool collectComments = true);
-  std::string getFormattedErrorMessages() const;
-  std::vector<StructuredError> getStructuredErrors() const;
-  bool pushError(const Value& value, const std::string& message);
-  bool pushError(const Value& value, const std::string& message, const Value& extra);
-  bool good() const;
-
-private:
-  OurReader(OurReader const&);  // no impl
-  void operator=(OurReader const&);  // no impl
-
-  enum TokenType {
-    tokenEndOfStream = 0,
-    tokenObjectBegin,
-    tokenObjectEnd,
-    tokenArrayBegin,
-    tokenArrayEnd,
-    tokenString,
-    tokenNumber,
-    tokenTrue,
-    tokenFalse,
-    tokenNull,
-    tokenNaN,
-    tokenPosInf,
-    tokenNegInf,
-    tokenArraySeparator,
-    tokenMemberSeparator,
-    tokenComment,
-    tokenError
-  };
-
-  class Token {
-  public:
-    TokenType type_;
-    Location start_;
-    Location end_;
-  };
-
-  class ErrorInfo {
-  public:
-    Token token_;
-    std::string message_;
-    Location extra_;
-  };
-
-  typedef std::deque<ErrorInfo> Errors;
-
-  bool readToken(Token& token);
-  void skipSpaces();
-  bool match(Location pattern, int patternLength);
-  bool readComment();
-  bool readCStyleComment();
-  bool readCppStyleComment();
-  bool readString();
-  bool readStringSingleQuote();
-  bool readNumber(bool checkInf);
-  bool readValue();
-  bool readObject(Token& token);
-  bool readArray(Token& token);
-  bool decodeNumber(Token& token);
-  bool decodeNumber(Token& token, Value& decoded);
-  bool decodeString(Token& token);
-  bool decodeString(Token& token, std::string& decoded);
-  bool decodeDouble(Token& token);
-  bool decodeDouble(Token& token, Value& decoded);
-  bool decodeUnicodeCodePoint(Token& token,
-                              Location& current,
-                              Location end,
-                              unsigned int& unicode);
-  bool decodeUnicodeEscapeSequence(Token& token,
-                                   Location& current,
-                                   Location end,
-                                   unsigned int& unicode);
-  bool addError(const std::string& message, Token& token, Location extra = 0);
-  bool recoverFromError(TokenType skipUntilToken);
-  bool addErrorAndRecover(const std::string& message,
-                          Token& token,
-                          TokenType skipUntilToken);
-  void skipUntilSpace();
-  Value& currentValue();
-  Char getNextChar();
-  void
-  getLocationLineAndColumn(Location location, int& line, int& column) const;
-  std::string getLocationLineAndColumn(Location location) const;
-  void addComment(Location begin, Location end, CommentPlacement placement);
-  void skipCommentTokens(Token& token);
-
-  typedef std::stack<Value*> Nodes;
-  Nodes nodes_;
-  Errors errors_;
-  std::string document_;
-  Location begin_;
-  Location end_;
-  Location current_;
-  Location lastValueEnd_;
-  Value* lastValue_;
-  std::string commentsBefore_;
-  int stackDepth_;
-
-  OurFeatures const features_;
-  bool collectComments_;
-};  // OurReader
-
-// complete copy of Read impl, for OurReader
-
-OurReader::OurReader(OurFeatures const& features)
-    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
-      lastValue_(), commentsBefore_(),
-      stackDepth_(0),
-      features_(features), collectComments_() {
-}
-
-bool OurReader::parse(const char* beginDoc,
-                   const char* endDoc,
-                   Value& root,
-                   bool collectComments) {
-  if (!features_.allowComments_) {
-    collectComments = false;
-  }
-
-  begin_ = beginDoc;
-  end_ = endDoc;
-  collectComments_ = collectComments;
-  current_ = begin_;
-  lastValueEnd_ = 0;
-  lastValue_ = 0;
-  commentsBefore_ = "";
-  errors_.clear();
-  while (!nodes_.empty())
-    nodes_.pop();
-  nodes_.push(&root);
-
-  stackDepth_ = 0;
-  bool successful = readValue();
-  Token token;
-  skipCommentTokens(token);
-  if (features_.failIfExtra_) {
-    if (token.type_ != tokenError && token.type_ != tokenEndOfStream) {
-      addError("Extra non-whitespace after JSON value.", token);
-      return false;
-    }
-  }
-  if (collectComments_ && !commentsBefore_.empty())
-    root.setComment(commentsBefore_, commentAfter);
-  if (features_.strictRoot_) {
-    if (!root.isArray() && !root.isObject()) {
-      // Set error location to start of doc, ideally should be first token found
-      // in doc
-      token.type_ = tokenError;
-      token.start_ = beginDoc;
-      token.end_ = endDoc;
-      addError(
-          "A valid JSON document must be either an array or an object value.",
-          token);
-      return false;
-    }
-  }
-  return successful;
-}
-
-bool OurReader::readValue() {
-  if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue().");
-  ++stackDepth_;
-  Token token;
-  skipCommentTokens(token);
-  bool successful = true;
-
-  if (collectComments_ && !commentsBefore_.empty()) {
-    currentValue().setComment(commentsBefore_, commentBefore);
-    commentsBefore_ = "";
-  }
-
-  switch (token.type_) {
-  case tokenObjectBegin:
-    successful = readObject(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenArrayBegin:
-    successful = readArray(token);
-    currentValue().setOffsetLimit(current_ - begin_);
-    break;
-  case tokenNumber:
-    successful = decodeNumber(token);
-    break;
-  case tokenString:
-    successful = decodeString(token);
-    break;
-  case tokenTrue:
-    {
-    Value v(true);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenFalse:
-    {
-    Value v(false);
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNull:
-    {
-    Value v;
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNaN:
-    {
-    Value v(std::numeric_limits<double>::quiet_NaN());
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenPosInf:
-    {
-    Value v(std::numeric_limits<double>::infinity());
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenNegInf:
-    {
-    Value v(-std::numeric_limits<double>::infinity());
-    currentValue().swapPayload(v);
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    }
-    break;
-  case tokenArraySeparator:
-  case tokenObjectEnd:
-  case tokenArrayEnd:
-    if (features_.allowDroppedNullPlaceholders_) {
-      // "Un-read" the current token and mark the current value as a null
-      // token.
-      current_--;
-      Value v;
-      currentValue().swapPayload(v);
-      currentValue().setOffsetStart(current_ - begin_ - 1);
-      currentValue().setOffsetLimit(current_ - begin_);
-      break;
-    } // else, fall through ...
-  default:
-    currentValue().setOffsetStart(token.start_ - begin_);
-    currentValue().setOffsetLimit(token.end_ - begin_);
-    return addError("Syntax error: value, object or array expected.", token);
-  }
-
-  if (collectComments_) {
-    lastValueEnd_ = current_;
-    lastValue_ = &currentValue();
-  }
-
-  --stackDepth_;
-  return successful;
-}
-
-void OurReader::skipCommentTokens(Token& token) {
-  if (features_.allowComments_) {
-    do {
-      readToken(token);
-    } while (token.type_ == tokenComment);
-  } else {
-    readToken(token);
-  }
-}
-
-bool OurReader::readToken(Token& token) {
-  skipSpaces();
-  token.start_ = current_;
-  Char c = getNextChar();
-  bool ok = true;
-  switch (c) {
-  case '{':
-    token.type_ = tokenObjectBegin;
-    break;
-  case '}':
-    token.type_ = tokenObjectEnd;
-    break;
-  case '[':
-    token.type_ = tokenArrayBegin;
-    break;
-  case ']':
-    token.type_ = tokenArrayEnd;
-    break;
-  case '"':
-    token.type_ = tokenString;
-    ok = readString();
-    break;
-  case '\'':
-    if (features_.allowSingleQuotes_) {
-    token.type_ = tokenString;
-    ok = readStringSingleQuote();
-    break;
-    } // else continue
-  case '/':
-    token.type_ = tokenComment;
-    ok = readComment();
-    break;
-  case '0':
-  case '1':
-  case '2':
-  case '3':
-  case '4':
-  case '5':
-  case '6':
-  case '7':
-  case '8':
-  case '9':
-    token.type_ = tokenNumber;
-    readNumber(false);
-    break;
-  case '-':
-    if (readNumber(true)) {
-      token.type_ = tokenNumber;
-    } else {
-      token.type_ = tokenNegInf;
-      ok = features_.allowSpecialFloats_ && match("nfinity", 7);
-    }
-    break;
-  case 't':
-    token.type_ = tokenTrue;
-    ok = match("rue", 3);
-    break;
-  case 'f':
-    token.type_ = tokenFalse;
-    ok = match("alse", 4);
-    break;
-  case 'n':
-    token.type_ = tokenNull;
-    ok = match("ull", 3);
-    break;
-  case 'N':
-    if (features_.allowSpecialFloats_) {
-      token.type_ = tokenNaN;
-      ok = match("aN", 2);
-    } else {
-      ok = false;
-    }
-    break;
-  case 'I':
-    if (features_.allowSpecialFloats_) {
-      token.type_ = tokenPosInf;
-      ok = match("nfinity", 7);
-    } else {
-      ok = false;
-    }
-    break;
-  case ',':
-    token.type_ = tokenArraySeparator;
-    break;
-  case ':':
-    token.type_ = tokenMemberSeparator;
-    break;
-  case 0:
-    token.type_ = tokenEndOfStream;
-    break;
-  default:
-    ok = false;
-    break;
-  }
-  if (!ok)
-    token.type_ = tokenError;
-  token.end_ = current_;
-  return true;
-}
-
-void OurReader::skipSpaces() {
-  while (current_ != end_) {
-    Char c = *current_;
-    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
-      ++current_;
-    else
-      break;
-  }
-}
-
-bool OurReader::match(Location pattern, int patternLength) {
-  if (end_ - current_ < patternLength)
-    return false;
-  int index = patternLength;
-  while (index--)
-    if (current_[index] != pattern[index])
-      return false;
-  current_ += patternLength;
-  return true;
-}
-
-bool OurReader::readComment() {
-  Location commentBegin = current_ - 1;
-  Char c = getNextChar();
-  bool successful = false;
-  if (c == '*')
-    successful = readCStyleComment();
-  else if (c == '/')
-    successful = readCppStyleComment();
-  if (!successful)
-    return false;
-
-  if (collectComments_) {
-    CommentPlacement placement = commentBefore;
-    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
-      if (c != '*' || !containsNewLine(commentBegin, current_))
-        placement = commentAfterOnSameLine;
-    }
-
-    addComment(commentBegin, current_, placement);
-  }
-  return true;
-}
-
-void
-OurReader::addComment(Location begin, Location end, CommentPlacement placement) {
-  assert(collectComments_);
-  const std::string& normalized = normalizeEOL(begin, end);
-  if (placement == commentAfterOnSameLine) {
-    assert(lastValue_ != 0);
-    lastValue_->setComment(normalized, placement);
-  } else {
-    commentsBefore_ += normalized;
-  }
-}
-
-bool OurReader::readCStyleComment() {
-  while (current_ != end_) {
-    Char c = getNextChar();
-    if (c == '*' && *current_ == '/')
-      break;
-  }
-  return getNextChar() == '/';
-}
-
-bool OurReader::readCppStyleComment() {
-  while (current_ != end_) {
-    Char c = getNextChar();
-    if (c == '\n')
-      break;
-    if (c == '\r') {
-      // Consume DOS EOL. It will be normalized in addComment.
-      if (current_ != end_ && *current_ == '\n')
-        getNextChar();
-      // Break on Moc OS 9 EOL.
-      break;
-    }
-  }
-  return true;
-}
-
-bool OurReader::readNumber(bool checkInf) {
-  const char *p = current_;
-  if (checkInf && p != end_ && *p == 'I') {
-    current_ = ++p;
-    return false;
-  }
-  char c = '0'; // stopgap for already consumed character
-  // integral part
-  while (c >= '0' && c <= '9')
-    c = (current_ = p) < end_ ? *p++ : 0;
-  // fractional part
-  if (c == '.') {
-    c = (current_ = p) < end_ ? *p++ : 0;
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : 0;
-  }
-  // exponential part
-  if (c == 'e' || c == 'E') {
-    c = (current_ = p) < end_ ? *p++ : 0;
-    if (c == '+' || c == '-')
-      c = (current_ = p) < end_ ? *p++ : 0;
-    while (c >= '0' && c <= '9')
-      c = (current_ = p) < end_ ? *p++ : 0;
-  }
-  return true;
-}
-bool OurReader::readString() {
-  Char c = 0;
-  while (current_ != end_) {
-    c = getNextChar();
-    if (c == '\\')
-      getNextChar();
-    else if (c == '"')
-      break;
-  }
-  return c == '"';
-}
-
-
-bool OurReader::readStringSingleQuote() {
-  Char c = 0;
-  while (current_ != end_) {
-    c = getNextChar();
-    if (c == '\\')
-      getNextChar();
-    else if (c == '\'')
-      break;
-  }
-  return c == '\'';
-}
-
-bool OurReader::readObject(Token& tokenStart) {
-  Token tokenName;
-  std::string name;
-  Value init(objectValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  while (readToken(tokenName)) {
-    bool initialTokenOk = true;
-    while (tokenName.type_ == tokenComment && initialTokenOk)
-      initialTokenOk = readToken(tokenName);
-    if (!initialTokenOk)
-      break;
-    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
-      return true;
-    name = "";
-    if (tokenName.type_ == tokenString) {
-      if (!decodeString(tokenName, name))
-        return recoverFromError(tokenObjectEnd);
-    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
-      Value numberName;
-      if (!decodeNumber(tokenName, numberName))
-        return recoverFromError(tokenObjectEnd);
-      name = numberName.asString();
-    } else {
-      break;
-    }
-
-    Token colon;
-    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
-      return addErrorAndRecover(
-          "Missing ':' after object member name", colon, tokenObjectEnd);
-    }
-    if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30");
-    if (features_.rejectDupKeys_ && currentValue().isMember(name)) {
-      std::string msg = "Duplicate key: '" + name + "'";
-      return addErrorAndRecover(
-          msg, tokenName, tokenObjectEnd);
-    }
-    Value& value = currentValue()[name];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenObjectEnd);
-
-    Token comma;
-    if (!readToken(comma) ||
-        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
-         comma.type_ != tokenComment)) {
-      return addErrorAndRecover(
-          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
-    }
-    bool finalizeTokenOk = true;
-    while (comma.type_ == tokenComment && finalizeTokenOk)
-      finalizeTokenOk = readToken(comma);
-    if (comma.type_ == tokenObjectEnd)
-      return true;
-  }
-  return addErrorAndRecover(
-      "Missing '}' or object member name", tokenName, tokenObjectEnd);
-}
-
-bool OurReader::readArray(Token& tokenStart) {
-  Value init(arrayValue);
-  currentValue().swapPayload(init);
-  currentValue().setOffsetStart(tokenStart.start_ - begin_);
-  skipSpaces();
-  if (*current_ == ']') // empty array
-  {
-    Token endArray;
-    readToken(endArray);
-    return true;
-  }
-  int index = 0;
-  for (;;) {
-    Value& value = currentValue()[index++];
-    nodes_.push(&value);
-    bool ok = readValue();
-    nodes_.pop();
-    if (!ok) // error already set
-      return recoverFromError(tokenArrayEnd);
-
-    Token token;
-    // Accept Comment after last item in the array.
-    ok = readToken(token);
-    while (token.type_ == tokenComment && ok) {
-      ok = readToken(token);
-    }
-    bool badTokenType =
-        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
-    if (!ok || badTokenType) {
-      return addErrorAndRecover(
-          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
-    }
-    if (token.type_ == tokenArrayEnd)
-      break;
-  }
-  return true;
-}
-
-bool OurReader::decodeNumber(Token& token) {
-  Value decoded;
-  if (!decodeNumber(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool OurReader::decodeNumber(Token& token, Value& decoded) {
-  // Attempts to parse the number as an integer. If the number is
-  // larger than the maximum supported value of an integer then
-  // we decode the number as a double.
-  Location current = token.start_;
-  bool isNegative = *current == '-';
-  if (isNegative)
-    ++current;
-  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
-  Value::LargestUInt maxIntegerValue =
-      isNegative ? Value::LargestUInt(-Value::minLargestInt)
-                 : Value::maxLargestUInt;
-  Value::LargestUInt threshold = maxIntegerValue / 10;
-  Value::LargestUInt value = 0;
-  while (current < token.end_) {
-    Char c = *current++;
-    if (c < '0' || c > '9')
-      return decodeDouble(token, decoded);
-    Value::UInt digit(c - '0');
-    if (value >= threshold) {
-      // We've hit or exceeded the max value divided by 10 (rounded down). If
-      // a) we've only just touched the limit, b) this is the last digit, and
-      // c) it's small enough to fit in that rounding delta, we're okay.
-      // Otherwise treat this number as a double to avoid overflow.
-      if (value > threshold || current != token.end_ ||
-          digit > maxIntegerValue % 10) {
-        return decodeDouble(token, decoded);
-      }
-    }
-    value = value * 10 + digit;
-  }
-  if (isNegative)
-    decoded = -Value::LargestInt(value);
-  else if (value <= Value::LargestUInt(Value::maxInt))
-    decoded = Value::LargestInt(value);
-  else
-    decoded = value;
-  return true;
-}
-
-bool OurReader::decodeDouble(Token& token) {
-  Value decoded;
-  if (!decodeDouble(token, decoded))
-    return false;
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool OurReader::decodeDouble(Token& token, Value& decoded) {
-  double value = 0;
-  const int bufferSize = 32;
-  int count;
-  int length = int(token.end_ - token.start_);
-
-  // Sanity check to avoid buffer overflow exploits.
-  if (length < 0) {
-    return addError("Unable to parse token length", token);
-  }
-
-  // Avoid using a string constant for the format control string given to
-  // sscanf, as this can cause hard to debug crashes on OS X. See here for more
-  // info:
-  //
-  //     http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html
-  char format[] = "%lf";
-
-  if (length <= bufferSize) {
-    Char buffer[bufferSize + 1];
-    memcpy(buffer, token.start_, length);
-    buffer[length] = 0;
-    count = sscanf(buffer, format, &value);
-  } else {
-    std::string buffer(token.start_, token.end_);
-    count = sscanf(buffer.c_str(), format, &value);
-  }
-
-  if (count != 1)
-    return addError("'" + std::string(token.start_, token.end_) +
-                        "' is not a number.",
-                    token);
-  decoded = value;
-  return true;
-}
-
-bool OurReader::decodeString(Token& token) {
-  std::string decoded_string;
-  if (!decodeString(token, decoded_string))
-    return false;
-  Value decoded(decoded_string);
-  currentValue().swapPayload(decoded);
-  currentValue().setOffsetStart(token.start_ - begin_);
-  currentValue().setOffsetLimit(token.end_ - begin_);
-  return true;
-}
-
-bool OurReader::decodeString(Token& token, std::string& decoded) {
-  decoded.reserve(token.end_ - token.start_ - 2);
-  Location current = token.start_ + 1; // skip '"'
-  Location end = token.end_ - 1;       // do not include '"'
-  while (current != end) {
-    Char c = *current++;
-    if (c == '"')
-      break;
-    else if (c == '\\') {
-      if (current == end)
-        return addError("Empty escape sequence in string", token, current);
-      Char escape = *current++;
-      switch (escape) {
-      case '"':
-        decoded += '"';
-        break;
-      case '/':
-        decoded += '/';
-        break;
-      case '\\':
-        decoded += '\\';
-        break;
-      case 'b':
-        decoded += '\b';
-        break;
-      case 'f':
-        decoded += '\f';
-        break;
-      case 'n':
-        decoded += '\n';
-        break;
-      case 'r':
-        decoded += '\r';
-        break;
-      case 't':
-        decoded += '\t';
-        break;
-      case 'u': {
-        unsigned int unicode;
-        if (!decodeUnicodeCodePoint(token, current, end, unicode))
-          return false;
-        decoded += codePointToUTF8(unicode);
-      } break;
-      default:
-        return addError("Bad escape sequence in string", token, current);
-      }
-    } else {
-      decoded += c;
-    }
-  }
-  return true;
-}
-
-bool OurReader::decodeUnicodeCodePoint(Token& token,
-                                    Location& current,
-                                    Location end,
-                                    unsigned int& unicode) {
-
-  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
-    return false;
-  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
-    // surrogate pairs
-    if (end - current < 6)
-      return addError(
-          "additional six characters expected to parse unicode surrogate pair.",
-          token,
-          current);
-    unsigned int surrogatePair;
-    if (*(current++) == '\\' && *(current++) == 'u') {
-      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
-        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
-      } else
-        return false;
-    } else
-      return addError("expecting another \\u token to begin the second half of "
-                      "a unicode surrogate pair",
-                      token,
-                      current);
-  }
-  return true;
-}
-
-bool OurReader::decodeUnicodeEscapeSequence(Token& token,
-                                         Location& current,
-                                         Location end,
-                                         unsigned int& unicode) {
-  if (end - current < 4)
-    return addError(
-        "Bad unicode escape sequence in string: four digits expected.",
-        token,
-        current);
-  unicode = 0;
-  for (int index = 0; index < 4; ++index) {
-    Char c = *current++;
-    unicode *= 16;
-    if (c >= '0' && c <= '9')
-      unicode += c - '0';
-    else if (c >= 'a' && c <= 'f')
-      unicode += c - 'a' + 10;
-    else if (c >= 'A' && c <= 'F')
-      unicode += c - 'A' + 10;
-    else
-      return addError(
-          "Bad unicode escape sequence in string: hexadecimal digit expected.",
-          token,
-          current);
-  }
-  return true;
-}
-
-bool
-OurReader::addError(const std::string& message, Token& token, Location extra) {
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = extra;
-  errors_.push_back(info);
-  return false;
-}
-
-bool OurReader::recoverFromError(TokenType skipUntilToken) {
-  int errorCount = int(errors_.size());
-  Token skip;
-  for (;;) {
-    if (!readToken(skip))
-      errors_.resize(errorCount); // discard errors caused by recovery
-    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
-      break;
-  }
-  errors_.resize(errorCount);
-  return false;
-}
-
-bool OurReader::addErrorAndRecover(const std::string& message,
-                                Token& token,
-                                TokenType skipUntilToken) {
-  addError(message, token);
-  return recoverFromError(skipUntilToken);
-}
-
-Value& OurReader::currentValue() { return *(nodes_.top()); }
-
-OurReader::Char OurReader::getNextChar() {
-  if (current_ == end_)
-    return 0;
-  return *current_++;
-}
-
-void OurReader::getLocationLineAndColumn(Location location,
-                                      int& line,
-                                      int& column) const {
-  Location current = begin_;
-  Location lastLineStart = current;
-  line = 0;
-  while (current < location && current != end_) {
-    Char c = *current++;
-    if (c == '\r') {
-      if (*current == '\n')
-        ++current;
-      lastLineStart = current;
-      ++line;
-    } else if (c == '\n') {
-      lastLineStart = current;
-      ++line;
-    }
-  }
-  // column & line start at 1
-  column = int(location - lastLineStart) + 1;
-  ++line;
-}
-
-std::string OurReader::getLocationLineAndColumn(Location location) const {
-  int line, column;
-  getLocationLineAndColumn(location, line, column);
-  char buffer[18 + 16 + 16 + 1];
-  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
-  return buffer;
-}
-
-std::string OurReader::getFormattedErrorMessages() const {
-  std::string formattedMessage;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    formattedMessage +=
-        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
-    formattedMessage += "  " + error.message_ + "\n";
-    if (error.extra_)
-      formattedMessage +=
-          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
-  }
-  return formattedMessage;
-}
-
-std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
-  std::vector<OurReader::StructuredError> allErrors;
-  for (Errors::const_iterator itError = errors_.begin();
-       itError != errors_.end();
-       ++itError) {
-    const ErrorInfo& error = *itError;
-    OurReader::StructuredError structured;
-    structured.offset_start = error.token_.start_ - begin_;
-    structured.offset_limit = error.token_.end_ - begin_;
-    structured.message = error.message_;
-    allErrors.push_back(structured);
-  }
-  return allErrors;
-}
-
-bool OurReader::pushError(const Value& value, const std::string& message) {
-  size_t length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = end_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = 0;
-  errors_.push_back(info);
-  return true;
-}
-
-bool OurReader::pushError(const Value& value, const std::string& message, const Value& extra) {
-  size_t length = end_ - begin_;
-  if(value.getOffsetStart() > length
-    || value.getOffsetLimit() > length
-    || extra.getOffsetLimit() > length)
-    return false;
-  Token token;
-  token.type_ = tokenError;
-  token.start_ = begin_ + value.getOffsetStart();
-  token.end_ = begin_ + value.getOffsetLimit();
-  ErrorInfo info;
-  info.token_ = token;
-  info.message_ = message;
-  info.extra_ = begin_ + extra.getOffsetStart();
-  errors_.push_back(info);
-  return true;
-}
-
-bool OurReader::good() const {
-  return !errors_.size();
-}
-
-
-class OurCharReader : public CharReader {
-  bool const collectComments_;
-  OurReader reader_;
-public:
-  OurCharReader(
-    bool collectComments,
-    OurFeatures const& features)
-  : collectComments_(collectComments)
-  , reader_(features)
-  {}
-  bool parse(
-      char const* beginDoc, char const* endDoc,
-      Value* root, std::string* errs) override {
-    bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
-    if (errs) {
-      *errs = reader_.getFormattedErrorMessages();
-    }
-    return ok;
-  }
-};
-
-CharReaderBuilder::CharReaderBuilder()
-{
-  setDefaults(&settings_);
-}
-CharReaderBuilder::~CharReaderBuilder()
-{}
-CharReader* CharReaderBuilder::newCharReader() const
-{
-  bool collectComments = settings_["collectComments"].asBool();
-  OurFeatures features = OurFeatures::all();
-  features.allowComments_ = settings_["allowComments"].asBool();
-  features.strictRoot_ = settings_["strictRoot"].asBool();
-  features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool();
-  features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool();
-  features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool();
-  features.stackLimit_ = settings_["stackLimit"].asInt();
-  features.failIfExtra_ = settings_["failIfExtra"].asBool();
-  features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool();
-  features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool();
-  return new OurCharReader(collectComments, features);
-}
-static void getValidReaderKeys(std::set<std::string>* valid_keys)
-{
-  valid_keys->clear();
-  valid_keys->insert("collectComments");
-  valid_keys->insert("allowComments");
-  valid_keys->insert("strictRoot");
-  valid_keys->insert("allowDroppedNullPlaceholders");
-  valid_keys->insert("allowNumericKeys");
-  valid_keys->insert("allowSingleQuotes");
-  valid_keys->insert("stackLimit");
-  valid_keys->insert("failIfExtra");
-  valid_keys->insert("rejectDupKeys");
-  valid_keys->insert("allowSpecialFloats");
-}
-bool CharReaderBuilder::validate(Json::Value* invalid) const
-{
-  Json::Value my_invalid;
-  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
-  Json::Value& inv = *invalid;
-  std::set<std::string> valid_keys;
-  getValidReaderKeys(&valid_keys);
-  Value::Members keys = settings_.getMemberNames();
-  size_t n = keys.size();
-  for (size_t i = 0; i < n; ++i) {
-    std::string const& key = keys[i];
-    if (valid_keys.find(key) == valid_keys.end()) {
-      inv[key] = settings_[key];
-    }
-  }
-  return 0u == inv.size();
-}
-Value& CharReaderBuilder::operator[](std::string key)
-{
-  return settings_[key];
-}
-// static
-void CharReaderBuilder::strictMode(Json::Value* settings)
-{
-//! [CharReaderBuilderStrictMode]
-  (*settings)["allowComments"] = false;
-  (*settings)["strictRoot"] = true;
-  (*settings)["allowDroppedNullPlaceholders"] = false;
-  (*settings)["allowNumericKeys"] = false;
-  (*settings)["allowSingleQuotes"] = false;
-  (*settings)["stackLimit"] = 1000;
-  (*settings)["failIfExtra"] = true;
-  (*settings)["rejectDupKeys"] = true;
-  (*settings)["allowSpecialFloats"] = false;
-//! [CharReaderBuilderStrictMode]
-}
-// static
-void CharReaderBuilder::setDefaults(Json::Value* settings)
-{
-//! [CharReaderBuilderDefaults]
-  (*settings)["collectComments"] = true;
-  (*settings)["allowComments"] = true;
-  (*settings)["strictRoot"] = false;
-  (*settings)["allowDroppedNullPlaceholders"] = false;
-  (*settings)["allowNumericKeys"] = false;
-  (*settings)["allowSingleQuotes"] = false;
-  (*settings)["stackLimit"] = 1000;
-  (*settings)["failIfExtra"] = false;
-  (*settings)["rejectDupKeys"] = false;
-  (*settings)["allowSpecialFloats"] = false;
-//! [CharReaderBuilderDefaults]
-}
-
-//////////////////////////////////
-// global functions
-
-bool parseFromStream(
-    CharReader::Factory const& fact, std::istream& sin,
-    Value* root, std::string* errs)
-{
-  std::ostringstream ssin;
-  ssin << sin.rdbuf();
-  std::string doc = ssin.str();
-  char const* begin = doc.data();
-  char const* end = begin + doc.size();
-  // Note that we do not actually need a null-terminator.
-  CharReaderPtr const reader(fact.newCharReader());
-  return reader->parse(begin, end, root, errs);
-}
-
-std::istream& operator>>(std::istream& sin, Value& root) {
-  CharReaderBuilder b;
-  std::string errs;
-  bool ok = parseFromStream(b, sin, &root, &errs);
-  if (!ok) {
-    fprintf(stderr,
-            "Error from reader: %s",
-            errs.c_str());
-
-    throwRuntimeError(errs);
-  }
-  return sin;
-}
-
-} // namespace Json
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: src/lib_json/json_reader.cpp
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: src/lib_json/json_valueiterator.inl
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2007-2010 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-// included by json_value.cpp
-
-namespace Json {
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class ValueIteratorBase
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-ValueIteratorBase::ValueIteratorBase()
-    : current_(), isNull_(true) {
-}
-
-ValueIteratorBase::ValueIteratorBase(
-    const Value::ObjectValues::iterator& current)
-    : current_(current), isNull_(false) {}
-
-Value& ValueIteratorBase::deref() const {
-  return current_->second;
-}
-
-void ValueIteratorBase::increment() {
-  ++current_;
-}
-
-void ValueIteratorBase::decrement() {
-  --current_;
-}
-
-ValueIteratorBase::difference_type
-ValueIteratorBase::computeDistance(const SelfType& other) const {
-#ifdef JSON_USE_CPPTL_SMALLMAP
-  return other.current_ - current_;
-#else
-  // Iterator for null value are initialized using the default
-  // constructor, which initialize current_ to the default
-  // std::map::iterator. As begin() and end() are two instance
-  // of the default std::map::iterator, they can not be compared.
-  // To allow this, we handle this comparison specifically.
-  if (isNull_ && other.isNull_) {
-    return 0;
-  }
-
-  // Usage of std::distance is not portable (does not compile with Sun Studio 12
-  // RogueWave STL,
-  // which is the one used by default).
-  // Using a portable hand-made version for non random iterator instead:
-  //   return difference_type( std::distance( current_, other.current_ ) );
-  difference_type myDistance = 0;
-  for (Value::ObjectValues::iterator it = current_; it != other.current_;
-       ++it) {
-    ++myDistance;
-  }
-  return myDistance;
-#endif
-}
-
-bool ValueIteratorBase::isEqual(const SelfType& other) const {
-  if (isNull_) {
-    return other.isNull_;
-  }
-  return current_ == other.current_;
-}
-
-void ValueIteratorBase::copy(const SelfType& other) {
-  current_ = other.current_;
-  isNull_ = other.isNull_;
-}
-
-Value ValueIteratorBase::key() const {
-  const Value::CZString czstring = (*current_).first;
-  if (czstring.data()) {
-    if (czstring.isStaticString())
-      return Value(StaticString(czstring.data()));
-    return Value(czstring.data(), czstring.data() + czstring.length());
-  }
-  return Value(czstring.index());
-}
-
-UInt ValueIteratorBase::index() const {
-  const Value::CZString czstring = (*current_).first;
-  if (!czstring.data())
-    return czstring.index();
-  return Value::UInt(-1);
-}
-
-std::string ValueIteratorBase::name() const {
-  char const* keey;
-  char const* end;
-  keey = memberName(&end);
-  if (!keey) return std::string();
-  return std::string(keey, end);
-}
-
-char const* ValueIteratorBase::memberName() const {
-  const char* cname = (*current_).first.data();
-  return cname ? cname : "";
-}
-
-char const* ValueIteratorBase::memberName(char const** end) const {
-  const char* cname = (*current_).first.data();
-  if (!cname) {
-    *end = NULL;
-    return NULL;
-  }
-  *end = cname + (*current_).first.length();
-  return cname;
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class ValueConstIterator
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-ValueConstIterator::ValueConstIterator() {}
-
-ValueConstIterator::ValueConstIterator(
-    const Value::ObjectValues::iterator& current)
-    : ValueIteratorBase(current) {}
-
-ValueConstIterator::ValueConstIterator(ValueIterator const& other)
-    : ValueIteratorBase(other) {}
-
-ValueConstIterator& ValueConstIterator::
-operator=(const ValueIteratorBase& other) {
-  copy(other);
-  return *this;
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class ValueIterator
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-ValueIterator::ValueIterator() {}
-
-ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current)
-    : ValueIteratorBase(current) {}
-
-ValueIterator::ValueIterator(const ValueConstIterator& other)
-    : ValueIteratorBase(other) {
-  throwRuntimeError("ConstIterator to Iterator should never be allowed.");
-}
-
-ValueIterator::ValueIterator(const ValueIterator& other)
-    : ValueIteratorBase(other) {}
-
-ValueIterator& ValueIterator::operator=(const SelfType& other) {
-  copy(other);
-  return *this;
-}
-
-} // namespace Json
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: src/lib_json/json_valueiterator.inl
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: src/lib_json/json_value.cpp
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2011 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include <json/assertions.h>
-#include <json/value.h>
-#include <json/writer.h>
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <math.h>
-#include <sstream>
-#include <utility>
-#include <cstring>
-#include <cassert>
-#ifdef JSON_USE_CPPTL
-#include <cpptl/conststring.h>
-#endif
-#include <cstddef> // size_t
-#include <algorithm> // min()
-
-#define JSON_ASSERT_UNREACHABLE assert(false)
-
-namespace Json {
-
-// This is a walkaround to avoid the static initialization of Value::null.
-// kNull must be word-aligned to avoid crashing on ARM.  We use an alignment of
-// 8 (instead of 4) as a bit of future-proofing.
-#if defined(__ARMEL__)
-#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
-#else
-#define ALIGNAS(byte_alignment)
-#endif
-static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
-const unsigned char& kNullRef = kNull[0];
-const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
-const Value& Value::nullRef = null;
-
-const Int Value::minInt = Int(~(UInt(-1) / 2));
-const Int Value::maxInt = Int(UInt(-1) / 2);
-const UInt Value::maxUInt = UInt(-1);
-#if defined(JSON_HAS_INT64)
-const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2));
-const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2);
-const UInt64 Value::maxUInt64 = UInt64(-1);
-// The constant is hard-coded because some compiler have trouble
-// converting Value::maxUInt64 to a double correctly (AIX/xlC).
-// Assumes that UInt64 is a 64 bits integer.
-static const double maxUInt64AsDouble = 18446744073709551615.0;
-#endif // defined(JSON_HAS_INT64)
-const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2));
-const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2);
-const LargestUInt Value::maxLargestUInt = LargestUInt(-1);
-
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-template <typename T, typename U>
-static inline bool InRange(double d, T min, U max) {
-  return d >= min && d <= max;
-}
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-static inline double integerToDouble(Json::UInt64 value) {
-  return static_cast<double>(Int64(value / 2)) * 2.0 + Int64(value & 1);
-}
-
-template <typename T> static inline double integerToDouble(T value) {
-  return static_cast<double>(value);
-}
-
-template <typename T, typename U>
-static inline bool InRange(double d, T min, U max) {
-  return d >= integerToDouble(min) && d <= integerToDouble(max);
-}
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-
-/** Duplicates the specified string value.
- * @param value Pointer to the string to duplicate. Must be zero-terminated if
- *              length is "unknown".
- * @param length Length of the value. if equals to unknown, then it will be
- *               computed using strlen(value).
- * @return Pointer on the duplicate instance of string.
- */
-static inline char* duplicateStringValue(const char* value,
-                                         size_t length) {
-  // Avoid an integer overflow in the call to malloc below by limiting length
-  // to a sane value.
-  if (length >= (size_t)Value::maxInt)
-    length = Value::maxInt - 1;
-
-  char* newString = static_cast<char*>(malloc(length + 1));
-  if (newString == NULL) {
-    throwRuntimeError(
-        "in Json::Value::duplicateStringValue(): "
-        "Failed to allocate string value buffer");
-  }
-  memcpy(newString, value, length);
-  newString[length] = 0;
-  return newString;
-}
-
-/* Record the length as a prefix.
- */
-static inline char* duplicateAndPrefixStringValue(
-    const char* value,
-    unsigned int length)
-{
-  // Avoid an integer overflow in the call to malloc below by limiting length
-  // to a sane value.
-  JSON_ASSERT_MESSAGE(length <= (unsigned)Value::maxInt - sizeof(unsigned) - 1U,
-                      "in Json::Value::duplicateAndPrefixStringValue(): "
-                      "length too big for prefixing");
-  unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U;
-  char* newString = static_cast<char*>(malloc(actualLength));
-  if (newString == 0) {
-    throwRuntimeError(
-        "in Json::Value::duplicateAndPrefixStringValue(): "
-        "Failed to allocate string value buffer");
-  }
-  *reinterpret_cast<unsigned*>(newString) = length;
-  memcpy(newString + sizeof(unsigned), value, length);
-  newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later
-  return newString;
-}
-inline static void decodePrefixedString(
-    bool isPrefixed, char const* prefixed,
-    unsigned* length, char const** value)
-{
-  if (!isPrefixed) {
-    *length = static_cast<unsigned>(strlen(prefixed));
-    *value = prefixed;
-  } else {
-    *length = *reinterpret_cast<unsigned const*>(prefixed);
-    *value = prefixed + sizeof(unsigned);
-  }
-}
-/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue().
- */
-static inline void releaseStringValue(char* value) { free(value); }
-
-} // namespace Json
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// ValueInternals...
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-#if !defined(JSON_IS_AMALGAMATION)
-
-#include "json_valueiterator.inl"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-
-namespace Json {
-
-Exception::Exception(std::string const& msg)
-  : msg_(msg)
-{}
-Exception::~Exception() throw()
-{}
-char const* Exception::what() const throw()
-{
-  return msg_.c_str();
-}
-RuntimeError::RuntimeError(std::string const& msg)
-  : Exception(msg)
-{}
-LogicError::LogicError(std::string const& msg)
-  : Exception(msg)
-{}
-void throwRuntimeError(std::string const& msg)
-{
-  throw RuntimeError(msg);
-}
-void throwLogicError(std::string const& msg)
-{
-  throw LogicError(msg);
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class Value::CommentInfo
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-Value::CommentInfo::CommentInfo() : comment_(0) {}
-
-Value::CommentInfo::~CommentInfo() {
-  if (comment_)
-    releaseStringValue(comment_);
-}
-
-void Value::CommentInfo::setComment(const char* text, size_t len) {
-  if (comment_) {
-    releaseStringValue(comment_);
-    comment_ = 0;
-  }
-  JSON_ASSERT(text != 0);
-  JSON_ASSERT_MESSAGE(
-      text[0] == '\0' || text[0] == '/',
-      "in Json::Value::setComment(): Comments must start with /");
-  // It seems that /**/ style comments are acceptable as well.
-  comment_ = duplicateStringValue(text, len);
-}
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class Value::CZString
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-// Notes: policy_ indicates if the string was allocated when
-// a string is stored.
-
-Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {}
-
-Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate)
-    : cstr_(str) {
-  // allocate != duplicate
-  storage_.policy_ = allocate & 0x3;
-  storage_.length_ = ulength & 0x3FFFFFFF;
-}
-
-Value::CZString::CZString(const CZString& other)
-    : cstr_(other.storage_.policy_ != noDuplication && other.cstr_ != 0
-                ? duplicateStringValue(other.cstr_, other.storage_.length_)
-                : other.cstr_) {
-  storage_.policy_ = (other.cstr_
-                 ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication
-                     ? noDuplication : duplicate)
-                 : static_cast<DuplicationPolicy>(other.storage_.policy_));
-  storage_.length_ = other.storage_.length_;
-}
-
-#if JSON_HAS_RVALUE_REFERENCES
-Value::CZString::CZString(CZString&& other)
-  : cstr_(other.cstr_), index_(other.index_) {
-  other.cstr_ = nullptr;
-}
-#endif
-
-Value::CZString::~CZString() {
-  if (cstr_ && storage_.policy_ == duplicate)
-    releaseStringValue(const_cast<char*>(cstr_));
-}
-
-void Value::CZString::swap(CZString& other) {
-  std::swap(cstr_, other.cstr_);
-  std::swap(index_, other.index_);
-}
-
-Value::CZString& Value::CZString::operator=(CZString other) {
-  swap(other);
-  return *this;
-}
-
-bool Value::CZString::operator<(const CZString& other) const {
-  if (!cstr_) return index_ < other.index_;
-  //return strcmp(cstr_, other.cstr_) < 0;
-  // Assume both are strings.
-  unsigned this_len = this->storage_.length_;
-  unsigned other_len = other.storage_.length_;
-  unsigned min_len = std::min(this_len, other_len);
-  int comp = memcmp(this->cstr_, other.cstr_, min_len);
-  if (comp < 0) return true;
-  if (comp > 0) return false;
-  return (this_len < other_len);
-}
-
-bool Value::CZString::operator==(const CZString& other) const {
-  if (!cstr_) return index_ == other.index_;
-  //return strcmp(cstr_, other.cstr_) == 0;
-  // Assume both are strings.
-  unsigned this_len = this->storage_.length_;
-  unsigned other_len = other.storage_.length_;
-  if (this_len != other_len) return false;
-  int comp = memcmp(this->cstr_, other.cstr_, this_len);
-  return comp == 0;
-}
-
-ArrayIndex Value::CZString::index() const { return index_; }
-
-//const char* Value::CZString::c_str() const { return cstr_; }
-const char* Value::CZString::data() const { return cstr_; }
-unsigned Value::CZString::length() const { return storage_.length_; }
-bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; }
-
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// class Value::Value
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-// //////////////////////////////////////////////////////////////////
-
-/*! \internal Default constructor initialization must be equivalent to:
- * memset( this, 0, sizeof(Value) )
- * This optimization is used in ValueInternalMap fast allocator.
- */
-Value::Value(ValueType vtype) {
-  initBasic(vtype);
-  switch (vtype) {
-  case nullValue:
-    break;
-  case intValue:
-  case uintValue:
-    value_.int_ = 0;
-    break;
-  case realValue:
-    value_.real_ = 0.0;
-    break;
-  case stringValue:
-    value_.string_ = 0;
-    break;
-  case arrayValue:
-  case objectValue:
-    value_.map_ = new ObjectValues();
-    break;
-  case booleanValue:
-    value_.bool_ = false;
-    break;
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-}
-
-Value::Value(Int value) {
-  initBasic(intValue);
-  value_.int_ = value;
-}
-
-Value::Value(UInt value) {
-  initBasic(uintValue);
-  value_.uint_ = value;
-}
-#if defined(JSON_HAS_INT64)
-Value::Value(Int64 value) {
-  initBasic(intValue);
-  value_.int_ = value;
-}
-Value::Value(UInt64 value) {
-  initBasic(uintValue);
-  value_.uint_ = value;
-}
-#endif // defined(JSON_HAS_INT64)
-
-Value::Value(double value) {
-  initBasic(realValue);
-  value_.real_ = value;
-}
-
-Value::Value(const char* value) {
-  initBasic(stringValue, true);
-  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value)));
-}
-
-Value::Value(const char* beginValue, const char* endValue) {
-  initBasic(stringValue, true);
-  value_.string_ =
-      duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue));
-}
-
-Value::Value(const std::string& value) {
-  initBasic(stringValue, true);
-  value_.string_ =
-      duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length()));
-}
-
-Value::Value(const StaticString& value) {
-  initBasic(stringValue);
-  value_.string_ = const_cast<char*>(value.c_str());
-}
-
-#ifdef JSON_USE_CPPTL
-Value::Value(const CppTL::ConstString& value) {
-  initBasic(stringValue, true);
-  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length()));
-}
-#endif
-
-Value::Value(bool value) {
-  initBasic(booleanValue);
-  value_.bool_ = value;
-}
-
-Value::Value(Value const& other)
-    : type_(other.type_), allocated_(false)
-      ,
-      comments_(0), start_(other.start_), limit_(other.limit_)
-{
-  switch (type_) {
-  case nullValue:
-  case intValue:
-  case uintValue:
-  case realValue:
-  case booleanValue:
-    value_ = other.value_;
-    break;
-  case stringValue:
-    if (other.value_.string_ && other.allocated_) {
-      unsigned len;
-      char const* str;
-      decodePrefixedString(other.allocated_, other.value_.string_,
-          &len, &str);
-      value_.string_ = duplicateAndPrefixStringValue(str, len);
-      allocated_ = true;
-    } else {
-      value_.string_ = other.value_.string_;
-      allocated_ = false;
-    }
-    break;
-  case arrayValue:
-  case objectValue:
-    value_.map_ = new ObjectValues(*other.value_.map_);
-    break;
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-  if (other.comments_) {
-    comments_ = new CommentInfo[numberOfCommentPlacement];
-    for (int comment = 0; comment < numberOfCommentPlacement; ++comment) {
-      const CommentInfo& otherComment = other.comments_[comment];
-      if (otherComment.comment_)
-        comments_[comment].setComment(
-            otherComment.comment_, strlen(otherComment.comment_));
-    }
-  }
-}
-
-#if JSON_HAS_RVALUE_REFERENCES
-// Move constructor
-Value::Value(Value&& other) {
-  initBasic(nullValue);
-  swap(other);
-}
-#endif
-
-Value::~Value() {
-  switch (type_) {
-  case nullValue:
-  case intValue:
-  case uintValue:
-  case realValue:
-  case booleanValue:
-    break;
-  case stringValue:
-    if (allocated_)
-      releaseStringValue(value_.string_);
-    break;
-  case arrayValue:
-  case objectValue:
-    delete value_.map_;
-    break;
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-
-  if (comments_)
-    delete[] comments_;
-}
-
-Value& Value::operator=(Value other) {
-  swap(other);
-  return *this;
-}
-
-void Value::swapPayload(Value& other) {
-  ValueType temp = type_;
-  type_ = other.type_;
-  other.type_ = temp;
-  std::swap(value_, other.value_);
-  int temp2 = allocated_;
-  allocated_ = other.allocated_;
-  other.allocated_ = temp2 & 0x1;
-}
-
-void Value::swap(Value& other) {
-  swapPayload(other);
-  std::swap(comments_, other.comments_);
-  std::swap(start_, other.start_);
-  std::swap(limit_, other.limit_);
-}
-
-ValueType Value::type() const { return type_; }
-
-int Value::compare(const Value& other) const {
-  if (*this < other)
-    return -1;
-  if (*this > other)
-    return 1;
-  return 0;
-}
-
-bool Value::operator<(const Value& other) const {
-  int typeDelta = type_ - other.type_;
-  if (typeDelta)
-    return typeDelta < 0 ? true : false;
-  switch (type_) {
-  case nullValue:
-    return false;
-  case intValue:
-    return value_.int_ < other.value_.int_;
-  case uintValue:
-    return value_.uint_ < other.value_.uint_;
-  case realValue:
-    return value_.real_ < other.value_.real_;
-  case booleanValue:
-    return value_.bool_ < other.value_.bool_;
-  case stringValue:
-  {
-    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
-      if (other.value_.string_) return true;
-      else return false;
-    }
-    unsigned this_len;
-    unsigned other_len;
-    char const* this_str;
-    char const* other_str;
-    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
-    unsigned min_len = std::min(this_len, other_len);
-    int comp = memcmp(this_str, other_str, min_len);
-    if (comp < 0) return true;
-    if (comp > 0) return false;
-    return (this_len < other_len);
-  }
-  case arrayValue:
-  case objectValue: {
-    int delta = int(value_.map_->size() - other.value_.map_->size());
-    if (delta)
-      return delta < 0;
-    return (*value_.map_) < (*other.value_.map_);
-  }
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-  return false; // unreachable
-}
-
-bool Value::operator<=(const Value& other) const { return !(other < *this); }
-
-bool Value::operator>=(const Value& other) const { return !(*this < other); }
-
-bool Value::operator>(const Value& other) const { return other < *this; }
-
-bool Value::operator==(const Value& other) const {
-  // if ( type_ != other.type_ )
-  // GCC 2.95.3 says:
-  // attempt to take address of bit-field structure member `Json::Value::type_'
-  // Beats me, but a temp solves the problem.
-  int temp = other.type_;
-  if (type_ != temp)
-    return false;
-  switch (type_) {
-  case nullValue:
-    return true;
-  case intValue:
-    return value_.int_ == other.value_.int_;
-  case uintValue:
-    return value_.uint_ == other.value_.uint_;
-  case realValue:
-    return value_.real_ == other.value_.real_;
-  case booleanValue:
-    return value_.bool_ == other.value_.bool_;
-  case stringValue:
-  {
-    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
-      return (value_.string_ == other.value_.string_);
-    }
-    unsigned this_len;
-    unsigned other_len;
-    char const* this_str;
-    char const* other_str;
-    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
-    if (this_len != other_len) return false;
-    int comp = memcmp(this_str, other_str, this_len);
-    return comp == 0;
-  }
-  case arrayValue:
-  case objectValue:
-    return value_.map_->size() == other.value_.map_->size() &&
-           (*value_.map_) == (*other.value_.map_);
-  default:
-    JSON_ASSERT_UNREACHABLE;
-  }
-  return false; // unreachable
-}
-
-bool Value::operator!=(const Value& other) const { return !(*this == other); }
-
-const char* Value::asCString() const {
-  JSON_ASSERT_MESSAGE(type_ == stringValue,
-                      "in Json::Value::asCString(): requires stringValue");
-  if (value_.string_ == 0) return 0;
-  unsigned this_len;
-  char const* this_str;
-  decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-  return this_str;
-}
-
-bool Value::getString(char const** str, char const** cend) const {
-  if (type_ != stringValue) return false;
-  if (value_.string_ == 0) return false;
-  unsigned length;
-  decodePrefixedString(this->allocated_, this->value_.string_, &length, str);
-  *cend = *str + length;
-  return true;
-}
-
-std::string Value::asString() const {
-  switch (type_) {
-  case nullValue:
-    return "";
-  case stringValue:
-  {
-    if (value_.string_ == 0) return "";
-    unsigned this_len;
-    char const* this_str;
-    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
-    return std::string(this_str, this_len);
-  }
-  case booleanValue:
-    return value_.bool_ ? "true" : "false";
-  case intValue:
-    return valueToString(value_.int_);
-  case uintValue:
-    return valueToString(value_.uint_);
-  case realValue:
-    return valueToString(value_.real_);
-  default:
-    JSON_FAIL_MESSAGE("Type is not convertible to string");
-  }
-}
-
-#ifdef JSON_USE_CPPTL
-CppTL::ConstString Value::asConstString() const {
-  unsigned len;
-  char const* str;
-  decodePrefixedString(allocated_, value_.string_,
-      &len, &str);
-  return CppTL::ConstString(str, len);
-}
-#endif
-
-Value::Int Value::asInt() const {
-  switch (type_) {
-  case intValue:
-    JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
-    return Int(value_.int_);
-  case uintValue:
-    JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
-    return Int(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
-                        "double out of Int range");
-    return Int(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to Int.");
-}
-
-Value::UInt Value::asUInt() const {
-  switch (type_) {
-  case intValue:
-    JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
-    return UInt(value_.int_);
-  case uintValue:
-    JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
-    return UInt(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
-                        "double out of UInt range");
-    return UInt(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
-}
-
-#if defined(JSON_HAS_INT64)
-
-Value::Int64 Value::asInt64() const {
-  switch (type_) {
-  case intValue:
-    return Int64(value_.int_);
-  case uintValue:
-    JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
-    return Int64(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
-                        "double out of Int64 range");
-    return Int64(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
-}
-
-Value::UInt64 Value::asUInt64() const {
-  switch (type_) {
-  case intValue:
-    JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
-    return UInt64(value_.int_);
-  case uintValue:
-    return UInt64(value_.uint_);
-  case realValue:
-    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
-                        "double out of UInt64 range");
-    return UInt64(value_.real_);
-  case nullValue:
-    return 0;
-  case booleanValue:
-    return value_.bool_ ? 1 : 0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
-}
-#endif // if defined(JSON_HAS_INT64)
-
-LargestInt Value::asLargestInt() const {
-#if defined(JSON_NO_INT64)
-  return asInt();
-#else
-  return asInt64();
-#endif
-}
-
-LargestUInt Value::asLargestUInt() const {
-#if defined(JSON_NO_INT64)
-  return asUInt();
-#else
-  return asUInt64();
-#endif
-}
-
-double Value::asDouble() const {
-  switch (type_) {
-  case intValue:
-    return static_cast<double>(value_.int_);
-  case uintValue:
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return static_cast<double>(value_.uint_);
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return integerToDouble(value_.uint_);
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-  case realValue:
-    return value_.real_;
-  case nullValue:
-    return 0.0;
-  case booleanValue:
-    return value_.bool_ ? 1.0 : 0.0;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to double.");
-}
-
-float Value::asFloat() const {
-  switch (type_) {
-  case intValue:
-    return static_cast<float>(value_.int_);
-  case uintValue:
-#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return static_cast<float>(value_.uint_);
-#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-    return integerToDouble(value_.uint_);
-#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-  case realValue:
-    return static_cast<float>(value_.real_);
-  case nullValue:
-    return 0.0;
-  case booleanValue:
-    return value_.bool_ ? 1.0f : 0.0f;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to float.");
-}
-
-bool Value::asBool() const {
-  switch (type_) {
-  case booleanValue:
-    return value_.bool_;
-  case nullValue:
-    return false;
-  case intValue:
-    return value_.int_ ? true : false;
-  case uintValue:
-    return value_.uint_ ? true : false;
-  case realValue:
-    // This is kind of strange. Not recommended.
-    return (value_.real_ != 0.0) ? true : false;
-  default:
-    break;
-  }
-  JSON_FAIL_MESSAGE("Value is not convertible to bool.");
-}
-
-bool Value::isConvertibleTo(ValueType other) const {
-  switch (other) {
-  case nullValue:
-    return (isNumeric() && asDouble() == 0.0) ||
-           (type_ == booleanValue && value_.bool_ == false) ||
-           (type_ == stringValue && asString() == "") ||
-           (type_ == arrayValue && value_.map_->size() == 0) ||
-           (type_ == objectValue && value_.map_->size() == 0) ||
-           type_ == nullValue;
-  case intValue:
-    return isInt() ||
-           (type_ == realValue && InRange(value_.real_, minInt, maxInt)) ||
-           type_ == booleanValue || type_ == nullValue;
-  case uintValue:
-    return isUInt() ||
-           (type_ == realValue && InRange(value_.real_, 0, maxUInt)) ||
-           type_ == booleanValue || type_ == nullValue;
-  case realValue:
-    return isNumeric() || type_ == booleanValue || type_ == nullValue;
-  case booleanValue:
-    return isNumeric() || type_ == booleanValue || type_ == nullValue;
-  case stringValue:
-    return isNumeric() || type_ == booleanValue || type_ == stringValue ||
-           type_ == nullValue;
-  case arrayValue:
-    return type_ == arrayValue || type_ == nullValue;
-  case objectValue:
-    return type_ == objectValue || type_ == nullValue;
-  }
-  JSON_ASSERT_UNREACHABLE;
-  return false;
-}
-
-/// Number of values in array or object
-ArrayIndex Value::size() const {
-  switch (type_) {
-  case nullValue:
-  case intValue:
-  case uintValue:
-  case realValue:
-  case booleanValue:
-  case stringValue:
-    return 0;
-  case arrayValue: // size of the array is highest index + 1
-    if (!value_.map_->empty()) {
-      ObjectValues::const_iterator itLast = value_.map_->end();
-      --itLast;
-      return (*itLast).first.index() + 1;
-    }
-    return 0;
-  case objectValue:
-    return ArrayIndex(value_.map_->size());
-  }
-  JSON_ASSERT_UNREACHABLE;
-  return 0; // unreachable;
-}
-
-bool Value::empty() const {
-  if (isNull() || isArray() || isObject())
-    return size() == 0u;
-  else
-    return false;
-}
-
-bool Value::operator!() const { return isNull(); }
-
-void Value::clear() {
-  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue ||
-                          type_ == objectValue,
-                      "in Json::Value::clear(): requires complex value");
-  start_ = 0;
-  limit_ = 0;
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    value_.map_->clear();
-    break;
-  default:
-    break;
-  }
-}
-
-void Value::resize(ArrayIndex newSize) {
-  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue,
-                      "in Json::Value::resize(): requires arrayValue");
-  if (type_ == nullValue)
-    *this = Value(arrayValue);
-  ArrayIndex oldSize = size();
-  if (newSize == 0)
-    clear();
-  else if (newSize > oldSize)
-    (*this)[newSize - 1];
-  else {
-    for (ArrayIndex index = newSize; index < oldSize; ++index) {
-      value_.map_->erase(index);
-    }
-    assert(size() == newSize);
-  }
-}
-
-Value& Value::operator[](ArrayIndex index) {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == arrayValue,
-      "in Json::Value::operator[](ArrayIndex): requires arrayValue");
-  if (type_ == nullValue)
-    *this = Value(arrayValue);
-  CZString key(index);
-  ObjectValues::iterator it = value_.map_->lower_bound(key);
-  if (it != value_.map_->end() && (*it).first == key)
-    return (*it).second;
-
-  ObjectValues::value_type defaultValue(key, nullRef);
-  it = value_.map_->insert(it, defaultValue);
-  return (*it).second;
-}
-
-Value& Value::operator[](int index) {
-  JSON_ASSERT_MESSAGE(
-      index >= 0,
-      "in Json::Value::operator[](int index): index cannot be negative");
-  return (*this)[ArrayIndex(index)];
-}
-
-const Value& Value::operator[](ArrayIndex index) const {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == arrayValue,
-      "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
-  if (type_ == nullValue)
-    return nullRef;
-  CZString key(index);
-  ObjectValues::const_iterator it = value_.map_->find(key);
-  if (it == value_.map_->end())
-    return nullRef;
-  return (*it).second;
-}
-
-const Value& Value::operator[](int index) const {
-  JSON_ASSERT_MESSAGE(
-      index >= 0,
-      "in Json::Value::operator[](int index) const: index cannot be negative");
-  return (*this)[ArrayIndex(index)];
-}
-
-void Value::initBasic(ValueType vtype, bool allocated) {
-  type_ = vtype;
-  allocated_ = allocated;
-  comments_ = 0;
-  start_ = 0;
-  limit_ = 0;
-}
-
-// Access an object value by name, create a null member if it does not exist.
-// @pre Type of '*this' is object or null.
-// @param key is null-terminated.
-Value& Value::resolveReference(const char* key) {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::resolveReference(): requires objectValue");
-  if (type_ == nullValue)
-    *this = Value(objectValue);
-  CZString actualKey(
-      key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE!
-  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
-  if (it != value_.map_->end() && (*it).first == actualKey)
-    return (*it).second;
-
-  ObjectValues::value_type defaultValue(actualKey, nullRef);
-  it = value_.map_->insert(it, defaultValue);
-  Value& value = (*it).second;
-  return value;
-}
-
-// @param key is not null-terminated.
-Value& Value::resolveReference(char const* key, char const* cend)
-{
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::resolveReference(key, end): requires objectValue");
-  if (type_ == nullValue)
-    *this = Value(objectValue);
-  CZString actualKey(
-      key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy);
-  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
-  if (it != value_.map_->end() && (*it).first == actualKey)
-    return (*it).second;
-
-  ObjectValues::value_type defaultValue(actualKey, nullRef);
-  it = value_.map_->insert(it, defaultValue);
-  Value& value = (*it).second;
-  return value;
-}
-
-Value Value::get(ArrayIndex index, const Value& defaultValue) const {
-  const Value* value = &((*this)[index]);
-  return value == &nullRef ? defaultValue : *value;
-}
-
-bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
-
-Value const* Value::find(char const* key, char const* cend) const
-{
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::find(key, end, found): requires objectValue or nullValue");
-  if (type_ == nullValue) return NULL;
-  CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
-  ObjectValues::const_iterator it = value_.map_->find(actualKey);
-  if (it == value_.map_->end()) return NULL;
-  return &(*it).second;
-}
-const Value& Value::operator[](const char* key) const
-{
-  Value const* found = find(key, key + strlen(key));
-  if (!found) return nullRef;
-  return *found;
-}
-Value const& Value::operator[](std::string const& key) const
-{
-  Value const* found = find(key.data(), key.data() + key.length());
-  if (!found) return nullRef;
-  return *found;
-}
-
-Value& Value::operator[](const char* key) {
-  return resolveReference(key, key + strlen(key));
-}
-
-Value& Value::operator[](const std::string& key) {
-  return resolveReference(key.data(), key.data() + key.length());
-}
-
-Value& Value::operator[](const StaticString& key) {
-  return resolveReference(key.c_str());
-}
-
-#ifdef JSON_USE_CPPTL
-Value& Value::operator[](const CppTL::ConstString& key) {
-  return resolveReference(key.c_str(), key.end_c_str());
-}
-Value const& Value::operator[](CppTL::ConstString const& key) const
-{
-  Value const* found = find(key.c_str(), key.end_c_str());
-  if (!found) return nullRef;
-  return *found;
-}
-#endif
-
-Value& Value::append(const Value& value) { return (*this)[size()] = value; }
-
-Value Value::get(char const* key, char const* cend, Value const& defaultValue) const
-{
-  Value const* found = find(key, cend);
-  return !found ? defaultValue : *found;
-}
-Value Value::get(char const* key, Value const& defaultValue) const
-{
-  return get(key, key + strlen(key), defaultValue);
-}
-Value Value::get(std::string const& key, Value const& defaultValue) const
-{
-  return get(key.data(), key.data() + key.length(), defaultValue);
-}
-
-
-bool Value::removeMember(const char* key, const char* cend, Value* removed)
-{
-  if (type_ != objectValue) {
-    return false;
-  }
-  CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
-  ObjectValues::iterator it = value_.map_->find(actualKey);
-  if (it == value_.map_->end())
-    return false;
-  *removed = it->second;
-  value_.map_->erase(it);
-  return true;
-}
-bool Value::removeMember(const char* key, Value* removed)
-{
-  return removeMember(key, key + strlen(key), removed);
-}
-bool Value::removeMember(std::string const& key, Value* removed)
-{
-  return removeMember(key.data(), key.data() + key.length(), removed);
-}
-Value Value::removeMember(const char* key)
-{
-  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
-                      "in Json::Value::removeMember(): requires objectValue");
-  if (type_ == nullValue)
-    return nullRef;
-
-  Value removed;  // null
-  removeMember(key, key + strlen(key), &removed);
-  return removed; // still null if removeMember() did nothing
-}
-Value Value::removeMember(const std::string& key)
-{
-  return removeMember(key.c_str());
-}
-
-bool Value::removeIndex(ArrayIndex index, Value* removed) {
-  if (type_ != arrayValue) {
-    return false;
-  }
-  CZString key(index);
-  ObjectValues::iterator it = value_.map_->find(key);
-  if (it == value_.map_->end()) {
-    return false;
-  }
-  *removed = it->second;
-  ArrayIndex oldSize = size();
-  // shift left all items left, into the place of the "removed"
-  for (ArrayIndex i = index; i < (oldSize - 1); ++i){
-    CZString keey(i);
-    (*value_.map_)[keey] = (*this)[i + 1];
-  }
-  // erase the last one ("leftover")
-  CZString keyLast(oldSize - 1);
-  ObjectValues::iterator itLast = value_.map_->find(keyLast);
-  value_.map_->erase(itLast);
-  return true;
-}
-
-#ifdef JSON_USE_CPPTL
-Value Value::get(const CppTL::ConstString& key,
-                 const Value& defaultValue) const {
-  return get(key.c_str(), key.end_c_str(), defaultValue);
-}
-#endif
-
-bool Value::isMember(char const* key, char const* cend) const
-{
-  Value const* value = find(key, cend);
-  return NULL != value;
-}
-bool Value::isMember(char const* key) const
-{
-  return isMember(key, key + strlen(key));
-}
-bool Value::isMember(std::string const& key) const
-{
-  return isMember(key.data(), key.data() + key.length());
-}
-
-#ifdef JSON_USE_CPPTL
-bool Value::isMember(const CppTL::ConstString& key) const {
-  return isMember(key.c_str(), key.end_c_str());
-}
-#endif
-
-Value::Members Value::getMemberNames() const {
-  JSON_ASSERT_MESSAGE(
-      type_ == nullValue || type_ == objectValue,
-      "in Json::Value::getMemberNames(), value must be objectValue");
-  if (type_ == nullValue)
-    return Value::Members();
-  Members members;
-  members.reserve(value_.map_->size());
-  ObjectValues::const_iterator it = value_.map_->begin();
-  ObjectValues::const_iterator itEnd = value_.map_->end();
-  for (; it != itEnd; ++it) {
-    members.push_back(std::string((*it).first.data(),
-                                  (*it).first.length()));
-  }
-  return members;
-}
-//
-//# ifdef JSON_USE_CPPTL
-// EnumMemberNames
-// Value::enumMemberNames() const
-//{
-//   if ( type_ == objectValue )
-//   {
-//      return CppTL::Enum::any(  CppTL::Enum::transform(
-//         CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ),
-//         MemberNamesTransform() ) );
-//   }
-//   return EnumMemberNames();
-//}
-//
-//
-// EnumValues
-// Value::enumValues() const
-//{
-//   if ( type_ == objectValue  ||  type_ == arrayValue )
-//      return CppTL::Enum::anyValues( *(value_.map_),
-//                                     CppTL::Type<const Value &>() );
-//   return EnumValues();
-//}
-//
-//# endif
-
-static bool IsIntegral(double d) {
-  double integral_part;
-  return modf(d, &integral_part) == 0.0;
-}
-
-bool Value::isNull() const { return type_ == nullValue; }
-
-bool Value::isBool() const { return type_ == booleanValue; }
-
-bool Value::isInt() const {
-  switch (type_) {
-  case intValue:
-    return value_.int_ >= minInt && value_.int_ <= maxInt;
-  case uintValue:
-    return value_.uint_ <= UInt(maxInt);
-  case realValue:
-    return value_.real_ >= minInt && value_.real_ <= maxInt &&
-           IsIntegral(value_.real_);
-  default:
-    break;
-  }
-  return false;
-}
-
-bool Value::isUInt() const {
-  switch (type_) {
-  case intValue:
-    return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
-  case uintValue:
-    return value_.uint_ <= maxUInt;
-  case realValue:
-    return value_.real_ >= 0 && value_.real_ <= maxUInt &&
-           IsIntegral(value_.real_);
-  default:
-    break;
-  }
-  return false;
-}
-
-bool Value::isInt64() const {
-#if defined(JSON_HAS_INT64)
-  switch (type_) {
-  case intValue:
-    return true;
-  case uintValue:
-    return value_.uint_ <= UInt64(maxInt64);
-  case realValue:
-    // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
-    // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
-    // require the value to be strictly less than the limit.
-    return value_.real_ >= double(minInt64) &&
-           value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
-  default:
-    break;
-  }
-#endif // JSON_HAS_INT64
-  return false;
-}
-
-bool Value::isUInt64() const {
-#if defined(JSON_HAS_INT64)
-  switch (type_) {
-  case intValue:
-    return value_.int_ >= 0;
-  case uintValue:
-    return true;
-  case realValue:
-    // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
-    // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
-    // require the value to be strictly less than the limit.
-    return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
-           IsIntegral(value_.real_);
-  default:
-    break;
-  }
-#endif // JSON_HAS_INT64
-  return false;
-}
-
-bool Value::isIntegral() const {
-#if defined(JSON_HAS_INT64)
-  return isInt64() || isUInt64();
-#else
-  return isInt() || isUInt();
-#endif
-}
-
-bool Value::isDouble() const { return type_ == realValue || isIntegral(); }
-
-bool Value::isNumeric() const { return isIntegral() || isDouble(); }
-
-bool Value::isString() const { return type_ == stringValue; }
-
-bool Value::isArray() const { return type_ == arrayValue; }
-
-bool Value::isObject() const { return type_ == objectValue; }
-
-void Value::setComment(const char* comment, size_t len, CommentPlacement placement) {
-  if (!comments_)
-    comments_ = new CommentInfo[numberOfCommentPlacement];
-  if ((len > 0) && (comment[len-1] == '\n')) {
-    // Always discard trailing newline, to aid indentation.
-    len -= 1;
-  }
-  comments_[placement].setComment(comment, len);
-}
-
-void Value::setComment(const char* comment, CommentPlacement placement) {
-  setComment(comment, strlen(comment), placement);
-}
-
-void Value::setComment(const std::string& comment, CommentPlacement placement) {
-  setComment(comment.c_str(), comment.length(), placement);
-}
-
-bool Value::hasComment(CommentPlacement placement) const {
-  return comments_ != 0 && comments_[placement].comment_ != 0;
-}
-
-std::string Value::getComment(CommentPlacement placement) const {
-  if (hasComment(placement))
-    return comments_[placement].comment_;
-  return "";
-}
-
-void Value::setOffsetStart(size_t start) { start_ = start; }
-
-void Value::setOffsetLimit(size_t limit) { limit_ = limit; }
-
-size_t Value::getOffsetStart() const { return start_; }
-
-size_t Value::getOffsetLimit() const { return limit_; }
-
-std::string Value::toStyledString() const {
-  StyledWriter writer;
-  return writer.write(*this);
-}
-
-Value::const_iterator Value::begin() const {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return const_iterator(value_.map_->begin());
-    break;
-  default:
-    break;
-  }
-  return const_iterator();
-}
-
-Value::const_iterator Value::end() const {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return const_iterator(value_.map_->end());
-    break;
-  default:
-    break;
-  }
-  return const_iterator();
-}
-
-Value::iterator Value::begin() {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return iterator(value_.map_->begin());
-    break;
-  default:
-    break;
-  }
-  return iterator();
-}
-
-Value::iterator Value::end() {
-  switch (type_) {
-  case arrayValue:
-  case objectValue:
-    if (value_.map_)
-      return iterator(value_.map_->end());
-    break;
-  default:
-    break;
-  }
-  return iterator();
-}
-
-// class PathArgument
-// //////////////////////////////////////////////////////////////////
-
-PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {}
-
-PathArgument::PathArgument(ArrayIndex index)
-    : key_(), index_(index), kind_(kindIndex) {}
-
-PathArgument::PathArgument(const char* key)
-    : key_(key), index_(), kind_(kindKey) {}
-
-PathArgument::PathArgument(const std::string& key)
-    : key_(key.c_str()), index_(), kind_(kindKey) {}
-
-// class Path
-// //////////////////////////////////////////////////////////////////
-
-Path::Path(const std::string& path,
-           const PathArgument& a1,
-           const PathArgument& a2,
-           const PathArgument& a3,
-           const PathArgument& a4,
-           const PathArgument& a5) {
-  InArgs in;
-  in.push_back(&a1);
-  in.push_back(&a2);
-  in.push_back(&a3);
-  in.push_back(&a4);
-  in.push_back(&a5);
-  makePath(path, in);
-}
-
-void Path::makePath(const std::string& path, const InArgs& in) {
-  const char* current = path.c_str();
-  const char* end = current + path.length();
-  InArgs::const_iterator itInArg = in.begin();
-  while (current != end) {
-    if (*current == '[') {
-      ++current;
-      if (*current == '%')
-        addPathInArg(path, in, itInArg, PathArgument::kindIndex);
-      else {
-        ArrayIndex index = 0;
-        for (; current != end && *current >= '0' && *current <= '9'; ++current)
-          index = index * 10 + ArrayIndex(*current - '0');
-        args_.push_back(index);
-      }
-      if (current == end || *current++ != ']')
-        invalidPath(path, int(current - path.c_str()));
-    } else if (*current == '%') {
-      addPathInArg(path, in, itInArg, PathArgument::kindKey);
-      ++current;
-    } else if (*current == '.') {
-      ++current;
-    } else {
-      const char* beginName = current;
-      while (current != end && !strchr("[.", *current))
-        ++current;
-      args_.push_back(std::string(beginName, current));
-    }
-  }
-}
-
-void Path::addPathInArg(const std::string& /*path*/,
-                        const InArgs& in,
-                        InArgs::const_iterator& itInArg,
-                        PathArgument::Kind kind) {
-  if (itInArg == in.end()) {
-    // Error: missing argument %d
-  } else if ((*itInArg)->kind_ != kind) {
-    // Error: bad argument type
-  } else {
-    args_.push_back(**itInArg);
-  }
-}
-
-void Path::invalidPath(const std::string& /*path*/, int /*location*/) {
-  // Error: invalid path.
-}
-
-const Value& Path::resolve(const Value& root) const {
-  const Value* node = &root;
-  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
-    const PathArgument& arg = *it;
-    if (arg.kind_ == PathArgument::kindIndex) {
-      if (!node->isArray() || !node->isValidIndex(arg.index_)) {
-        // Error: unable to resolve path (array value expected at position...
-      }
-      node = &((*node)[arg.index_]);
-    } else if (arg.kind_ == PathArgument::kindKey) {
-      if (!node->isObject()) {
-        // Error: unable to resolve path (object value expected at position...)
-      }
-      node = &((*node)[arg.key_]);
-      if (node == &Value::nullRef) {
-        // Error: unable to resolve path (object has no member named '' at
-        // position...)
-      }
-    }
-  }
-  return *node;
-}
-
-Value Path::resolve(const Value& root, const Value& defaultValue) const {
-  const Value* node = &root;
-  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
-    const PathArgument& arg = *it;
-    if (arg.kind_ == PathArgument::kindIndex) {
-      if (!node->isArray() || !node->isValidIndex(arg.index_))
-        return defaultValue;
-      node = &((*node)[arg.index_]);
-    } else if (arg.kind_ == PathArgument::kindKey) {
-      if (!node->isObject())
-        return defaultValue;
-      node = &((*node)[arg.key_]);
-      if (node == &Value::nullRef)
-        return defaultValue;
-    }
-  }
-  return *node;
-}
-
-Value& Path::make(Value& root) const {
-  Value* node = &root;
-  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
-    const PathArgument& arg = *it;
-    if (arg.kind_ == PathArgument::kindIndex) {
-      if (!node->isArray()) {
-        // Error: node is not an array at position ...
-      }
-      node = &((*node)[arg.index_]);
-    } else if (arg.kind_ == PathArgument::kindKey) {
-      if (!node->isObject()) {
-        // Error: node is not an object at position...
-      }
-      node = &((*node)[arg.key_]);
-    }
-  }
-  return *node;
-}
-
-} // namespace Json
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: src/lib_json/json_value.cpp
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-
-
-// //////////////////////////////////////////////////////////////////////
-// Beginning of content of file: src/lib_json/json_writer.cpp
-// //////////////////////////////////////////////////////////////////////
-
-// Copyright 2011 Baptiste Lepilleur
-// Distributed under MIT license, or public domain if desired and
-// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
-
-#if !defined(JSON_IS_AMALGAMATION)
-#include <json/writer.h>
-#include "json_tool.h"
-#endif // if !defined(JSON_IS_AMALGAMATION)
-#include <iomanip>
-#include <memory>
-#include <sstream>
-#include <utility>
-#include <set>
-#include <cassert>
-#include <cstring>
-#include <cstdio>
-
-#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0
-#include <float.h>
-#define isfinite _finite
-#elif defined(__sun) && defined(__SVR4) //Solaris
-#if !defined(isfinite)
-#include <ieeefp.h>
-#define isfinite finite
-#endif
-#elif defined(_AIX)
-#if !defined(isfinite)
-#include <math.h>
-#define isfinite finite
-#endif
-#elif defined(__hpux)
-#if !defined(isfinite)
-#if defined(__ia64) && !defined(finite)
-#define isfinite(x) ((sizeof(x) == sizeof(float) ? \
-                     _Isfinitef(x) : _IsFinite(x)))
-#else
-#include <math.h>
-#define isfinite finite
-#endif
-#endif
-#else
-#include <cmath>
-#if !(defined(__QNXNTO__)) // QNX already defines isfinite
-#define isfinite std::isfinite
-#endif
-#endif
-
-#if defined(_MSC_VER)
-#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above
-#define snprintf sprintf_s
-#elif _MSC_VER >= 1900 // VC++ 14.0 and above
-#define snprintf std::snprintf
-#else
-#define snprintf _snprintf
-#endif
-#elif defined(__ANDROID__) || defined(__QNXNTO__)
-#define snprintf snprintf
-#elif __cplusplus >= 201103L
-#define snprintf std::snprintf
-#endif
-
-#if defined(__BORLANDC__)  
-#include <float.h>
-#define isfinite _finite
-#define snprintf _snprintf
-#endif
-
-#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
-// Disable warning about strdup being deprecated.
-#pragma warning(disable : 4996)
-#endif
-
-namespace Json {
-
-#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
-typedef std::unique_ptr<StreamWriter> StreamWriterPtr;
-#else
-typedef std::auto_ptr<StreamWriter>   StreamWriterPtr;
-#endif
-
-static bool containsControlCharacter(const char* str) {
-  while (*str) {
-    if (isControlCharacter(*(str++)))
-      return true;
-  }
-  return false;
-}
-
-static bool containsControlCharacter0(const char* str, unsigned len) {
-  char const* end = str + len;
-  while (end != str) {
-    if (isControlCharacter(*str) || 0==*str)
-      return true;
-    ++str;
-  }
-  return false;
-}
-
-std::string valueToString(LargestInt value) {
-  UIntToStringBuffer buffer;
-  char* current = buffer + sizeof(buffer);
-  if (value == Value::minLargestInt) {
-    uintToString(LargestUInt(Value::maxLargestInt) + 1, current);
-    *--current = '-';
-  } else if (value < 0) {
-    uintToString(LargestUInt(-value), current);
-    *--current = '-';
-  } else {
-    uintToString(LargestUInt(value), current);
-  }
-  assert(current >= buffer);
-  return current;
-}
-
-std::string valueToString(LargestUInt value) {
-  UIntToStringBuffer buffer;
-  char* current = buffer + sizeof(buffer);
-  uintToString(value, current);
-  assert(current >= buffer);
-  return current;
-}
-
-#if defined(JSON_HAS_INT64)
-
-std::string valueToString(Int value) {
-  return valueToString(LargestInt(value));
-}
-
-std::string valueToString(UInt value) {
-  return valueToString(LargestUInt(value));
-}
-
-#endif // # if defined(JSON_HAS_INT64)
-
-std::string valueToString(double value, bool useSpecialFloats, unsigned int precision) {
-  // Allocate a buffer that is more than large enough to store the 16 digits of
-  // precision requested below.
-  char buffer[32];
-  int len = -1;
-
-  char formatString[6];
-  sprintf(formatString, "%%.%dg", precision);
-
-  // Print into the buffer. We need not request the alternative representation
-  // that always has a decimal point because JSON doesn't distingish the
-  // concepts of reals and integers.
-  if (isfinite(value)) {
-    len = snprintf(buffer, sizeof(buffer), formatString, value);
-  } else {
-    // IEEE standard states that NaN values will not compare to themselves
-    if (value != value) {
-      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null");
-    } else if (value < 0) {
-      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999");
-    } else {
-      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999");
-    }
-    // For those, we do not need to call fixNumLoc, but it is fast.
-  }
-  assert(len >= 0);
-  fixNumericLocale(buffer, buffer + len);
-  return buffer;
-}
-
-std::string valueToString(double value) { return valueToString(value, false, 17); }
-
-std::string valueToString(bool value) { return value ? "true" : "false"; }
-
-std::string valueToQuotedString(const char* value) {
-  if (value == NULL)
-    return "";
-  // Not sure how to handle unicode...
-  if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL &&
-      !containsControlCharacter(value))
-    return std::string("\"") + value + "\"";
-  // We have to walk value and escape any special characters.
-  // Appending to std::string is not efficient, but this should be rare.
-  // (Note: forward slashes are *not* rare, but I am not escaping them.)
-  std::string::size_type maxsize =
-      strlen(value) * 2 + 3; // allescaped+quotes+NULL
-  std::string result;
-  result.reserve(maxsize); // to avoid lots of mallocs
-  result += "\"";
-  for (const char* c = value; *c != 0; ++c) {
-    switch (*c) {
-    case '\"':
-      result += "\\\"";
-      break;
-    case '\\':
-      result += "\\\\";
-      break;
-    case '\b':
-      result += "\\b";
-      break;
-    case '\f':
-      result += "\\f";
-      break;
-    case '\n':
-      result += "\\n";
-      break;
-    case '\r':
-      result += "\\r";
-      break;
-    case '\t':
-      result += "\\t";
-      break;
-    // case '/':
-    // Even though \/ is considered a legal escape in JSON, a bare
-    // slash is also legal, so I see no reason to escape it.
-    // (I hope I am not misunderstanding something.
-    // blep notes: actually escaping \/ may be useful in javascript to avoid </
-    // sequence.
-    // Should add a flag to allow this compatibility mode and prevent this
-    // sequence from occurring.
-    default:
-      if (isControlCharacter(*c)) {
-        std::ostringstream oss;
-        oss << "\\u" << std::hex << std::uppercase << std::setfill('0')
-            << std::setw(4) << static_cast<int>(*c);
-        result += oss.str();
-      } else {
-        result += *c;
-      }
-      break;
-    }
-  }
-  result += "\"";
-  return result;
-}
-
-// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp
-static char const* strnpbrk(char const* s, char const* accept, size_t n) {
-  assert((s || !n) && accept);
-
-  char const* const end = s + n;
-  for (char const* cur = s; cur < end; ++cur) {
-    int const c = *cur;
-    for (char const* a = accept; *a; ++a) {
-      if (*a == c) {
-        return cur;
-      }
-    }
-  }
-  return NULL;
-}
-static std::string valueToQuotedStringN(const char* value, unsigned length) {
-  if (value == NULL)
-    return "";
-  // Not sure how to handle unicode...
-  if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL &&
-      !containsControlCharacter0(value, length))
-    return std::string("\"") + value + "\"";
-  // We have to walk value and escape any special characters.
-  // Appending to std::string is not efficient, but this should be rare.
-  // (Note: forward slashes are *not* rare, but I am not escaping them.)
-  std::string::size_type maxsize =
-      length * 2 + 3; // allescaped+quotes+NULL
-  std::string result;
-  result.reserve(maxsize); // to avoid lots of mallocs
-  result += "\"";
-  char const* end = value + length;
-  for (const char* c = value; c != end; ++c) {
-    switch (*c) {
-    case '\"':
-      result += "\\\"";
-      break;
-    case '\\':
-      result += "\\\\";
-      break;
-    case '\b':
-      result += "\\b";
-      break;
-    case '\f':
-      result += "\\f";
-      break;
-    case '\n':
-      result += "\\n";
-      break;
-    case '\r':
-      result += "\\r";
-      break;
-    case '\t':
-      result += "\\t";
-      break;
-    // case '/':
-    // Even though \/ is considered a legal escape in JSON, a bare
-    // slash is also legal, so I see no reason to escape it.
-    // (I hope I am not misunderstanding something.)
-    // blep notes: actually escaping \/ may be useful in javascript to avoid </
-    // sequence.
-    // Should add a flag to allow this compatibility mode and prevent this
-    // sequence from occurring.
-    default:
-      if ((isControlCharacter(*c)) || (*c == 0)) {
-        std::ostringstream oss;
-        oss << "\\u" << std::hex << std::uppercase << std::setfill('0')
-            << std::setw(4) << static_cast<int>(*c);
-        result += oss.str();
-      } else {
-        result += *c;
-      }
-      break;
-    }
-  }
-  result += "\"";
-  return result;
-}
-
-// Class Writer
-// //////////////////////////////////////////////////////////////////
-Writer::~Writer() {}
-
-// Class FastWriter
-// //////////////////////////////////////////////////////////////////
-
-FastWriter::FastWriter()
-    : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false),
-      omitEndingLineFeed_(false) {}
-
-void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; }
-
-void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; }
-
-void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; }
-
-std::string FastWriter::write(const Value& root) {
-  document_ = "";
-  writeValue(root);
-  if (!omitEndingLineFeed_)
-    document_ += "\n";
-  return document_;
-}
-
-void FastWriter::writeValue(const Value& value) {
-  switch (value.type()) {
-  case nullValue:
-    if (!dropNullPlaceholders_)
-      document_ += "null";
-    break;
-  case intValue:
-    document_ += valueToString(value.asLargestInt());
-    break;
-  case uintValue:
-    document_ += valueToString(value.asLargestUInt());
-    break;
-  case realValue:
-    document_ += valueToString(value.asDouble());
-    break;
-  case stringValue:
-  {
-    // Is NULL possible for value.string_?
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str));
-    break;
-  }
-  case booleanValue:
-    document_ += valueToString(value.asBool());
-    break;
-  case arrayValue: {
-    document_ += '[';
-    int size = value.size();
-    for (int index = 0; index < size; ++index) {
-      if (index > 0)
-        document_ += ',';
-      writeValue(value[index]);
-    }
-    document_ += ']';
-  } break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    document_ += '{';
-    for (Value::Members::iterator it = members.begin(); it != members.end();
-         ++it) {
-      const std::string& name = *it;
-      if (it != members.begin())
-        document_ += ',';
-      document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()));
-      document_ += yamlCompatiblityEnabled_ ? ": " : ":";
-      writeValue(value[name]);
-    }
-    document_ += '}';
-  } break;
-  }
-}
-
-// Class StyledWriter
-// //////////////////////////////////////////////////////////////////
-
-StyledWriter::StyledWriter()
-    : rightMargin_(74), indentSize_(3), addChildValues_() {}
-
-std::string StyledWriter::write(const Value& root) {
-  document_ = "";
-  addChildValues_ = false;
-  indentString_ = "";
-  writeCommentBeforeValue(root);
-  writeValue(root);
-  writeCommentAfterValueOnSameLine(root);
-  document_ += "\n";
-  return document_;
-}
-
-void StyledWriter::writeValue(const Value& value) {
-  switch (value.type()) {
-  case nullValue:
-    pushValue("null");
-    break;
-  case intValue:
-    pushValue(valueToString(value.asLargestInt()));
-    break;
-  case uintValue:
-    pushValue(valueToString(value.asLargestUInt()));
-    break;
-  case realValue:
-    pushValue(valueToString(value.asDouble()));
-    break;
-  case stringValue:
-  {
-    // Is NULL possible for value.string_?
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
-    else pushValue("");
-    break;
-  }
-  case booleanValue:
-    pushValue(valueToString(value.asBool()));
-    break;
-  case arrayValue:
-    writeArrayValue(value);
-    break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    if (members.empty())
-      pushValue("{}");
-    else {
-      writeWithIndent("{");
-      indent();
-      Value::Members::iterator it = members.begin();
-      for (;;) {
-        const std::string& name = *it;
-        const Value& childValue = value[name];
-        writeCommentBeforeValue(childValue);
-        writeWithIndent(valueToQuotedString(name.c_str()));
-        document_ += " : ";
-        writeValue(childValue);
-        if (++it == members.end()) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        document_ += ',';
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("}");
-    }
-  } break;
-  }
-}
-
-void StyledWriter::writeArrayValue(const Value& value) {
-  unsigned size = value.size();
-  if (size == 0)
-    pushValue("[]");
-  else {
-    bool isArrayMultiLine = isMultineArray(value);
-    if (isArrayMultiLine) {
-      writeWithIndent("[");
-      indent();
-      bool hasChildValue = !childValues_.empty();
-      unsigned index = 0;
-      for (;;) {
-        const Value& childValue = value[index];
-        writeCommentBeforeValue(childValue);
-        if (hasChildValue)
-          writeWithIndent(childValues_[index]);
-        else {
-          writeIndent();
-          writeValue(childValue);
-        }
-        if (++index == size) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        document_ += ',';
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("]");
-    } else // output on a single line
-    {
-      assert(childValues_.size() == size);
-      document_ += "[ ";
-      for (unsigned index = 0; index < size; ++index) {
-        if (index > 0)
-          document_ += ", ";
-        document_ += childValues_[index];
-      }
-      document_ += " ]";
-    }
-  }
-}
-
-bool StyledWriter::isMultineArray(const Value& value) {
-  int size = value.size();
-  bool isMultiLine = size * 3 >= rightMargin_;
-  childValues_.clear();
-  for (int index = 0; index < size && !isMultiLine; ++index) {
-    const Value& childValue = value[index];
-    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
-                        childValue.size() > 0);
-  }
-  if (!isMultiLine) // check if line length > max line length
-  {
-    childValues_.reserve(size);
-    addChildValues_ = true;
-    int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
-    for (int index = 0; index < size; ++index) {
-      if (hasCommentForValue(value[index])) {
-        isMultiLine = true;
-      }
-      writeValue(value[index]);
-      lineLength += int(childValues_[index].length());
-    }
-    addChildValues_ = false;
-    isMultiLine = isMultiLine || lineLength >= rightMargin_;
-  }
-  return isMultiLine;
-}
-
-void StyledWriter::pushValue(const std::string& value) {
-  if (addChildValues_)
-    childValues_.push_back(value);
-  else
-    document_ += value;
-}
-
-void StyledWriter::writeIndent() {
-  if (!document_.empty()) {
-    char last = document_[document_.length() - 1];
-    if (last == ' ') // already indented
-      return;
-    if (last != '\n') // Comments may add new-line
-      document_ += '\n';
-  }
-  document_ += indentString_;
-}
-
-void StyledWriter::writeWithIndent(const std::string& value) {
-  writeIndent();
-  document_ += value;
-}
-
-void StyledWriter::indent() { indentString_ += std::string(indentSize_, ' '); }
-
-void StyledWriter::unindent() {
-  assert(int(indentString_.size()) >= indentSize_);
-  indentString_.resize(indentString_.size() - indentSize_);
-}
-
-void StyledWriter::writeCommentBeforeValue(const Value& root) {
-  if (!root.hasComment(commentBefore))
-    return;
-
-  document_ += "\n";
-  writeIndent();
-  const std::string& comment = root.getComment(commentBefore);
-  std::string::const_iterator iter = comment.begin();
-  while (iter != comment.end()) {
-    document_ += *iter;
-    if (*iter == '\n' &&
-       (iter != comment.end() && *(iter + 1) == '/'))
-      writeIndent();
-    ++iter;
-  }
-
-  // Comments are stripped of trailing newlines, so add one here
-  document_ += "\n";
-}
-
-void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) {
-  if (root.hasComment(commentAfterOnSameLine))
-    document_ += " " + root.getComment(commentAfterOnSameLine);
-
-  if (root.hasComment(commentAfter)) {
-    document_ += "\n";
-    document_ += root.getComment(commentAfter);
-    document_ += "\n";
-  }
-}
-
-bool StyledWriter::hasCommentForValue(const Value& value) {
-  return value.hasComment(commentBefore) ||
-         value.hasComment(commentAfterOnSameLine) ||
-         value.hasComment(commentAfter);
-}
-
-// Class StyledStreamWriter
-// //////////////////////////////////////////////////////////////////
-
-StyledStreamWriter::StyledStreamWriter(std::string indentation)
-    : document_(NULL), rightMargin_(74), indentation_(indentation),
-      addChildValues_() {}
-
-void StyledStreamWriter::write(std::ostream& out, const Value& root) {
-  document_ = &out;
-  addChildValues_ = false;
-  indentString_ = "";
-  indented_ = true;
-  writeCommentBeforeValue(root);
-  if (!indented_) writeIndent();
-  indented_ = true;
-  writeValue(root);
-  writeCommentAfterValueOnSameLine(root);
-  *document_ << "\n";
-  document_ = NULL; // Forget the stream, for safety.
-}
-
-void StyledStreamWriter::writeValue(const Value& value) {
-  switch (value.type()) {
-  case nullValue:
-    pushValue("null");
-    break;
-  case intValue:
-    pushValue(valueToString(value.asLargestInt()));
-    break;
-  case uintValue:
-    pushValue(valueToString(value.asLargestUInt()));
-    break;
-  case realValue:
-    pushValue(valueToString(value.asDouble()));
-    break;
-  case stringValue:
-  {
-    // Is NULL possible for value.string_?
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
-    else pushValue("");
-    break;
-  }
-  case booleanValue:
-    pushValue(valueToString(value.asBool()));
-    break;
-  case arrayValue:
-    writeArrayValue(value);
-    break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    if (members.empty())
-      pushValue("{}");
-    else {
-      writeWithIndent("{");
-      indent();
-      Value::Members::iterator it = members.begin();
-      for (;;) {
-        const std::string& name = *it;
-        const Value& childValue = value[name];
-        writeCommentBeforeValue(childValue);
-        writeWithIndent(valueToQuotedString(name.c_str()));
-        *document_ << " : ";
-        writeValue(childValue);
-        if (++it == members.end()) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *document_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("}");
-    }
-  } break;
-  }
-}
-
-void StyledStreamWriter::writeArrayValue(const Value& value) {
-  unsigned size = value.size();
-  if (size == 0)
-    pushValue("[]");
-  else {
-    bool isArrayMultiLine = isMultineArray(value);
-    if (isArrayMultiLine) {
-      writeWithIndent("[");
-      indent();
-      bool hasChildValue = !childValues_.empty();
-      unsigned index = 0;
-      for (;;) {
-        const Value& childValue = value[index];
-        writeCommentBeforeValue(childValue);
-        if (hasChildValue)
-          writeWithIndent(childValues_[index]);
-        else {
-          if (!indented_) writeIndent();
-          indented_ = true;
-          writeValue(childValue);
-          indented_ = false;
-        }
-        if (++index == size) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *document_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("]");
-    } else // output on a single line
-    {
-      assert(childValues_.size() == size);
-      *document_ << "[ ";
-      for (unsigned index = 0; index < size; ++index) {
-        if (index > 0)
-          *document_ << ", ";
-        *document_ << childValues_[index];
-      }
-      *document_ << " ]";
-    }
-  }
-}
-
-bool StyledStreamWriter::isMultineArray(const Value& value) {
-  int size = value.size();
-  bool isMultiLine = size * 3 >= rightMargin_;
-  childValues_.clear();
-  for (int index = 0; index < size && !isMultiLine; ++index) {
-    const Value& childValue = value[index];
-    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
-                        childValue.size() > 0);
-  }
-  if (!isMultiLine) // check if line length > max line length
-  {
-    childValues_.reserve(size);
-    addChildValues_ = true;
-    int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
-    for (int index = 0; index < size; ++index) {
-      if (hasCommentForValue(value[index])) {
-        isMultiLine = true;
-      }
-      writeValue(value[index]);
-      lineLength += int(childValues_[index].length());
-    }
-    addChildValues_ = false;
-    isMultiLine = isMultiLine || lineLength >= rightMargin_;
-  }
-  return isMultiLine;
-}
-
-void StyledStreamWriter::pushValue(const std::string& value) {
-  if (addChildValues_)
-    childValues_.push_back(value);
-  else
-    *document_ << value;
-}
-
-void StyledStreamWriter::writeIndent() {
-  // blep intended this to look at the so-far-written string
-  // to determine whether we are already indented, but
-  // with a stream we cannot do that. So we rely on some saved state.
-  // The caller checks indented_.
-  *document_ << '\n' << indentString_;
-}
-
-void StyledStreamWriter::writeWithIndent(const std::string& value) {
-  if (!indented_) writeIndent();
-  *document_ << value;
-  indented_ = false;
-}
-
-void StyledStreamWriter::indent() { indentString_ += indentation_; }
-
-void StyledStreamWriter::unindent() {
-  assert(indentString_.size() >= indentation_.size());
-  indentString_.resize(indentString_.size() - indentation_.size());
-}
-
-void StyledStreamWriter::writeCommentBeforeValue(const Value& root) {
-  if (!root.hasComment(commentBefore))
-    return;
-
-  if (!indented_) writeIndent();
-  const std::string& comment = root.getComment(commentBefore);
-  std::string::const_iterator iter = comment.begin();
-  while (iter != comment.end()) {
-    *document_ << *iter;
-    if (*iter == '\n' &&
-       (iter != comment.end() && *(iter + 1) == '/'))
-      // writeIndent();  // would include newline
-      *document_ << indentString_;
-    ++iter;
-  }
-  indented_ = false;
-}
-
-void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) {
-  if (root.hasComment(commentAfterOnSameLine))
-    *document_ << ' ' << root.getComment(commentAfterOnSameLine);
-
-  if (root.hasComment(commentAfter)) {
-    writeIndent();
-    *document_ << root.getComment(commentAfter);
-  }
-  indented_ = false;
-}
-
-bool StyledStreamWriter::hasCommentForValue(const Value& value) {
-  return value.hasComment(commentBefore) ||
-         value.hasComment(commentAfterOnSameLine) ||
-         value.hasComment(commentAfter);
-}
-
-//////////////////////////
-// BuiltStyledStreamWriter
-
-/// Scoped enums are not available until C++11.
-struct CommentStyle {
-  /// Decide whether to write comments.
-  enum Enum {
-    None,  ///< Drop all comments.
-    Most,  ///< Recover odd behavior of previous versions (not implemented yet).
-    All  ///< Keep all comments.
-  };
-};
-
-struct BuiltStyledStreamWriter : public StreamWriter
-{
-  BuiltStyledStreamWriter(
-      std::string const& indentation,
-      CommentStyle::Enum cs,
-      std::string const& colonSymbol,
-      std::string const& nullSymbol,
-      std::string const& endingLineFeedSymbol,
-      bool useSpecialFloats,
-      unsigned int precision);
-  int write(Value const& root, std::ostream* sout) override;
-private:
-  void writeValue(Value const& value);
-  void writeArrayValue(Value const& value);
-  bool isMultineArray(Value const& value);
-  void pushValue(std::string const& value);
-  void writeIndent();
-  void writeWithIndent(std::string const& value);
-  void indent();
-  void unindent();
-  void writeCommentBeforeValue(Value const& root);
-  void writeCommentAfterValueOnSameLine(Value const& root);
-  static bool hasCommentForValue(const Value& value);
-
-  typedef std::vector<std::string> ChildValues;
-
-  ChildValues childValues_;
-  std::string indentString_;
-  int rightMargin_;
-  std::string indentation_;
-  CommentStyle::Enum cs_;
-  std::string colonSymbol_;
-  std::string nullSymbol_;
-  std::string endingLineFeedSymbol_;
-  bool addChildValues_ : 1;
-  bool indented_ : 1;
-  bool useSpecialFloats_ : 1;
-  unsigned int precision_;
-};
-BuiltStyledStreamWriter::BuiltStyledStreamWriter(
-      std::string const& indentation,
-      CommentStyle::Enum cs,
-      std::string const& colonSymbol,
-      std::string const& nullSymbol,
-      std::string const& endingLineFeedSymbol,
-      bool useSpecialFloats,
-      unsigned int precision)
-  : rightMargin_(74)
-  , indentation_(indentation)
-  , cs_(cs)
-  , colonSymbol_(colonSymbol)
-  , nullSymbol_(nullSymbol)
-  , endingLineFeedSymbol_(endingLineFeedSymbol)
-  , addChildValues_(false)
-  , indented_(false)
-  , useSpecialFloats_(useSpecialFloats)
-  , precision_(precision)
-{
-}
-int BuiltStyledStreamWriter::write(Value const& root, std::ostream* sout)
-{
-  sout_ = sout;
-  addChildValues_ = false;
-  indented_ = true;
-  indentString_ = "";
-  writeCommentBeforeValue(root);
-  if (!indented_) writeIndent();
-  indented_ = true;
-  writeValue(root);
-  writeCommentAfterValueOnSameLine(root);
-  *sout_ << endingLineFeedSymbol_;
-  sout_ = NULL;
-  return 0;
-}
-void BuiltStyledStreamWriter::writeValue(Value const& value) {
-  switch (value.type()) {
-  case nullValue:
-    pushValue(nullSymbol_);
-    break;
-  case intValue:
-    pushValue(valueToString(value.asLargestInt()));
-    break;
-  case uintValue:
-    pushValue(valueToString(value.asLargestUInt()));
-    break;
-  case realValue:
-    pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_));
-    break;
-  case stringValue:
-  {
-    // Is NULL is possible for value.string_?
-    char const* str;
-    char const* end;
-    bool ok = value.getString(&str, &end);
-    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
-    else pushValue("");
-    break;
-  }
-  case booleanValue:
-    pushValue(valueToString(value.asBool()));
-    break;
-  case arrayValue:
-    writeArrayValue(value);
-    break;
-  case objectValue: {
-    Value::Members members(value.getMemberNames());
-    if (members.empty())
-      pushValue("{}");
-    else {
-      writeWithIndent("{");
-      indent();
-      Value::Members::iterator it = members.begin();
-      for (;;) {
-        std::string const& name = *it;
-        Value const& childValue = value[name];
-        writeCommentBeforeValue(childValue);
-        writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())));
-        *sout_ << colonSymbol_;
-        writeValue(childValue);
-        if (++it == members.end()) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *sout_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("}");
-    }
-  } break;
-  }
-}
-
-void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
-  unsigned size = value.size();
-  if (size == 0)
-    pushValue("[]");
-  else {
-    bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value);
-    if (isMultiLine) {
-      writeWithIndent("[");
-      indent();
-      bool hasChildValue = !childValues_.empty();
-      unsigned index = 0;
-      for (;;) {
-        Value const& childValue = value[index];
-        writeCommentBeforeValue(childValue);
-        if (hasChildValue)
-          writeWithIndent(childValues_[index]);
-        else {
-          if (!indented_) writeIndent();
-          indented_ = true;
-          writeValue(childValue);
-          indented_ = false;
-        }
-        if (++index == size) {
-          writeCommentAfterValueOnSameLine(childValue);
-          break;
-        }
-        *sout_ << ",";
-        writeCommentAfterValueOnSameLine(childValue);
-      }
-      unindent();
-      writeWithIndent("]");
-    } else // output on a single line
-    {
-      assert(childValues_.size() == size);
-      *sout_ << "[";
-      if (!indentation_.empty()) *sout_ << " ";
-      for (unsigned index = 0; index < size; ++index) {
-        if (index > 0)
-          *sout_ << ", ";
-        *sout_ << childValues_[index];
-      }
-      if (!indentation_.empty()) *sout_ << " ";
-      *sout_ << "]";
-    }
-  }
-}
-
-bool BuiltStyledStreamWriter::isMultineArray(Value const& value) {
-  int size = value.size();
-  bool isMultiLine = size * 3 >= rightMargin_;
-  childValues_.clear();
-  for (int index = 0; index < size && !isMultiLine; ++index) {
-    Value const& childValue = value[index];
-    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
-                        childValue.size() > 0);
-  }
-  if (!isMultiLine) // check if line length > max line length
-  {
-    childValues_.reserve(size);
-    addChildValues_ = true;
-    int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
-    for (int index = 0; index < size; ++index) {
-      if (hasCommentForValue(value[index])) {
-        isMultiLine = true;
-      }
-      writeValue(value[index]);
-      lineLength += int(childValues_[index].length());
-    }
-    addChildValues_ = false;
-    isMultiLine = isMultiLine || lineLength >= rightMargin_;
-  }
-  return isMultiLine;
-}
-
-void BuiltStyledStreamWriter::pushValue(std::string const& value) {
-  if (addChildValues_)
-    childValues_.push_back(value);
-  else
-    *sout_ << value;
-}
-
-void BuiltStyledStreamWriter::writeIndent() {
-  // blep intended this to look at the so-far-written string
-  // to determine whether we are already indented, but
-  // with a stream we cannot do that. So we rely on some saved state.
-  // The caller checks indented_.
-
-  if (!indentation_.empty()) {
-    // In this case, drop newlines too.
-    *sout_ << '\n' << indentString_;
-  }
-}
-
-void BuiltStyledStreamWriter::writeWithIndent(std::string const& value) {
-  if (!indented_) writeIndent();
-  *sout_ << value;
-  indented_ = false;
-}
-
-void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; }
-
-void BuiltStyledStreamWriter::unindent() {
-  assert(indentString_.size() >= indentation_.size());
-  indentString_.resize(indentString_.size() - indentation_.size());
-}
-
-void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) {
-  if (cs_ == CommentStyle::None) return;
-  if (!root.hasComment(commentBefore))
-    return;
-
-  if (!indented_) writeIndent();
-  const std::string& comment = root.getComment(commentBefore);
-  std::string::const_iterator iter = comment.begin();
-  while (iter != comment.end()) {
-    *sout_ << *iter;
-    if (*iter == '\n' &&
-       (iter != comment.end() && *(iter + 1) == '/'))
-      // writeIndent();  // would write extra newline
-      *sout_ << indentString_;
-    ++iter;
-  }
-  indented_ = false;
-}
-
-void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) {
-  if (cs_ == CommentStyle::None) return;
-  if (root.hasComment(commentAfterOnSameLine))
-    *sout_ << " " + root.getComment(commentAfterOnSameLine);
-
-  if (root.hasComment(commentAfter)) {
-    writeIndent();
-    *sout_ << root.getComment(commentAfter);
-  }
-}
-
-// static
-bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) {
-  return value.hasComment(commentBefore) ||
-         value.hasComment(commentAfterOnSameLine) ||
-         value.hasComment(commentAfter);
-}
-
-///////////////
-// StreamWriter
-
-StreamWriter::StreamWriter()
-    : sout_(NULL)
-{
-}
-StreamWriter::~StreamWriter()
-{
-}
-StreamWriter::Factory::~Factory()
-{}
-StreamWriterBuilder::StreamWriterBuilder()
-{
-  setDefaults(&settings_);
-}
-StreamWriterBuilder::~StreamWriterBuilder()
-{}
-StreamWriter* StreamWriterBuilder::newStreamWriter() const
-{
-  std::string indentation = settings_["indentation"].asString();
-  std::string cs_str = settings_["commentStyle"].asString();
-  bool eyc = settings_["enableYAMLCompatibility"].asBool();
-  bool dnp = settings_["dropNullPlaceholders"].asBool();
-  bool usf = settings_["useSpecialFloats"].asBool(); 
-  unsigned int pre = settings_["precision"].asUInt();
-  CommentStyle::Enum cs = CommentStyle::All;
-  if (cs_str == "All") {
-    cs = CommentStyle::All;
-  } else if (cs_str == "None") {
-    cs = CommentStyle::None;
-  } else {
-    throwRuntimeError("commentStyle must be 'All' or 'None'");
-  }
-  std::string colonSymbol = " : ";
-  if (eyc) {
-    colonSymbol = ": ";
-  } else if (indentation.empty()) {
-    colonSymbol = ":";
-  }
-  std::string nullSymbol = "null";
-  if (dnp) {
-    nullSymbol = "";
-  }
-  if (pre > 17) pre = 17;
-  std::string endingLineFeedSymbol = "";
-  return new BuiltStyledStreamWriter(
-      indentation, cs,
-      colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre);
-}
-static void getValidWriterKeys(std::set<std::string>* valid_keys)
-{
-  valid_keys->clear();
-  valid_keys->insert("indentation");
-  valid_keys->insert("commentStyle");
-  valid_keys->insert("enableYAMLCompatibility");
-  valid_keys->insert("dropNullPlaceholders");
-  valid_keys->insert("useSpecialFloats");
-  valid_keys->insert("precision");
-}
-bool StreamWriterBuilder::validate(Json::Value* invalid) const
-{
-  Json::Value my_invalid;
-  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
-  Json::Value& inv = *invalid;
-  std::set<std::string> valid_keys;
-  getValidWriterKeys(&valid_keys);
-  Value::Members keys = settings_.getMemberNames();
-  size_t n = keys.size();
-  for (size_t i = 0; i < n; ++i) {
-    std::string const& key = keys[i];
-    if (valid_keys.find(key) == valid_keys.end()) {
-      inv[key] = settings_[key];
-    }
-  }
-  return 0u == inv.size();
-}
-Value& StreamWriterBuilder::operator[](std::string key)
-{
-  return settings_[key];
-}
-// static
-void StreamWriterBuilder::setDefaults(Json::Value* settings)
-{
-  //! [StreamWriterBuilderDefaults]
-  (*settings)["commentStyle"] = "All";
-  (*settings)["indentation"] = "\t";
-  (*settings)["enableYAMLCompatibility"] = false;
-  (*settings)["dropNullPlaceholders"] = false;
-  (*settings)["useSpecialFloats"] = false;
-  (*settings)["precision"] = 17;
-  //! [StreamWriterBuilderDefaults]
-}
-
-std::string writeString(StreamWriter::Factory const& builder, Value const& root) {
-  std::ostringstream sout;
-  StreamWriterPtr const writer(builder.newStreamWriter());
-  writer->write(root, &sout);
-  return sout.str();
-}
-
-std::ostream& operator<<(std::ostream& sout, Value const& root) {
-  StreamWriterBuilder builder;
-  StreamWriterPtr const writer(builder.newStreamWriter());
-  writer->write(root, &sout);
-  return sout;
-}
-
-} // namespace Json
-
-// //////////////////////////////////////////////////////////////////////
-// End of content of file: src/lib_json/json_writer.cpp
-// //////////////////////////////////////////////////////////////////////
-
-
-
-
-

+ 0 - 73
conformance/update_failure_list.py

@@ -1,73 +0,0 @@
-#!/usr/bin/env python
-# Protocol Buffers - Google's data interchange format
-# Copyright 2008 Google Inc.  All rights reserved.
-# https://developers.google.com/protocol-buffers/
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-#     * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Script to update a failure list file to add/remove failures.
-
-This is sort of like comm(1), except it recognizes comments and ignores them.
-"""
-
-import argparse
-
-parser = argparse.ArgumentParser(
-    description='Adds/removes failures from the failure list.')
-parser.add_argument('filename', type=str, help='failure list file to update')
-parser.add_argument('--add', dest='add_list', action='append')
-parser.add_argument('--remove', dest='remove_list', action='append')
-
-args = parser.parse_args()
-
-add_set = set()
-remove_set = set()
-
-for add_file in (args.add_list or []):
-  with open(add_file) as f:
-    for line in f:
-      add_set.add(line)
-
-for remove_file in (args.remove_list or []):
-  with open(remove_file) as f:
-    for line in f:
-      if line in add_set:
-        raise Exception("Asked to both add and remove test: " + line)
-      remove_set.add(line.strip())
-
-add_list = sorted(add_set, reverse=True)
-
-with open(args.filename) as in_file:
-    existing_list = in_file.read()
-
-with open(args.filename, "w") as f:
-  for line in existing_list.splitlines(True):
-    test = line.split("#")[0].strip()
-    while len(add_list) > 0 and test > add_list[-1]:
-      f.write(add_list.pop())
-    if test not in remove_set:
-      f.write(line)

+ 0 - 31
csharp/.gitignore

@@ -1,31 +0,0 @@
-# Output
-bin
-obj
-project.lock.json
-TestResult.xml
-
-# Possibly legacy now?
-mono/bin
-mono/tmp
-mono/protoc
-build_output
-build_temp
-build/msbuild*.log
-lib/Microsoft.Silverlight.Testing
-lib/NUnit
-
-#
-# 	Untracked files
-#
-.vs
-*.user
-*.suo
-*.nupkg
-_ReSharper.*
-*.sln.cache
-mono/TestResult.xml
-mono/.libs
-mono/*.exe
-mono/*.dll
-lib/protoc.exe
-*.ncrunch*

+ 0 - 148
csharp/CHANGES.txt

@@ -1,148 +0,0 @@
-===============================================================================
-Welcome to the C# port of Google Protocol Buffers, written by Jon Skeet
-(skeet@pobox.com) based on the work of many talented people.
-
-===============================================================================
-RELEASE NOTES - Code imported into Google's main protobuf repository
-===============================================================================
-
-Everything below note this represents history of protobuf-csharp-port project
-before the code was merged into csharp/ subtree of GitHub google/protobuf
-repository.
-Frozen legacy version of the original project is available in
-https://github.com/jskeet/protobuf-csharp-port.
-
-===============================================================================
-RELEASE NOTES - Version 2.4.1.555
-===============================================================================
-
-Changes:
-- Upgrade solution format to Visual Studio 2012.
-- Add the ability to print a builder (not just a message)
-- TextGenerator introduces a new overload of PrintTo
-- Munge protoc's error format into a VS-C#-compatible output format.
-- Work to make ProtoGen clone that acts as a protoc.exe plugin.
-- Added the AllowPartiallyTrustedCallers attribute
-- Optimized enum parsing.
-
-Fixes:
-- Fix for bug in limited input stream's Position, Introduced Position on 
-  output stream
-- Fix for writing a character to a JSON output overflows allocated buffer
-- Optimize FromBase64String to return Empty when presented with empty string.
-- Use string.Concat instead of operator to avoid potential import problems
-- Issue 81: quoting for NUnit parameters.
-- Issue 56: NuGet package is noisy
-- Issue 70: Portable library project has some invalid Nunit-based code.
-- Issue 71: CodedInputStream.ReadBytes go to slow path unnecessarily
-- Issue 84: warning CS0219: The variable `size' is assigned but never used
-
-===============================================================================
-RELEASE NOTES - Version 2.4.1.521
-===============================================================================
-
-Changes:
-- Add generated_code_attributes option, defaulted to false
-- Added support for Portable library
-- Added 'Unsafe' static type in ByteString to allow direct buffer access
-
-Fixes:
-- Issue 50: The XML serializer will fail to deserialize a message with empty 
-  child message
-- Issue 45: Use of 'item' as a field name causes AmbiguousMatchException
-- Issue 49: Generated nested static Types class should be partial
-- Issue 38: Disable CLSCompliant warnings (3021)
-- Issue 40: proto_path does not work for command-line file names
-- Issue 54: should retire all bytes in buffer (bufferSize)
-- Issue 43: Fix to correct identical 'umbrella_classname' options from trying 
-  to write to the same filename.
-
-===============================================================================
-RELEASE NOTES - Version 2.4.1.473
-===============================================================================
-
-Features:
-- Added option service_generator_type to control service generation with
-  NONE, GENERIC, INTERFACE, or IRPCDISPATCH
-- Added interfaces IRpcDispatch and IRpcServerStub to provide for blocking
-  services and implementations.
-- Added ProtoGen.exe command-line argument "--protoc_dir=" to specify the 
-  location of protoc.exe.
-- Extracted interfaces for ICodedInputStream and ICodedOutputStream to allow
-  custom implementation of writers with both speed and size optimizations.
-- Addition of the "Google.ProtoBuffers.Serialization" assembly to support
-  reading and writing messages to/from XML, JSON, IDictionary<,> and others.
-- Several performance related fixes and tweeks
-- Issue 3:	Add option to mark generated code with attribute
-- Issue 20:	Support for decorating classes [Serializable]
-- Issue 21:	Decorate fields with [deprecated=true] as [System.Obsolete]
-- Issue 22:	Reusable Builder classes
-- Issue 24:	Support for using Json/Xml formats with ICodedInputStream
-- Issue 25: Added support for NuGet packages
-- Issue 31: Upgraded protoc.exe and descriptor to 2.4.1
-
-Fixes:
-- Issue 13:	Message with Field same name as message causes uncompilable .cs
-- Issue 16:	Does not integrate well with other tooling
-- Issue 19:	Support for negative enum values
-- Issue 26:	AddRange in GeneratedBuilder iterates twice.
-- Issue 27:	Remove XML documentation output from test projects to clear 
-  warnings/errors.
-- Issue 28: Circular message dependencies result in null default values for 
-  Message fields.
-- Issue 29: Message classes generated have a public default constructor.  You
-  can disable private ctor generation with the option generate_private_ctor.
-- Issue 35: Fixed a bug in ProtoGen handling of arguments with trailing \
-- Big-endian support for float, and double on Silverlight
-- Packed and Unpacked parsing allow for all repeated, as per version 2.3
-- Fix for leaving Builder a public ctor on internal classes for use with
-  generic "where T: new()" constraints.
-
-Other:
-- Changed the code signing key to a privately held key
-- Reformatted all code and line-endings to C# defaults
-- Reworking of performance benchmarks to produce reliable results, option /v2
-- Issue 34: Silverlight assemblies are now unit tested
-
-===============================================================================
-RELEASE NOTES - Version 2.3.0.277
-===============================================================================
-
-Features:
-- Added cls_compliance option to generate attributes indicating 
-  non-CLS-compliance.
-- Added file_extension option to control the generated output file's extension.
-- Added umbrella_namespace option to place the umbrella class into a nested
-  namespace to address issues with proto files having the same name as a 
-  message it contains.
-- Added output_directory option to set the output path for the source file(s).
-- Added ignore_google_protobuf option to avoid generating code for includes 
-  from the google.protobuf package.
-- Added the LITE framework (Google.ProtoBuffersLite.dll) and the ability to
-  generate code with "option optimize_for = LITE_RUNTIME;".
-- Added ability to invoke protoc.exe from within ProtoGen.exe.
-- Upgraded to protoc.exe (2.3) compiler.
-
-Fixes:
-- Issue 9:	Class cannot be static and sealed error
-- Issue 12:	default value for enumerate fields must be filled out
-
-Other:
-- Rewrite of build using MSbuild instead of NAnt
-- Moved to NUnit Version 2.2.8.0
-- Changed to using secure .snk for releases
-
-===============================================================================
-RELEASE NOTES - Version 0.9.1
-===============================================================================
-
-Fixes:
-- issue 10:	Incorrect encoding of packed fields when serialized
-
-===============================================================================
-RELEASE NOTES - Version 0.9.0
-===============================================================================
-
-- Initial release
-
-===============================================================================

+ 0 - 37
csharp/Google.Protobuf.Tools.nuspec

@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<package>
-  <metadata>
-    <id>Google.Protobuf.Tools</id>
-    <title>Google Protocol Buffers tools</title>
-    <summary>Tools for Protocol Buffers - Google's data interchange format.</summary>
-    <description>See project site for more info.</description>
-    <version>3.5.1</version>
-    <authors>Google Inc.</authors>
-    <owners>protobuf-packages</owners>
-    <licenseUrl>https://github.com/google/protobuf/blob/master/LICENSE</licenseUrl>
-    <projectUrl>https://github.com/google/protobuf</projectUrl>
-    <requireLicenseAcceptance>false</requireLicenseAcceptance>
-    <releaseNotes>Tools for Protocol Buffers</releaseNotes>
-    <copyright>Copyright 2015, Google Inc.</copyright>
-    <tags>Protocol Buffers Binary Serialization Format Google proto proto3</tags>
-  </metadata>
-  <files>
-    <file src="protoc\windows_x86\protoc.exe" target="tools\windows_x86\protoc.exe" />
-    <file src="protoc\windows_x64\protoc.exe" target="tools\windows_x64\protoc.exe" />
-    <file src="protoc\linux_x86\protoc" target="tools\linux_x86\protoc" />
-    <file src="protoc\linux_x64\protoc" target="tools\linux_x64\protoc" />
-    <file src="protoc\macosx_x86\protoc" target="tools\macosx_x86\protoc" />
-    <file src="protoc\macosx_x64\protoc" target="tools\macosx_x64\protoc" />
-    <file src="..\src\google\protobuf\any.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\api.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\descriptor.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\duration.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\empty.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\field_mask.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\source_context.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\struct.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\timestamp.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\type.proto" target="tools\google\protobuf" />
-    <file src="..\src\google\protobuf\wrappers.proto" target="tools\google\protobuf" />
-  </files>
-</package>

+ 0 - 92
csharp/README.md

@@ -1,92 +0,0 @@
-This directory contains the C# Protocol Buffers runtime library.
-
-Usage
-=====
-
-The easiest way how to use C# protobufs is via the `Google.Protobuf`
-NuGet package. Just add the NuGet package to your VS project.
-
-You will also want to install the `Google.Protobuf.Tools` NuGet package, which
-contains precompiled version of `protoc.exe` and a copy of well known `.proto`
-files under the package's `tools` directory.
-
-To generate C# files from your `.proto` files, invoke `protoc` with the 
-`--csharp_out` option.
-
-Supported platforms
-===================
-
-The runtime library is built as a portable class library, supporting:
-
-- .NET 4.5
-- Windows 8
-- Windows Phone Silverlight 8
-- Windows Phone 8.1
-- .NET Core
-
-You should be able to use Protocol Buffers in Visual Studio 2012 and
-all later versions. This includes all code generated by `protoc`,
-which only uses features from C# 3 and earlier.
-
-Building
-========
-
-Open the `src/Google.Protobuf.sln` solution in Visual Studio 2017 or
-later.
-
-Although *users* of this project are only expected to have Visual
-Studio 2012 or later, *developers* of the library are required to
-have Visual Studio 2017 or later, as the library uses C# 6 features
-in its implementation, as well as the new Visual Studio 2017 csproj 
-format. These features have no impact when using the compiled code - 
-they're only relevant when building the `Google.Protobuf` assembly.
-
-Testing
-=======
-
-The unit tests use [NUnit 3](https://github.com/nunit/nunit). NUnit doesn't yet
-support `dotnet test`, so for now the test project is a console application 
-using NUnitLite. Simply run `Google.Protobuf.Test.exe` to run the unit tests 
-directly, or else use `dotnet run`.
-
-.NET 3.5
-========
-
-We don't officially support .NET 3.5. However, there has been some effort 
-to make enabling .NET 3.5 support relatively painless in case you require it. 
-There's no guarantee that this will continue in the future, so rely on .NET 
-3.5 support at your peril.
-
-To enable .NET 3.5 support, you must edit the `TargetFrameworks` elements of 
-[src/Google.Protobuf/Google.Protobuf.csproj](src/Google.Protobuf/Google.Protobuf.csproj) 
-(and [src/Google.Protobuf.Test/Google.Protobuf.Test.csproj](src/Google.Protobuf.Test/Google.Protobuf.Test.csproj) 
-if you want to run the unit tests): 
-
-Open the .csproj file in a text editor and simply add `net35` to the list of 
-target frameworks, noting that the `TargetFrameworks` element appears twice in 
-the file (once in the first `PropertyGroup` element, and again in the second 
-`PropertyGroup` element, i.e., the one with the conditional).
-
-History of C# protobufs
-=======================
-
-This subtree was originally imported from https://github.com/jskeet/protobuf-csharp-port
-and represents the latest development version of C# protobufs, that will now be developed
-and maintained by Google. All the development will be done in open, under this repository
-(https://github.com/google/protobuf).
-
-The previous project differs from this project in a number of ways:
-
-- The old code only supported proto2; the new code only supports
-proto3 (so no unknown fields, no required/optional distinction, no
-extensions)
-- The old code was based on immutable message types and builders for
-them
-- The old code did not support maps or `oneof`
-- The old code had its own JSON representation, whereas the new code
-uses the standard protobuf JSON representation
-- The old code had no notion of the "well-known types" which have
-special support in the new code
-- The old project supported some older platforms (such as older
-versions of Silverlight) which are not currently supported in the
-new project

+ 0 - 10
csharp/build_packages.bat

@@ -1,10 +0,0 @@
-@rem Builds Google.Protobuf NuGet packages
-
-dotnet restore src/Google.Protobuf.sln
-dotnet pack -c Release src/Google.Protobuf.sln || goto :error
-
-goto :EOF
-
-:error
-echo Failed!
-exit /b %errorlevel%

+ 0 - 52
csharp/build_tools.sh

@@ -1,52 +0,0 @@
-#!/bin/bash
-
-if [ $# -ne 1 ]; then
-  cat <<EOF
-Usage: $0 <VERSION_NUMBER>
-
-Example:
-  $ $0 3.0.0
-
-This script will download pre-built protoc binaries from maven repository and
-create the Google.Protobuf.Tools package. Well-known type .proto files will also
-be included.
-EOF
-  exit 1
-fi
-
-VERSION_NUMBER=$1
-# <directory name> <binary file name> pairs.
-declare -a FILE_NAMES=(          \
-  windows_x86 windows-x86_32.exe \
-  windows_x64 windows-x86_64.exe \
-  macosx_x86  osx-x86_32.exe     \
-  macosx_x64  osx-x86_64.exe     \
-  linux_x86   linux-x86_32.exe   \
-  linux_x64   linux-x86_64.exe   \
-)
-
-set -e
-
-mkdir -p protoc
-# Create a zip file for each binary.
-for((i=0;i<${#FILE_NAMES[@]};i+=2));do
-  DIR_NAME=${FILE_NAMES[$i]}
-  mkdir -p protoc/$DIR_NAME
-
-  if [ ${DIR_NAME:0:3} = "win" ]; then
-    TARGET_BINARY="protoc.exe"
-  else
-    TARGET_BINARY="protoc"
-  fi
-
-  BINARY_NAME=${FILE_NAMES[$(($i+1))]}
-  BINARY_URL=http://repo1.maven.org/maven2/com/google/protobuf/protoc/${VERSION_NUMBER}/protoc-${VERSION_NUMBER}-${BINARY_NAME}
-
-  if ! wget ${BINARY_URL} -O protoc/$DIR_NAME/$TARGET_BINARY &> /dev/null; then
-    echo "[ERROR] Failed to download ${BINARY_URL}" >&2
-    echo "[ERROR] Skipped $protoc-${VERSION_NAME}-${DIR_NAME}" >&2
-    continue
-  fi
-done
-
-nuget pack Google.Protobuf.Tools.nuspec

+ 0 - 17
csharp/buildall.sh

@@ -1,17 +0,0 @@
-#!/bin/bash
-
-CONFIG=Release
-SRC=$(dirname $0)/src
-
-set -ex
-
-echo Building relevant projects.
-dotnet restore $SRC/Google.Protobuf.sln
-dotnet build -c $CONFIG $SRC/Google.Protobuf.sln
-
-echo Running tests.
-# Only test netcoreapp1.0, which uses the .NET Core runtime.
-# If we want to test the .NET 4.5 version separately, we could
-# run Mono explicitly. However, we don't have any differences between
-# the .NET 4.5 and netstandard1.0 assemblies.
-dotnet run -c $CONFIG -f netcoreapp1.0 -p $SRC/Google.Protobuf.Test/Google.Protobuf.Test.csproj

+ 0 - 126
csharp/compatibility_tests/v3.0.0/protos/csharp/protos/unittest_issues.proto

@@ -1,126 +0,0 @@
-syntax = "proto3";
-
-// These proto descriptors have at one time been reported as an issue or defect.
-// They are kept here to replicate the issue, and continue to verify the fix.
-
-// Issue: Non-"Google.Protobuffers" namespace will ensure that protobuffer library types are qualified
-option csharp_namespace = "UnitTest.Issues.TestProtos";
-
-package unittest_issues;
-option optimize_for = SPEED;
-
-// Issue 307: when generating doubly-nested types, any references
-// should be of the form A.Types.B.Types.C.
-message Issue307 {
-  message NestedOnce {
-    message NestedTwice {
-    }
-  }
-}
-
-// Old issue 13: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=13
-// New issue 309: https://github.com/google/protobuf/issues/309
- 
-// message A {
-//    optional int32 _A = 1;
-// }
-
-// message B {
-//    optional int32 B_ = 1;
-// }
-
-//message AB {
-//    optional int32 a_b = 1;
-//}
-
-// Similar issue with numeric names
-// Java code failed too, so probably best for this to be a restriction.
-// See https://github.com/google/protobuf/issues/308
-// message NumberField {
-//    optional int32 _01 = 1;
-// }
-
-// issue 19 - negative enum values
-
-enum NegativeEnum {
-    NEGATIVE_ENUM_ZERO = 0;
-    FiveBelow = -5;
-    MinusOne = -1;
-}
-
-message NegativeEnumMessage {
-    NegativeEnum value = 1;
-    repeated NegativeEnum values = 2 [packed = false];
-    repeated NegativeEnum packed_values = 3 [packed=true];
-}
-
-// Issue 21: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=21
-// Decorate fields with [deprecated=true] as [System.Obsolete]
-
-message DeprecatedChild {
-}
-
-enum DeprecatedEnum {
-    DEPRECATED_ZERO = 0;
-    one = 1;
-}
-
-message DeprecatedFieldsMessage {
-    int32 PrimitiveValue = 1 [deprecated = true];
-    repeated int32 PrimitiveArray = 2 [deprecated = true];
-
-    DeprecatedChild MessageValue = 3 [deprecated = true];
-    repeated DeprecatedChild MessageArray = 4 [deprecated = true];
-
-    DeprecatedEnum EnumValue = 5 [deprecated = true];
-    repeated DeprecatedEnum EnumArray = 6 [deprecated = true];
-}
-
-// Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45
-message ItemField {
-  int32 item = 1;
-}
-
-message ReservedNames {
-  // Force a nested type called Types
-  message SomeNestedType {
-  }
-
-  int32 types = 1;
-  int32 descriptor = 2;
-}
-
-message TestJsonFieldOrdering {
-  // These fields are deliberately not declared in numeric
-  // order, and the oneof fields aren't contiguous either.
-  // This allows for reasonably robust tests of JSON output
-  // ordering.
-  // TestFieldOrderings in unittest_proto3.proto is similar,
-  // but doesn't include oneofs.
-  // TODO: Consider adding oneofs to TestFieldOrderings, although
-  // that will require fixing other tests in multiple platforms.
-  // Alternatively, consider just adding this to
-  // unittest_proto3.proto if multiple platforms want it.
-  
-  int32 plain_int32 = 4;
-
-  oneof o1 {
-    string o1_string = 2;
-    int32 o1_int32 = 5;
-  }
-  
-  string plain_string = 1;
-  
-  oneof o2 {
-    int32 o2_int32 = 6;
-    string o2_string = 3;
-  }
-  
-}
-
-message TestJsonName {
-  // Message for testing the effects for of the json_name option
-  string name = 1;
-  string description = 2 [json_name = "desc"];
-  string guid = 3 [json_name = "exid"];
-}

+ 0 - 120
csharp/compatibility_tests/v3.0.0/protos/src/google/protobuf/map_unittest_proto3.proto

@@ -1,120 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// This file is mostly equivalent to map_unittest.proto, but imports
-// unittest_proto3.proto instead of unittest.proto, so that it only
-// uses proto3 messages. This makes it suitable for testing
-// implementations which only support proto3.
-// The TestRequiredMessageMap message has been removed as there are no
-// required fields in proto3.
-syntax = "proto3";
-
-option cc_enable_arenas = true;
-option csharp_namespace = "Google.Protobuf.TestProtos";
-
-import "google/protobuf/unittest_proto3.proto";
-
-// We don't put this in a package within proto2 because we need to make sure
-// that the generated code doesn't depend on being in the proto2 namespace.
-// In map_test_util.h we do "using namespace unittest = protobuf_unittest".
-package protobuf_unittest;
-
-// Tests maps.
-message TestMap {
-  map<int32   , int32   > map_int32_int32       = 1;
-  map<int64   , int64   > map_int64_int64       = 2;
-  map<uint32  , uint32  > map_uint32_uint32     = 3;
-  map<uint64  , uint64  > map_uint64_uint64     = 4;
-  map<sint32  , sint32  > map_sint32_sint32     = 5;
-  map<sint64  , sint64  > map_sint64_sint64     = 6;
-  map<fixed32 , fixed32 > map_fixed32_fixed32   = 7;
-  map<fixed64 , fixed64 > map_fixed64_fixed64   = 8;
-  map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 9;
-  map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 10;
-  map<int32   , float   > map_int32_float       = 11;
-  map<int32   , double  > map_int32_double      = 12;
-  map<bool    , bool    > map_bool_bool         = 13;
-  map<string  , string  > map_string_string     = 14;
-  map<int32   , bytes   > map_int32_bytes       = 15;
-  map<int32   , MapEnum > map_int32_enum        = 16;
-  map<int32   , ForeignMessage> map_int32_foreign_message = 17;
-}
-
-message TestMapSubmessage {
-  TestMap test_map = 1;
-}
-
-message TestMessageMap {
-  map<int32, TestAllTypes> map_int32_message = 1;
-}
-
-// Two map fields share the same entry default instance.
-message TestSameTypeMap {
-  map<int32, int32> map1 = 1;
-  map<int32, int32> map2 = 2;
-}
-
-enum MapEnum {
-  MAP_ENUM_FOO = 0;
-  MAP_ENUM_BAR = 1;
-  MAP_ENUM_BAZ = 2;
-}
-
-message TestArenaMap {
-  map<int32   , int32   > map_int32_int32       = 1;
-  map<int64   , int64   > map_int64_int64       = 2;
-  map<uint32  , uint32  > map_uint32_uint32     = 3;
-  map<uint64  , uint64  > map_uint64_uint64     = 4;
-  map<sint32  , sint32  > map_sint32_sint32     = 5;
-  map<sint64  , sint64  > map_sint64_sint64     = 6;
-  map<fixed32 , fixed32 > map_fixed32_fixed32   = 7;
-  map<fixed64 , fixed64 > map_fixed64_fixed64   = 8;
-  map<sfixed32, sfixed32> map_sfixed32_sfixed32 = 9;
-  map<sfixed64, sfixed64> map_sfixed64_sfixed64 = 10;
-  map<int32   , float   > map_int32_float       = 11;
-  map<int32   , double  > map_int32_double      = 12;
-  map<bool    , bool    > map_bool_bool         = 13;
-  map<int32   , MapEnum > map_int32_enum        = 14;
-  map<int32   , ForeignMessage> map_int32_foreign_message = 15;
-}
-
-// Previously, message containing enum called Type cannot be used as value of
-// map field.
-message MessageContainingEnumCalledType {
-  enum Type {
-    TYPE_FOO = 0;
-  }
-  map<int32, MessageContainingEnumCalledType> type = 1;
-}
-
-// Previously, message cannot contain map field called "entry".
-message MessageContainingMapCalledEntry {
-  map<int32, int32> entry = 1;
-}

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels