Commit 569492e8 authored by Stewart Miles's avatar Stewart Miles Committed by Wouter van Oortmerssen

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.
parent d8408560
...@@ -121,26 +121,26 @@ matrix: ...@@ -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 { ...@@ -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 ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 {
......
No preview for this file type
...@@ -89,9 +89,9 @@ table Monster { ...@@ -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 { ...@@ -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 ...@@ -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; };
......
#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 {}; ...@@ -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: ...@@ -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: ...@@ -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 ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment