mirror of
https://github.com/google/flatbuffers.git
synced 2026-07-03 22:34:13 +00:00
Disable armeabi builds for Android and re-enable CI builds. (#4970)
armeabi support was removed from the Android NDK so we should no longer build it. Since this fixes the Android build failures this commit also re-enables Travis Android builds. While re-enabling Android builds, some recent changes broke C++98 support so this fixes those issues as well which include: - Conditionally compiling use of move constructors, operators and std::move. - Changing sample to use flatbuffers::unique_ptr rather than std::unique_ptr. Finally, added the special "default_ptr_type" value for the "cpp_ptr_type" attribute. This expands to the value passed to the "--cpp-ptr-type" argument of flatc.
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
d840856093
commit
569492e890
46
.travis.yml
46
.travis.yml
@@ -121,26 +121,26 @@ matrix:
|
|||||||
osx_image: xcode9.3
|
osx_image: xcode9.3
|
||||||
env: CONAN_APPLE_CLANG_VERSIONS=9.1
|
env: CONAN_APPLE_CLANG_VERSIONS=9.1
|
||||||
|
|
||||||
#- language: android
|
- language: android
|
||||||
# sudo: true
|
sudo: true
|
||||||
# android:
|
android:
|
||||||
# components:
|
components:
|
||||||
# - tools
|
- tools
|
||||||
# - platform-tools
|
- platform-tools
|
||||||
# - build-tools-25.0.2
|
- build-tools-25.0.2
|
||||||
# - android-25
|
- android-25
|
||||||
# - extra-android-m2repository
|
- extra-android-m2repository
|
||||||
# compiler:
|
compiler:
|
||||||
# - gcc
|
- gcc
|
||||||
# before_install:
|
before_install:
|
||||||
# - git clone https://github.com/urho3d/android-ndk.git $HOME/android-ndk-root
|
- git clone https://github.com/urho3d/android-ndk.git $HOME/android-ndk-root
|
||||||
# - export ANDROID_NDK_HOME=$HOME/android-ndk-root
|
- export ANDROID_NDK_HOME=$HOME/android-ndk-root
|
||||||
# # Setup environment for Linux build which is required to build the sample.
|
# Setup environment for Linux build which is required to build the sample.
|
||||||
# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
|
||||||
# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update -qq; fi
|
||||||
# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq g++-$GCC_VERSION; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq g++-$GCC_VERSION; fi
|
||||||
# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-$GCC_VERSION; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install -qq gcc-$GCC_VERSION; fi
|
||||||
# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ln -s -v -f $(which g++-$GCC_VERSION) /usr/bin/g++; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ln -s -v -f $(which g++-$GCC_VERSION) /usr/bin/g++; fi
|
||||||
# - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ln -s -v -f $(which gcc-$GCC_VERSION) /usr/bin/gcc; fi
|
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo ln -s -v -f $(which gcc-$GCC_VERSION) /usr/bin/gcc; fi
|
||||||
# script:
|
script:
|
||||||
# - failed=0; for build_gradle in $(git ls-files | grep build.gradle); do ( cd "$(dirname "${build_gradle}")" && ./gradlew build ) || failed=1; done; exit $((failed))
|
- failed=0; for build_gradle in $(git ls-files | grep build.gradle); do ( cd "$(dirname "${build_gradle}")" && ./gradlew build ) || failed=1; done; exit $((failed))
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ android {
|
|||||||
ndkBuild {
|
ndkBuild {
|
||||||
targets "FlatBufferTest"
|
targets "FlatBufferTest"
|
||||||
arguments "-j" + Runtime.getRuntime().availableProcessors()
|
arguments "-j" + Runtime.getRuntime().availableProcessors()
|
||||||
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
|
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -240,7 +240,9 @@ influence this either globally (using the `--cpp-ptr-type` argument to
|
|||||||
`flatc`) or per field (using the `cpp_ptr_type` attribute) to by any smart
|
`flatc`) or per field (using the `cpp_ptr_type` attribute) to by any smart
|
||||||
pointer type (`my_ptr<T>`), or by specifying `naked` as the type to get `T *`
|
pointer type (`my_ptr<T>`), or by specifying `naked` as the type to get `T *`
|
||||||
pointers. Unlike the smart pointers, naked pointers do not manage memory for
|
pointers. Unlike the smart pointers, naked pointers do not manage memory for
|
||||||
you, so you'll have to manage their lifecycles manually.
|
you, so you'll have to manage their lifecycles manually. To reference the
|
||||||
|
pointer type specified by the `--cpp-ptr-type` argument to `flatc` from a
|
||||||
|
flatbuffer field set the `cpp_ptr_type` attribute to `default_ptr_type`.
|
||||||
|
|
||||||
|
|
||||||
# Using different string type.
|
# Using different string type.
|
||||||
|
|||||||
@@ -104,10 +104,14 @@ template<typename T, typename IT> struct VectorIterator {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
VectorIterator &operator=(VectorIterator &&other) {
|
VectorIterator &operator=(VectorIterator &&other) {
|
||||||
data_ = other.data_;
|
data_ = other.data_;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
bool operator==(const VectorIterator &other) const {
|
bool operator==(const VectorIterator &other) const {
|
||||||
return data_ == other.data_;
|
return data_ == other.data_;
|
||||||
@@ -469,6 +473,9 @@ class DetachedBuffer {
|
|||||||
cur_(cur),
|
cur_(cur),
|
||||||
size_(sz) {}
|
size_(sz) {}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
DetachedBuffer(DetachedBuffer &&other)
|
DetachedBuffer(DetachedBuffer &&other)
|
||||||
: allocator_(other.allocator_),
|
: allocator_(other.allocator_),
|
||||||
own_allocator_(other.own_allocator_),
|
own_allocator_(other.own_allocator_),
|
||||||
@@ -478,7 +485,13 @@ class DetachedBuffer {
|
|||||||
size_(other.size_) {
|
size_(other.size_) {
|
||||||
other.reset();
|
other.reset();
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
DetachedBuffer &operator=(DetachedBuffer &&other) {
|
DetachedBuffer &operator=(DetachedBuffer &&other) {
|
||||||
destroy();
|
destroy();
|
||||||
|
|
||||||
@@ -493,6 +506,9 @@ class DetachedBuffer {
|
|||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
~DetachedBuffer() { destroy(); }
|
~DetachedBuffer() { destroy(); }
|
||||||
|
|
||||||
@@ -522,10 +538,16 @@ class DetachedBuffer {
|
|||||||
#endif
|
#endif
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
// These may change access mode, leave these at end of public section
|
// These may change access mode, leave these at end of public section
|
||||||
FLATBUFFERS_DELETE_FUNC(DetachedBuffer(const DetachedBuffer &other))
|
FLATBUFFERS_DELETE_FUNC(DetachedBuffer(const DetachedBuffer &other))
|
||||||
FLATBUFFERS_DELETE_FUNC(
|
FLATBUFFERS_DELETE_FUNC(
|
||||||
DetachedBuffer &operator=(const DetachedBuffer &other))
|
DetachedBuffer &operator=(const DetachedBuffer &other))
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Allocator *allocator_;
|
Allocator *allocator_;
|
||||||
@@ -572,7 +594,13 @@ class vector_downward {
|
|||||||
cur_(nullptr),
|
cur_(nullptr),
|
||||||
scratch_(nullptr) {}
|
scratch_(nullptr) {}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
vector_downward(vector_downward &&other)
|
vector_downward(vector_downward &&other)
|
||||||
|
#else
|
||||||
|
vector_downward(vector_downward &other)
|
||||||
|
#endif // defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
: allocator_(other.allocator_),
|
: allocator_(other.allocator_),
|
||||||
own_allocator_(other.own_allocator_),
|
own_allocator_(other.own_allocator_),
|
||||||
initial_size_(other.initial_size_),
|
initial_size_(other.initial_size_),
|
||||||
@@ -591,12 +619,18 @@ class vector_downward {
|
|||||||
other.scratch_ = nullptr;
|
other.scratch_ = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
vector_downward &operator=(vector_downward &&other) {
|
vector_downward &operator=(vector_downward &&other) {
|
||||||
// Move construct a temporary and swap idiom
|
// Move construct a temporary and swap idiom
|
||||||
vector_downward temp(std::move(other));
|
vector_downward temp(std::move(other));
|
||||||
swap(temp);
|
swap(temp);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
~vector_downward() {
|
~vector_downward() {
|
||||||
clear_buffer();
|
clear_buffer();
|
||||||
@@ -842,8 +876,13 @@ class FlatBufferBuilder {
|
|||||||
EndianCheck();
|
EndianCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
/// @brief Move constructor for FlatBufferBuilder.
|
/// @brief Move constructor for FlatBufferBuilder.
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
FlatBufferBuilder(FlatBufferBuilder &&other)
|
FlatBufferBuilder(FlatBufferBuilder &&other)
|
||||||
|
#else
|
||||||
|
FlatBufferBuilder(FlatBufferBuilder &other)
|
||||||
|
#endif // #if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
: buf_(1024, nullptr, false, AlignOf<largest_scalar_t>()),
|
: buf_(1024, nullptr, false, AlignOf<largest_scalar_t>()),
|
||||||
num_field_loc(0),
|
num_field_loc(0),
|
||||||
max_voffset_(0),
|
max_voffset_(0),
|
||||||
@@ -858,7 +897,11 @@ class FlatBufferBuilder {
|
|||||||
// Lack of delegating constructors in vs2010 makes it more verbose than needed.
|
// Lack of delegating constructors in vs2010 makes it more verbose than needed.
|
||||||
Swap(other);
|
Swap(other);
|
||||||
}
|
}
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
/// @brief Move assignment operator for FlatBufferBuilder.
|
/// @brief Move assignment operator for FlatBufferBuilder.
|
||||||
FlatBufferBuilder &operator=(FlatBufferBuilder &&other) {
|
FlatBufferBuilder &operator=(FlatBufferBuilder &&other) {
|
||||||
// Move construct a temporary and swap idiom
|
// Move construct a temporary and swap idiom
|
||||||
@@ -866,6 +909,9 @@ class FlatBufferBuilder {
|
|||||||
Swap(temp);
|
Swap(temp);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
void Swap(FlatBufferBuilder &other) {
|
void Swap(FlatBufferBuilder &other) {
|
||||||
using std::swap;
|
using std::swap;
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ android {
|
|||||||
ndkBuild {
|
ndkBuild {
|
||||||
targets "FlatBufferSample"
|
targets "FlatBufferSample"
|
||||||
arguments "-j" + Runtime.getRuntime().availableProcessors()
|
arguments "-j" + Runtime.getRuntime().availableProcessors()
|
||||||
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
|
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -578,7 +578,8 @@ class CppGenerator : public BaseGenerator {
|
|||||||
bool is_constructor) {
|
bool is_constructor) {
|
||||||
auto &ptr_type = PtrType(field);
|
auto &ptr_type = PtrType(field);
|
||||||
if (ptr_type != "naked") {
|
if (ptr_type != "naked") {
|
||||||
return ptr_type + "<" + type + ">";
|
return (ptr_type != "default_ptr_type" ? ptr_type :
|
||||||
|
parser_.opts.cpp_object_api_pointer_type) + "<" + type + ">";
|
||||||
} else if (is_constructor) {
|
} else if (is_constructor) {
|
||||||
return "";
|
return "";
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Binary file not shown.
@@ -89,9 +89,9 @@ table Monster {
|
|||||||
vector_of_referrables:[Referrable](id:35);
|
vector_of_referrables:[Referrable](id:35);
|
||||||
single_weak_reference:ulong(id:36, hash:"fnv1a_64", cpp_type:"ReferrableT");
|
single_weak_reference:ulong(id:36, hash:"fnv1a_64", cpp_type:"ReferrableT");
|
||||||
vector_of_weak_references:[ulong](id:37, hash:"fnv1a_64", cpp_type:"ReferrableT");
|
vector_of_weak_references:[ulong](id:37, hash:"fnv1a_64", cpp_type:"ReferrableT");
|
||||||
vector_of_strong_referrables:[Referrable](id:38, cpp_ptr_type:"std::unique_ptr"); //was shared_ptr
|
vector_of_strong_referrables:[Referrable](id:38, cpp_ptr_type:"default_ptr_type"); //was shared_ptr
|
||||||
co_owning_reference:ulong(id:39, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked"); //was shared_ptr as well
|
co_owning_reference:ulong(id:39, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked"); //was shared_ptr as well
|
||||||
vector_of_co_owning_references:[ulong](id:40, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"std::unique_ptr", cpp_ptr_type_get:".get()"); //was shared_ptr
|
vector_of_co_owning_references:[ulong](id:40, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"default_ptr_type", cpp_ptr_type_get:".get()"); //was shared_ptr
|
||||||
non_owning_reference:ulong(id:41, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr
|
non_owning_reference:ulong(id:41, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr
|
||||||
vector_of_non_owning_references:[ulong](id:42, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr
|
vector_of_non_owning_references:[ulong](id:42, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -802,9 +802,9 @@ struct MonsterT : public flatbuffers::NativeTable {
|
|||||||
std::vector<flatbuffers::unique_ptr<ReferrableT>> vector_of_referrables;
|
std::vector<flatbuffers::unique_ptr<ReferrableT>> vector_of_referrables;
|
||||||
ReferrableT *single_weak_reference;
|
ReferrableT *single_weak_reference;
|
||||||
std::vector<ReferrableT *> vector_of_weak_references;
|
std::vector<ReferrableT *> vector_of_weak_references;
|
||||||
std::vector<std::unique_ptr<ReferrableT>> vector_of_strong_referrables;
|
std::vector<flatbuffers::unique_ptr<ReferrableT>> vector_of_strong_referrables;
|
||||||
ReferrableT *co_owning_reference;
|
ReferrableT *co_owning_reference;
|
||||||
std::vector<std::unique_ptr<ReferrableT>> vector_of_co_owning_references;
|
std::vector<flatbuffers::unique_ptr<ReferrableT>> vector_of_co_owning_references;
|
||||||
ReferrableT *non_owning_reference;
|
ReferrableT *non_owning_reference;
|
||||||
std::vector<ReferrableT *> vector_of_non_owning_references;
|
std::vector<ReferrableT *> vector_of_non_owning_references;
|
||||||
MonsterT()
|
MonsterT()
|
||||||
@@ -2072,10 +2072,10 @@ if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->testhashu32_fnv1a), s
|
|||||||
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->single_weak_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->single_weak_reference = nullptr; };
|
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->single_weak_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->single_weak_reference = nullptr; };
|
||||||
{ auto _e = vector_of_weak_references(); if (_e) { _o->vector_of_weak_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, naked
|
{ auto _e = vector_of_weak_references(); if (_e) { _o->vector_of_weak_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, naked
|
||||||
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_weak_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i))); else _o->vector_of_weak_references[_i] = nullptr; } } };
|
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_weak_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i))); else _o->vector_of_weak_references[_i] = nullptr; } } };
|
||||||
{ auto _e = vector_of_strong_referrables(); if (_e) { _o->vector_of_strong_referrables.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_strong_referrables[_i] = std::unique_ptr<ReferrableT>(_e->Get(_i)->UnPack(_resolver)); } } };
|
{ auto _e = vector_of_strong_referrables(); if (_e) { _o->vector_of_strong_referrables.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_strong_referrables[_i] = flatbuffers::unique_ptr<ReferrableT>(_e->Get(_i)->UnPack(_resolver)); } } };
|
||||||
{ auto _e = co_owning_reference(); //scalar resolver, naked
|
{ auto _e = co_owning_reference(); //scalar resolver, naked
|
||||||
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->co_owning_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->co_owning_reference = nullptr; };
|
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->co_owning_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->co_owning_reference = nullptr; };
|
||||||
{ auto _e = vector_of_co_owning_references(); if (_e) { _o->vector_of_co_owning_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, std::unique_ptr
|
{ auto _e = vector_of_co_owning_references(); if (_e) { _o->vector_of_co_owning_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, default_ptr_type
|
||||||
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_co_owning_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i)));/* else do nothing */; } } };
|
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_co_owning_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i)));/* else do nothing */; } } };
|
||||||
{ auto _e = non_owning_reference(); //scalar resolver, naked
|
{ auto _e = non_owning_reference(); //scalar resolver, naked
|
||||||
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->non_owning_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->non_owning_reference = nullptr; };
|
if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->non_owning_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->non_owning_reference = nullptr; };
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#include "flatbuffers/stl_emulation.h"
|
||||||
|
|
||||||
#include "monster_test_generated.h"
|
#include "monster_test_generated.h"
|
||||||
#include "test_builder.h"
|
#include "test_builder.h"
|
||||||
|
|
||||||
@@ -12,13 +14,20 @@ struct OwnedAllocator : public flatbuffers::DefaultAllocator {};
|
|||||||
|
|
||||||
class TestHeapBuilder : public flatbuffers::FlatBufferBuilder {
|
class TestHeapBuilder : public flatbuffers::FlatBufferBuilder {
|
||||||
private:
|
private:
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
TestHeapBuilder(const TestHeapBuilder &);
|
TestHeapBuilder(const TestHeapBuilder &);
|
||||||
TestHeapBuilder &operator=(const TestHeapBuilder &);
|
TestHeapBuilder &operator=(const TestHeapBuilder &);
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestHeapBuilder()
|
TestHeapBuilder()
|
||||||
: flatbuffers::FlatBufferBuilder(2048, new OwnedAllocator(), true) {}
|
: flatbuffers::FlatBufferBuilder(2048, new OwnedAllocator(), true) {}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
TestHeapBuilder(TestHeapBuilder &&other)
|
TestHeapBuilder(TestHeapBuilder &&other)
|
||||||
: FlatBufferBuilder(std::move(other)) { }
|
: FlatBufferBuilder(std::move(other)) { }
|
||||||
|
|
||||||
@@ -26,6 +35,9 @@ public:
|
|||||||
FlatBufferBuilder::operator=(std::move(other));
|
FlatBufferBuilder::operator=(std::move(other));
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
// This class simulates flatbuffers::grpc::detail::SliceAllocatorMember
|
// This class simulates flatbuffers::grpc::detail::SliceAllocatorMember
|
||||||
@@ -49,12 +61,18 @@ public:
|
|||||||
Swap(other);
|
Swap(other);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
GrpcLikeMessageBuilder &operator=(GrpcLikeMessageBuilder &&other) {
|
GrpcLikeMessageBuilder &operator=(GrpcLikeMessageBuilder &&other) {
|
||||||
// Construct temporary and swap idiom
|
// Construct temporary and swap idiom
|
||||||
GrpcLikeMessageBuilder temp(std::move(other));
|
GrpcLikeMessageBuilder temp(std::move(other));
|
||||||
Swap(temp);
|
Swap(temp);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
void Swap(GrpcLikeMessageBuilder &other) {
|
void Swap(GrpcLikeMessageBuilder &other) {
|
||||||
// No need to swap member_allocator_ because it's stateless.
|
// No need to swap member_allocator_ because it's stateless.
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ bool release_n_verify(flatbuffers::grpc::MessageBuilder &mbb, const std::string
|
|||||||
|
|
||||||
template <class Builder>
|
template <class Builder>
|
||||||
struct BuilderTests {
|
struct BuilderTests {
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
static void empty_builder_movector_test() {
|
static void empty_builder_movector_test() {
|
||||||
Builder b1;
|
Builder b1;
|
||||||
size_t b1_size = b1.GetSize();
|
size_t b1_size = b1.GetSize();
|
||||||
@@ -97,38 +100,6 @@ struct BuilderTests {
|
|||||||
TEST_EQ_FUNC(b1.GetSize(), 0);
|
TEST_EQ_FUNC(b1.GetSize(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void builder_swap_before_finish_test() {
|
|
||||||
Builder b1;
|
|
||||||
auto root_offset1 = populate1(b1);
|
|
||||||
auto size1 = b1.GetSize();
|
|
||||||
Builder b2;
|
|
||||||
auto root_offset2 = populate2(b2);
|
|
||||||
auto size2 = b2.GetSize();
|
|
||||||
b1.Swap(b2);
|
|
||||||
b1.Finish(root_offset2);
|
|
||||||
b2.Finish(root_offset1);
|
|
||||||
TEST_EQ_FUNC(b1.GetSize() > size2, true);
|
|
||||||
TEST_EQ_FUNC(b2.GetSize() > size1, true);
|
|
||||||
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
|
||||||
TEST_ASSERT_FUNC(release_n_verify(b2, m1_name, m1_color));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void builder_swap_after_finish_test() {
|
|
||||||
Builder b1;
|
|
||||||
auto root_offset1 = populate1(b1);
|
|
||||||
b1.Finish(root_offset1);
|
|
||||||
auto size1 = b1.GetSize();
|
|
||||||
Builder b2;
|
|
||||||
auto root_offset2 = populate2(b2);
|
|
||||||
b2.Finish(root_offset2);
|
|
||||||
auto size2 = b2.GetSize();
|
|
||||||
b1.Swap(b2);
|
|
||||||
TEST_EQ_FUNC(b1.GetSize(), size2);
|
|
||||||
TEST_EQ_FUNC(b2.GetSize(), size1);
|
|
||||||
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
|
||||||
TEST_ASSERT_FUNC(release_n_verify(b2, m1_name, m1_color));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void builder_move_assign_after_release_test() {
|
static void builder_move_assign_after_release_test() {
|
||||||
Builder b1;
|
Builder b1;
|
||||||
auto root_offset1 = populate1(b1);
|
auto root_offset1 = populate1(b1);
|
||||||
@@ -166,18 +137,59 @@ struct BuilderTests {
|
|||||||
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
||||||
TEST_EQ_FUNC(b2.GetSize(), 0);
|
TEST_EQ_FUNC(b2.GetSize(), 0);
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
static void builder_swap_before_finish_test() {
|
||||||
|
Builder b1;
|
||||||
|
auto root_offset1 = populate1(b1);
|
||||||
|
auto size1 = b1.GetSize();
|
||||||
|
Builder b2;
|
||||||
|
auto root_offset2 = populate2(b2);
|
||||||
|
auto size2 = b2.GetSize();
|
||||||
|
b1.Swap(b2);
|
||||||
|
b1.Finish(root_offset2);
|
||||||
|
b2.Finish(root_offset1);
|
||||||
|
TEST_EQ_FUNC(b1.GetSize() > size2, true);
|
||||||
|
TEST_EQ_FUNC(b2.GetSize() > size1, true);
|
||||||
|
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
||||||
|
TEST_ASSERT_FUNC(release_n_verify(b2, m1_name, m1_color));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void builder_swap_after_finish_test() {
|
||||||
|
Builder b1;
|
||||||
|
auto root_offset1 = populate1(b1);
|
||||||
|
b1.Finish(root_offset1);
|
||||||
|
auto size1 = b1.GetSize();
|
||||||
|
Builder b2;
|
||||||
|
auto root_offset2 = populate2(b2);
|
||||||
|
b2.Finish(root_offset2);
|
||||||
|
auto size2 = b2.GetSize();
|
||||||
|
b1.Swap(b2);
|
||||||
|
TEST_EQ_FUNC(b1.GetSize(), size2);
|
||||||
|
TEST_EQ_FUNC(b2.GetSize(), size1);
|
||||||
|
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
||||||
|
TEST_ASSERT_FUNC(release_n_verify(b2, m1_name, m1_color));
|
||||||
|
}
|
||||||
|
|
||||||
static void all_tests() {
|
static void all_tests() {
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
empty_builder_movector_test();
|
empty_builder_movector_test();
|
||||||
nonempty_builder_movector_test();
|
nonempty_builder_movector_test();
|
||||||
builder_movector_before_finish_test();
|
builder_movector_before_finish_test();
|
||||||
builder_movector_after_finish_test();
|
builder_movector_after_finish_test();
|
||||||
builder_move_assign_before_finish_test();
|
builder_move_assign_before_finish_test();
|
||||||
builder_move_assign_after_finish_test();
|
builder_move_assign_after_finish_test();
|
||||||
builder_swap_before_finish_test();
|
|
||||||
builder_swap_after_finish_test();
|
|
||||||
builder_move_assign_after_release_test();
|
builder_move_assign_after_release_test();
|
||||||
builder_move_assign_after_releaseraw_test();
|
builder_move_assign_after_releaseraw_test();
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
builder_swap_before_finish_test();
|
||||||
|
builder_swap_after_finish_test();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -225,6 +237,9 @@ struct BuilderReuseTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
static void builder_reusable_after_release_and_move_assign_test(TestSelector selector) {
|
static void builder_reusable_after_release_and_move_assign_test(TestSelector selector) {
|
||||||
if (!selector.count(REUSABLE_AFTER_RELEASE_AND_MOVE_ASSIGN)) {
|
if (!selector.count(REUSABLE_AFTER_RELEASE_AND_MOVE_ASSIGN)) {
|
||||||
return;
|
return;
|
||||||
@@ -261,12 +276,21 @@ struct BuilderReuseTests {
|
|||||||
TEST_EQ_FUNC(b2.GetSize(), 0);
|
TEST_EQ_FUNC(b2.GetSize(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
static void run_tests(TestSelector selector) {
|
static void run_tests(TestSelector selector) {
|
||||||
builder_reusable_after_release_test(selector);
|
builder_reusable_after_release_test(selector);
|
||||||
builder_reusable_after_releaseraw_test(selector);
|
builder_reusable_after_releaseraw_test(selector);
|
||||||
|
// clang-format off
|
||||||
|
#if !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
builder_reusable_after_release_and_move_assign_test(selector);
|
builder_reusable_after_release_and_move_assign_test(selector);
|
||||||
builder_reusable_after_releaseraw_and_move_assign_test(selector);
|
builder_reusable_after_releaseraw_and_move_assign_test(selector);
|
||||||
|
// clang-format off
|
||||||
|
#endif // !defined(FLATBUFFERS_CPP98_STL)
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user