SerializationTraits<T>::Deserialize _transfers_ ownership of the buffer,
so we must destroy it.
This commit also includes some misc fixes:
- Use grpc::Status::OK rather than default ctor for clarity.
- Check for a null buffer passed into Deserialize, and handle it the
same way as the protobuf deserializer.
* Rework flatbuffers + gRPC integration
- Introduce `flatbuffers::grpc::Message<T>`, a `grpc_slice`-backed
message buffer that handles refcounting and allows flatbuffers to
transfer ownership to gRPC efficiently. This replaces
`flatbuffers::BufferRef<T>`, which required a copy call and was also
unsafe w.r.t. buffer lifetime.
- Introduce `flatbuffers::grpc::MessageBuilder`, a gRPC-specific builder
that forces a `grpc_slice`-backed allocator and also adds some helpful
`Message<T>`-related methods.
- Update serializers accordingly (now zero-copy between flatbuffers and
gRPC).
* gRPC: verify messages by default, but allow user to override
* gRPC: fix some formatting issues
* Disable verification by default, but add helper method
* Make FlatBufferBuilder fields protected + remove vec accessor
* Use bool add_ref parameter to toggle refcount incr
* Remove unnecessary inline specifiers
* Fix formatting
* Use auto
* Remove empty lines
* Use grpc_slice helper macros
* Simplify reset code
* Disable Message copy ctor and assignment by default
* Remove unused member
* Enable gRPC verification by default
* Use auto
* Bake in message verification (remove template specialization)
* Add RoundUp func
* Consolidate gRPC message copy flag
* Make vector_downward allocations fully lazy
* Test message verification failure code/message
* Add grpctest verification test comments
* Simplify reallocate implementation
* Make initial_size a size_t
* Use ternary op for growth_policy
* Use truthiness rather than dont explicit nullptr check
* Indent preprocessor directives
* Remove grpc message copy/assignment
* Fix a few bugs
* Add gRPC example
* Add basic gRPC docs
* Use doxygen EXAMPLE_PATH + @include
* Reference example fbs in grpc docs
* Move gRPC examples into grpc/samples
* Fix pointer/reference formatting
* Use std::function rather than templated callback func
* Create fresh message builder for each request
* Use Clear() in Reset() impl
* Use FLATBUFFERS_CONSTEXPR
* 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
* Add default value handling to mutation/SetField code
* Shorten reflection SetField impl
* Modify impl to work with C++03
* Add more mutation tests
* Fail SetField if non-scalar
* Add IsScalar/IsInteger/IsFloat for reflection::BaseType
* Use new IsScalar/IsInteger/IsFloat in reflection SetField
* Assume scalar is either int or float