Commit fb87c0d3 authored by Lawrence Chan's avatar Lawrence Chan Committed by Wouter van Oortmerssen

[C++] Improve Allocator handling (#4312)

* Improve Allocator handling

- Templatize Allocator on vector_downward, and make it own the allocator
instance so it can manage lifetimes.
- Templatize + rename FlatBufferBuilderT accordingly, and add a typedef
to FlatBufferBuilder so old code continues to work.
- Fix some issues with the release deleter
- More details in github issue #4311

* Fix constexpr for older MSVC

* Reimplement allocator improvements via inheritance

Instead of templates, use an abstract base class and some unique_ptrs to
implement the new and improved allocator.

* Fix misplaced newline

* Add missing override keyword

* Add macro for func delete to support older compilers

* Explicitly move BufferDeleter (maybe fixes VS 10?)

* Revert previous attempt at VS10 fix

* Try yet another workaround for MS 10

* Use FLATBUFFERS_NOEXCEPT macro

* Add FLATBUFFERS_OVERRIDE macro

* Fix some issues with MSVC 16 hack

* Remove dep on unique_ptr

* Update DEPRECATED macro with a message

* Sigh, no delegating ctors before c++11

* Fix simple_allocator stub

* Relax FlatBufferBuilder ctor

* Add vector_downward reset + assert in clear

* Rename DetachedBuffer to FlatBuffer + remove unnecessary deprecations

* Add flatbuffers::FlatBufferBuilder::Release()

* Address remaining allocator-improvements comments
parent 398ae0cb
This diff is collapsed.
...@@ -83,7 +83,7 @@ void lcg_reset() { lcg_seed = 48271; } ...@@ -83,7 +83,7 @@ void lcg_reset() { lcg_seed = 48271; }
std::string test_data_path = "tests/"; std::string test_data_path = "tests/";
// example of how to build up a serialized buffer algorithmically: // example of how to build up a serialized buffer algorithmically:
flatbuffers::unique_ptr_t CreateFlatBufferTest(std::string &buffer) { flatbuffers::DetachedBuffer CreateFlatBufferTest(std::string &buffer) {
flatbuffers::FlatBufferBuilder builder; flatbuffers::FlatBufferBuilder builder;
auto vec = Vec3(1, 2, 3, 0, Color_Red, Test(10, 20)); auto vec = Vec3(1, 2, 3, 0, Color_Red, Test(10, 20));
...@@ -1520,11 +1520,11 @@ int main(int /*argc*/, const char * /*argv*/[]) { ...@@ -1520,11 +1520,11 @@ int main(int /*argc*/, const char * /*argv*/[]) {
auto flatbuf = CreateFlatBufferTest(rawbuf); auto flatbuf = CreateFlatBufferTest(rawbuf);
AccessFlatBufferTest(reinterpret_cast<const uint8_t *>(rawbuf.c_str()), AccessFlatBufferTest(reinterpret_cast<const uint8_t *>(rawbuf.c_str()),
rawbuf.length()); rawbuf.length());
AccessFlatBufferTest(flatbuf.get(), rawbuf.length()); AccessFlatBufferTest(flatbuf.data(), flatbuf.size());
MutateFlatBuffersTest(flatbuf.get(), rawbuf.length()); MutateFlatBuffersTest(flatbuf.data(), flatbuf.size());
ObjectFlatBuffersTest(flatbuf.get()); ObjectFlatBuffersTest(flatbuf.data());
SizePrefixedTest(); SizePrefixedTest();
...@@ -1534,7 +1534,7 @@ int main(int /*argc*/, const char * /*argv*/[]) { ...@@ -1534,7 +1534,7 @@ int main(int /*argc*/, const char * /*argv*/[]) {
test_data_path; test_data_path;
#endif #endif
ParseAndGenerateTextTest(); ParseAndGenerateTextTest();
ReflectionTest(flatbuf.get(), rawbuf.length()); ReflectionTest(flatbuf.data(), flatbuf.size());
ParseProtoTest(); ParseProtoTest();
UnionVectorTest(); UnionVectorTest();
#endif #endif
......
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