Skip to content

Commit 5c20b33

Browse files
committed
some serialization libraries updated to the latest versions for compatibility with GCC 7
1 parent 050d3e4 commit 5c20b33

File tree

6 files changed

+113
-90
lines changed

6 files changed

+113
-90
lines changed

CMakeLists.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ ExternalProject_Add(
7979
thrift
8080
PREFIX ${thrift_PREFIX}
8181
DEPENDS boost
82-
URL "http://www.eu.apache.org/dist/thrift/0.9.3/thrift-0.9.3.tar.gz"
83-
URL_MD5 "88d667a8ae870d5adeca8cb7d6795442"
84-
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-nodejs=no --disable-tests
82+
URL "http://www-eu.apache.org/dist/thrift/0.10.0/thrift-0.10.0.tar.gz"
83+
URL_MD5 "795c5dd192e310ffff38cfd9430d6b29"
84+
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 --disable-tests --enable-plugin=no
8585
BUILD_COMMAND $(MAKE)
8686
INSTALL_COMMAND $(MAKE) install
8787
BUILD_IN_SOURCE 1
@@ -97,8 +97,8 @@ set(msgpack_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/msgpack)
9797
ExternalProject_Add(
9898
msgpack
9999
PREFIX ${msgpack_PREFIX}
100-
URL "https://github.com/msgpack/msgpack-c/releases/download/cpp-2.0.0/msgpack-2.0.0.tar.gz"
101-
URL_MD5 "55148cd856c72f954a6eb9cc889a7d2a"
100+
URL "https://github.com/msgpack/msgpack-c/releases/download/cpp-2.1.3/msgpack-2.1.3.tar.gz"
101+
URL_MD5 "e604cee971f20f8b4f885163deca2062"
102102
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${msgpack_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
103103
BUILD_IN_SOURCE 1
104104
LOG_UPDATE ON
@@ -130,8 +130,8 @@ set(capnproto_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/capnproto)
130130
ExternalProject_Add(
131131
capnproto
132132
PREFIX ${capnproto_PREFIX}
133-
URL "https://github.com/sandstorm-io/capnproto/archive/v0.5.3.tar.gz"
134-
URL_MD5 "909bd13ad6b8bc840ac78ab8f5bcb0a4"
133+
URL "https://github.com/capnproto/capnproto/archive/v0.6.1.tar.gz"
134+
URL_MD5 "481d0f2fe24f46ce25234ea9704ef0b4"
135135
CONFIGURE_COMMAND CXX=${CMAKE_CXX_COMPILER} CC=${CMAKE_C_COMPILER} cd ${capnproto_PREFIX}/src/capnproto/c++ && ${AUTORECONF} -i && cd - && ${capnproto_PREFIX}/src/capnproto/c++/configure --prefix=${capnproto_PREFIX} --libdir=${capnproto_PREFIX}/lib --enable-shared=no
136136
BUILD_COMMAND $(MAKE)
137137
INSTALL_COMMAND $(MAKE) install
@@ -181,8 +181,8 @@ set(flatbuffers_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/flatbuffers)
181181
ExternalProject_Add(
182182
flatbuffers
183183
PREFIX ${flatbuffers_PREFIX}
184-
URL "https://github.com/google/flatbuffers/archive/v1.4.0.tar.gz"
185-
URL_MD5 "03d5b0e6233362b0951f22374d36b553"
184+
URL "https://github.com/google/flatbuffers/archive/v1.7.1.tar.gz"
185+
URL_MD5 "81934736f31fbd2cfdb513e71b53b358"
186186
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${flatbuffers_PREFIX} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
187187
LOG_UPDATE ON
188188
LOG_CONFIGURE ON

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ $ ./benchmark 100000 protobuf cereal
4444
Following results were obtained running 1000000 serialize-deserialize operations 50 times and then averaging results
4545
on a typical desktop computer with Intel Core i5 processor running Ubuntu 14.04. Exact versions of libraries used are:
4646

47-
* thrift 0.9.3
47+
* thrift 0.10.0
4848
* protobuf 3.1.0
4949
* boost 1.62.0
50-
* msgpack 2.0.0
50+
* msgpack 2.1.3
5151
* cereal 1.2.1
5252
* avro 1.8.2
53-
* capnproto 0.5.3
54-
* flatbuffers 1.4.0
53+
* capnproto 0.6.1
54+
* flatbuffers 1.7.1
5555
* YAS 5.0.0
5656

5757
| serializer | object's size | avg. total time |

benchmark.cpp

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@
3030

3131
#include "data.hpp"
3232

33-
enum class ThriftSerializationProto {
34-
Binary,
35-
Compact
36-
};
33+
enum class ThriftSerializationProto { Binary, Compact };
3734

3835
void
3936
thrift_serialization_test(size_t iterations, ThriftSerializationProto proto = ThriftSerializationProto::Binary)
@@ -185,8 +182,7 @@ capnproto_serialization_test(size_t iterations)
185182
strings.set(i, kStringValue);
186183
}
187184

188-
kj::ArrayPtr<const kj::ArrayPtr<const capnp::word>> serialized =
189-
message.getSegmentsForOutput();
185+
kj::ArrayPtr<const kj::ArrayPtr<const capnp::word>> serialized = message.getSegmentsForOutput();
190186

191187
// check if we can deserialize back
192188
capnp::SegmentArrayMessageReader reader(serialized);
@@ -196,8 +192,8 @@ capnproto_serialization_test(size_t iterations)
196192
}
197193

198194
size_t size = 0;
199-
for (auto segment: serialized) {
200-
size += segment.asBytes().size();
195+
for (auto segment : serialized) {
196+
size += segment.asBytes().size();
201197
}
202198

203199
std::cout << "capnproto: version = " << CAPNP_VERSION << std::endl;
@@ -385,8 +381,7 @@ avro_serialization_test(size_t iterations)
385381
decoder->init(*in);
386382
avro::decode(*decoder, r2);
387383

388-
if (r1.ids != r2.ids || r1.strings != r2.strings ||
389-
r2.ids.size() != kIntegers.size() || r2.strings.size() != kStringsCount) {
384+
if (r1.ids != r2.ids || r1.strings != r2.strings || r2.ids.size() != kIntegers.size() || r2.strings.size() != kStringsCount) {
390385
throw std::logic_error("avro's case: deserialization failed");
391386
}
392387

@@ -444,9 +439,8 @@ flatbuffers_serialization_test(size_t iterations)
444439

445440
auto start = std::chrono::high_resolution_clock::now();
446441
for (size_t i = 0; i < iterations; i++) {
447-
builder.Clear();
442+
flatbuffers::FlatBufferBuilder builder;
448443
strings.clear();
449-
// buf.clear();
450444

451445
for (size_t i = 0; i < kStringsCount; i++) {
452446
strings.push_back(builder.CreateString(kStringValue));
@@ -471,7 +465,7 @@ flatbuffers_serialization_test(size_t iterations)
471465
std::cout << "flatbuffers: time = " << duration << " milliseconds" << std::endl << std::endl;
472466
}
473467

474-
template<std::size_t opts>
468+
template <std::size_t opts>
475469
void
476470
yas_serialization_test(size_t iterations)
477471
{
@@ -496,41 +490,42 @@ yas_serialization_test(size_t iterations)
496490
throw std::logic_error("yas' case: deserialization failed");
497491
}
498492

499-
if ( opts & yas::compacted ) {
493+
if (opts & yas::compacted) {
500494
std::cout << "yas-compact: version = " << YAS_VERSION_STRING << std::endl;
501495
std::cout << "yas-compact: size = " << serialized.size() << " bytes" << std::endl;
502496
} else {
503497
std::cout << "yas: version = " << YAS_VERSION_STRING << std::endl;
504498
std::cout << "yas: size = " << serialized.size() << " bytes" << std::endl;
505499
}
506-
500+
507501
auto start = std::chrono::high_resolution_clock::now();
508502
for (size_t i = 0; i < iterations; i++) {
509503
yas::mem_ostream os;
510504
yas::binary_oarchive<yas::mem_ostream, opts> oa(os);
511-
oa & r1;
505+
oa& r1;
512506

513507
yas::mem_istream is(os.get_intrusive_buffer());
514508
yas::binary_iarchive<yas::mem_istream, opts> ia(is);
515-
ia & r2;
509+
ia& r2;
516510
}
517511
auto finish = std::chrono::high_resolution_clock::now();
518512
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(finish - start).count();
519513

520-
if ( opts & yas::compacted ) {
514+
if (opts & yas::compacted) {
521515
std::cout << "yas-compact: time = " << duration << " milliseconds" << std::endl << std::endl;
522516
} else {
523517
std::cout << "yas: time = " << duration << " milliseconds" << std::endl << std::endl;
524518
}
525519
}
526520

527521
int
528-
main(int argc, char **argv)
522+
main(int argc, char** argv)
529523
{
530524
GOOGLE_PROTOBUF_VERIFY_VERSION;
531525

532526
if (argc < 2) {
533-
std::cout << "usage: " << argv[0] << " N [thrift-binary thrift-compact protobuf boost msgpack cereal avro capnproto flatbuffers yas yas-compact]";
527+
std::cout << "usage: " << argv[0]
528+
<< " N [thrift-binary thrift-compact protobuf boost msgpack cereal avro capnproto flatbuffers yas yas-compact]";
534529
std::cout << std::endl << std::endl;
535530
std::cout << "arguments: " << std::endl;
536531
std::cout << " N -- number of iterations" << std::endl << std::endl;
@@ -541,7 +536,7 @@ main(int argc, char **argv)
541536

542537
try {
543538
iterations = boost::lexical_cast<size_t>(argv[1]);
544-
} catch (std::exception &exc) {
539+
} catch (std::exception& exc) {
545540
std::cerr << "Error: " << exc.what() << std::endl;
546541
std::cerr << "First positional argument must be an integer." << std::endl;
547542
return EXIT_FAILURE;
@@ -597,13 +592,13 @@ main(int argc, char **argv)
597592
}
598593

599594
if (names.empty() || names.find("yas") != names.end()) {
600-
yas_serialization_test<yas::binary|yas::no_header>(iterations);
595+
yas_serialization_test<yas::binary | yas::no_header>(iterations);
601596
}
602-
597+
603598
if (names.empty() || names.find("yas-compact") != names.end()) {
604-
yas_serialization_test<yas::binary|yas::no_header|yas::compacted>(iterations);
599+
yas_serialization_test<yas::binary | yas::no_header | yas::compacted>(iterations);
605600
}
606-
} catch (std::exception &exc) {
601+
} catch (std::exception& exc) {
607602
std::cerr << "Error: " << exc.what() << std::endl;
608603
return EXIT_FAILURE;
609604
}

capnproto/test.capnp.c++

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,11 @@ const ::capnp::_::RawSchema s_b11f3695c22ca61e = {
7979
namespace capnp_test {
8080

8181
// Record
82-
#ifndef _MSC_VER
8382
constexpr uint16_t Record::_capnpPrivate::dataWordSize;
8483
constexpr uint16_t Record::_capnpPrivate::pointerCount;
85-
#endif
8684
#if !CAPNP_LITE
8785
constexpr ::capnp::Kind Record::_capnpPrivate::kind;
8886
constexpr ::capnp::_::RawSchema const* Record::_capnpPrivate::schema;
89-
constexpr ::capnp::_::RawBrandedSchema const* Record::_capnpPrivate::brand;
9087
#endif // !CAPNP_LITE
9188

9289

capnproto/test.capnp.h

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
#include <capnp/generated-header-support.h>
88

9-
#if CAPNP_VERSION != 5003
9+
#if CAPNP_VERSION != 6001
1010
#error "Version mismatch between generated code and library headers. You must use the same version of the Cap'n Proto compiler and library."
1111
#endif
1212

@@ -31,7 +31,7 @@ struct Record {
3131
struct _capnpPrivate {
3232
CAPNP_DECLARE_STRUCT_HEADER(b11f3695c22ca61e, 0, 2)
3333
#if !CAPNP_LITE
34-
static constexpr ::capnp::_::RawBrandedSchema const* brand = &schema->defaultBrand;
34+
static constexpr ::capnp::_::RawBrandedSchema const* brand() { return &schema->defaultBrand; }
3535
#endif // !CAPNP_LITE
3636
};
3737
};
@@ -51,7 +51,7 @@ class Record::Reader {
5151

5252
#if !CAPNP_LITE
5353
inline ::kj::StringTree toString() const {
54-
return ::capnp::_::structString(_reader, *_capnpPrivate::brand);
54+
return ::capnp::_::structString(_reader, *_capnpPrivate::brand());
5555
}
5656
#endif // !CAPNP_LITE
5757

@@ -134,75 +134,79 @@ class Record::Pipeline {
134134
// =======================================================================================
135135

136136
inline bool Record::Reader::hasIds() const {
137-
return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
137+
return !_reader.getPointerField(
138+
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
138139
}
139140
inline bool Record::Builder::hasIds() {
140-
return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
141+
return !_builder.getPointerField(
142+
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
141143
}
142144
inline ::capnp::List< ::int64_t>::Reader Record::Reader::getIds() const {
143-
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::get(
144-
_reader.getPointerField(0 * ::capnp::POINTERS));
145+
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::get(_reader.getPointerField(
146+
::capnp::bounded<0>() * ::capnp::POINTERS));
145147
}
146148
inline ::capnp::List< ::int64_t>::Builder Record::Builder::getIds() {
147-
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::get(
148-
_builder.getPointerField(0 * ::capnp::POINTERS));
149+
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::get(_builder.getPointerField(
150+
::capnp::bounded<0>() * ::capnp::POINTERS));
149151
}
150152
inline void Record::Builder::setIds( ::capnp::List< ::int64_t>::Reader value) {
151-
::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::set(
152-
_builder.getPointerField(0 * ::capnp::POINTERS), value);
153+
::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::set(_builder.getPointerField(
154+
::capnp::bounded<0>() * ::capnp::POINTERS), value);
153155
}
154156
inline void Record::Builder::setIds(::kj::ArrayPtr<const ::int64_t> value) {
155-
::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::set(
156-
_builder.getPointerField(0 * ::capnp::POINTERS), value);
157+
::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::set(_builder.getPointerField(
158+
::capnp::bounded<0>() * ::capnp::POINTERS), value);
157159
}
158160
inline ::capnp::List< ::int64_t>::Builder Record::Builder::initIds(unsigned int size) {
159-
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::init(
160-
_builder.getPointerField(0 * ::capnp::POINTERS), size);
161+
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::init(_builder.getPointerField(
162+
::capnp::bounded<0>() * ::capnp::POINTERS), size);
161163
}
162164
inline void Record::Builder::adoptIds(
163165
::capnp::Orphan< ::capnp::List< ::int64_t>>&& value) {
164-
::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::adopt(
165-
_builder.getPointerField(0 * ::capnp::POINTERS), kj::mv(value));
166+
::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::adopt(_builder.getPointerField(
167+
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
166168
}
167169
inline ::capnp::Orphan< ::capnp::List< ::int64_t>> Record::Builder::disownIds() {
168-
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::disown(
169-
_builder.getPointerField(0 * ::capnp::POINTERS));
170+
return ::capnp::_::PointerHelpers< ::capnp::List< ::int64_t>>::disown(_builder.getPointerField(
171+
::capnp::bounded<0>() * ::capnp::POINTERS));
170172
}
171173

172174
inline bool Record::Reader::hasStrings() const {
173-
return !_reader.getPointerField(1 * ::capnp::POINTERS).isNull();
175+
return !_reader.getPointerField(
176+
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
174177
}
175178
inline bool Record::Builder::hasStrings() {
176-
return !_builder.getPointerField(1 * ::capnp::POINTERS).isNull();
179+
return !_builder.getPointerField(
180+
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
177181
}
178182
inline ::capnp::List< ::capnp::Text>::Reader Record::Reader::getStrings() const {
179-
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::get(
180-
_reader.getPointerField(1 * ::capnp::POINTERS));
183+
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::get(_reader.getPointerField(
184+
::capnp::bounded<1>() * ::capnp::POINTERS));
181185
}
182186
inline ::capnp::List< ::capnp::Text>::Builder Record::Builder::getStrings() {
183-
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::get(
184-
_builder.getPointerField(1 * ::capnp::POINTERS));
187+
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::get(_builder.getPointerField(
188+
::capnp::bounded<1>() * ::capnp::POINTERS));
185189
}
186190
inline void Record::Builder::setStrings( ::capnp::List< ::capnp::Text>::Reader value) {
187-
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::set(
188-
_builder.getPointerField(1 * ::capnp::POINTERS), value);
191+
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::set(_builder.getPointerField(
192+
::capnp::bounded<1>() * ::capnp::POINTERS), value);
189193
}
190194
inline void Record::Builder::setStrings(::kj::ArrayPtr<const ::capnp::Text::Reader> value) {
191-
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::set(
192-
_builder.getPointerField(1 * ::capnp::POINTERS), value);
195+
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::set(_builder.getPointerField(
196+
::capnp::bounded<1>() * ::capnp::POINTERS), value);
193197
}
194198
inline ::capnp::List< ::capnp::Text>::Builder Record::Builder::initStrings(unsigned int size) {
195-
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::init(
196-
_builder.getPointerField(1 * ::capnp::POINTERS), size);
199+
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::init(_builder.getPointerField(
200+
::capnp::bounded<1>() * ::capnp::POINTERS), size);
197201
}
198202
inline void Record::Builder::adoptStrings(
199203
::capnp::Orphan< ::capnp::List< ::capnp::Text>>&& value) {
200-
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::adopt(
201-
_builder.getPointerField(1 * ::capnp::POINTERS), kj::mv(value));
204+
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::adopt(_builder.getPointerField(
205+
::capnp::bounded<1>() * ::capnp::POINTERS), kj::mv(value));
202206
}
203207
inline ::capnp::Orphan< ::capnp::List< ::capnp::Text>> Record::Builder::disownStrings() {
204-
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::disown(
205-
_builder.getPointerField(1 * ::capnp::POINTERS));
208+
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::Text>>::disown(_builder.getPointerField(
209+
::capnp::bounded<1>() * ::capnp::POINTERS));
206210
}
207211

208212
} // namespace

0 commit comments

Comments
 (0)