From 7bcd857b87f5e6e2711f66697e486998d0d0419d Mon Sep 17 00:00:00 2001 From: Derek Bailey Date: Tue, 19 Apr 2022 13:06:50 -0700 Subject: [PATCH] Specialize CreateVector with std::initializer_list (#7254) --- include/flatbuffers/flatbuffer_builder.h | 11 +++++++++++ tests/test.cpp | 7 +++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/flatbuffers/flatbuffer_builder.h b/include/flatbuffers/flatbuffer_builder.h index 350fafc3c..9cc294d1e 100644 --- a/include/flatbuffers/flatbuffer_builder.h +++ b/include/flatbuffers/flatbuffer_builder.h @@ -18,6 +18,7 @@ #define FLATBUFFERS_FLATBUFFER_BUILDER_H_ #include +#include #include "flatbuffers/allocator.h" #include "flatbuffers/array.h" @@ -655,6 +656,16 @@ class FlatBufferBuilder { return CreateVector(array.data(), array.size()); } + /// @brief Serialize an initializer list into a FlatBuffer `vector`. + /// @tparam T The data type of the initializer list elements. + /// @param[in] v The value of the initializer list. + /// @return Returns a typed `Offset` into the serialized data indicating + /// where the vector is stored. + template + Offset> CreateVector(std::initializer_list v) { + return CreateVector(v.begin(), v.size()); + } + template Offset>> CreateVector(const Offset *v, size_t len) { StartVector(len, sizeof(Offset)); diff --git a/tests/test.cpp b/tests/test.cpp index aea3b4ba9..55639f32c 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include + #include #include @@ -86,8 +88,9 @@ flatbuffers::DetachedBuffer CreateFlatBufferTest(std::string &buffer) { auto name = builder.CreateString("MyMonster"); - unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; - auto inventory = builder.CreateVector(inv_data, 10); + // Use the initializer_list specialization of CreateVector. + auto inventory = + builder.CreateVector({ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); // Alternatively, create the vector first, and fill in data later: // unsigned char *inv_buf = nullptr;