From 103506e4f9c2e69253a37c4805e383149d2f5a9e Mon Sep 17 00:00:00 2001 From: Patrick de Kok Date: Mon, 27 Jan 2020 22:12:31 +0100 Subject: [PATCH] Updated serializers to current versions (27-01-2020). That means that the updated versions are now: * thrift 0.13.0 * protobuf 3.11.2 * boost 1.72.0 * msgpack 3.1.1 * cereal 1.3.1 * avro 1.9.1 * capnproto 0.7.0 * flatbuffers 1.11.0 * YAS 7.0.5 Only msgpack and capnproto did not have updates. The benchmark is (again) performed on my system, which has slightly different specs from the original author's. This is also reflected in the README.md. Graphs are updated to reflect these results. --- .gitignore | 3 + CMakeLists.txt | 34 +-- avro/record.hpp | 6 +- flatbuffers/test_generated.h | 8 +- images/generate_graph_data.sh | 49 ++++ images/graphs.R | 27 +-- images/size.png | Bin 8897 -> 9299 bytes images/time.png | Bin 8495 -> 8471 bytes images/time2.png | Bin 6533 -> 6770 bytes protobuf/test.pb.cc | 375 +++++++++--------------------- protobuf/test.pb.h | 244 +++++++++++-------- thrift/gen-cpp/test_constants.cpp | 2 +- thrift/gen-cpp/test_constants.h | 2 +- thrift/gen-cpp/test_types.cpp | 4 +- thrift/gen-cpp/test_types.h | 7 +- 15 files changed, 359 insertions(+), 402 deletions(-) create mode 100755 images/generate_graph_data.sh diff --git a/.gitignore b/.gitignore index ccb24eb..0ae0dc7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ compile_commands.json build/ .vscode/ .clangd/ +.RData +.Rhistory +*.Rout diff --git a/CMakeLists.txt b/CMakeLists.txt index bf10ad8..d7d4302 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,11 +67,11 @@ set(boost_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/boost) ExternalProject_Add( boost PREFIX ${boost_PREFIX} - URL "http://netcologne.dl.sourceforge.net/project/boost/boost/1.69.0/boost_1_69_0.tar.gz" - URL_MD5 "b50944c0c13f81ce2c006802a1186f5a" - CONFIGURE_COMMAND ${boost_PREFIX}/src/boost/bootstrap.sh --with-libraries=serialization,filesystem,system,program_options,iostreams --prefix=${boost_PREFIX} - BUILD_COMMAND ./bjam link=static cxxflags='-fPIC' - INSTALL_COMMAND ./bjam link=static install + URL "https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz" + URL_MD5 "e2b0b1eac302880461bcbef097171758" + CONFIGURE_COMMAND ${boost_PREFIX}/src/boost/bootstrap.sh --with-libraries=serialization,filesystem,system,program_options,iostreams,regex --prefix=${boost_PREFIX} + BUILD_COMMAND ./b2 link=static cxxflags='-fPIC' + INSTALL_COMMAND ./b2 link=static install BUILD_IN_SOURCE 1 LOG_UPDATE ON LOG_CONFIGURE ON @@ -87,8 +87,8 @@ ExternalProject_Add( thrift PREFIX ${thrift_PREFIX} DEPENDS boost - URL "http://www-eu.apache.org/dist/thrift/0.12.0/thrift-0.12.0.tar.gz" - URL_MD5 "3deebbb4d1ca77dd9c9e009a1ea02183" + URL "https://www-eu.apache.org/dist/thrift/0.13.0/thrift-0.13.0.tar.gz" + URL_MD5 "38a27d391a2b03214b444cb13d5664f1" CONFIGURE_COMMAND CXX=${CMAKE_CXX_COMPILER} CC=${CMAKE_C_COMPILER} ${thrift_PREFIX}/src/thrift/configure --prefix=${thrift_PREFIX} --libdir=${thrift_PREFIX}/lib --with-boost=${Boost_INCLUDE_DIRS} --enable-shared=no --with-libevent=no --with-c_glib=no --with-java=no --with-erlang=no --with-python=no --with-perl=no --with-php=no --with-php_extension=no --with-ruby=no --with-haskell=no --with-go=no --with-d=no --with-lua=no --with-qt4=no --with-qt5=no --with-nodejs=no --with-cl=no --with-dotnetcore=no --with-nodets=no --with-rs=no --disable-tests --enable-plugin=no BUILD_COMMAND $(MAKE) INSTALL_COMMAND $(MAKE) install @@ -118,8 +118,8 @@ set(protobuf_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/protobuf) ExternalProject_Add( protobuf PREFIX ${protobuf_PREFIX} - URL "https://github.com/protocolbuffers/protobuf/releases/download/v3.7.0/protobuf-cpp-3.7.0.tar.gz" - URL_MD5 "f1631a8e551e569273d78538f6ecf41c" + URL "https://github.com/protocolbuffers/protobuf/releases/download/v3.11.2/protobuf-cpp-3.11.2.tar.gz" + URL_MD5 "351a0f5c4edd3f45035417f09133ce73" CONFIGURE_COMMAND CXX=${CMAKE_CXX_COMPILER} CC=${CMAKE_C_COMPILER} ${protobuf_PREFIX}/src/protobuf/configure --prefix=${protobuf_PREFIX} --libdir=${protobuf_PREFIX}/lib --enable-shared=no BUILD_COMMAND $(MAKE) INSTALL_COMMAND $(MAKE) install @@ -153,8 +153,8 @@ set(cereal_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/cereal) ExternalProject_Add( cereal PREFIX ${cereal_PREFIX} - URL "https://github.com/USCiLab/cereal/archive/v1.2.2.tar.gz" - URL_MD5 "4c56c7b9499dba79404250ef9a040481" + URL "https://github.com/USCiLab/cereal/archive/v1.3.0.tar.gz" + URL_MD5 "4342e811f245403646c4175258f413f1" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND mkdir -p ${cereal_PREFIX}/include/ && cp -r ${cereal_PREFIX}/src/cereal/include/cereal ${cereal_PREFIX}/include/ @@ -165,8 +165,8 @@ ExternalProject_Add( avro DEPENDS boost PREFIX ${avro_PREFIX} - URL "https://github.com/apache/avro/archive/release-1.8.2.tar.gz" - URL_MD5 "dcaa6eaa0c0854c535b9daf1c024cb35" + URL "https://github.com/apache/avro/archive/release-1.9.1.tar.gz" + URL_MD5 "2929b6ee91070fe0f2f6e683c7892104" CONFIGURE_COMMAND cmake -DBOOST_INCLUDEDIR=${boost_PREFIX}/include -DBOOST_LIBRARYDIR=${boost_PREFIX}/lib -DBoost_NO_SYSTEM_PATHS=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${avro_PREFIX} -DBUILD_SHARED_LIBS=OFF ${avro_PREFIX}/src/avro/lang/c++/ # Due to some issues with using statically built boost libraries AND zlib in avro tests # build only necessary parts and install them in a very hackish way. @@ -183,8 +183,8 @@ set(flatbuffers_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/flatbuffers) ExternalProject_Add( flatbuffers PREFIX ${flatbuffers_PREFIX} - URL "https://github.com/google/flatbuffers/archive/v1.10.0.tar.gz" - URL_MD5 "f7d19a3f021d93422b0bc287d7148cd2" + URL "https://github.com/google/flatbuffers/archive/v1.11.0.tar.gz" + URL_MD5 "02c64880acb89dbd57eebacfd67200d8" CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${flatbuffers_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} LOG_UPDATE ON LOG_CONFIGURE ON @@ -197,8 +197,8 @@ set(yas_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/yas) ExternalProject_Add( yas PREFIX ${yas_PREFIX} - URL "https://github.com/niXman/yas/archive/7.0.2.tar.gz" - URL_MD5 "d55353960467afabc6774583880a30f0" + URL "https://github.com/niXman/yas/archive/7.0.5.tar.gz" + URL_MD5 "8c666d29575c8cafe9cea1fc2946253e" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND mkdir -p ${yas_PREFIX}/include/ && cp -r ${yas_PREFIX}/src/yas/include/yas ${yas_PREFIX}/include/ diff --git a/avro/record.hpp b/avro/record.hpp index cb36931..6504300 100644 --- a/avro/record.hpp +++ b/avro/record.hpp @@ -7,7 +7,7 @@ * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -17,8 +17,8 @@ */ -#ifndef _HOME_PKOK_CPP_SERIALIZERS_AVRO_RECORD_HPP_2710640864__H_ -#define _HOME_PKOK_CPP_SERIALIZERS_AVRO_RECORD_HPP_2710640864__H_ +#ifndef _HOME_PKOK_DROPBOX_UNIVERSITY_THESIS_CPP_SERIALIZERS_AVRO_RECORD_HPP_2093218524__H_ +#define _HOME_PKOK_DROPBOX_UNIVERSITY_THESIS_CPP_SERIALIZERS_AVRO_RECORD_HPP_2093218524__H_ #include diff --git a/flatbuffers/test_generated.h b/flatbuffers/test_generated.h index 9e009b0..93d3670 100644 --- a/flatbuffers/test_generated.h +++ b/flatbuffers/test_generated.h @@ -11,7 +11,7 @@ namespace flatbuffers_test { struct Record; struct Record FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - enum { + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_IDS = 4, VT_STRINGS = 6 }; @@ -67,10 +67,12 @@ inline flatbuffers::Offset CreateRecordDirect( flatbuffers::FlatBufferBuilder &_fbb, const std::vector *ids = nullptr, const std::vector> *strings = nullptr) { + auto ids__ = ids ? _fbb.CreateVector(*ids) : 0; + auto strings__ = strings ? _fbb.CreateVector>(*strings) : 0; return flatbuffers_test::CreateRecord( _fbb, - ids ? _fbb.CreateVector(*ids) : 0, - strings ? _fbb.CreateVector>(*strings) : 0); + ids__, + strings__); } inline const flatbuffers_test::Record *GetRecord(const void *buf) { diff --git a/images/generate_graph_data.sh b/images/generate_graph_data.sh new file mode 100755 index 0000000..04dc687 --- /dev/null +++ b/images/generate_graph_data.sh @@ -0,0 +1,49 @@ +#!/bin/bash +ITERATIONS=1000000 +RESTARTS=50 +BENCHMARK="../build/benchmark" + +if [ ! -f ${BENCHMARK} ]; then + echo "Error: executable build/benchmark not found" + exit 1 +fi + +echo "-- Generating data for images/graphs.R..." +echo "-- Substitute lines 9 through 19 with this:" +c=" " +for t in thrift-binary thrift-compact protobuf boost msgpack cereal avro capnproto flatbuffers yas yas-compact; +do + ${BENCHMARK} -i 1 -s $t | grep Size | awk "{printf \"%s%d # %s\n\", \"$c\", \$3, \"$t\"}" + c="," +done + +echo "" +echo "-- Substitute lines 23 through 31 with this:" +c=" " +for t in thrift-binary thrift-compact protobuf boost msgpack cereal avro yas yas-compact; +do + rm -f /tmp/$t.time + for i in `seq 1 ${RESTARTS}` + do + ${BENCHMARK} -i ${ITERATIONS} -s $t | grep Time | awk '{print $3}' >>/tmp/$t.time + done; + awk "{ sum += \$1 } END {printf \"%s%f # %s\n\", \"$c\", sum/50, \"$t\"}" /tmp/$t.time + c="," +done + +echo "" +echo "-- Substitute lines 35 and 36 with this:" +c=" " +for t in capnproto flatbuffers; +do + rm -f /tmp/$t.time; + for i in `seq 1 ${RESTARTS}`; + do + ${BENCHMARK} -i ${ITERATIONS} -s $t | grep Time | awk '{print $3}' >>/tmp/$t.time + done; + awk "{ sum += \$1 } END {printf \"%s%f # %s\n\", \"$c\", sum/50, \"$t\"}" /tmp/$t.time + c="," +done + +echo "-- Run the following command to generate the new images:" +echo " R CMD BATCH images/graphs.R" diff --git a/images/graphs.R b/images/graphs.R index 9a362b4..96be615 100644 --- a/images/graphs.R +++ b/images/graphs.R @@ -4,7 +4,7 @@ names.size <- c("thrift-binary", "thrift-compact", "protobuf", "boost", "msgpack names.time <- c("thrift-binary", "thrift-compact", "protobuf", "boost", "msgpack", "cereal", "avro", "yas", "yas-compact") names.time2 <- c("capnproto", "flatbuffers") # data from the 1000000 simulations -# for t in thrift-binary thrift-compact protobuf boost msgpack cereal avro yas yas-compact; do echo -n "$t: "; ./benchmark 1 $t | grep size | awk '{print $4}'; done +# c=" "; for t in thrift-binary thrift-compact protobuf boost msgpack cereal avro capnproto flatbuffers yas yas-compact; do ${BENCHMARK} -i 1 -s $t | grep Size | awk "{printf \"%s%d # %s\n\", \"$c\", \$3, \"$t\"}"; c=","; done size <- c( 17017 # thrift-binary ,13378 # thrift-compact @@ -18,21 +18,22 @@ size <- c( ,17416 # yas ,13321 # yas-compact ) -# for t in thrift-binary thrift-compact protobuf boost msgpack cereal avro yas yas-compact; do rm -f /tmp/$t.time; echo -n "$t: "; for i in `seq 1 50`; do ./benchmark 1000000 $t | grep time | awk '{print $4}' >>/tmp/$t.time; done; awk '{ sum += $1 } END { print sum/50}' /tmp/$t.time; done +# c=" "; for t in thrift-binary thrift-compact protobuf boost msgpack cereal avro yas yas-compact; do rm -f /tmp/$t.time; for i in `seq 1 ${RESTARTS}`; do ${BENCHMARK} -i ${ITERATIONS} -s $t | grep Time | awk '{print $3}' >>/tmp/$t.time; done; awk "{ sum += \$1 } END {printf \"%s%f # %s\n\", \"$c\", sum/50, \"$t\"}" /tmp/$t.time; c=","; done time <- c( - 1190.22 # thrift-binary - ,3474.32 # thrift-compact - ,2312.78 # protobuf - ,1195.04 # boost - ,2560.6 # msgpack - ,1052.46 # cereal - ,4488.18 # avro - ,302.7 # yas - ,2063.34 # yas-compact + 13795.100000 # thrift-binary + ,41831.280000 # thrift-compact + ,30041.420000 # protobuf + ,14231.320000 # boost + ,31668.700000 # msgpack + ,14203.780000 # cereal + ,55352.740000 # avro + ,3307.360000 # yas + ,28981.900000 # yas-compact ) +# c=" "; for t in capnproto flatbuffers; do rm -f /tmp/$t.time; for i in `seq 1 ${RESTARTS}`; do ${BENCHMARK} -i ${ITERATIONS} -s $t | grep Time | awk '{print $3}' >>/tmp/$t.time; done; awk "{ sum += \$1 } END {printf \"%s%f # %s\n\", \"$c\", sum/50, \"$t\"}" /tmp/$t.time; c=","; done time2 <- c( - 400.98 # capnproto - ,491.5 # flatbuffers + 4512.320000 # capnproto + ,5821.920000 # flatbuffers ) data.size <- as.data.frame(list(serializer = names.size, size = size)) diff --git a/images/size.png b/images/size.png index da9c7b04b4ca092cd9ae3ea761082de822ed418b..1389dc752210d5eecf7ec1f1de06a528c7f5eccd 100644 GIT binary patch literal 9299 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 IpSu?NAJolcp#T5? diff --git a/images/time.png b/images/time.png index 1abdc74a073435d1622772cbce02313ee6743580..f90d930386641f1fda537a68773c225bd51efae4 100644 GIT binary patch literal 8471 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 literal 8495 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 nz`=p9Blwk0 diff --git a/protobuf/test.pb.cc b/protobuf/test.pb.cc index f10a89a..0d909cb 100644 --- a/protobuf/test.pb.cc +++ b/protobuf/test.pb.cc @@ -5,46 +5,40 @@ #include -#include #include #include -#include +#include #include #include #include #include // @@protoc_insertion_point(includes) #include - namespace protobuf_test { class RecordDefaultTypeInternal { public: - ::google::protobuf::internal::ExplicitlyConstructed _instance; + ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed _instance; } _Record_default_instance_; } // namespace protobuf_test -static void InitDefaultsRecord_test_2eproto() { +static void InitDefaultsscc_info_Record_test_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; { void* ptr = &::protobuf_test::_Record_default_instance_; new (ptr) ::protobuf_test::Record(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr); } ::protobuf_test::Record::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<0> scc_info_Record_test_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsRecord_test_2eproto}, {}}; - -void InitDefaults_test_2eproto() { - ::google::protobuf::internal::InitSCC(&scc_info_Record_test_2eproto.base); -} +::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Record_test_2eproto = + {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, 0, InitDefaultsscc_info_Record_test_2eproto}, {}}; -::google::protobuf::Metadata file_level_metadata_test_2eproto[1]; -constexpr ::google::protobuf::EnumDescriptor const** file_level_enum_descriptors_test_2eproto = nullptr; -constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_test_2eproto = nullptr; +static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_test_2eproto[1]; +static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_test_2eproto = nullptr; +static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_test_2eproto = nullptr; -const ::google::protobuf::uint32 TableStruct_test_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { +const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_test_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::protobuf_test::Record, _internal_metadata_), ~0u, // no _extensions_ @@ -53,61 +47,51 @@ const ::google::protobuf::uint32 TableStruct_test_2eproto::offsets[] PROTOBUF_SE PROTOBUF_FIELD_OFFSET(::protobuf_test::Record, ids_), PROTOBUF_FIELD_OFFSET(::protobuf_test::Record, strings_), }; -static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { +static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::protobuf_test::Record)}, }; -static ::google::protobuf::Message const * const file_default_instances[] = { - reinterpret_cast(&::protobuf_test::_Record_default_instance_), +static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { + reinterpret_cast(&::protobuf_test::_Record_default_instance_), }; -::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_test_2eproto = { - {}, AddDescriptors_test_2eproto, "test.proto", schemas, - file_default_instances, TableStruct_test_2eproto::offsets, - file_level_metadata_test_2eproto, 1, file_level_enum_descriptors_test_2eproto, file_level_service_descriptors_test_2eproto, -}; - -const char descriptor_table_protodef_test_2eproto[] = +const char descriptor_table_protodef_test_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = "\n\ntest.proto\022\rprotobuf_test\"&\n\006Record\022\013\n" "\003ids\030\001 \003(\003\022\017\n\007strings\030\002 \003(\tb\006proto3" ; -::google::protobuf::internal::DescriptorTable descriptor_table_test_2eproto = { - false, InitDefaults_test_2eproto, - descriptor_table_protodef_test_2eproto, - "test.proto", &assign_descriptors_table_test_2eproto, 75, +static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_test_2eproto_deps[1] = { +}; +static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_test_2eproto_sccs[1] = { + &scc_info_Record_test_2eproto.base, +}; +static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_test_2eproto_once; +static bool descriptor_table_test_2eproto_initialized = false; +const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_test_2eproto = { + &descriptor_table_test_2eproto_initialized, descriptor_table_protodef_test_2eproto, "test.proto", 75, + &descriptor_table_test_2eproto_once, descriptor_table_test_2eproto_sccs, descriptor_table_test_2eproto_deps, 1, 0, + schemas, file_default_instances, TableStruct_test_2eproto::offsets, + file_level_metadata_test_2eproto, 1, file_level_enum_descriptors_test_2eproto, file_level_service_descriptors_test_2eproto, }; - -void AddDescriptors_test_2eproto() { - static constexpr ::google::protobuf::internal::InitFunc deps[1] = - { - }; - ::google::protobuf::internal::AddDescriptors(&descriptor_table_test_2eproto, deps, 0); -} // Force running AddDescriptors() at dynamic initialization time. -static bool dynamic_init_dummy_test_2eproto = []() { AddDescriptors_test_2eproto(); return true; }(); +static bool dynamic_init_dummy_test_2eproto = ( ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_test_2eproto), true); namespace protobuf_test { // =================================================================== void Record::InitAsDefaultInstance() { } -class Record::HasBitSetters { +class Record::_Internal { public: }; -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int Record::kIdsFieldNumber; -const int Record::kStringsFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - Record::Record() - : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) { SharedCtor(); // @@protoc_insertion_point(constructor:protobuf_test.Record) } Record::Record(const Record& from) - : ::google::protobuf::Message(), + : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr), ids_(from.ids_), strings_(from.strings_) { @@ -116,8 +100,7 @@ Record::Record(const Record& from) } void Record::SharedCtor() { - ::google::protobuf::internal::InitSCC( - &scc_info_Record_test_2eproto.base); + ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_Record_test_2eproto.base); } Record::~Record() { @@ -132,14 +115,14 @@ void Record::SetCachedSize(int size) const { _cached_size_.Set(size); } const Record& Record::default_instance() { - ::google::protobuf::internal::InitSCC(&::scc_info_Record_test_2eproto.base); + ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_Record_test_2eproto.base); return *internal_default_instance(); } void Record::Clear() { // @@protoc_insertion_point(message_clear_start:protobuf_test.Record) - ::google::protobuf::uint32 cached_has_bits = 0; + ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; @@ -148,211 +131,85 @@ void Record::Clear() { _internal_metadata_.Clear(); } -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* Record::_InternalParse(const char* begin, const char* end, void* object, - ::google::protobuf::internal::ParseContext* ctx) { - auto msg = static_cast(object); - ::google::protobuf::int32 size; (void)size; - int depth; (void)depth; - ::google::protobuf::uint32 tag; - ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; - auto ptr = begin; - while (ptr < end) { - ptr = ::google::protobuf::io::Parse32(ptr, &tag); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); +const char* Record::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) { +#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure + while (!ctx->Done(&ptr)) { + ::PROTOBUF_NAMESPACE_ID::uint32 tag; + ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag); + CHK_(ptr); switch (tag >> 3) { // repeated int64 ids = 1; - case 1: { - if (static_cast<::google::protobuf::uint8>(tag) == 10) { - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - parser_till_end = ::google::protobuf::internal::PackedInt64Parser; - object = msg->mutable_ids(); - if (size > end - ptr) goto len_delim_till_end; - auto newend = ptr + size; - if (size) ptr = parser_till_end(ptr, newend, object, ctx); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr == newend); - break; - } else if (static_cast<::google::protobuf::uint8>(tag) != 8) goto handle_unusual; - do { - msg->add_ids(::google::protobuf::internal::ReadVarint(&ptr)); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - if (ptr >= end) break; - } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 8 && (ptr += 1)); - break; - } + case 1: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) { + ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedInt64Parser(_internal_mutable_ids(), ptr, ctx); + CHK_(ptr); + } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8) { + _internal_add_ids(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr)); + CHK_(ptr); + } else goto handle_unusual; + continue; // repeated string strings = 2; - case 2: { - if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; - do { - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - ctx->extra_parse_data().SetFieldName("protobuf_test.Record.strings"); - object = msg->add_strings(); - if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { - parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; - goto string_till_end; - } - GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); - ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); - ptr += size; - if (ptr >= end) break; - } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 18 && (ptr += 1)); - break; - } + case 2: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) { + ptr -= 1; + do { + ptr += 1; + auto str = _internal_add_strings(); + ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx); + CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "protobuf_test.Record.strings")); + CHK_(ptr); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr)); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { - ctx->EndGroup(tag); - return ptr; + ctx->SetLastTag(tag); + goto success; } - auto res = UnknownFieldParse(tag, {_InternalParse, msg}, - ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); - ptr = res.first; - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); - if (res.second) return ptr; + ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx); + CHK_(ptr != nullptr); + continue; } } // switch } // while - return ptr; -string_till_end: - static_cast<::std::string*>(object)->clear(); - static_cast<::std::string*>(object)->reserve(size); - goto len_delim_till_end; -len_delim_till_end: - return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, - {parser_till_end, object}, size); -} -#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -bool Record::MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) { -#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure - ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:protobuf_test.Record) - for (;;) { - ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); - tag = p.first; - if (!p.second) goto handle_unusual; - switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { - // repeated int64 ids = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { - DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive< - ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>( - input, this->mutable_ids()))); - } else if (static_cast< ::google::protobuf::uint8>(tag) == (8 & 0xFF)) { - DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline< - ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>( - 1, 10u, input, this->mutable_ids()))); - } else { - goto handle_unusual; - } - break; - } - - // repeated string strings = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->add_strings())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->strings(this->strings_size() - 1).data(), - static_cast(this->strings(this->strings_size() - 1).length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "protobuf_test.Record.strings")); - } else { - goto handle_unusual; - } - break; - } - - default: { - handle_unusual: - if (tag == 0) { - goto success; - } - DO_(::google::protobuf::internal::WireFormat::SkipField( - input, tag, _internal_metadata_.mutable_unknown_fields())); - break; - } - } - } success: - // @@protoc_insertion_point(parse_success:protobuf_test.Record) - return true; + return ptr; failure: - // @@protoc_insertion_point(parse_failure:protobuf_test.Record) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void Record::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:protobuf_test.Record) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // repeated int64 ids = 1; - if (this->ids_size() > 0) { - ::google::protobuf::internal::WireFormatLite::WriteTag(1, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output); - output->WriteVarint32(_ids_cached_byte_size_.load( - std::memory_order_relaxed)); - } - for (int i = 0, n = this->ids_size(); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag( - this->ids(i), output); - } - - // repeated string strings = 2; - for (int i = 0, n = this->strings_size(); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->strings(i).data(), static_cast(this->strings(i).length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "protobuf_test.Record.strings"); - ::google::protobuf::internal::WireFormatLite::WriteString( - 2, this->strings(i), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:protobuf_test.Record) + ptr = nullptr; + goto success; +#undef CHK_ } -::google::protobuf::uint8* Record::InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const { +::PROTOBUF_NAMESPACE_ID::uint8* Record::_InternalSerialize( + ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const { // @@protoc_insertion_point(serialize_to_array_start:protobuf_test.Record) - ::google::protobuf::uint32 cached_has_bits = 0; + ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; (void) cached_has_bits; // repeated int64 ids = 1; - if (this->ids_size() > 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray( - 1, - ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, - target); - target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray( - _ids_cached_byte_size_.load(std::memory_order_relaxed), - target); - target = ::google::protobuf::internal::WireFormatLite:: - WriteInt64NoTagToArray(this->ids_, target); + { + int byte_size = _ids_cached_byte_size_.load(std::memory_order_relaxed); + if (byte_size > 0) { + target = stream->WriteInt64Packed( + 1, _internal_ids(), byte_size, target); + } } // repeated string strings = 2; - for (int i = 0, n = this->strings_size(); i < n; i++) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->strings(i).data(), static_cast(this->strings(i).length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, + for (int i = 0, n = this->_internal_strings_size(); i < n; i++) { + const auto& s = this->_internal_strings(i); + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String( + s.data(), static_cast(s.length()), + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE, "protobuf_test.Record.strings"); - target = ::google::protobuf::internal::WireFormatLite:: - WriteStringToArray(2, this->strings(i), target); + target = stream->WriteString(2, s, target); } - if (_internal_metadata_.have_unknown_fields()) { - target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( - _internal_metadata_.unknown_fields(), target); + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target, stream); } // @@protoc_insertion_point(serialize_to_array_end:protobuf_test.Record) return target; @@ -362,25 +219,20 @@ size_t Record::ByteSizeLong() const { // @@protoc_insertion_point(message_byte_size_start:protobuf_test.Record) size_t total_size = 0; - if (_internal_metadata_.have_unknown_fields()) { - total_size += - ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( - _internal_metadata_.unknown_fields()); - } - ::google::protobuf::uint32 cached_has_bits = 0; + ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; // repeated int64 ids = 1; { - size_t data_size = ::google::protobuf::internal::WireFormatLite:: + size_t data_size = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite:: Int64Size(this->ids_); if (data_size > 0) { total_size += 1 + - ::google::protobuf::internal::WireFormatLite::Int32Size( - static_cast<::google::protobuf::int32>(data_size)); + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int32Size( + static_cast<::PROTOBUF_NAMESPACE_ID::int32>(data_size)); } - int cached_size = ::google::protobuf::internal::ToCachedSize(data_size); + int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(data_size); _ids_cached_byte_size_.store(cached_size, std::memory_order_relaxed); total_size += data_size; @@ -388,26 +240,30 @@ size_t Record::ByteSizeLong() const { // repeated string strings = 2; total_size += 1 * - ::google::protobuf::internal::FromIntSize(this->strings_size()); - for (int i = 0, n = this->strings_size(); i < n; i++) { - total_size += ::google::protobuf::internal::WireFormatLite::StringSize( - this->strings(i)); + ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(strings_.size()); + for (int i = 0, n = strings_.size(); i < n; i++) { + total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize( + strings_.Get(i)); } - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { + return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize( + _internal_metadata_, total_size, &_cached_size_); + } + int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; } -void Record::MergeFrom(const ::google::protobuf::Message& from) { +void Record::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { // @@protoc_insertion_point(generalized_merge_from_start:protobuf_test.Record) GOOGLE_DCHECK_NE(&from, this); const Record* source = - ::google::protobuf::DynamicCastToGenerated( + ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated( &from); if (source == nullptr) { // @@protoc_insertion_point(generalized_merge_from_cast_fail:protobuf_test.Record) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); + ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this); } else { // @@protoc_insertion_point(generalized_merge_from_cast_success:protobuf_test.Record) MergeFrom(*source); @@ -418,14 +274,14 @@ void Record::MergeFrom(const Record& from) { // @@protoc_insertion_point(class_specific_merge_from_start:protobuf_test.Record) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; + ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0; (void) cached_has_bits; ids_.MergeFrom(from.ids_); strings_.MergeFrom(from.strings_); } -void Record::CopyFrom(const ::google::protobuf::Message& from) { +void Record::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { // @@protoc_insertion_point(generalized_copy_from_start:protobuf_test.Record) if (&from == this) return; Clear(); @@ -443,32 +299,25 @@ bool Record::IsInitialized() const { return true; } -void Record::Swap(Record* other) { - if (other == this) return; - InternalSwap(other); -} void Record::InternalSwap(Record* other) { using std::swap; _internal_metadata_.Swap(&other->_internal_metadata_); ids_.InternalSwap(&other->ids_); - strings_.InternalSwap(CastToBase(&other->strings_)); + strings_.InternalSwap(&other->strings_); } -::google::protobuf::Metadata Record::GetMetadata() const { - ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_test_2eproto); - return ::file_level_metadata_test_2eproto[kIndexInFileMessages]; +::PROTOBUF_NAMESPACE_ID::Metadata Record::GetMetadata() const { + return GetMetadataStatic(); } // @@protoc_insertion_point(namespace_scope) } // namespace protobuf_test -namespace google { -namespace protobuf { +PROTOBUF_NAMESPACE_OPEN template<> PROTOBUF_NOINLINE ::protobuf_test::Record* Arena::CreateMaybeMessage< ::protobuf_test::Record >(Arena* arena) { return Arena::CreateInternal< ::protobuf_test::Record >(arena); } -} // namespace protobuf -} // namespace google +PROTOBUF_NAMESPACE_CLOSE // @@protoc_insertion_point(global_scope) #include diff --git a/protobuf/test.pb.h b/protobuf/test.pb.h index b20f25f..a2e6367 100644 --- a/protobuf/test.pb.h +++ b/protobuf/test.pb.h @@ -1,19 +1,19 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: test.proto -#ifndef PROTOBUF_INCLUDED_test_2eproto -#define PROTOBUF_INCLUDED_test_2eproto +#ifndef GOOGLE_PROTOBUF_INCLUDED_test_2eproto +#define GOOGLE_PROTOBUF_INCLUDED_test_2eproto #include #include #include -#if PROTOBUF_VERSION < 3007000 +#if PROTOBUF_VERSION < 3011000 #error This file was generated by a newer version of protoc which is #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3007000 < PROTOBUF_MIN_PROTOC_VERSION +#if 3011002 < PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -27,6 +27,7 @@ #include #include #include +#include #include #include // IWYU pragma: export #include // IWYU pragma: export @@ -34,52 +35,53 @@ // @@protoc_insertion_point(includes) #include #define PROTOBUF_INTERNAL_EXPORT_test_2eproto +PROTOBUF_NAMESPACE_OPEN +namespace internal { +class AnyMetadata; +} // namespace internal +PROTOBUF_NAMESPACE_CLOSE // Internal implementation detail -- do not use these members. struct TableStruct_test_2eproto { - static const ::google::protobuf::internal::ParseTableField entries[] + static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::AuxillaryParseTableField aux[] + static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[1] + static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[1] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::FieldMetadata field_metadata[]; - static const ::google::protobuf::internal::SerializationTable serialization_table[]; - static const ::google::protobuf::uint32 offsets[]; + static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[]; + static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[]; + static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[]; }; -void AddDescriptors_test_2eproto(); +extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_test_2eproto; namespace protobuf_test { class Record; class RecordDefaultTypeInternal; extern RecordDefaultTypeInternal _Record_default_instance_; } // namespace protobuf_test -namespace google { -namespace protobuf { +PROTOBUF_NAMESPACE_OPEN template<> ::protobuf_test::Record* Arena::CreateMaybeMessage<::protobuf_test::Record>(Arena*); -} // namespace protobuf -} // namespace google +PROTOBUF_NAMESPACE_CLOSE namespace protobuf_test { // =================================================================== -class Record final : - public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:protobuf_test.Record) */ { +class Record : + public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:protobuf_test.Record) */ { public: Record(); virtual ~Record(); Record(const Record& from); - - inline Record& operator=(const Record& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 Record(Record&& from) noexcept : Record() { *this = ::std::move(from); } + inline Record& operator=(const Record& from) { + CopyFrom(from); + return *this; + } inline Record& operator=(Record&& from) noexcept { if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { if (this != &from) InternalSwap(&from); @@ -88,9 +90,15 @@ class Record final : } return *this; } - #endif - static const ::google::protobuf::Descriptor* descriptor() { - return default_instance().GetDescriptor(); + + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() { + return GetDescriptor(); + } + static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() { + return GetMetadataStatic().descriptor; + } + static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() { + return GetMetadataStatic().reflection; } static const Record& default_instance(); @@ -102,10 +110,13 @@ class Record final : static constexpr int kIndexInFileMessages = 0; - void Swap(Record* other); friend void swap(Record& a, Record& b) { a.Swap(&b); } + inline void Swap(Record* other) { + if (other == this) return; + InternalSwap(other); + } // implements Message ---------------------------------------------- @@ -113,37 +124,33 @@ class Record final : return CreateMaybeMessage(nullptr); } - Record* New(::google::protobuf::Arena* arena) const final { + Record* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final { return CreateMaybeMessage(arena); } - void CopyFrom(const ::google::protobuf::Message& from) final; - void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; + void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final; void CopyFrom(const Record& from); void MergeFrom(const Record& from); PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; bool IsInitialized() const final; size_t ByteSizeLong() const final; - #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); - ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } - #else - bool MergePartialFromCodedStream( - ::google::protobuf::io::CodedInputStream* input) final; - #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - void SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const final; - ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const final; + const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final; + ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize( + ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final; int GetCachedSize() const final { return _cached_size_.Get(); } private: - void SharedCtor(); - void SharedDtor(); + inline void SharedCtor(); + inline void SharedDtor(); void SetCachedSize(int size) const final; void InternalSwap(Record* other); + friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata; + static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { + return "protobuf_test.Record"; + } private: - inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const { return nullptr; } inline void* MaybeArenaPtr() const { @@ -151,55 +158,78 @@ class Record final : } public: - ::google::protobuf::Metadata GetMetadata() const final; + ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final; + private: + static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() { + ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_test_2eproto); + return ::descriptor_table_test_2eproto.file_level_metadata[kIndexInFileMessages]; + } + + public: // nested types ---------------------------------------------------- // accessors ------------------------------------------------------- + enum : int { + kIdsFieldNumber = 1, + kStringsFieldNumber = 2, + }; // repeated int64 ids = 1; int ids_size() const; + private: + int _internal_ids_size() const; + public: void clear_ids(); - static const int kIdsFieldNumber = 1; - ::google::protobuf::int64 ids(int index) const; - void set_ids(int index, ::google::protobuf::int64 value); - void add_ids(::google::protobuf::int64 value); - const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >& + private: + ::PROTOBUF_NAMESPACE_ID::int64 _internal_ids(int index) const; + const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >& + _internal_ids() const; + void _internal_add_ids(::PROTOBUF_NAMESPACE_ID::int64 value); + ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >* + _internal_mutable_ids(); + public: + ::PROTOBUF_NAMESPACE_ID::int64 ids(int index) const; + void set_ids(int index, ::PROTOBUF_NAMESPACE_ID::int64 value); + void add_ids(::PROTOBUF_NAMESPACE_ID::int64 value); + const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >& ids() const; - ::google::protobuf::RepeatedField< ::google::protobuf::int64 >* + ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >* mutable_ids(); // repeated string strings = 2; int strings_size() const; + private: + int _internal_strings_size() const; + public: void clear_strings(); - static const int kStringsFieldNumber = 2; - const ::std::string& strings(int index) const; - ::std::string* mutable_strings(int index); - void set_strings(int index, const ::std::string& value); - #if LANG_CXX11 - void set_strings(int index, ::std::string&& value); - #endif + const std::string& strings(int index) const; + std::string* mutable_strings(int index); + void set_strings(int index, const std::string& value); + void set_strings(int index, std::string&& value); void set_strings(int index, const char* value); void set_strings(int index, const char* value, size_t size); - ::std::string* add_strings(); - void add_strings(const ::std::string& value); - #if LANG_CXX11 - void add_strings(::std::string&& value); - #endif + std::string* add_strings(); + void add_strings(const std::string& value); + void add_strings(std::string&& value); void add_strings(const char* value); void add_strings(const char* value, size_t size); - const ::google::protobuf::RepeatedPtrField<::std::string>& strings() const; - ::google::protobuf::RepeatedPtrField<::std::string>* mutable_strings(); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& strings() const; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_strings(); + private: + const std::string& _internal_strings(int index) const; + std::string* _internal_add_strings(); + public: // @@protoc_insertion_point(class_scope:protobuf_test.Record) private: - class HasBitSetters; + class _Internal; - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedField< ::google::protobuf::int64 > ids_; + ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_; + ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 > ids_; mutable std::atomic _ids_cached_byte_size_; - ::google::protobuf::RepeatedPtrField<::std::string> strings_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField strings_; + mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_test_2eproto; }; // =================================================================== @@ -214,60 +244,85 @@ class Record final : // Record // repeated int64 ids = 1; -inline int Record::ids_size() const { +inline int Record::_internal_ids_size() const { return ids_.size(); } +inline int Record::ids_size() const { + return _internal_ids_size(); +} inline void Record::clear_ids() { ids_.Clear(); } -inline ::google::protobuf::int64 Record::ids(int index) const { - // @@protoc_insertion_point(field_get:protobuf_test.Record.ids) +inline ::PROTOBUF_NAMESPACE_ID::int64 Record::_internal_ids(int index) const { return ids_.Get(index); } -inline void Record::set_ids(int index, ::google::protobuf::int64 value) { +inline ::PROTOBUF_NAMESPACE_ID::int64 Record::ids(int index) const { + // @@protoc_insertion_point(field_get:protobuf_test.Record.ids) + return _internal_ids(index); +} +inline void Record::set_ids(int index, ::PROTOBUF_NAMESPACE_ID::int64 value) { ids_.Set(index, value); // @@protoc_insertion_point(field_set:protobuf_test.Record.ids) } -inline void Record::add_ids(::google::protobuf::int64 value) { +inline void Record::_internal_add_ids(::PROTOBUF_NAMESPACE_ID::int64 value) { ids_.Add(value); +} +inline void Record::add_ids(::PROTOBUF_NAMESPACE_ID::int64 value) { + _internal_add_ids(value); // @@protoc_insertion_point(field_add:protobuf_test.Record.ids) } -inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >& +Record::_internal_ids() const { + return ids_; +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >& Record::ids() const { // @@protoc_insertion_point(field_list:protobuf_test.Record.ids) - return ids_; + return _internal_ids(); +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >* +Record::_internal_mutable_ids() { + return &ids_; } -inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int64 >* Record::mutable_ids() { // @@protoc_insertion_point(field_mutable_list:protobuf_test.Record.ids) - return &ids_; + return _internal_mutable_ids(); } // repeated string strings = 2; -inline int Record::strings_size() const { +inline int Record::_internal_strings_size() const { return strings_.size(); } +inline int Record::strings_size() const { + return _internal_strings_size(); +} inline void Record::clear_strings() { strings_.Clear(); } -inline const ::std::string& Record::strings(int index) const { - // @@protoc_insertion_point(field_get:protobuf_test.Record.strings) +inline std::string* Record::add_strings() { + // @@protoc_insertion_point(field_add_mutable:protobuf_test.Record.strings) + return _internal_add_strings(); +} +inline const std::string& Record::_internal_strings(int index) const { return strings_.Get(index); } -inline ::std::string* Record::mutable_strings(int index) { +inline const std::string& Record::strings(int index) const { + // @@protoc_insertion_point(field_get:protobuf_test.Record.strings) + return _internal_strings(index); +} +inline std::string* Record::mutable_strings(int index) { // @@protoc_insertion_point(field_mutable:protobuf_test.Record.strings) return strings_.Mutable(index); } -inline void Record::set_strings(int index, const ::std::string& value) { +inline void Record::set_strings(int index, const std::string& value) { // @@protoc_insertion_point(field_set:protobuf_test.Record.strings) strings_.Mutable(index)->assign(value); } -#if LANG_CXX11 -inline void Record::set_strings(int index, ::std::string&& value) { +inline void Record::set_strings(int index, std::string&& value) { // @@protoc_insertion_point(field_set:protobuf_test.Record.strings) strings_.Mutable(index)->assign(std::move(value)); } -#endif inline void Record::set_strings(int index, const char* value) { GOOGLE_DCHECK(value != nullptr); strings_.Mutable(index)->assign(value); @@ -278,20 +333,17 @@ inline void Record::set_strings(int index, const char* value, size_t size) { reinterpret_cast(value), size); // @@protoc_insertion_point(field_set_pointer:protobuf_test.Record.strings) } -inline ::std::string* Record::add_strings() { - // @@protoc_insertion_point(field_add_mutable:protobuf_test.Record.strings) +inline std::string* Record::_internal_add_strings() { return strings_.Add(); } -inline void Record::add_strings(const ::std::string& value) { +inline void Record::add_strings(const std::string& value) { strings_.Add()->assign(value); // @@protoc_insertion_point(field_add:protobuf_test.Record.strings) } -#if LANG_CXX11 -inline void Record::add_strings(::std::string&& value) { +inline void Record::add_strings(std::string&& value) { strings_.Add(std::move(value)); // @@protoc_insertion_point(field_add:protobuf_test.Record.strings) } -#endif inline void Record::add_strings(const char* value) { GOOGLE_DCHECK(value != nullptr); strings_.Add()->assign(value); @@ -301,12 +353,12 @@ inline void Record::add_strings(const char* value, size_t size) { strings_.Add()->assign(reinterpret_cast(value), size); // @@protoc_insertion_point(field_add_pointer:protobuf_test.Record.strings) } -inline const ::google::protobuf::RepeatedPtrField<::std::string>& +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& Record::strings() const { // @@protoc_insertion_point(field_list:protobuf_test.Record.strings) return strings_; } -inline ::google::protobuf::RepeatedPtrField<::std::string>* +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* Record::mutable_strings() { // @@protoc_insertion_point(field_mutable_list:protobuf_test.Record.strings) return &strings_; @@ -323,4 +375,4 @@ Record::mutable_strings() { // @@protoc_insertion_point(global_scope) #include -#endif // PROTOBUF_INCLUDED_test_2eproto +#endif // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_test_2eproto diff --git a/thrift/gen-cpp/test_constants.cpp b/thrift/gen-cpp/test_constants.cpp index 359f438..6f99a3a 100644 --- a/thrift/gen-cpp/test_constants.cpp +++ b/thrift/gen-cpp/test_constants.cpp @@ -1,5 +1,5 @@ /** - * Autogenerated by Thrift Compiler (0.12.0) + * Autogenerated by Thrift Compiler (0.13.0) * * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING * @generated diff --git a/thrift/gen-cpp/test_constants.h b/thrift/gen-cpp/test_constants.h index 9744976..72c8e72 100644 --- a/thrift/gen-cpp/test_constants.h +++ b/thrift/gen-cpp/test_constants.h @@ -1,5 +1,5 @@ /** - * Autogenerated by Thrift Compiler (0.12.0) + * Autogenerated by Thrift Compiler (0.13.0) * * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING * @generated diff --git a/thrift/gen-cpp/test_types.cpp b/thrift/gen-cpp/test_types.cpp index ab9194a..08597f7 100644 --- a/thrift/gen-cpp/test_types.cpp +++ b/thrift/gen-cpp/test_types.cpp @@ -1,5 +1,5 @@ /** - * Autogenerated by Thrift Compiler (0.12.0) + * Autogenerated by Thrift Compiler (0.13.0) * * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING * @generated @@ -14,7 +14,7 @@ namespace thrift_test { -Record::~Record() throw() { +Record::~Record() noexcept { } diff --git a/thrift/gen-cpp/test_types.h b/thrift/gen-cpp/test_types.h index 181bea4..d0793c1 100644 --- a/thrift/gen-cpp/test_types.h +++ b/thrift/gen-cpp/test_types.h @@ -1,5 +1,5 @@ /** - * Autogenerated by Thrift Compiler (0.12.0) + * Autogenerated by Thrift Compiler (0.13.0) * * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING * @generated @@ -15,7 +15,8 @@ #include #include -#include +#include +#include namespace thrift_test { @@ -31,7 +32,7 @@ class Record : public virtual ::apache::thrift::TBase { Record() { } - virtual ~Record() throw(); + virtual ~Record() noexcept; std::vector ids; std::vector strings;