From 1d063d87cfce93f498648b005fb72e33d031ffdd Mon Sep 17 00:00:00 2001 From: Maksim Ivanov Date: Wed, 8 Sep 2021 22:25:06 +0200 Subject: [PATCH] [C++] Let builder accept custom-alloc std::vector (#6814) Change the FlatBufferBuilder's methods to accept std::vector parameters with non-default allocator, by adding another template parameter to them. This should make using the builder slightly more convenient, as one won't need to manually pass data() and size() separately. --- include/flatbuffers/flatbuffers.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index 35d4e68bc..6c442c0c9 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -1816,7 +1816,8 @@ class FlatBufferBuilder { /// buffer as a `vector`. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. - template Offset> CreateVector(const std::vector &v) { + template + Offset> CreateVector(const std::vector &v) { return CreateVector(data(v), v.size()); } @@ -1875,8 +1876,9 @@ class FlatBufferBuilder { /// buffer as a `vector`. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. + template Offset>> CreateVectorOfStrings( - const std::vector &v) { + const std::vector &v) { return CreateVectorOfStrings(v.cbegin(), v.cend()); } @@ -2022,9 +2024,9 @@ class FlatBufferBuilder { /// to the FlatBuffer struct. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. - template + template Offset> CreateVectorOfNativeStructs( - const std::vector &v, T (*const pack_func)(const S &)) { + const std::vector &v, T (*const pack_func)(const S &)) { return CreateVectorOfNativeStructs(data(v), v.size(), pack_func); } @@ -2036,9 +2038,9 @@ class FlatBufferBuilder { /// serialize into the buffer as a `vector`. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. - template + template Offset> CreateVectorOfNativeStructs( - const std::vector &v) { + const std::vector &v) { return CreateVectorOfNativeStructs(data(v), v.size()); } @@ -2057,8 +2059,9 @@ class FlatBufferBuilder { /// serialize into the buffer as a `vector`. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. - template - Offset> CreateVectorOfSortedStructs(std::vector *v) { + template + Offset> CreateVectorOfSortedStructs( + std::vector *v) { return CreateVectorOfSortedStructs(data(*v), v->size()); } @@ -2070,9 +2073,9 @@ class FlatBufferBuilder { /// serialize into the buffer as a `vector`. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. - template + template Offset> CreateVectorOfSortedNativeStructs( - std::vector *v) { + std::vector *v) { return CreateVectorOfSortedNativeStructs(data(*v), v->size()); } @@ -2148,9 +2151,9 @@ class FlatBufferBuilder { /// offsets to store in the buffer in sorted order. /// @return Returns a typed `Offset` into the serialized data indicating /// where the vector is stored. - template + template Offset>> CreateVectorOfSortedTables( - std::vector> *v) { + std::vector, Alloc> *v) { return CreateVectorOfSortedTables(data(*v), v->size()); }