From a8158ad44ea9825410c42f768623cd06db784ba5 Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen <aardappel@gmail.com> Date: Wed, 24 Apr 2019 11:36:45 -0700 Subject: [PATCH] updated docs for 1.11 --- _flat_buffer_builder_8java.html | 4 +- annotated.html | 38 +- annotated_dup.js | 8 +- ...ffers_1_1_flat_buffer_builder-members.html | 39 +- ..._1flatbuffers_1_1_flat_buffer_builder.html | 86 ++++- ..._1_1flatbuffers_1_1_flat_buffer_builder.js | 3 +- ...ilder_1_1_byte_buffer_factory-members.html | 111 ++++++ ...uffer_builder_1_1_byte_buffer_factory.html | 210 +++++++++++ ..._buffer_builder_1_1_byte_buffer_factory.js | 5 + ...buffer_builder_1_1_byte_buffer_factory.png | Bin 0 -> 1287 bytes ..._1_1_heap_byte_buffer_factory-members.html | 5 +- ..._builder_1_1_heap_byte_buffer_factory.html | 62 +--- ...er_builder_1_1_heap_byte_buffer_factory.js | 3 +- ...oogle_1_1flatbuffers_1_1_utf8-members.html | 114 ++++++ ...com_1_1google_1_1flatbuffers_1_1_utf8.html | 348 ++++++++++++++++++ classcom_1_1google_1_1flatbuffers_1_1_utf8.js | 8 + ...scom_1_1google_1_1flatbuffers_1_1_utf8.png | Bin 0 -> 1012 bytes ...e_1_1flatbuffers_1_1_utf8_old-members.html | 114 ++++++ ...1_1google_1_1flatbuffers_1_1_utf8_old.html | 161 ++++++++ ...m_1_1google_1_1flatbuffers_1_1_utf8_old.js | 6 + ..._1_1google_1_1flatbuffers_1_1_utf8_old.png | Bin 0 -> 750 bytes ..._1_1flatbuffers_1_1_utf8_safe-members.html | 114 ++++++ ..._1google_1_1flatbuffers_1_1_utf8_safe.html | 265 +++++++++++++ ..._1_1google_1_1flatbuffers_1_1_utf8_safe.js | 6 + ...1_1google_1_1flatbuffers_1_1_utf8_safe.png | Bin 0 -> 756 bytes classes.html | 32 +- ...buffers_1_1_default_allocator-members.html | 9 +- classflatbuffers_1_1_default_allocator.html | 7 + classflatbuffers_1_1_default_allocator.js | 1 + ...ffers_1_1_flat_buffer_builder-members.html | 32 +- classflatbuffers_1_1_flat_buffer_builder.html | 82 +++-- classflatbuffers_1_1_flat_buffer_builder.js | 6 +- classflatbuffers_1_1_vector-members.html | 38 +- classflatbuffers_1_1_vector.html | 36 +- classflatbuffers_1_1_vector.js | 12 +- ...atbuffers_1_1vector__downward-members.html | 2 +- classflatbuffers_1_1vector__downward.html | 6 +- classflatbuffers_1_1vector__downward.js | 2 +- flatbuffers_8h_source.html | 123 ++++--- flatbuffers_grammar.html | 16 +- flatbuffers_guide_building.html | 2 + flatbuffers_guide_tutorial.html | 18 +- flatbuffers_guide_use_cpp.html | 27 +- flatbuffers_guide_use_dart.html | 2 +- flatbuffers_guide_use_rust.html | 9 +- flatbuffers_guide_use_typescript.html | 2 +- flatbuffers_guide_using_schema_compiler.html | 28 +- flatbuffers_guide_writing_schema.html | 27 +- functions.html | 38 +- functions_func.html | 36 +- group__flatbuffers__cpp__api.js | 6 +- group__flatbuffers__java__api.js | 10 +- hierarchy.html | 27 +- hierarchy.js | 11 +- menudata.js | 1 + navtreedata.js | 3 +- navtreeindex0.js | 228 ++++++------ navtreeindex1.js | 79 ++-- search/all_10.js | 1 + search/all_12.js | 5 +- search/all_13.js | 3 +- search/all_2.js | 24 +- search/all_3.js | 2 +- search/all_4.js | 4 +- search/all_5.js | 3 +- search/all_6.js | 2 + search/all_7.js | 7 +- search/all_8.js | 1 + search/all_c.js | 2 +- search/all_f.js | 3 +- search/classes_1.js | 2 +- search/classes_3.js | 2 +- search/classes_8.js | 8 +- search/classes_9.html | 26 ++ search/classes_9.js | 9 + search/functions_1.js | 24 +- search/functions_2.js | 4 +- search/functions_3.js | 1 + search/functions_4.js | 2 + search/functions_5.js | 7 +- search/functions_6.js | 1 + search/functions_8.js | 2 +- search/functions_b.js | 3 +- search/functions_c.js | 1 + search/searchdata.js | 2 +- structflatbuffers_1_1_string-members.html | 40 +- structflatbuffers_1_1_string.html | 36 +- ...atbuffers_1_1_vector_iterator-members.html | 3 +- structflatbuffers_1_1_vector_iterator.html | 6 +- structflatbuffers_1_1_vector_iterator.js | 3 +- ...s_1_1_vector_reverse_iterator-members.html | 112 ++++++ ...atbuffers_1_1_vector_reverse_iterator.html | 133 +++++++ ...flatbuffers_1_1_vector_reverse_iterator.js | 6 + ...latbuffers_1_1_vector_reverse_iterator.png | Bin 0 -> 834 bytes usergroup0.html | 1 + 95 files changed, 2620 insertions(+), 539 deletions(-) create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory-members.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.js create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.png create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8-members.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8.js create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8.png create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_old-members.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_old.js create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_old.png create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_safe-members.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.js create mode 100644 classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.png create mode 100644 search/classes_9.html create mode 100644 search/classes_9.js create mode 100644 structflatbuffers_1_1_vector_reverse_iterator-members.html create mode 100644 structflatbuffers_1_1_vector_reverse_iterator.html create mode 100644 structflatbuffers_1_1_vector_reverse_iterator.js create mode 100644 structflatbuffers_1_1_vector_reverse_iterator.png diff --git a/_flat_buffer_builder_8java.html b/_flat_buffer_builder_8java.html index f1b4b9fc..15b6b7f3 100644 --- a/_flat_buffer_builder_8java.html +++ b/_flat_buffer_builder_8java.html @@ -99,8 +99,8 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>com.google.flatbuffers.FlatBufferBuilder.ByteBufferBackedInputStream</b></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A class that allows a user to create an InputStream from a ByteBuffer. <br /></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">interface  </td><td class="memItemRight" valign="bottom"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated. <a href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#details">More...</a><br /></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td></tr> +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated. <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#details">More...</a><br /></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Class that helps you build a FlatBuffer. <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#details">More...</a><br /></td></tr> diff --git a/annotated.html b/annotated.html index 939d6682..dbcf5b5d 100644 --- a/annotated.html +++ b/annotated.html @@ -98,24 +98,28 @@ $(document).ready(function(){initNavTree('annotated.html','');}); <tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">▼</span><span class="icona"><span class="icon">N</span></span><b>flatbuffers</b></td><td class="desc"></td></tr> <tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html" target="_self">ByteBufferUtil</a></td><td class="desc">Class that collects utility functions around <code>ByteBuffer</code> </td></tr> <tr id="row_0_0_0_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_0_0_0_1_" class="arrow" onclick="toggleFolder('0_0_0_1_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html" target="_self">FlatBufferBuilder</a></td><td class="desc">Class that helps you build a FlatBuffer </td></tr> -<tr id="row_0_0_0_1_0_"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html" target="_self">ByteBufferFactory</a></td><td class="desc">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated </td></tr> +<tr id="row_0_0_0_1_0_"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html" target="_self">ByteBufferFactory</a></td><td class="desc">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated </td></tr> <tr id="row_0_0_0_1_1_" class="even"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html" target="_self">HeapByteBufferFactory</a></td><td class="desc">An implementation of the ByteBufferFactory interface that is used when one is not provided by the user </td></tr> -<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">N</span></span><b>flatbuffers</b></td><td class="desc"></td></tr> -<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_allocator.html" target="_self">Allocator</a></td><td class="desc"></td></tr> -<tr id="row_1_1_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_default_allocator.html" target="_self">DefaultAllocator</a></td><td class="desc"></td></tr> -<tr id="row_1_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_detached_buffer.html" target="_self">DetachedBuffer</a></td><td class="desc"></td></tr> -<tr id="row_1_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_1_3_" class="arrow" onclick="toggleFolder('1_3_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html" target="_self">FlatBufferBuilder</a></td><td class="desc">Helper class to hold data needed in creation of a FlatBuffer </td></tr> -<tr id="row_1_3_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html" target="_self">FieldLoc</a></td><td class="desc"></td></tr> -<tr id="row_1_3_1_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html" target="_self">StringOffsetCompare</a></td><td class="desc"></td></tr> -<tr id="row_1_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper.html" target="_self">IndirectHelper</a></td><td class="desc"></td></tr> -<tr id="row_1_5_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html" target="_self">IndirectHelper< const T * ></a></td><td class="desc"></td></tr> -<tr id="row_1_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html" target="_self">IndirectHelper< Offset< T > ></a></td><td class="desc"></td></tr> -<tr id="row_1_7_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_offset.html" target="_self">Offset</a></td><td class="desc"></td></tr> -<tr id="row_1_8_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_string.html" target="_self">String</a></td><td class="desc"></td></tr> -<tr id="row_1_9_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector.html" target="_self">Vector</a></td><td class="desc"></td></tr> -<tr id="row_1_10_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1vector__downward.html" target="_self">vector_downward</a></td><td class="desc"></td></tr> -<tr id="row_1_11_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_vector_iterator.html" target="_self">VectorIterator</a></td><td class="desc"></td></tr> -<tr id="row_1_12_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector_of_any.html" target="_self">VectorOfAny</a></td><td class="desc"></td></tr> +<tr id="row_0_0_0_2_"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html" target="_self">Utf8</a></td><td class="desc"></td></tr> +<tr id="row_0_0_0_3_" class="even"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html" target="_self">Utf8Old</a></td><td class="desc">This class implements the Utf8 API using the Java Utf8 encoder </td></tr> +<tr id="row_0_0_0_4_"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html" target="_self">Utf8Safe</a></td><td class="desc">A set of low-level, high-performance static utility methods related to the UTF-8 character encoding </td></tr> +<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">N</span></span><b>flatbuffers</b></td><td class="desc"></td></tr> +<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_allocator.html" target="_self">Allocator</a></td><td class="desc"></td></tr> +<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_default_allocator.html" target="_self">DefaultAllocator</a></td><td class="desc"></td></tr> +<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_detached_buffer.html" target="_self">DetachedBuffer</a></td><td class="desc"></td></tr> +<tr id="row_1_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_1_3_" class="arrow" onclick="toggleFolder('1_3_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html" target="_self">FlatBufferBuilder</a></td><td class="desc">Helper class to hold data needed in creation of a FlatBuffer </td></tr> +<tr id="row_1_3_0_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html" target="_self">FieldLoc</a></td><td class="desc"></td></tr> +<tr id="row_1_3_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html" target="_self">StringOffsetCompare</a></td><td class="desc"></td></tr> +<tr id="row_1_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper.html" target="_self">IndirectHelper</a></td><td class="desc"></td></tr> +<tr id="row_1_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html" target="_self">IndirectHelper< const T * ></a></td><td class="desc"></td></tr> +<tr id="row_1_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html" target="_self">IndirectHelper< Offset< T > ></a></td><td class="desc"></td></tr> +<tr id="row_1_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_offset.html" target="_self">Offset</a></td><td class="desc"></td></tr> +<tr id="row_1_8_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_string.html" target="_self">String</a></td><td class="desc"></td></tr> +<tr id="row_1_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector.html" target="_self">Vector</a></td><td class="desc"></td></tr> +<tr id="row_1_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1vector__downward.html" target="_self">vector_downward</a></td><td class="desc"></td></tr> +<tr id="row_1_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_vector_iterator.html" target="_self">VectorIterator</a></td><td class="desc"></td></tr> +<tr id="row_1_12_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector_of_any.html" target="_self">VectorOfAny</a></td><td class="desc"></td></tr> +<tr id="row_1_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html" target="_self">VectorReverseIterator</a></td><td class="desc"></td></tr> <tr id="row_2_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">▼</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespace_flat_buffers.html" target="_self">FlatBuffers</a></td><td class="desc"></td></tr> <tr id="row_2_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html" target="_self">FlatBufferBuilder</a></td><td class="desc">Responsible for building up and accessing a FlatBuffer formatted byte array (via ByteBuffer) </td></tr> <tr id="row_3_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">▼</span><span class="icona"><span class="icon">N</span></span><b>Google</b></td><td class="desc"></td></tr> diff --git a/annotated_dup.js b/annotated_dup.js index b4f6c60c..3bb42095 100644 --- a/annotated_dup.js +++ b/annotated_dup.js @@ -4,7 +4,10 @@ var annotated_dup = [ "google", null, [ [ "flatbuffers", null, [ [ "ByteBufferUtil", "classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html", "classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util" ], - [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder" ] + [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder" ], + [ "Utf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html", "classcom_1_1google_1_1flatbuffers_1_1_utf8" ], + [ "Utf8Old", "classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html", "classcom_1_1google_1_1flatbuffers_1_1_utf8_old" ], + [ "Utf8Safe", "classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html", "classcom_1_1google_1_1flatbuffers_1_1_utf8_safe" ] ] ] ] ] ] ], @@ -21,7 +24,8 @@ var annotated_dup = [ "Vector", "classflatbuffers_1_1_vector.html", "classflatbuffers_1_1_vector" ], [ "vector_downward", "classflatbuffers_1_1vector__downward.html", "classflatbuffers_1_1vector__downward" ], [ "VectorIterator", "structflatbuffers_1_1_vector_iterator.html", "structflatbuffers_1_1_vector_iterator" ], - [ "VectorOfAny", "classflatbuffers_1_1_vector_of_any.html", "classflatbuffers_1_1_vector_of_any" ] + [ "VectorOfAny", "classflatbuffers_1_1_vector_of_any.html", "classflatbuffers_1_1_vector_of_any" ], + [ "VectorReverseIterator", "structflatbuffers_1_1_vector_reverse_iterator.html", "structflatbuffers_1_1_vector_reverse_iterator" ] ] ], [ "FlatBuffers", "namespace_flat_buffers.html", "namespace_flat_buffers" ], [ "Google", null, [ diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder-members.html b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder-members.html index 1ed0b15c..a91cde0c 100644 --- a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder-members.html +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder-members.html @@ -116,25 +116,26 @@ $(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_ <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54">finishSizePrefixed</a>(int root_table)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35">finishSizePrefixed</a>(int root_table, String file_identifier)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c">FlatBufferBuilder</a>(int initial_size, ByteBufferFactory bb_factory)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d">FlatBufferBuilder</a>(int initial_size)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387">FlatBufferBuilder</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39">FlatBufferBuilder</a>(ByteBuffer existing_bb, ByteBufferFactory bb_factory)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99">FlatBufferBuilder</a>(ByteBuffer existing_bb)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69">forceDefaults</a>(boolean forceDefaults)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#adf671e70a4d30c85f37393c47a7a7dd1">init</a>(ByteBuffer existing_bb, ByteBufferFactory bb_factory)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae3a3fbf645e64ce784a524f935a6e6f2">offset</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a4a2e8c6430c6538509147225b8a4697e">pad</a>(int byte_size)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a2023123a33f19d670182d5f00ef9aa59">prep</a>(int size, int additional_bytes)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a24114cfb1adb89f1e3d72736b06a8df0">putBoolean</a>(boolean x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a86b42641d0c600afa11f8c8493f5e6a3">putByte</a>(byte x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a36bc3231cc9f86e6fd2750dcec8b7336">putDouble</a>(double x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e3fae083ea9c9bff3b80cde3f4581bb">putFloat</a>(float x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a108d4c3d931b4f2a63a71aeefa562bba">putInt</a>(int x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a083507c3c359c28bb008142e8ad41a7d">putLong</a>(long x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a5a98de8b6e8fc5df984c435ba3181690">putShort</a>(short x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078">sizedByteArray</a>(int start, int length)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672">sizedByteArray</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab8fc86fe501b182b4a1a50fcdbcb3e6b">sizedInputStream</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf">FlatBufferBuilder</a>(int initial_size, ByteBufferFactory bb_factory, ByteBuffer existing_bb, Utf8 utf8)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d">FlatBufferBuilder</a>(int initial_size)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387">FlatBufferBuilder</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39">FlatBufferBuilder</a>(ByteBuffer existing_bb, ByteBufferFactory bb_factory)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99">FlatBufferBuilder</a>(ByteBuffer existing_bb)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69">forceDefaults</a>(boolean forceDefaults)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#adf671e70a4d30c85f37393c47a7a7dd1">init</a>(ByteBuffer existing_bb, ByteBufferFactory bb_factory)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae3a3fbf645e64ce784a524f935a6e6f2">offset</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a4a2e8c6430c6538509147225b8a4697e">pad</a>(int byte_size)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a2023123a33f19d670182d5f00ef9aa59">prep</a>(int size, int additional_bytes)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a24114cfb1adb89f1e3d72736b06a8df0">putBoolean</a>(boolean x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a86b42641d0c600afa11f8c8493f5e6a3">putByte</a>(byte x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a36bc3231cc9f86e6fd2750dcec8b7336">putDouble</a>(double x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e3fae083ea9c9bff3b80cde3f4581bb">putFloat</a>(float x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a108d4c3d931b4f2a63a71aeefa562bba">putInt</a>(int x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a083507c3c359c28bb008142e8ad41a7d">putLong</a>(long x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a5a98de8b6e8fc5df984c435ba3181690">putShort</a>(short x)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078">sizedByteArray</a>(int start, int length)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672">sizedByteArray</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab8fc86fe501b182b4a1a50fcdbcb3e6b">sizedInputStream</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> </table></div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html index 7ba7f8fa..f7028bdd 100644 --- a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html @@ -108,8 +108,8 @@ Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>ByteBufferBackedInputStream</b></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A class that allows a user to create an InputStream from a ByteBuffer. <br /></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">interface  </td><td class="memItemRight" valign="bottom"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a></td></tr> -<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated. <a href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#details">More...</a><br /></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a></td></tr> +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated. <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#details">More...</a><br /></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">HeapByteBufferFactory</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An implementation of the ByteBufferFactory interface that is used when one is not provided by the user. <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#details">More...</a><br /></td></tr> @@ -175,9 +175,12 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="clas <tr class="memitem:ab179d8aa4c4b782d83b3817a6b08ee35"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35">finishSizePrefixed</a> (int root_table, String file_identifier)</td></tr> <tr class="memdesc:ab179d8aa4c4b782d83b3817a6b08ee35"><td class="mdescLeft"> </td><td class="mdescRight">Finalize a buffer, pointing to the given <code>root_table</code>, with the size prefixed. <a href="#ab179d8aa4c4b782d83b3817a6b08ee35">More...</a><br /></td></tr> <tr class="separator:ab179d8aa4c4b782d83b3817a6b08ee35"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:aed1e475e75409625c8df85dc3d396e4c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c">FlatBufferBuilder</a> (int initial_size, <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory)</td></tr> +<tr class="memitem:aed1e475e75409625c8df85dc3d396e4c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c">FlatBufferBuilder</a> (int initial_size, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory)</td></tr> <tr class="memdesc:aed1e475e75409625c8df85dc3d396e4c"><td class="mdescLeft"> </td><td class="mdescRight">Start with a buffer of size <code>initial_size</code>, then grow as required. <a href="#aed1e475e75409625c8df85dc3d396e4c">More...</a><br /></td></tr> <tr class="separator:aed1e475e75409625c8df85dc3d396e4c"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a9a48a278d32fd3d4b7075e6a03f27ddf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf">FlatBufferBuilder</a> (int initial_size, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory, ByteBuffer existing_bb, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> utf8)</td></tr> +<tr class="memdesc:a9a48a278d32fd3d4b7075e6a03f27ddf"><td class="mdescLeft"> </td><td class="mdescRight">Start with a buffer of size <code>initial_size</code>, then grow as required. <a href="#a9a48a278d32fd3d4b7075e6a03f27ddf">More...</a><br /></td></tr> +<tr class="separator:a9a48a278d32fd3d4b7075e6a03f27ddf"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af49427a6a8a6ec24f3c9cf812f30812d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d">FlatBufferBuilder</a> (int initial_size)</td></tr> <tr class="memdesc:af49427a6a8a6ec24f3c9cf812f30812d"><td class="mdescLeft"> </td><td class="mdescRight">Start with a buffer of size <code>initial_size</code>, then grow as required. <a href="#af49427a6a8a6ec24f3c9cf812f30812d">More...</a><br /></td></tr> <tr class="separator:af49427a6a8a6ec24f3c9cf812f30812d"><td class="memSeparator" colspan="2"> </td></tr> @@ -185,7 +188,7 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="clas  </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387">FlatBufferBuilder</a> ()</td></tr> <tr class="memdesc:ac8a8a558ce1d2531447a765636db2387"><td class="mdescLeft"> </td><td class="mdescRight">Start with a buffer of 1KiB, then grow as required. <br /></td></tr> <tr class="separator:ac8a8a558ce1d2531447a765636db2387"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a3388cd4dc6e5233283fb4927b71a1c39"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39">FlatBufferBuilder</a> (ByteBuffer existing_bb, <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory)</td></tr> +<tr class="memitem:a3388cd4dc6e5233283fb4927b71a1c39"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39">FlatBufferBuilder</a> (ByteBuffer existing_bb, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory)</td></tr> <tr class="memdesc:a3388cd4dc6e5233283fb4927b71a1c39"><td class="mdescLeft"> </td><td class="mdescRight">Alternative constructor allowing reuse of <a class="el" href="">ByteBuffer</a>s. <a href="#a3388cd4dc6e5233283fb4927b71a1c39">More...</a><br /></td></tr> <tr class="separator:a3388cd4dc6e5233283fb4927b71a1c39"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a61ad1938219bcdbe99cc4b668f4c0f99"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99">FlatBufferBuilder</a> (ByteBuffer existing_bb)</td></tr> @@ -194,7 +197,7 @@ void </td><td class="memItemRight" valign="bottom"><a class="el" href="clas <tr class="memitem:aaadff3772bfdff756b4f269afae5ac69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69">forceDefaults</a> (boolean forceDefaults)</td></tr> <tr class="memdesc:aaadff3772bfdff756b4f269afae5ac69"><td class="mdescLeft"> </td><td class="mdescRight">In order to save space, fields that are set to their default value don't get serialized into the buffer. <a href="#aaadff3772bfdff756b4f269afae5ac69">More...</a><br /></td></tr> <tr class="separator:aaadff3772bfdff756b4f269afae5ac69"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:adf671e70a4d30c85f37393c47a7a7dd1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#adf671e70a4d30c85f37393c47a7a7dd1">init</a> (ByteBuffer existing_bb, <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory)</td></tr> +<tr class="memitem:adf671e70a4d30c85f37393c47a7a7dd1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#adf671e70a4d30c85f37393c47a7a7dd1">init</a> (ByteBuffer existing_bb, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> bb_factory)</td></tr> <tr class="memdesc:adf671e70a4d30c85f37393c47a7a7dd1"><td class="mdescLeft"> </td><td class="mdescRight">Alternative initializer that allows reusing this object on an existing <code>ByteBuffer</code>. <a href="#adf671e70a4d30c85f37393c47a7a7dd1">More...</a><br /></td></tr> <tr class="separator:adf671e70a4d30c85f37393c47a7a7dd1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae3a3fbf645e64ce784a524f935a6e6f2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae3a3fbf645e64ce784a524f935a6e6f2">offset</a> ()</td></tr> @@ -248,7 +251,7 @@ Protected Member Functions</h2></td></tr> </table> <h2 class="groupheader">Constructor & Destructor Documentation</h2> <a id="aed1e475e75409625c8df85dc3d396e4c"></a> -<h2 class="memtitle"><span class="permalink"><a href="#aed1e475e75409625c8df85dc3d396e4c">◆ </a></span>FlatBufferBuilder() <span class="overload">[1/4]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#aed1e475e75409625c8df85dc3d396e4c">◆ </a></span>FlatBufferBuilder() <span class="overload">[1/5]</span></h2> <div class="memitem"> <div class="memproto"> @@ -265,7 +268,7 @@ Protected Member Functions</h2></td></tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> + <td class="paramtype"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> <td class="paramname"><em>bb_factory</em> </td> </tr> <tr> @@ -290,10 +293,69 @@ Protected Member Functions</h2></td></tr> </dd> </dl> +</div> +</div> +<a id="a9a48a278d32fd3d4b7075e6a03f27ddf"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a9a48a278d32fd3d4b7075e6a03f27ddf">◆ </a></span>FlatBufferBuilder() <span class="overload">[2/5]</span></h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder </td> + <td>(</td> + <td class="paramtype">int </td> + <td class="paramname"><em>initial_size</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> + <td class="paramname"><em>bb_factory</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">ByteBuffer </td> + <td class="paramname"><em>existing_bb</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> </td> + <td class="paramname"><em>utf8</em> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Start with a buffer of size <code>initial_size</code>, then grow as required. </p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">initial_size</td><td>The initial size of the internal buffer to use. </td></tr> + <tr><td class="paramname">bb_factory</td><td>The factory to be used for allocating the internal buffer </td></tr> + <tr><td class="paramname">existing_bb</td><td>The byte buffer to reuse. </td></tr> + <tr><td class="paramname">utf8</td><td>The Utf8 codec </td></tr> + </table> + </dd> +</dl> + </div> </div> <a id="af49427a6a8a6ec24f3c9cf812f30812d"></a> -<h2 class="memtitle"><span class="permalink"><a href="#af49427a6a8a6ec24f3c9cf812f30812d">◆ </a></span>FlatBufferBuilder() <span class="overload">[2/4]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#af49427a6a8a6ec24f3c9cf812f30812d">◆ </a></span>FlatBufferBuilder() <span class="overload">[3/5]</span></h2> <div class="memitem"> <div class="memproto"> @@ -327,7 +389,7 @@ Protected Member Functions</h2></td></tr> </div> </div> <a id="a3388cd4dc6e5233283fb4927b71a1c39"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a3388cd4dc6e5233283fb4927b71a1c39">◆ </a></span>FlatBufferBuilder() <span class="overload">[3/4]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a3388cd4dc6e5233283fb4927b71a1c39">◆ </a></span>FlatBufferBuilder() <span class="overload">[4/5]</span></h2> <div class="memitem"> <div class="memproto"> @@ -344,7 +406,7 @@ Protected Member Functions</h2></td></tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> + <td class="paramtype"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> <td class="paramname"><em>bb_factory</em> </td> </tr> <tr> @@ -373,7 +435,7 @@ Protected Member Functions</h2></td></tr> </div> </div> <a id="a61ad1938219bcdbe99cc4b668f4c0f99"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a61ad1938219bcdbe99cc4b668f4c0f99">◆ </a></span>FlatBufferBuilder() <span class="overload">[4/4]</span></h2> +<h2 class="memtitle"><span class="permalink"><a href="#a61ad1938219bcdbe99cc4b668f4c0f99">◆ </a></span>FlatBufferBuilder() <span class="overload">[5/5]</span></h2> <div class="memitem"> <div class="memproto"> @@ -1213,7 +1275,7 @@ Protected Member Functions</h2></td></tr> <tr> <td class="paramkey"></td> <td></td> - <td class="paramtype"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> + <td class="paramtype"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">ByteBufferFactory</a> </td> <td class="paramname"><em>bb_factory</em> </td> </tr> <tr> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.js b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.js index d0a5c46d..668e970e 100644 --- a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.js +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.js @@ -1,8 +1,9 @@ var classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder = [ - [ "ByteBufferFactory", "interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html", "interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory" ], + [ "ByteBufferFactory", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory" ], [ "HeapByteBufferFactory", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory" ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c", null ], + [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf", null ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d", null ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387", null ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39", null ], diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory-members.html b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory-members.html new file mode 100644 index 00000000..e5efc89d --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory-members.html @@ -0,0 +1,111 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory Member List</div> </div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">newByteBuffer</a>(int capacity)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">releaseByteBuffer</a>(ByteBuffer bb)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> +</table></div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html new file mode 100644 index 00000000..d11edd6c --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html @@ -0,0 +1,210 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory Class Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="summary"> +<a href="#pub-methods">Public Member Functions</a> | +<a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory-members.html">List of all members</a> </div> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div> +</div><!--header--> +<div class="contents"> + +<p>An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated. + <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#details">More...</a></p> +<div class="dynheader"> +Inheritance diagram for com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory:</div> +<div class="dyncontent"> + <div class="center"> + <img src="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.png" usemap="#com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory_map" alt=""/> + <map id="com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory_map" name="com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory_map"> +<area href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html" title="An implementation of the ByteBufferFactory interface that is used when one is not provided by the use..." alt="com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory" shape="rect" coords="0,56,376,80"/> +</map> + </div></div> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated. </p> +<p>This allows for alternatives to the default behavior, which is to allocate memory for a new byte-array backed <code>ByteBuffer</code> array inside the JVM.</p> +<p>The FlatBufferBuilder class contains the HeapByteBufferFactory class to preserve the default behavior in the event that the user does not provide their own implementation of this interface. </p> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> +Public Member Functions</h2></td></tr> +<tr class="memitem:ad881983a2e1d78c7625c3628116c587f"><td class="memItemLeft" align="right" valign="top">abstract ByteBuffer </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">newByteBuffer</a> (int capacity)</td></tr> +<tr class="memdesc:ad881983a2e1d78c7625c3628116c587f"><td class="mdescLeft"> </td><td class="mdescRight">Create a <code>ByteBuffer</code> with a given capacity. <a href="#ad881983a2e1d78c7625c3628116c587f">More...</a><br /></td></tr> +<tr class="separator:ad881983a2e1d78c7625c3628116c587f"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:ab732dc8eba204b490118c322873c2bca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">releaseByteBuffer</a> (ByteBuffer bb)</td></tr> +<tr class="memdesc:ab732dc8eba204b490118c322873c2bca"><td class="mdescLeft"> </td><td class="mdescRight">Release a ByteBuffer. <a href="#ab732dc8eba204b490118c322873c2bca">More...</a><br /></td></tr> +<tr class="separator:ab732dc8eba204b490118c322873c2bca"><td class="memSeparator" colspan="2"> </td></tr> +</table> +<h2 class="groupheader">Member Function Documentation</h2> +<a id="ad881983a2e1d78c7625c3628116c587f"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ad881983a2e1d78c7625c3628116c587f">◆ </a></span>newByteBuffer()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">abstract ByteBuffer com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory.newByteBuffer </td> + <td>(</td> + <td class="paramtype">int </td> + <td class="paramname"><em>capacity</em></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">abstract</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Create a <code>ByteBuffer</code> with a given capacity. </p> +<p>The returned ByteBuf must have a ByteOrder.LITTLE_ENDIAN ByteOrder.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">capacity</td><td>The size of the <code>ByteBuffer</code> to allocate. </td></tr> + </table> + </dd> +</dl> +<dl class="section return"><dt>Returns</dt><dd>Returns the new <code>ByteBuffer</code> that was allocated. </dd></dl> + +</div> +</div> +<a id="ab732dc8eba204b490118c322873c2bca"></a> +<h2 class="memtitle"><span class="permalink"><a href="#ab732dc8eba204b490118c322873c2bca">◆ </a></span>releaseByteBuffer()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory.releaseByteBuffer </td> + <td>(</td> + <td class="paramtype">ByteBuffer </td> + <td class="paramname"><em>bb</em></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Release a ByteBuffer. </p> +<p>Current <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> released any reference to it, so it is safe to dispose the buffer or return it to a pool. It is not guaranteed that the buffer has been created with <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">newByteBuffer(int)</a>.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">bb</td><td>the buffer to release </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<hr/>The documentation for this class was generated from the following file:<ul> +<li><a class="el" href="_flat_buffer_builder_8java.html">FlatBufferBuilder.java</a></li> +</ul> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.js b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.js new file mode 100644 index 00000000..991aa2f2 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.js @@ -0,0 +1,5 @@ +var classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory = +[ + [ "newByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f", null ], + [ "releaseByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca", null ] +]; \ No newline at end of file diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.png b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.png new file mode 100644 index 0000000000000000000000000000000000000000..6e618b3b086cdd71ae9e5431daa79adb98e80ba8 GIT binary patch literal 1287 zcmeAS@N?(olHy`uVBq!ia0y~yV5|VL12~w0q{``e)j&!jz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op<DcT#k|;zhDNSA`rNGD#VC^fn}Pfi(^Oy<J-CaCv7s|arM_X{{652 z&q{~eU)Ue5n{<BWn<CNM6P7Gj{W*O~5ZBTvm$oV~wlJ&<X<#o1K*AShA2dJb^M2pm zub255OKw%wKTeRf{&Zo62!FG~-nSJ=Qp-PA&U)s4@P55)!}iM!JHO4m*C_eY#zgJu zagLhzc~*u!%n4u0Kitk+7tg;sXUE*+<c+*xk8k_R?X17^@4M-p{BTk6*E8iB*2_%c zol&ttO;vO9=VyD%r;FF<`FXD@n%J9WZE}C7)^GNWMMXw|oA+hSbXH&M$<%Xd4Qsxn z-S-RjDaGe@Ti;yrxv;G}rzeg*e@~Q>@(16T-)(&z>Io{*X=|Ia3Z5-AmUPcajyU|e zaF^SphA@UOd4_nQRmC<;@yhe2&U!4IZ^`Rlb9%Go$7_#r=G1=YJ8<6Xr@P;u$=eIc z{<ZD>kh9Wo{SBT!D+-^hUAwkZxX^0f+K+qM=dJ#@_Pzb}ir~U__a~A+nE9Iv_WqUm z!(GUi{b&7w*>QKvdv_gvAAd6?|J7IND*i3C5sz=VYMSPLKE?OV%Iy1v**rz(*faFI zEx&DhAY7OgbhX*+1kZaJn*%Y2+v}ckKCr)Vyr^FJN8<8%+w&X#$4xK(f3@>|y#Ioj z!;TI47rx%9kIrInV%Q&w6kDK}yTDuHrP&(f^)iUDW^El%#dWO%%rWcd&sX3t*vVvb z;OnkJ{!a|y+6S0-Xl!7%&^SO_{9^S%{nMLjR@Y5SjocTaGf8C95^d23swW*8<0i?7 zz!+b`KX?X}E)D6u^X}Knc9oUERe!FYw^<{f>@FuY`B9=khOE_@ge}`PN0#)ZPrS$b z@84^NJ#(j}tgBsCp5SK1-|PAFqty?)8zo6IT2&<HGVXtS{nuBE9Y0sTm67hw-5_;8 z@6(CDkH76tuiPIS8nY(7ieX<-fLX$$gR`bA@j1s<xqXI~ue8qj`KK2>jo5j@ZFVAC z{H1#tQ&w%fn5pwA;py8>&q*mEX}T4sKkRJ(r#QR#-d&!3(eErGQp?o36`PJ_u-vmr z@9a5XKJTryh0;8g-W2YYr2)L>Y)aG~cPteu_e}rC?6048aqCQ#l~-pUm_DIY%>6<3 zk<CHHHIH;VA9m(<-W1;Nf8};S<)-uV&nDf!&HQ2a-PyqO_dN$W{cR|e*Uer3c<#-a zI=~cI_>y(A)P1|Z&!zIU-hB|TVXl9WD6nq3ef(qHAL5%V)_fHHkUKm7m($(D-`D4C z+Wz*JY)#4kuZN|s>v^rryd7M&;rhm%?e|h9Z0@|MqqaP<EA8AGktOMoAxqP=gO0h1 z?qbyUEDrtp<m3XC+S$8WYjRTc8_lJwEHpgtuP9TT|Ge(qk@xxwmK5=_tG?vEy5<Sf zyXD@!Dy=FneYrkNda{5)-;)o{*wq+6EtOOE^ro0q_0O;QmQ1qpu>h7@44$rjF6*2U FngA5DV5k59 literal 0 HcmV?d00001 diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory-members.html b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory-members.html index 3f4c11a0..ef7a8934 100644 --- a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory-members.html +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory-members.html @@ -94,8 +94,9 @@ $(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_ <p>This is the complete list of members for <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a>, including all inherited members.</p> <table class="directory"> - <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644">newByteBuffer</a>(int capacity)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f">releaseByteBuffer</a>(ByteBuffer bb)</td><td class="entry"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>INSTANCE</b> (defined in <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a>)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a></td><td class="entry"><span class="mlabel">static</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>newByteBuffer</b>(int capacity) (defined in <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a>)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">releaseByteBuffer</a>(ByteBuffer bb)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> </table></div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html index fe2ad14e..426171b3 100644 --- a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html @@ -89,6 +89,7 @@ $(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_ <div class="header"> <div class="summary"> <a href="#pub-methods">Public Member Functions</a> | +<a href="#pub-static-attribs">Static Public Attributes</a> | <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory Class Reference</div> </div> @@ -103,7 +104,7 @@ Inheritance diagram for com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferF <div class="center"> <img src="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.png" usemap="#com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory_map" alt=""/> <map id="com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory_map" name="com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory_map"> -<area href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html" title="An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in..." alt="com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory" shape="rect" coords="0,0,376,24"/> +<area href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html" title="An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in..." alt="com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory" shape="rect" coords="0,0,376,24"/> </map> </div></div> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> @@ -112,52 +113,23 @@ Inheritance diagram for com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferF </div><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> -<tr class="memitem:aac26ff51a8162b37a072792ec9068644"><td class="memItemLeft" align="right" valign="top">ByteBuffer </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644">newByteBuffer</a> (int capacity)</td></tr> -<tr class="memdesc:aac26ff51a8162b37a072792ec9068644"><td class="mdescLeft"> </td><td class="mdescRight">Create a <code>ByteBuffer</code> with a given capacity. <a href="#aac26ff51a8162b37a072792ec9068644">More...</a><br /></td></tr> +<tr class="memitem:aac26ff51a8162b37a072792ec9068644"><td class="memItemLeft" align="right" valign="top"><a id="aac26ff51a8162b37a072792ec9068644"></a> +ByteBuffer </td><td class="memItemRight" valign="bottom"><b>newByteBuffer</b> (int capacity)</td></tr> <tr class="separator:aac26ff51a8162b37a072792ec9068644"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="inherit_header pub_methods_interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td></tr> -<tr class="memitem:a6cc2f5b5077273da8180b63a5db24b8f inherit pub_methods_interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="memItemLeft" align="right" valign="top">default void </td><td class="memItemRight" valign="bottom"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f">releaseByteBuffer</a> (ByteBuffer bb)</td></tr> -<tr class="memdesc:a6cc2f5b5077273da8180b63a5db24b8f inherit pub_methods_interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="mdescLeft"> </td><td class="mdescRight">Release a ByteBuffer. <a href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f">More...</a><br /></td></tr> -<tr class="separator:a6cc2f5b5077273da8180b63a5db24b8f inherit pub_methods_interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="inherit_header pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td></tr> +<tr class="memitem:ad881983a2e1d78c7625c3628116c587f inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="memItemLeft" align="right" valign="top">abstract ByteBuffer </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">newByteBuffer</a> (int capacity)</td></tr> +<tr class="memdesc:ad881983a2e1d78c7625c3628116c587f inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="mdescLeft"> </td><td class="mdescRight">Create a <code>ByteBuffer</code> with a given capacity. <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">More...</a><br /></td></tr> +<tr class="separator:ad881983a2e1d78c7625c3628116c587f inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:ab732dc8eba204b490118c322873c2bca inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">releaseByteBuffer</a> (ByteBuffer bb)</td></tr> +<tr class="memdesc:ab732dc8eba204b490118c322873c2bca inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="mdescLeft"> </td><td class="mdescRight">Release a ByteBuffer. <a href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">More...</a><br /></td></tr> +<tr class="separator:ab732dc8eba204b490118c322873c2bca inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a> +Static Public Attributes</h2></td></tr> +<tr class="memitem:a2d3f0962d4948ce8c97d710f0fa1962a"><td class="memItemLeft" align="right" valign="top"><a id="a2d3f0962d4948ce8c97d710f0fa1962a"></a> +static final <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">HeapByteBufferFactory</a> </td><td class="memItemRight" valign="bottom"><b>INSTANCE</b> = new <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">HeapByteBufferFactory</a>()</td></tr> +<tr class="separator:a2d3f0962d4948ce8c97d710f0fa1962a"><td class="memSeparator" colspan="2"> </td></tr> </table> -<h2 class="groupheader">Member Function Documentation</h2> -<a id="aac26ff51a8162b37a072792ec9068644"></a> -<h2 class="memtitle"><span class="permalink"><a href="#aac26ff51a8162b37a072792ec9068644">◆ </a></span>newByteBuffer()</h2> - -<div class="memitem"> -<div class="memproto"> -<table class="mlabels"> - <tr> - <td class="mlabels-left"> - <table class="memname"> - <tr> - <td class="memname">ByteBuffer com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory.newByteBuffer </td> - <td>(</td> - <td class="paramtype">int </td> - <td class="paramname"><em>capacity</em></td><td>)</td> - <td></td> - </tr> - </table> - </td> - <td class="mlabels-right"> -<span class="mlabels"><span class="mlabel">inline</span></span> </td> - </tr> -</table> -</div><div class="memdoc"> - -<p>Create a <code>ByteBuffer</code> with a given capacity. </p> -<dl class="params"><dt>Parameters</dt><dd> - <table class="params"> - <tr><td class="paramname">capacity</td><td>The size of the <code>ByteBuffer</code> to allocate. </td></tr> - </table> - </dd> -</dl> -<dl class="section return"><dt>Returns</dt><dd>Returns the new <code>ByteBuffer</code> that was allocated. </dd></dl> - -<p>Implements <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a>.</p> - -</div> -</div> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="_flat_buffer_builder_8java.html">FlatBufferBuilder.java</a></li> </ul> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.js b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.js index c5284df9..cf38b4aa 100644 --- a/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.js +++ b/classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.js @@ -1,4 +1,5 @@ var classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory = [ - [ "newByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644", null ] + [ "newByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644", null ], + [ "INSTANCE", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#a2d3f0962d4948ce8c97d710f0fa1962a", null ] ]; \ No newline at end of file diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8-members.html b/classcom_1_1google_1_1flatbuffers_1_1_utf8-members.html new file mode 100644 index 00000000..7f4c07d1 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8-members.html @@ -0,0 +1,114 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_utf8.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.Utf8 Member List</div> </div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">decodeUtf8</a>(ByteBuffer buffer, int offset, int length)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">encodedLength</a>(CharSequence sequence)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">encodeUtf8</a>(CharSequence in, ByteBuffer out)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">getDefault</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">setDefault</a>(Utf8 instance)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> +</table></div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8.html b/classcom_1_1google_1_1flatbuffers_1_1_utf8.html new file mode 100644 index 00000000..a190ce10 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8.html @@ -0,0 +1,348 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: com.google.flatbuffers.Utf8 Class Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_utf8.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> | +<a href="#pub-methods">Public Member Functions</a> | +<a href="#pub-static-methods">Static Public Member Functions</a> | +<a href="classcom_1_1google_1_1flatbuffers_1_1_utf8-members.html">List of all members</a> </div> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.Utf8 Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div> </div> +</div><!--header--> +<div class="contents"> +<div class="dynheader"> +Inheritance diagram for com.google.flatbuffers.Utf8:</div> +<div class="dyncontent"> + <div class="center"> + <img src="classcom_1_1google_1_1flatbuffers_1_1_utf8.png" usemap="#com.google.flatbuffers.Utf8_map" alt=""/> + <map id="com.google.flatbuffers.Utf8_map" name="com.google.flatbuffers.Utf8_map"> +<area href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html" title="This class implements the Utf8 API using the Java Utf8 encoder. " alt="com.google.flatbuffers.Utf8Old" shape="rect" coords="0,56,190,80"/> +<area href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html" title="A set of low-level, high-performance static utility methods related to the UTF-8 character encoding..." alt="com.google.flatbuffers.Utf8Safe" shape="rect" coords="200,56,390,80"/> +</map> + </div></div> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>DecodeUtil</b></td></tr> +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Utility methods for decoding bytes into <a class="el" href="">String</a>. <br /></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>UnpairedSurrogateException</b></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> +Public Member Functions</h2></td></tr> +<tr class="memitem:a0d28f84afeb4c529deacf82691f004c8"><td class="memItemLeft" align="right" valign="top">abstract String </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">decodeUtf8</a> (ByteBuffer buffer, int offset, int length)</td></tr> +<tr class="memdesc:a0d28f84afeb4c529deacf82691f004c8"><td class="mdescLeft"> </td><td class="mdescRight">Decodes the given UTF-8 portion of the <a class="el" href="">ByteBuffer</a> into a <a class="el" href="">String</a>. <a href="#a0d28f84afeb4c529deacf82691f004c8">More...</a><br /></td></tr> +<tr class="separator:a0d28f84afeb4c529deacf82691f004c8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a88db1f58c8651f849151d4563f86bcab"><td class="memItemLeft" align="right" valign="top">abstract int </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">encodedLength</a> (CharSequence sequence)</td></tr> +<tr class="memdesc:a88db1f58c8651f849151d4563f86bcab"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of bytes in the UTF-8-encoded form of. <a href="#a88db1f58c8651f849151d4563f86bcab">More...</a><br /></td></tr> +<tr class="separator:a88db1f58c8651f849151d4563f86bcab"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a60b4b2e81aae13bd5a0d09b95a0be4bb"><td class="memItemLeft" align="right" valign="top">abstract void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">encodeUtf8</a> (CharSequence in, ByteBuffer out)</td></tr> +<tr class="memdesc:a60b4b2e81aae13bd5a0d09b95a0be4bb"><td class="mdescLeft"> </td><td class="mdescRight">Encodes the given characters to the target <a class="el" href="">ByteBuffer</a> using UTF-8 encoding. <a href="#a60b4b2e81aae13bd5a0d09b95a0be4bb">More...</a><br /></td></tr> +<tr class="separator:a60b4b2e81aae13bd5a0d09b95a0be4bb"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a> +Static Public Member Functions</h2></td></tr> +<tr class="memitem:a291c293832c8f646817afefad4c24858"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">getDefault</a> ()</td></tr> +<tr class="memdesc:a291c293832c8f646817afefad4c24858"><td class="mdescLeft"> </td><td class="mdescRight">Get the default UTF-8 processor. <a href="#a291c293832c8f646817afefad4c24858">More...</a><br /></td></tr> +<tr class="separator:a291c293832c8f646817afefad4c24858"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a59a8ffdd2205343d3c64d0b764eeab17"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">setDefault</a> (<a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> instance)</td></tr> +<tr class="memdesc:a59a8ffdd2205343d3c64d0b764eeab17"><td class="mdescLeft"> </td><td class="mdescRight">Set the default instance of the UTF-8 processor. <a href="#a59a8ffdd2205343d3c64d0b764eeab17">More...</a><br /></td></tr> +<tr class="separator:a59a8ffdd2205343d3c64d0b764eeab17"><td class="memSeparator" colspan="2"> </td></tr> +</table> +<h2 class="groupheader">Member Function Documentation</h2> +<a id="a0d28f84afeb4c529deacf82691f004c8"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a0d28f84afeb4c529deacf82691f004c8">◆ </a></span>decodeUtf8()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">abstract String com.google.flatbuffers.Utf8.decodeUtf8 </td> + <td>(</td> + <td class="paramtype">ByteBuffer </td> + <td class="paramname"><em>buffer</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"><em>offset</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"><em>length</em> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">abstract</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Decodes the given UTF-8 portion of the <a class="el" href="">ByteBuffer</a> into a <a class="el" href="">String</a>. </p> +<dl class="exception"><dt>Exceptions</dt><dd> + <table class="exception"> + <tr><td class="paramname">IllegalArgumentException</td><td>if the input is not valid UTF-8. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a88db1f58c8651f849151d4563f86bcab"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a88db1f58c8651f849151d4563f86bcab">◆ </a></span>encodedLength()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">abstract int com.google.flatbuffers.Utf8.encodedLength </td> + <td>(</td> + <td class="paramtype">CharSequence </td> + <td class="paramname"><em>sequence</em></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">abstract</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Returns the number of bytes in the UTF-8-encoded form of. </p> +<div class="fragment"><div class="line">sequence </div></div><!-- fragment --><p> . For a string, this method is equivalent to</p><div class="fragment"><div class="line"><span class="keywordtype">string</span>.getBytes(UTF_8).length </div></div><!-- fragment --><p> , but is more efficient in both time and space.</p> +<dl class="exception"><dt>Exceptions</dt><dd> + <table class="exception"> + <tr><td class="paramname">IllegalArgumentException</td><td>if<div class="fragment"><div class="line">sequence </div></div><!-- fragment --> contains ill-formed UTF-16 (unpaired surrogates) </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a60b4b2e81aae13bd5a0d09b95a0be4bb"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a60b4b2e81aae13bd5a0d09b95a0be4bb">◆ </a></span>encodeUtf8()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">abstract void com.google.flatbuffers.Utf8.encodeUtf8 </td> + <td>(</td> + <td class="paramtype">CharSequence </td> + <td class="paramname"><em>in</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">ByteBuffer </td> + <td class="paramname"><em>out</em> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">abstract</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Encodes the given characters to the target <a class="el" href="">ByteBuffer</a> using UTF-8 encoding. </p> +<p>Selects an optimal algorithm based on the type of <a class="el" href="">ByteBuffer</a> (i.e. heap or direct) and the capabilities of the platform.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">in</td><td>the source string to be encoded </td></tr> + <tr><td class="paramname">out</td><td>the target buffer to receive the encoded string. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a291c293832c8f646817afefad4c24858"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a291c293832c8f646817afefad4c24858">◆ </a></span>getDefault()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">static <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> com.google.flatbuffers.Utf8.getDefault </td> + <td>(</td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Get the default UTF-8 processor. </p> +<dl class="section return"><dt>Returns</dt><dd>the default processor </dd></dl> + +</div> +</div> +<a id="a59a8ffdd2205343d3c64d0b764eeab17"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a59a8ffdd2205343d3c64d0b764eeab17">◆ </a></span>setDefault()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">static void com.google.flatbuffers.Utf8.setDefault </td> + <td>(</td> + <td class="paramtype"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> </td> + <td class="paramname"><em>instance</em></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Set the default instance of the UTF-8 processor. </p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">instance</td><td>the new instance to use </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<hr/>The documentation for this class was generated from the following file:<ul> +<li>Utf8.java</li> +</ul> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8.js b/classcom_1_1google_1_1flatbuffers_1_1_utf8.js new file mode 100644 index 00000000..eab14fc3 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8.js @@ -0,0 +1,8 @@ +var classcom_1_1google_1_1flatbuffers_1_1_utf8 = +[ + [ "decodeUtf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8", null ], + [ "encodedLength", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab", null ], + [ "encodeUtf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb", null ], + [ "getDefault", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858", null ], + [ "setDefault", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17", null ] +]; \ No newline at end of file diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8.png b/classcom_1_1google_1_1flatbuffers_1_1_utf8.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a3b5a2800a5762fc36995c9cbc8de3ea0e3b66 GIT binary patch literal 1012 zcmeAS@N?(olHy`uVBq!ia0y~yU~B`j12~w0q?VsjAdr#>@CkAK|NlRb`Qpvj(*8pe zfGjXRaNq!I=N)+<m!l-eFPH(S2n4R43Nd0}U~cwwaSW+od^`7b*<u48w&U~9pZsnA zDQLsSGrF_y1~@J<o4my7#?<3t^^AV%OQ*c!KHy&P+RKT#!FnO%fw>nL9{6Q26sVgp z=tS^Loz%&5|JrnShOnNGMdzpNm?<g6Aoj(%S9{0$h5LC*^cOEw%Tul2(YER5vi`#0 z^O>pr<&vrykDi{E`B^DlcY9J_<IDF(M=YG?E^9kBKmTgLs&(>@e_g$*>$~XujOMhx z^OmSASR5NWzwLdF*Xq_c*VDZZFKYhMo09!kc!R6S((;TMvpTLCY@aI2`?T-Y9jC*y z{SKF<TU+sVTRI>9$F=YC&4l^8xSg7L{q82_iN^}B+`GhkPO#U4*H(wqYhO=(E3j5` zYgkzN?{n@Z2N<tMPF#O=!%ewwRcr@V*1XTWk;89o%lsf@-!4tYm}Z2pcL+-{-1(`% ztGTo!nt`byS&o6RK^+({vyUs=FjxR3_ekorurtIvF&|*%;AD8$!p2aJ8FpY(IC(+R z4bF1?#~&**?9iXTDcBh!l#x{8G{|yy-<)E*iSFkt=N~_QWuofKbrHOiO2VC*RdxzX zshpg9LBSJfk!R6!Ua3hcpS@1HwB^4(tvqQ<QqT12Wk)oNf2^7QOY;7*hkul^c+)zB zO?xK455EvU?aE#sR@1_L2k%twY7_3-a66;6dilaiY2mkDQmadl<FVeDZQ1_U|F%i5 z21esPrrihmOk;L)7%!W-;c`OWjJ90S>6v1Z#RVIK`GY1c=_@PUJMr086RBTi8?F^x zReDvw*YHSNo8CtGs?|+LA4Y%e+gm+lN#FA4mC37OdBb%M+41>ZzA(=|w>{^bLiNtA ze~(s{T`I^D%#FGI>6Pz$Yu?*)-)1Q5KHGCB(_&}GSAp~Mc~7hUc)u;nEutvmpv=Ga z^uwuLH!f}{l)7~|<*vc$=5?nv9Hrm$z4;J%|5u8&i}m@pN6z(Mt;%@)a_jXnlbCHC zJKHiXqVEAi?``tA3zHY9{N<CDQpudJE%x!dl-Sxg3L2jKk9$k4i#o!+eBs>r>5iVi zOyjJ1#dRNTU8dq0{`e`76jw3vm}I@sanc=5-bqjVGA5{$v+-I!uZiwyn^U|`x1K@# XP(Y$gC)-+J7G>~s^>bP0l+XkKksQk5 literal 0 HcmV?d00001 diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_old-members.html b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old-members.html new file mode 100644 index 00000000..a3941a00 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old-members.html @@ -0,0 +1,114 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.Utf8Old Member List</div> </div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a>, including all inherited members.</p> +<table class="directory"> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>decodeUtf8</b>(ByteBuffer buffer, int offset, int length) (defined in <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a>)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>encodedLength</b>(CharSequence in) (defined in <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a>)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>encodeUtf8</b>(CharSequence in, ByteBuffer out) (defined in <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a>)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">com.google.flatbuffers.Utf8Old</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">getDefault</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">setDefault</a>(Utf8 instance)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> +</table></div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html new file mode 100644 index 00000000..b5449cbf --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html @@ -0,0 +1,161 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: com.google.flatbuffers.Utf8Old Class Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> | +<a href="#pub-methods">Public Member Functions</a> | +<a href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old-members.html">List of all members</a> </div> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.Utf8Old Class Reference</div> </div> +</div><!--header--> +<div class="contents"> + +<p>This class implements the Utf8 API using the Java Utf8 encoder. + <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#details">More...</a></p> +<div class="dynheader"> +Inheritance diagram for com.google.flatbuffers.Utf8Old:</div> +<div class="dyncontent"> + <div class="center"> + <img src="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.png" usemap="#com.google.flatbuffers.Utf8Old_map" alt=""/> + <map id="com.google.flatbuffers.Utf8Old_map" name="com.google.flatbuffers.Utf8Old_map"> +<area href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html" alt="com.google.flatbuffers.Utf8" shape="rect" coords="0,0,184,24"/> +</map> + </div></div> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>This class implements the Utf8 API using the Java Utf8 encoder. </p> +<p>Use Utf8.setDefault(new Utf8Old()); to use it. </p> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> +Public Member Functions</h2></td></tr> +<tr class="memitem:a0624ce5b0badb691abffcde6f89418a6"><td class="memItemLeft" align="right" valign="top"><a id="a0624ce5b0badb691abffcde6f89418a6"></a> +String </td><td class="memItemRight" valign="bottom"><b>decodeUtf8</b> (ByteBuffer buffer, int offset, int length)</td></tr> +<tr class="separator:a0624ce5b0badb691abffcde6f89418a6"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:af955284b2754ee1f27832845fa8f29f1"><td class="memItemLeft" align="right" valign="top"><a id="af955284b2754ee1f27832845fa8f29f1"></a> +int </td><td class="memItemRight" valign="bottom"><b>encodedLength</b> (CharSequence in)</td></tr> +<tr class="separator:af955284b2754ee1f27832845fa8f29f1"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:af5a4971f1696a7efb4b2f56bbcdaf553"><td class="memItemLeft" align="right" valign="top"><a id="af5a4971f1696a7efb4b2f56bbcdaf553"></a> +void </td><td class="memItemRight" valign="bottom"><b>encodeUtf8</b> (CharSequence in, ByteBuffer out)</td></tr> +<tr class="separator:af5a4971f1696a7efb4b2f56bbcdaf553"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="inherit_header pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td></tr> +<tr class="memitem:a0d28f84afeb4c529deacf82691f004c8 inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">abstract String </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">decodeUtf8</a> (ByteBuffer buffer, int offset, int length)</td></tr> +<tr class="memdesc:a0d28f84afeb4c529deacf82691f004c8 inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Decodes the given UTF-8 portion of the <a class="el" href="">ByteBuffer</a> into a <a class="el" href="">String</a>. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">More...</a><br /></td></tr> +<tr class="separator:a0d28f84afeb4c529deacf82691f004c8 inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a88db1f58c8651f849151d4563f86bcab inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">abstract int </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">encodedLength</a> (CharSequence sequence)</td></tr> +<tr class="memdesc:a88db1f58c8651f849151d4563f86bcab inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of bytes in the UTF-8-encoded form of. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">More...</a><br /></td></tr> +<tr class="separator:a88db1f58c8651f849151d4563f86bcab inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a60b4b2e81aae13bd5a0d09b95a0be4bb inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">abstract void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">encodeUtf8</a> (CharSequence in, ByteBuffer out)</td></tr> +<tr class="memdesc:a60b4b2e81aae13bd5a0d09b95a0be4bb inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Encodes the given characters to the target <a class="el" href="">ByteBuffer</a> using UTF-8 encoding. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">More...</a><br /></td></tr> +<tr class="separator:a60b4b2e81aae13bd5a0d09b95a0be4bb inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a> +Additional Inherited Members</h2></td></tr> +<tr class="inherit_header pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8')"><img src="closed.png" alt="-"/> Static Public Member Functions inherited from <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td></tr> +<tr class="memitem:a291c293832c8f646817afefad4c24858 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">getDefault</a> ()</td></tr> +<tr class="memdesc:a291c293832c8f646817afefad4c24858 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Get the default UTF-8 processor. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">More...</a><br /></td></tr> +<tr class="separator:a291c293832c8f646817afefad4c24858 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a59a8ffdd2205343d3c64d0b764eeab17 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">setDefault</a> (<a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> instance)</td></tr> +<tr class="memdesc:a59a8ffdd2205343d3c64d0b764eeab17 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Set the default instance of the UTF-8 processor. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">More...</a><br /></td></tr> +<tr class="separator:a59a8ffdd2205343d3c64d0b764eeab17 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +</table> +<hr/>The documentation for this class was generated from the following file:<ul> +<li>Utf8Old.java</li> +</ul> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.js b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.js new file mode 100644 index 00000000..f5b36810 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.js @@ -0,0 +1,6 @@ +var classcom_1_1google_1_1flatbuffers_1_1_utf8_old = +[ + [ "decodeUtf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#a0624ce5b0badb691abffcde6f89418a6", null ], + [ "encodedLength", "classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#af955284b2754ee1f27832845fa8f29f1", null ], + [ "encodeUtf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#af5a4971f1696a7efb4b2f56bbcdaf553", null ] +]; \ No newline at end of file diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.png b/classcom_1_1google_1_1flatbuffers_1_1_utf8_old.png new file mode 100644 index 0000000000000000000000000000000000000000..6f576d9cf70403b8f209f05c8fb66eed52b49aa3 GIT binary patch literal 750 zcmeAS@N?(olHy`uVBq!ia0vp^JAgQVgBeK9{pBwOq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IZ0YCT;XLn;{G&b^(t#(>8)+$`w-|H<b~ z%!`^YG4JS_qPg3kZ}OUry`N8Q%e~!`G<nI-EeBLj264ws()lX0V{%B$Inin7gYDm_ zdd}Trdycbj@AK#fb?1{mR7C`piat2Gu~@G0xV%K3T|s43Px4d2-d0<?l+)k$pTE!d zkoRGA%%SxYwt1@k-^nNU_tM$-Gb)l^W%cLil>In()N|FA{%?Z&qqOc```V@aL2Z3$ zmHQFDOCH<3p0ZVV<Z{lNT+1MrzGTvG?GJ~mth*~VKezo*c3wSuPtAR)yUh8!z2@H1 zj$OL0^+G^WxaQo`s^5Zca_f}0rvLh};ji5H6wfN>{mk-eZ~qufTw?y^bVvUrGc&JC zv#Z{nn6BciTj06r3e$8I@7e>~b8oAO9LWB~G$U|xQ+=(km!0;H_G-URnFqte88=*I zV&8Cuc%1QcPO&i;yTN=hi-x5j{I1D-^Xln;KVRXmW-R&i%|hLR&HujBx3!<%dKT<| zZdhT<6B5oiPv&z=QX2cby6O8Xi|;8P+xV&D*daOjO{!mR?U)n)>9)YW<r32*J(gWq zD*U=n+W2CVcwOSwOX^G3eLHbXO-fylZv`kM&nxO2=)ND>7#@9HyYIm4J!O)%vznW| z(w7=Vz0>^g<=d2nGHttL?w#JQDeC;;-P_lj3_E_T@c(08vHSUC)3`MkUWx2^rL|ZJ zXTS!^%a@2Y2=ng!_vyl3COaGRbNs>$<)xaBc4q&{VA*i-uCn|C|1Ad?b+!WW*IFlw e=XYv;u{Xb0`;xeSLM||IGI+ZBxvX<aXaWFs4`WII literal 0 HcmV?d00001 diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe-members.html b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe-members.html new file mode 100644 index 00000000..7d73068b --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe-members.html @@ -0,0 +1,114 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.Utf8Safe Member List</div> </div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html">com.google.flatbuffers.Utf8Safe</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1">decodeUtf8</a>(ByteBuffer buffer, int offset, int length)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html">com.google.flatbuffers.Utf8Safe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>encodedLength</b>(CharSequence in) (defined in <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html">com.google.flatbuffers.Utf8Safe</a>)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html">com.google.flatbuffers.Utf8Safe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43">encodeUtf8</a>(CharSequence in, ByteBuffer out)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html">com.google.flatbuffers.Utf8Safe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">getDefault</a>()</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">setDefault</a>(Utf8 instance)</td><td class="entry"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> +</table></div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html new file mode 100644 index 00000000..52e0ed8b --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html @@ -0,0 +1,265 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: com.google.flatbuffers.Utf8Safe Class Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="summary"> +<a href="#nested-classes">Classes</a> | +<a href="#pub-methods">Public Member Functions</a> | +<a href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe-members.html">List of all members</a> </div> + <div class="headertitle"> +<div class="title">com.google.flatbuffers.Utf8Safe Class Reference</div> </div> +</div><!--header--> +<div class="contents"> + +<p>A set of low-level, high-performance static utility methods related to the UTF-8 character encoding. + <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#details">More...</a></p> +<div class="dynheader"> +Inheritance diagram for com.google.flatbuffers.Utf8Safe:</div> +<div class="dyncontent"> + <div class="center"> + <img src="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.png" usemap="#com.google.flatbuffers.Utf8Safe_map" alt=""/> + <map id="com.google.flatbuffers.Utf8Safe_map" name="com.google.flatbuffers.Utf8Safe_map"> +<area href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html" alt="com.google.flatbuffers.Utf8" shape="rect" coords="0,0,190,24"/> +</map> + </div></div> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> +<div class="textblock"><p>A set of low-level, high-performance static utility methods related to the UTF-8 character encoding. </p> +<p>This class has no dependencies outside of the core JDK libraries.</p> +<p>There are several variants of UTF-8. The one implemented by this class is the restricted definition of UTF-8 introduced in Unicode 3.1, which mandates the rejection of "overlong" byte sequences as well as rejection of 3-byte surrogate codepoint byte sequences. Note that the UTF-8 decoder included in Oracle's JDK has been modified to also reject "overlong" byte sequences, but (as of 2011) still accepts 3-byte surrogate codepoint byte sequences.</p> +<p>The byte sequences considered valid by this class are exactly those that can be roundtrip converted to Strings and back to bytes using the UTF-8 charset, without loss: </p><pre><div class="fragment"><div class="line">Arrays.equals(bytes, <span class="keyword">new</span> String(bytes, Internal.UTF_8).getBytes(Internal.UTF_8))</div></div><!-- fragment --> </pre><p>See the Unicode Standard, Table 3-6. <em>UTF-8 Bit Distribution</em>, Table 3-7. <em>Well Formed UTF-8 Byte Sequences</em>. </p> +</div><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> +Classes</h2></td></tr> +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><b>UnpairedSurrogateException</b></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> +Public Member Functions</h2></td></tr> +<tr class="memitem:a5e80187012873ae088b8b6caf1edcbb1"><td class="memItemLeft" align="right" valign="top">String </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1">decodeUtf8</a> (ByteBuffer buffer, int offset, int length) throws IllegalArgumentException </td></tr> +<tr class="memdesc:a5e80187012873ae088b8b6caf1edcbb1"><td class="mdescLeft"> </td><td class="mdescRight">Decodes the given UTF-8 portion of the <a class="el" href="">ByteBuffer</a> into a <a class="el" href="">String</a>. <a href="#a5e80187012873ae088b8b6caf1edcbb1">More...</a><br /></td></tr> +<tr class="separator:a5e80187012873ae088b8b6caf1edcbb1"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:af89e3718e33e96bf9875faf42d158239"><td class="memItemLeft" align="right" valign="top"><a id="af89e3718e33e96bf9875faf42d158239"></a> +int </td><td class="memItemRight" valign="bottom"><b>encodedLength</b> (CharSequence in)</td></tr> +<tr class="separator:af89e3718e33e96bf9875faf42d158239"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a7151137667cc19c5b510f43927fecc43"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43">encodeUtf8</a> (CharSequence in, ByteBuffer out)</td></tr> +<tr class="memdesc:a7151137667cc19c5b510f43927fecc43"><td class="mdescLeft"> </td><td class="mdescRight">Encodes the given characters to the target <a class="el" href="">ByteBuffer</a> using UTF-8 encoding. <a href="#a7151137667cc19c5b510f43927fecc43">More...</a><br /></td></tr> +<tr class="separator:a7151137667cc19c5b510f43927fecc43"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="inherit_header pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8')"><img src="closed.png" alt="-"/> Public Member Functions inherited from <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td></tr> +<tr class="memitem:a0d28f84afeb4c529deacf82691f004c8 inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">abstract String </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">decodeUtf8</a> (ByteBuffer buffer, int offset, int length)</td></tr> +<tr class="memdesc:a0d28f84afeb4c529deacf82691f004c8 inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Decodes the given UTF-8 portion of the <a class="el" href="">ByteBuffer</a> into a <a class="el" href="">String</a>. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">More...</a><br /></td></tr> +<tr class="separator:a0d28f84afeb4c529deacf82691f004c8 inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a88db1f58c8651f849151d4563f86bcab inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">abstract int </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">encodedLength</a> (CharSequence sequence)</td></tr> +<tr class="memdesc:a88db1f58c8651f849151d4563f86bcab inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Returns the number of bytes in the UTF-8-encoded form of. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">More...</a><br /></td></tr> +<tr class="separator:a88db1f58c8651f849151d4563f86bcab inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a60b4b2e81aae13bd5a0d09b95a0be4bb inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">abstract void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">encodeUtf8</a> (CharSequence in, ByteBuffer out)</td></tr> +<tr class="memdesc:a60b4b2e81aae13bd5a0d09b95a0be4bb inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Encodes the given characters to the target <a class="el" href="">ByteBuffer</a> using UTF-8 encoding. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">More...</a><br /></td></tr> +<tr class="separator:a60b4b2e81aae13bd5a0d09b95a0be4bb inherit pub_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a> +Additional Inherited Members</h2></td></tr> +<tr class="inherit_header pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8')"><img src="closed.png" alt="-"/> Static Public Member Functions inherited from <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">com.google.flatbuffers.Utf8</a></td></tr> +<tr class="memitem:a291c293832c8f646817afefad4c24858 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">getDefault</a> ()</td></tr> +<tr class="memdesc:a291c293832c8f646817afefad4c24858 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Get the default UTF-8 processor. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">More...</a><br /></td></tr> +<tr class="separator:a291c293832c8f646817afefad4c24858 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a59a8ffdd2205343d3c64d0b764eeab17 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">setDefault</a> (<a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> instance)</td></tr> +<tr class="memdesc:a59a8ffdd2205343d3c64d0b764eeab17 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="mdescLeft"> </td><td class="mdescRight">Set the default instance of the UTF-8 processor. <a href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">More...</a><br /></td></tr> +<tr class="separator:a59a8ffdd2205343d3c64d0b764eeab17 inherit pub_static_methods_classcom_1_1google_1_1flatbuffers_1_1_utf8"><td class="memSeparator" colspan="2"> </td></tr> +</table> +<h2 class="groupheader">Member Function Documentation</h2> +<a id="a5e80187012873ae088b8b6caf1edcbb1"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5e80187012873ae088b8b6caf1edcbb1">◆ </a></span>decodeUtf8()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">String com.google.flatbuffers.Utf8Safe.decodeUtf8 </td> + <td>(</td> + <td class="paramtype">ByteBuffer </td> + <td class="paramname"><em>buffer</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"><em>offset</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">int </td> + <td class="paramname"><em>length</em> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td> throws IllegalArgumentException</td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Decodes the given UTF-8 portion of the <a class="el" href="">ByteBuffer</a> into a <a class="el" href="">String</a>. </p> +<dl class="exception"><dt>Exceptions</dt><dd> + <table class="exception"> + <tr><td class="paramname">IllegalArgumentException</td><td>if the input is not valid UTF-8. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<a id="a7151137667cc19c5b510f43927fecc43"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a7151137667cc19c5b510f43927fecc43">◆ </a></span>encodeUtf8()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">void com.google.flatbuffers.Utf8Safe.encodeUtf8 </td> + <td>(</td> + <td class="paramtype">CharSequence </td> + <td class="paramname"><em>in</em>, </td> + </tr> + <tr> + <td class="paramkey"></td> + <td></td> + <td class="paramtype">ByteBuffer </td> + <td class="paramname"><em>out</em> </td> + </tr> + <tr> + <td></td> + <td>)</td> + <td></td><td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Encodes the given characters to the target <a class="el" href="">ByteBuffer</a> using UTF-8 encoding. </p> +<p>Selects an optimal algorithm based on the type of <a class="el" href="">ByteBuffer</a> (i.e. heap or direct) and the capabilities of the platform.</p> +<dl class="params"><dt>Parameters</dt><dd> + <table class="params"> + <tr><td class="paramname">in</td><td>the source string to be encoded </td></tr> + <tr><td class="paramname">out</td><td>the target buffer to receive the encoded string. </td></tr> + </table> + </dd> +</dl> + +</div> +</div> +<hr/>The documentation for this class was generated from the following file:<ul> +<li>Utf8Safe.java</li> +</ul> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.js b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.js new file mode 100644 index 00000000..47abe799 --- /dev/null +++ b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.js @@ -0,0 +1,6 @@ +var classcom_1_1google_1_1flatbuffers_1_1_utf8_safe = +[ + [ "decodeUtf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1", null ], + [ "encodedLength", "classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#af89e3718e33e96bf9875faf42d158239", null ], + [ "encodeUtf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43", null ] +]; \ No newline at end of file diff --git a/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.png b/classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.png new file mode 100644 index 0000000000000000000000000000000000000000..f2bf48485b711cd2a23adaf90977ab030ce9f2ba GIT binary patch literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^`+zurgBeIpcw!$5q$C1-LR|m<{|{uoc=NTi|Ih@G z90(scaDcV*jy#abQ4-`A%m7pb0#{Fk7%?y~HG8@^hEy=VoqN0JumX<@|Ld85{;Qia z<{Z(TeoQa5?b_`fP94IY)8cP#%bgvbGs$GN*glosONXW}3A7Tu?`br>_*l{Y)zkN? ztemv{xb4A>FDn)I+3)P1ukU?IuX(@qwmH^6KAvvlpMNB|_)O+A!QNwX`Fy7zpZ{yV zu)_I=ecK1YZ^>no|Nj)RuX->4@6KE;G2`zRJ<sNd>-hyO+Y*)jfAh1I44-!B{#kUX z@?i8GzaVdQlk?&~7Tys1uTjr#|L(@@0-d_;%=1(CTYTpE^XZ9k^?keE)^i8+)&1k% zl&ksQlTCba<Ye;P+>R?YE1&kwEPQq+-|f};0?%C@@{i3=|M(-S;wk>}^BeQiH&(7y ziCq<M+OP7LU$@3nYH6#!=i-v%_krFHV+eo6X0ZO*vHf?KJ)1B6-_PFo|C1ltpBQ>B zA7YnS+RAU>#VwyOMa=GihHgzmVAKzW#aliwx@A6O?zx1jz#;scrTO{-hRs<px%`ja zcW-L!xPSF@9K+N-w(mIm4hq@(cC7yJ_hjv#8p#u&Kzt{-X-4j!FRA69A4(O^s&rYr z@%Ze+Ld%MHo;%y|Jp3<l$lZcrk>;7tJoc>HZ|m;+$Y&TVf5e!p|8PdpuR})}XI{#h zTRVA~RmrVn^K|v^3%QPDm0xAG{j*Dd)w7Ln>v-#`b_7Mu&fI>Q-T9^s?+Kf<x(Av! z&(A-*%INJW^S*cXyIecO_r^b{zyDj!Y32O~({Ex8T-&~xfoJ|oTwYUS@O^gN<M<oz zADG`aJ0I`JP`_~druqA~&6i~S7xdnY|A74!SfKQO?<zibc9pz|i-v8acwICwi86S) L`njxgN@xNAd#-I9 literal 0 HcmV?d00001 diff --git a/classes.html b/classes.html index c5f42c88..d63985a4 100644 --- a/classes.html +++ b/classes.html @@ -91,30 +91,32 @@ $(document).ready(function(){initNavTree('classes.html','');}); <div class="title">Class Index</div> </div> </div><!--header--> <div class="contents"> -<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_v">v</a></div> +<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_u">u</a> | <a class="qindex" href="#letter_v">v</a></div> <table class="classindex"> <tr><td rowspan="2" valign="bottom"><a name="letter_a"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  a  </div></td></tr></table> -</td><td valign="top"><a class="el" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> (flatbuffers)   </td><td rowspan="2" valign="bottom"><a name="letter_h"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  h  </div></td></tr></table> -</td><td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  o  </div></td></tr></table> -</td><td valign="top"><a class="el" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> (flatbuffers)   </td></tr> +</td><td valign="top"><a class="el" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> (flatbuffers)   </td><td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  i  </div></td></tr></table> +</td><td valign="top"><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">FlatBufferBuilder::StringOffsetCompare</a> (flatbuffers)   </td><td valign="top"><a class="el" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> (flatbuffers)   </td></tr> <tr><td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  f  </div></td></tr></table> +</td><td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  u  </div></td></tr></table> </td><td valign="top"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> (flatbuffers)   </td></tr> -<tr><td valign="top"><a class="el" href="classflatbuffers_1_1_allocator.html">Allocator</a> (flatbuffers)   </td><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">FlatBufferBuilder.HeapByteBufferFactory</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_offset.html">Offset</a> (flatbuffers)   </td><td valign="top"><a class="el" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a> (flatbuffers)   </td></tr> +<tr><td valign="top"><a class="el" href="classflatbuffers_1_1_allocator.html">Allocator</a> (flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a> (flatbuffers)   </td><td valign="top"><a class="el" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a> (flatbuffers)   </td></tr> <tr><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  b  </div></td></tr></table> -</td><td valign="top"><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FlatBufferBuilder::FieldLoc</a> (flatbuffers)   </td><td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  i  </div></td></tr></table> -</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  s  </div></td></tr></table> +</td><td valign="top"><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FlatBufferBuilder::FieldLoc</a> (flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html">IndirectHelper< const T * ></a> (flatbuffers)   </td><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html">Utf8</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a> (flatbuffers)   </td></tr> +<tr><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html">IndirectHelper< Offset< T > ></a> (flatbuffers)   </td><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html">Utf8Old</a> (com.google.flatbuffers)   </td><td></td></tr> +<tr><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">FlatBufferBuilder.ByteBufferFactory</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html">FlatbufferBuilder</a> (Google\FlatBuffers)   </td><td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  o  </div></td></tr></table> +</td><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html">Utf8Safe</a> (com.google.flatbuffers)   </td><td></td></tr> +<tr><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html">ByteBufferUtil</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (<a class="el" href="namespace_flat_buffers.html">FlatBuffers</a>)   </td><td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  v  </div></td></tr></table> </td><td></td></tr> -<tr><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (com.google.flatbuffers)   </td><td></td></tr> -<tr><td valign="top"><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html">FlatBufferBuilder.ByteBufferFactory</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a> (flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_string.html">String</a> (flatbuffers)   </td><td></td></tr> -<tr><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html">ByteBufferUtil</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html">FlatbufferBuilder</a> (Google\FlatBuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html">IndirectHelper< const T * ></a> (flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">FlatBufferBuilder::StringOffsetCompare</a> (flatbuffers)   </td><td></td></tr> <tr><td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  d  </div></td></tr></table> -</td><td valign="top"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (<a class="el" href="namespace_flat_buffers.html">FlatBuffers</a>)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html">IndirectHelper< Offset< T > ></a> (flatbuffers)   </td><td rowspan="2" valign="bottom"><a name="letter_v"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  v  </div></td></tr></table> -</td><td></td></tr> -<tr><td></td><td></td><td></td></tr> -<tr><td valign="top"><a class="el" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a> (flatbuffers)   </td><td></td><td></td><td valign="top"><a class="el" href="classflatbuffers_1_1_vector.html">Vector</a> (flatbuffers)   </td><td></td></tr> +</td><td valign="top"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_offset.html">Offset</a> (flatbuffers)   </td><td></td></tr> +<tr><td rowspan="2" valign="bottom"><a name="letter_h"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  h  </div></td></tr></table> +</td><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  s  </div></td></tr></table> +</td><td valign="top"><a class="el" href="classflatbuffers_1_1_vector.html">Vector</a> (flatbuffers)   </td><td></td></tr> +<tr><td valign="top"><a class="el" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a> (flatbuffers)   </td><td></td><td></td></tr> +<tr><td></td><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html">FlatBufferBuilder.HeapByteBufferFactory</a> (com.google.flatbuffers)   </td><td valign="top"><a class="el" href="structflatbuffers_1_1_string.html">String</a> (flatbuffers)   </td><td></td><td></td></tr> <tr><td></td><td></td><td></td><td></td><td></td></tr> </table> -<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_v">v</a></div> +<div class="qindex"><a class="qindex" href="#letter_a">a</a> | <a class="qindex" href="#letter_b">b</a> | <a class="qindex" href="#letter_d">d</a> | <a class="qindex" href="#letter_f">f</a> | <a class="qindex" href="#letter_h">h</a> | <a class="qindex" href="#letter_i">i</a> | <a class="qindex" href="#letter_o">o</a> | <a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_u">u</a> | <a class="qindex" href="#letter_v">v</a></div> </div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/classflatbuffers_1_1_default_allocator-members.html b/classflatbuffers_1_1_default_allocator-members.html index 7e58d521..9eece9bb 100644 --- a/classflatbuffers_1_1_default_allocator-members.html +++ b/classflatbuffers_1_1_default_allocator-members.html @@ -95,10 +95,11 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_default_allocator <p>This is the complete list of members for <a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a>, including all inherited members.</p> <table class="directory"> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>allocate</b>(size_t size) FLATBUFFERS_OVERRIDE (defined in <a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>deallocate</b>(uint8_t *p, size_t) FLATBUFFERS_OVERRIDE (defined in <a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>memcpy_downward</b>(uint8_t *old_p, size_t old_size, uint8_t *new_p, size_t new_size, size_t in_use_back, size_t in_use_front) (defined in <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>reallocate_downward</b>(uint8_t *old_p, size_t old_size, size_t new_size, size_t in_use_back, size_t in_use_front) (defined in <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Allocator</b>() (defined in <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>dealloc</b>(void *p, size_t) (defined in <a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>deallocate</b>(uint8_t *p, size_t) FLATBUFFERS_OVERRIDE (defined in <a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>memcpy_downward</b>(uint8_t *old_p, size_t old_size, uint8_t *new_p, size_t new_size, size_t in_use_back, size_t in_use_front) (defined in <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>reallocate_downward</b>(uint8_t *old_p, size_t old_size, size_t new_size, size_t in_use_back, size_t in_use_front) (defined in <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>~Allocator</b>() (defined in <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr> </table></div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/classflatbuffers_1_1_default_allocator.html b/classflatbuffers_1_1_default_allocator.html index 22e612fb..c3bab874 100644 --- a/classflatbuffers_1_1_default_allocator.html +++ b/classflatbuffers_1_1_default_allocator.html @@ -89,6 +89,7 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_default_allocator <div class="header"> <div class="summary"> <a href="#pub-methods">Public Member Functions</a> | +<a href="#pub-static-methods">Static Public Member Functions</a> | <a href="classflatbuffers_1_1_default_allocator-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">flatbuffers::DefaultAllocator Class Reference</div> </div> @@ -117,6 +118,12 @@ void </td><td class="memItemRight" valign="bottom"><b>deallocate</b> (uint8 virtual uint8_t * </td><td class="memItemRight" valign="bottom"><b>reallocate_downward</b> (uint8_t *old_p, size_t old_size, size_t new_size, size_t in_use_back, size_t in_use_front)</td></tr> <tr class="separator:a1344ebeb1c1ab40a6d5b78b4e20ed187 inherit pub_methods_classflatbuffers_1_1_allocator"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a> +Static Public Member Functions</h2></td></tr> +<tr class="memitem:a7549b946d7bd892dcb773db38a44907c"><td class="memItemLeft" align="right" valign="top"><a id="a7549b946d7bd892dcb773db38a44907c"></a> +static void </td><td class="memItemRight" valign="bottom"><b>dealloc</b> (void *p, size_t)</td></tr> +<tr class="separator:a7549b946d7bd892dcb773db38a44907c"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a> Additional Inherited Members</h2></td></tr> <tr class="inherit_header pro_methods_classflatbuffers_1_1_allocator"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classflatbuffers_1_1_allocator')"><img src="closed.png" alt="-"/> Protected Member Functions inherited from <a class="el" href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></td></tr> diff --git a/classflatbuffers_1_1_default_allocator.js b/classflatbuffers_1_1_default_allocator.js index 8df21fa3..70b35c07 100644 --- a/classflatbuffers_1_1_default_allocator.js +++ b/classflatbuffers_1_1_default_allocator.js @@ -1,5 +1,6 @@ var classflatbuffers_1_1_default_allocator = [ [ "allocate", "classflatbuffers_1_1_default_allocator.html#af14dc83724cf6373c7f757c3e2518e6e", null ], + [ "dealloc", "classflatbuffers_1_1_default_allocator.html#a7549b946d7bd892dcb773db38a44907c", null ], [ "deallocate", "classflatbuffers_1_1_default_allocator.html#acfc866696fe9db8e74d9529d8fc70aac", null ] ]; \ No newline at end of file diff --git a/classflatbuffers_1_1_flat_buffer_builder-members.html b/classflatbuffers_1_1_flat_buffer_builder-members.html index f9147967..a696d4a3 100644 --- a/classflatbuffers_1_1_flat_buffer_builder-members.html +++ b/classflatbuffers_1_1_flat_buffer_builder-members.html @@ -130,15 +130,17 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_flat_buffer_build <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72">CreateVectorOfStructs</a>(size_t vector_size, const std::function< void(size_t i, T *)> &filler)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5">CreateVectorOfStructs</a>(size_t vector_size, F f, S *state)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42">CreateVectorOfStructs</a>(const std::vector< T, Alloc > &v)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>dedup_vtables_</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> - <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">DedupVtables</a>(bool dedup)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">Finish</a>(Offset< T > root, const char *file_identifier=nullptr)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>Finish</b>(uoffset_t root, const char *file_identifier, bool size_prefix) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>finished</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> - <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">FinishSizePrefixed</a>(Offset< T > root, const char *file_identifier=nullptr)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">FlatBufferBuilder</a>(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr> - <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56">FlatBufferBuilder</a>(FlatBufferBuilder &&other)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FlatBufferBuilder</b>(const FlatBufferBuilder &) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CreateVectorScalarCast</b>(const U *v, size_t len) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>dedup_vtables_</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">DedupVtables</a>(bool dedup)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">Finish</a>(Offset< T > root, const char *file_identifier=nullptr)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Finish</b>(uoffset_t root, const char *file_identifier, bool size_prefix) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>finished</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">FinishSizePrefixed</a>(Offset< T > root, const char *file_identifier=nullptr)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">FlatBufferBuilder</a>(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091">FlatBufferBuilder</a>(FlatBufferBuilder &&other) FlatBufferBuilder(FlatBufferBuilder &other)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>FlatBufferBuilder</b>(const FlatBufferBuilder &) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42">FLATBUFFERS_ATTRIBUTE</a>(deprecated("use Release() instead")) DetachedBuffer ReleaseBufferPointer()</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>force_defaults_</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">ForceDefaults</a>(bool fd)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b">GetBufferMinAlignment</a>()</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> @@ -153,12 +155,12 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_flat_buffer_build <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38">operator=</a>(FlatBufferBuilder &&other)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>operator=</b>(const FlatBufferBuilder &) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">Release</a>()</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8">ReleaseBufferPointer</a>()</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">ReleaseRaw</a>(size_t &size, size_t &offset)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>Reset</b>() (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>string_pool</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>StringOffsetMap</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Swap</b>(FlatBufferBuilder &other) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">ReleaseRaw</a>(size_t &size, size_t &offset)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Reset</b>() (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>string_pool</b> (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>StringOffsetMap</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>Swap</b>(FlatBufferBuilder &other) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SwapBufAllocator</b>(FlatBufferBuilder &other) (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>~FlatBufferBuilder</b>() (defined in <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> </table></div><!-- contents --> </div><!-- doc-content --> diff --git a/classflatbuffers_1_1_flat_buffer_builder.html b/classflatbuffers_1_1_flat_buffer_builder.html index 8a73044f..f29449b6 100644 --- a/classflatbuffers_1_1_flat_buffer_builder.html +++ b/classflatbuffers_1_1_flat_buffer_builder.html @@ -244,6 +244,10 @@ template<typename T > </td></tr> <tr class="memitem:a110c2a3298aebef1a9dfa3c44ee84f42"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="structflatbuffers_1_1_offset.html">Offset</a>< <a class="el" href="classflatbuffers_1_1_vector.html">Vector</a>< const T * > > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42">CreateVectorOfStructs</a> (const std::vector< T, Alloc > &v)</td></tr> <tr class="memdesc:a110c2a3298aebef1a9dfa3c44ee84f42"><td class="mdescLeft"> </td><td class="mdescRight">Serialize a <code>std::vector</code> of structs into a FlatBuffer <code>vector</code>. <a href="#a110c2a3298aebef1a9dfa3c44ee84f42">More...</a><br /></td></tr> <tr class="separator:a110c2a3298aebef1a9dfa3c44ee84f42"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a8f4ce606347c10854ab05cf0ef7e8b2c"><td class="memTemplParams" colspan="2"><a id="a8f4ce606347c10854ab05cf0ef7e8b2c"></a> +template<typename T , typename U > </td></tr> +<tr class="memitem:a8f4ce606347c10854ab05cf0ef7e8b2c"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="structflatbuffers_1_1_offset.html">Offset</a>< <a class="el" href="classflatbuffers_1_1_vector.html">Vector</a>< T > > </td><td class="memTemplItemRight" valign="bottom"><b>CreateVectorScalarCast</b> (const U *v, size_t len)</td></tr> +<tr class="separator:a8f4ce606347c10854ab05cf0ef7e8b2c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa905b29dce19a1795c7bce375cf29961"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">DedupVtables</a> (bool dedup)</td></tr> <tr class="memdesc:aa905b29dce19a1795c7bce375cf29961"><td class="mdescLeft"> </td><td class="mdescRight">By default vtables are deduped in order to save space. <a href="#aa905b29dce19a1795c7bce375cf29961">More...</a><br /></td></tr> <tr class="separator:aa905b29dce19a1795c7bce375cf29961"><td class="memSeparator" colspan="2"> </td></tr> @@ -258,10 +262,13 @@ template<typename T > </td></tr> <tr class="memitem:ab0173786ea4ec3e4ae10555639b2996c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">FlatBufferBuilder</a> (size_t initial_size=1024, <a class="el" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())</td></tr> <tr class="memdesc:ab0173786ea4ec3e4ae10555639b2996c"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor for FlatBufferBuilder. <a href="#ab0173786ea4ec3e4ae10555639b2996c">More...</a><br /></td></tr> <tr class="separator:ab0173786ea4ec3e4ae10555639b2996c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a86e1a348b7474fd5d239016ae97afc56"><td class="memItemLeft" align="right" valign="top"><a id="a86e1a348b7474fd5d239016ae97afc56"></a> - </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56">FlatBufferBuilder</a> (<a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &&other)</td></tr> -<tr class="memdesc:a86e1a348b7474fd5d239016ae97afc56"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor for FlatBufferBuilder. <br /></td></tr> -<tr class="separator:a86e1a348b7474fd5d239016ae97afc56"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:ae91e78212d88465e992d750ea215d091"><td class="memItemLeft" align="right" valign="top"><a id="ae91e78212d88465e992d750ea215d091"></a> + </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091">FlatBufferBuilder</a> (<a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &&other) <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>(<a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other)</td></tr> +<tr class="memdesc:ae91e78212d88465e992d750ea215d091"><td class="mdescLeft"> </td><td class="mdescRight">Move constructor for FlatBufferBuilder. <br /></td></tr> +<tr class="separator:ae91e78212d88465e992d750ea215d091"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5fcede355ddb6a347edf8b189ada2e42"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42">FLATBUFFERS_ATTRIBUTE</a> (deprecated("use <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">Release</a>() instead")) DetachedBuffer ReleaseBufferPointer()</td></tr> +<tr class="memdesc:a5fcede355ddb6a347edf8b189ada2e42"><td class="mdescLeft"> </td><td class="mdescRight">Get the released pointer to the serialized buffer. <a href="#a5fcede355ddb6a347edf8b189ada2e42">More...</a><br /></td></tr> +<tr class="separator:a5fcede355ddb6a347edf8b189ada2e42"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a16a8fd46b34ad7727406c37b65b6b27a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">ForceDefaults</a> (bool fd)</td></tr> <tr class="memdesc:a16a8fd46b34ad7727406c37b65b6b27a"><td class="mdescLeft"> </td><td class="mdescRight">In order to save space, fields that are set to their default value don't get serialized into the buffer. <a href="#a16a8fd46b34ad7727406c37b65b6b27a">More...</a><br /></td></tr> <tr class="separator:a16a8fd46b34ad7727406c37b65b6b27a"><td class="memSeparator" colspan="2"> </td></tr> @@ -284,9 +291,6 @@ template<typename T > </td></tr> <tr class="memitem:a5e2c3a1e47f0ab4a3a3f07a07a52fb45"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">Release</a> ()</td></tr> <tr class="memdesc:a5e2c3a1e47f0ab4a3a3f07a07a52fb45"><td class="mdescLeft"> </td><td class="mdescRight">Get the released DetachedBuffer. <a href="#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">More...</a><br /></td></tr> <tr class="separator:a5e2c3a1e47f0ab4a3a3f07a07a52fb45"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a0e715d9019060b4b753c4e5228be56e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8">ReleaseBufferPointer</a> ()</td></tr> -<tr class="memdesc:a0e715d9019060b4b753c4e5228be56e8"><td class="mdescLeft"> </td><td class="mdescRight">Get the released pointer to the serialized buffer. <a href="#a0e715d9019060b4b753c4e5228be56e8">More...</a><br /></td></tr> -<tr class="separator:a0e715d9019060b4b753c4e5228be56e8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa090a68856f7b554cc7cac3c279fb416"><td class="memItemLeft" align="right" valign="top">uint8_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">ReleaseRaw</a> (size_t &size, size_t &offset)</td></tr> <tr class="memdesc:aa090a68856f7b554cc7cac3c279fb416"><td class="mdescLeft"> </td><td class="mdescRight">Get the released pointer to the serialized buffer. <a href="#aa090a68856f7b554cc7cac3c279fb416">More...</a><br /></td></tr> <tr class="separator:aa090a68856f7b554cc7cac3c279fb416"><td class="memSeparator" colspan="2"> </td></tr> @@ -296,6 +300,9 @@ void </td><td class="memItemRight" valign="bottom"><b>Reset</b> ()</td></tr <tr class="memitem:a59f39e7a4d9b0b32a805c77bffed245a"><td class="memItemLeft" align="right" valign="top"><a id="a59f39e7a4d9b0b32a805c77bffed245a"></a> void </td><td class="memItemRight" valign="bottom"><b>Swap</b> (<a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other)</td></tr> <tr class="separator:a59f39e7a4d9b0b32a805c77bffed245a"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:acbb6de9402ccd756acb912f839f5c112"><td class="memItemLeft" align="right" valign="top"><a id="acbb6de9402ccd756acb912f839f5c112"></a> +void </td><td class="memItemRight" valign="bottom"><b>SwapBufAllocator</b> (<a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other)</td></tr> +<tr class="separator:acbb6de9402ccd756acb912f839f5c112"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a> Static Public Attributes</h2></td></tr> @@ -1916,6 +1923,36 @@ template<typename T > </div> <p>Finish a buffer with a 32 bit size field pre-fixed (size of the buffer following the size field). </p> <p>These buffers are NOT compatible with standard buffers created by Finish, i.e. you can't call GetRoot on them, you have to use GetSizePrefixedRoot instead. All >32 bit quantities in this buffer will be aligned when the whole size pre-fixed buffer is aligned. These kinds of buffers are useful for creating a stream of FlatBuffers. </p> +</div> +</div> +<a id="a5fcede355ddb6a347edf8b189ada2e42"></a> +<h2 class="memtitle"><span class="permalink"><a href="#a5fcede355ddb6a347edf8b189ada2e42">◆ </a></span>FLATBUFFERS_ATTRIBUTE()</h2> + +<div class="memitem"> +<div class="memproto"> +<table class="mlabels"> + <tr> + <td class="mlabels-left"> + <table class="memname"> + <tr> + <td class="memname">flatbuffers::FlatBufferBuilder::FLATBUFFERS_ATTRIBUTE </td> + <td>(</td> + <td class="paramtype">deprecated("use <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">Release</a>() instead") </td> + <td class="paramname"></td><td>)</td> + <td></td> + </tr> + </table> + </td> + <td class="mlabels-right"> +<span class="mlabels"><span class="mlabel">inline</span></span> </td> + </tr> +</table> +</div><div class="memdoc"> + +<p>Get the released pointer to the serialized buffer. </p> +<dl class="section warning"><dt>Warning</dt><dd>Do NOT attempt to use this FlatBufferBuilder afterwards! </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>A <code>FlatBuffer</code> that owns the buffer and its allocator and behaves similar to a <code>unique_ptr</code> with a deleter. </dd></dl> + </div> </div> <a id="a16a8fd46b34ad7727406c37b65b6b27a"></a> @@ -2090,35 +2127,6 @@ template<typename T > </div> <p>Get the released DetachedBuffer. </p> <dl class="section return"><dt>Returns</dt><dd>A <code>DetachedBuffer</code> that owns the buffer and its allocator. </dd></dl> -</div> -</div> -<a id="a0e715d9019060b4b753c4e5228be56e8"></a> -<h2 class="memtitle"><span class="permalink"><a href="#a0e715d9019060b4b753c4e5228be56e8">◆ </a></span>ReleaseBufferPointer()</h2> - -<div class="memitem"> -<div class="memproto"> -<table class="mlabels"> - <tr> - <td class="mlabels-left"> - <table class="memname"> - <tr> - <td class="memname"><a class="el" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> flatbuffers::FlatBufferBuilder::ReleaseBufferPointer </td> - <td>(</td> - <td class="paramname"></td><td>)</td> - <td></td> - </tr> - </table> - </td> - <td class="mlabels-right"> -<span class="mlabels"><span class="mlabel">inline</span></span> </td> - </tr> -</table> -</div><div class="memdoc"> - -<p>Get the released pointer to the serialized buffer. </p> -<dl class="section warning"><dt>Warning</dt><dd>Do NOT attempt to use this FlatBufferBuilder afterwards! </dd></dl> -<dl class="section return"><dt>Returns</dt><dd>A <code>FlatBuffer</code> that owns the buffer and its allocator and behaves similar to a <code>unique_ptr</code> with a deleter. Deprecated: use Release() instead </dd></dl> - </div> </div> <a id="aa090a68856f7b554cc7cac3c279fb416"></a> @@ -2164,7 +2172,7 @@ template<typename T > </div> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>A raw pointer to the start of the memory block containing the serialized <code>FlatBuffer</code>. </dd></dl> -<dl class="section remark"><dt>Remarks</dt><dd>If the allocator is owned, it gets deleted during this call. </dd></dl> +<dl class="section remark"><dt>Remarks</dt><dd>If the allocator is owned, it gets deleted when the destructor is called.. </dd></dl> </div> </div> diff --git a/classflatbuffers_1_1_flat_buffer_builder.js b/classflatbuffers_1_1_flat_buffer_builder.js index f5e01f0a..4c2475be 100644 --- a/classflatbuffers_1_1_flat_buffer_builder.js +++ b/classflatbuffers_1_1_flat_buffer_builder.js @@ -4,7 +4,7 @@ var classflatbuffers_1_1_flat_buffer_builder = [ "StringOffsetCompare", "structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html", "structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare" ], [ "StringOffsetMap", "classflatbuffers_1_1_flat_buffer_builder.html#a9190cb2d5a4324ab0c52263b834fff09", null ], [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c", null ], - [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56", null ], + [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091", null ], [ "~FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#a01dabf5cdd6b1b2881337e1e84aa1683", null ], [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ace4606286a25d3fedfb1532934d4cea1", null ], [ "Clear", "classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412", null ], @@ -42,10 +42,12 @@ var classflatbuffers_1_1_flat_buffer_builder = [ "CreateVectorOfStructs", "classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72", null ], [ "CreateVectorOfStructs", "classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5", null ], [ "CreateVectorOfStructs", "classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42", null ], + [ "CreateVectorScalarCast", "classflatbuffers_1_1_flat_buffer_builder.html#a8f4ce606347c10854ab05cf0ef7e8b2c", null ], [ "DedupVtables", "classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961", null ], [ "Finish", "classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912", null ], [ "Finish", "classflatbuffers_1_1_flat_buffer_builder.html#a2e4de5642bad6dcd01eb7e7eaf719c89", null ], [ "FinishSizePrefixed", "classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220", null ], + [ "FLATBUFFERS_ATTRIBUTE", "classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42", null ], [ "ForceDefaults", "classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a", null ], [ "GetBufferMinAlignment", "classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b", null ], [ "GetBufferPointer", "classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83", null ], @@ -54,10 +56,10 @@ var classflatbuffers_1_1_flat_buffer_builder = [ "operator=", "classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38", null ], [ "operator=", "classflatbuffers_1_1_flat_buffer_builder.html#a376bb6858e8b1baab9a437f3f9f0b334", null ], [ "Release", "classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45", null ], - [ "ReleaseBufferPointer", "classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8", null ], [ "ReleaseRaw", "classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416", null ], [ "Reset", "classflatbuffers_1_1_flat_buffer_builder.html#a952495120d5c56d600640091334b5341", null ], [ "Swap", "classflatbuffers_1_1_flat_buffer_builder.html#a59f39e7a4d9b0b32a805c77bffed245a", null ], + [ "SwapBufAllocator", "classflatbuffers_1_1_flat_buffer_builder.html#acbb6de9402ccd756acb912f839f5c112", null ], [ "buf_", "classflatbuffers_1_1_flat_buffer_builder.html#a9a3886be63710d8bb88f2ade4ac8420d", null ], [ "dedup_vtables_", "classflatbuffers_1_1_flat_buffer_builder.html#a6b31b32fb478a9ec68164e1579c7ebe7", null ], [ "finished", "classflatbuffers_1_1_flat_buffer_builder.html#ab2cc618aeb6f6c411c7ab734649e1a81", null ], diff --git a/classflatbuffers_1_1_vector-members.html b/classflatbuffers_1_1_vector-members.html index abdf8cab..446d05e2 100644 --- a/classflatbuffers_1_1_vector-members.html +++ b/classflatbuffers_1_1_vector-members.html @@ -96,13 +96,19 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_vector.html',''); <table class="directory"> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cbegin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>cend</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>Data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>crbegin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>crend</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>Data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FLATBUFFERS_ATTRIBUTE</b>(deprecated("use size() instead")) uoffset_t Length() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>Get</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetAs</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>GetAsString</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> @@ -110,14 +116,18 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_vector.html',''); <tr bgcolor="#f0f0f0"><td class="entry"><b>GetMutableObject</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetStructFromOffset</b>(size_t o) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Length</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>length_</b> (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LookupByKey</b>(K key) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>mutable_return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Mutate</b>(uoffset_t i, const T &val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>MutateOffset</b>(uoffset_t i, const uint8_t *val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>length_</b> (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>LookupByKey</b>(K key) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mutable_return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>Mutate</b>(uoffset_t i, const T &val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MutateOffset</b>(uoffset_t i, const uint8_t *val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rbegin</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>rbegin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rend</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>rend</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>reverse_iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>Vector</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< T ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr> </table></div><!-- contents --> diff --git a/classflatbuffers_1_1_vector.html b/classflatbuffers_1_1_vector.html index 693201e5..9d566a25 100644 --- a/classflatbuffers_1_1_vector.html +++ b/classflatbuffers_1_1_vector.html @@ -102,6 +102,9 @@ Public Types</h2></td></tr> <tr class="memitem:a66212ee5146550ed418a358a8b756dc6"><td class="memItemLeft" align="right" valign="top"><a id="a66212ee5146550ed418a358a8b756dc6"></a> typedef <a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>< T, typename <a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a>< T >::return_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr> <tr class="separator:a66212ee5146550ed418a358a8b756dc6"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aff94a022cb6a11c6704e6a624f2c285a"><td class="memItemLeft" align="right" valign="top"><a id="aff94a022cb6a11c6704e6a624f2c285a"></a> +typedef <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a>< <a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr> +<tr class="separator:aff94a022cb6a11c6704e6a624f2c285a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0eeca1798d12e29e1003e6f831668986"><td class="memItemLeft" align="right" valign="top"><a id="a0eeca1798d12e29e1003e6f831668986"></a> typedef <a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>< T, typename <a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a>< T >::mutable_return_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr> <tr class="separator:a0eeca1798d12e29e1003e6f831668986"><td class="memSeparator" colspan="2"> </td></tr> @@ -111,6 +114,9 @@ typedef <a class="el" href="structflatbuffers_1_1_indirect_helper.html">Indirect <tr class="memitem:a28dab085738663f5c866cf6570bb6289"><td class="memItemLeft" align="right" valign="top"><a id="a28dab085738663f5c866cf6570bb6289"></a> typedef <a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a>< T >::return_type </td><td class="memItemRight" valign="bottom"><b>return_type</b></td></tr> <tr class="separator:a28dab085738663f5c866cf6570bb6289"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aebe9837cb57e88212975ec5187f37c55"><td class="memItemLeft" align="right" valign="top"><a id="aebe9837cb57e88212975ec5187f37c55"></a> +typedef <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a>< <a class="el" href="structflatbuffers_1_1_vector_iterator.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr> +<tr class="separator:aebe9837cb57e88212975ec5187f37c55"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> @@ -120,6 +126,18 @@ Public Member Functions</h2></td></tr> <tr class="memitem:ac4633f563a5a52980ff0b56fa683a4de"><td class="memItemLeft" align="right" valign="top"><a id="ac4633f563a5a52980ff0b56fa683a4de"></a> <a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> () const</td></tr> <tr class="separator:ac4633f563a5a52980ff0b56fa683a4de"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aa690e1a3a5fb68942b508952801b6209"><td class="memItemLeft" align="right" valign="top"><a id="aa690e1a3a5fb68942b508952801b6209"></a> +<a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>cbegin</b> () const</td></tr> +<tr class="separator:aa690e1a3a5fb68942b508952801b6209"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:af85a734b2feb15c6279784b5b81f009b"><td class="memItemLeft" align="right" valign="top"><a id="af85a734b2feb15c6279784b5b81f009b"></a> +<a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>cend</b> () const</td></tr> +<tr class="separator:af85a734b2feb15c6279784b5b81f009b"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a422c0671cb2c884865cb09f09141fc1f"><td class="memItemLeft" align="right" valign="top"><a id="a422c0671cb2c884865cb09f09141fc1f"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>crbegin</b> () const</td></tr> +<tr class="separator:a422c0671cb2c884865cb09f09141fc1f"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a0f25c70b8f279c53a93141a91dff5d1e"><td class="memItemLeft" align="right" valign="top"><a id="a0f25c70b8f279c53a93141a91dff5d1e"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>crend</b> () const</td></tr> +<tr class="separator:a0f25c70b8f279c53a93141a91dff5d1e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa754e17cb08c36fb8442784c6bc442da"><td class="memItemLeft" align="right" valign="top"><a id="aa754e17cb08c36fb8442784c6bc442da"></a> const uint8_t * </td><td class="memItemRight" valign="bottom"><b>Data</b> () const</td></tr> <tr class="separator:aa754e17cb08c36fb8442784c6bc442da"><td class="memSeparator" colspan="2"> </td></tr> @@ -138,6 +156,9 @@ T * </td><td class="memItemRight" valign="bottom"><b>data</b> ()</td></tr> <tr class="memitem:a9fcfb2e218f49d6d66a8b4a22aa58755"><td class="memItemLeft" align="right" valign="top"><a id="a9fcfb2e218f49d6d66a8b4a22aa58755"></a> <a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> () const</td></tr> <tr class="separator:a9fcfb2e218f49d6d66a8b4a22aa58755"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a1761e25f7960e8b71a9a393b5d538d57"><td class="memItemLeft" align="right" valign="top"><a id="a1761e25f7960e8b71a9a393b5d538d57"></a> + </td><td class="memItemRight" valign="bottom"><b>FLATBUFFERS_ATTRIBUTE</b> (deprecated("use size() instead")) uoffset_t Length() const</td></tr> +<tr class="separator:a1761e25f7960e8b71a9a393b5d538d57"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0c322798bd0cebd2d20b0b0f92de2f9b"><td class="memItemLeft" align="right" valign="top"><a id="a0c322798bd0cebd2d20b0b0f92de2f9b"></a> return_type </td><td class="memItemRight" valign="bottom"><b>Get</b> (uoffset_t i) const</td></tr> <tr class="separator:a0c322798bd0cebd2d20b0b0f92de2f9b"><td class="memSeparator" colspan="2"> </td></tr> @@ -158,9 +179,6 @@ mutable_return_type </td><td class="memItemRight" valign="bottom"><b>GetMut <tr class="memitem:a1dc52eb3974e0484a5421752589d436b"><td class="memItemLeft" align="right" valign="top"><a id="a1dc52eb3974e0484a5421752589d436b"></a> const void * </td><td class="memItemRight" valign="bottom"><b>GetStructFromOffset</b> (size_t o) const</td></tr> <tr class="separator:a1dc52eb3974e0484a5421752589d436b"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7ad86e7c749fd750a4e506439a358b06"><td class="memItemLeft" align="right" valign="top"><a id="a7ad86e7c749fd750a4e506439a358b06"></a> -uoffset_t </td><td class="memItemRight" valign="bottom"><b>Length</b> () const</td></tr> -<tr class="separator:a7ad86e7c749fd750a4e506439a358b06"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:abf919e27aa3e9b60ac30386972c94e65"><td class="memTemplParams" colspan="2"><a id="abf919e27aa3e9b60ac30386972c94e65"></a> template<typename K > </td></tr> <tr class="memitem:abf919e27aa3e9b60ac30386972c94e65"><td class="memTemplItemLeft" align="right" valign="top">return_type </td><td class="memTemplItemRight" valign="bottom"><b>LookupByKey</b> (K key) const</td></tr> @@ -174,6 +192,18 @@ void </td><td class="memItemRight" valign="bottom"><b>MutateOffset</b> (uof <tr class="memitem:ac3ac8d3a0c31f1c822d8f2d37e8099cc"><td class="memItemLeft" align="right" valign="top"><a id="ac3ac8d3a0c31f1c822d8f2d37e8099cc"></a> return_type </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uoffset_t i) const</td></tr> <tr class="separator:ac3ac8d3a0c31f1c822d8f2d37e8099cc"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a87adb1d483cc7b57aa1a792271ecef6d"><td class="memItemLeft" align="right" valign="top"><a id="a87adb1d483cc7b57aa1a792271ecef6d"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rbegin</b> ()</td></tr> +<tr class="separator:a87adb1d483cc7b57aa1a792271ecef6d"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a1e75de0fd258865cf18c504fc8ed1a86"><td class="memItemLeft" align="right" valign="top"><a id="a1e75de0fd258865cf18c504fc8ed1a86"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rbegin</b> () const</td></tr> +<tr class="separator:a1e75de0fd258865cf18c504fc8ed1a86"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a921bd6ee4b999b1c9ec9abc339c377b2"><td class="memItemLeft" align="right" valign="top"><a id="a921bd6ee4b999b1c9ec9abc339c377b2"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rend</b> ()</td></tr> +<tr class="separator:a921bd6ee4b999b1c9ec9abc339c377b2"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5d61bd0fd7d9017b1d62c45416666669"><td class="memItemLeft" align="right" valign="top"><a id="a5d61bd0fd7d9017b1d62c45416666669"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rend</b> () const</td></tr> +<tr class="separator:a5d61bd0fd7d9017b1d62c45416666669"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a602e093850b2984a95581edc0b47b2f3"><td class="memItemLeft" align="right" valign="top"><a id="a602e093850b2984a95581edc0b47b2f3"></a> uoffset_t </td><td class="memItemRight" valign="bottom"><b>size</b> () const</td></tr> <tr class="separator:a602e093850b2984a95581edc0b47b2f3"><td class="memSeparator" colspan="2"> </td></tr> diff --git a/classflatbuffers_1_1_vector.js b/classflatbuffers_1_1_vector.js index 927333c2..62b62798 100644 --- a/classflatbuffers_1_1_vector.js +++ b/classflatbuffers_1_1_vector.js @@ -1,29 +1,39 @@ var classflatbuffers_1_1_vector = [ [ "const_iterator", "classflatbuffers_1_1_vector.html#a66212ee5146550ed418a358a8b756dc6", null ], + [ "const_reverse_iterator", "classflatbuffers_1_1_vector.html#aff94a022cb6a11c6704e6a624f2c285a", null ], [ "iterator", "classflatbuffers_1_1_vector.html#a0eeca1798d12e29e1003e6f831668986", null ], [ "mutable_return_type", "classflatbuffers_1_1_vector.html#a7703f4b1cbb1f99087b48cd58abb740e", null ], [ "return_type", "classflatbuffers_1_1_vector.html#a28dab085738663f5c866cf6570bb6289", null ], + [ "reverse_iterator", "classflatbuffers_1_1_vector.html#aebe9837cb57e88212975ec5187f37c55", null ], [ "Vector", "classflatbuffers_1_1_vector.html#ab51b30f24f9841203b4364af38d424b8", null ], [ "begin", "classflatbuffers_1_1_vector.html#ac1ab40cdffad6cd50c222fe42c51437b", null ], [ "begin", "classflatbuffers_1_1_vector.html#ac4633f563a5a52980ff0b56fa683a4de", null ], + [ "cbegin", "classflatbuffers_1_1_vector.html#aa690e1a3a5fb68942b508952801b6209", null ], + [ "cend", "classflatbuffers_1_1_vector.html#af85a734b2feb15c6279784b5b81f009b", null ], + [ "crbegin", "classflatbuffers_1_1_vector.html#a422c0671cb2c884865cb09f09141fc1f", null ], + [ "crend", "classflatbuffers_1_1_vector.html#a0f25c70b8f279c53a93141a91dff5d1e", null ], [ "Data", "classflatbuffers_1_1_vector.html#aa754e17cb08c36fb8442784c6bc442da", null ], [ "Data", "classflatbuffers_1_1_vector.html#a0ab8113b331fb069dbaa0a108f6077e1", null ], [ "data", "classflatbuffers_1_1_vector.html#ae8e4163ff0781720c5ddb3a6f625d435", null ], [ "data", "classflatbuffers_1_1_vector.html#a874b185e7dec18bb24b1f0ee42afb7cb", null ], [ "end", "classflatbuffers_1_1_vector.html#a53e9c0cb1d27e4bd355034dbd43f0127", null ], [ "end", "classflatbuffers_1_1_vector.html#a9fcfb2e218f49d6d66a8b4a22aa58755", null ], + [ "FLATBUFFERS_ATTRIBUTE", "classflatbuffers_1_1_vector.html#a1761e25f7960e8b71a9a393b5d538d57", null ], [ "Get", "classflatbuffers_1_1_vector.html#a0c322798bd0cebd2d20b0b0f92de2f9b", null ], [ "GetAs", "classflatbuffers_1_1_vector.html#a36bbc83839910913cb0dd0699b1cccf7", null ], [ "GetAsString", "classflatbuffers_1_1_vector.html#a161e5fb2aa923fbf2ce210ceea785942", null ], [ "GetEnum", "classflatbuffers_1_1_vector.html#a22b4449883dc8e24e87cde27839294c4", null ], [ "GetMutableObject", "classflatbuffers_1_1_vector.html#ad806c60362e99576ec5706aef30c2a67", null ], [ "GetStructFromOffset", "classflatbuffers_1_1_vector.html#a1dc52eb3974e0484a5421752589d436b", null ], - [ "Length", "classflatbuffers_1_1_vector.html#a7ad86e7c749fd750a4e506439a358b06", null ], [ "LookupByKey", "classflatbuffers_1_1_vector.html#abf919e27aa3e9b60ac30386972c94e65", null ], [ "Mutate", "classflatbuffers_1_1_vector.html#a8342962f2f9d5e872c90abdeaea8d24e", null ], [ "MutateOffset", "classflatbuffers_1_1_vector.html#a29803cd584a620bf076a69b6e97ecf5c", null ], [ "operator[]", "classflatbuffers_1_1_vector.html#ac3ac8d3a0c31f1c822d8f2d37e8099cc", null ], + [ "rbegin", "classflatbuffers_1_1_vector.html#a87adb1d483cc7b57aa1a792271ecef6d", null ], + [ "rbegin", "classflatbuffers_1_1_vector.html#a1e75de0fd258865cf18c504fc8ed1a86", null ], + [ "rend", "classflatbuffers_1_1_vector.html#a921bd6ee4b999b1c9ec9abc339c377b2", null ], + [ "rend", "classflatbuffers_1_1_vector.html#a5d61bd0fd7d9017b1d62c45416666669", null ], [ "size", "classflatbuffers_1_1_vector.html#a602e093850b2984a95581edc0b47b2f3", null ], [ "length_", "classflatbuffers_1_1_vector.html#a62170e531ab5fcef8b4c717c0e84553d", null ] ]; \ No newline at end of file diff --git a/classflatbuffers_1_1vector__downward-members.html b/classflatbuffers_1_1vector__downward-members.html index e103b97b..f48fb325 100644 --- a/classflatbuffers_1_1vector__downward-members.html +++ b/classflatbuffers_1_1vector__downward-members.html @@ -122,7 +122,7 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1vector__downward.h <tr bgcolor="#f0f0f0"><td class="entry"><b>swap</b>(vector_downward &other) (defined in <a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>swap_allocator</b>(vector_downward &other) (defined in <a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>vector_downward</b>(size_t initial_size, Allocator *allocator, bool own_allocator, size_t buffer_minalign) (defined in <a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>vector_downward</b>(vector_downward &&other) (defined in <a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>vector_downward</b>(vector_downward &&other) vector_downward(vector_downward &other) (defined in <a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>~vector_downward</b>() (defined in <a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> </table></div><!-- contents --> </div><!-- doc-content --> diff --git a/classflatbuffers_1_1vector__downward.html b/classflatbuffers_1_1vector__downward.html index d774a9f5..12ff9809 100644 --- a/classflatbuffers_1_1vector__downward.html +++ b/classflatbuffers_1_1vector__downward.html @@ -183,9 +183,9 @@ void </td><td class="memItemRight" valign="bottom"><b>swap_allocator</b> (< <tr class="memitem:a91d7ec62e1b729276605355d12f3456c"><td class="memItemLeft" align="right" valign="top"><a id="a91d7ec62e1b729276605355d12f3456c"></a>  </td><td class="memItemRight" valign="bottom"><b>vector_downward</b> (size_t initial_size, <a class="el" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, bool own_allocator, size_t buffer_minalign)</td></tr> <tr class="separator:a91d7ec62e1b729276605355d12f3456c"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a45e25d90a4bd4e1f11ff0abb49015538"><td class="memItemLeft" align="right" valign="top"><a id="a45e25d90a4bd4e1f11ff0abb49015538"></a> - </td><td class="memItemRight" valign="bottom"><b>vector_downward</b> (<a class="el" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &&other)</td></tr> -<tr class="separator:a45e25d90a4bd4e1f11ff0abb49015538"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5f8dff5b7288b40bdd193667f6246cad"><td class="memItemLeft" align="right" valign="top"><a id="a5f8dff5b7288b40bdd193667f6246cad"></a> + </td><td class="memItemRight" valign="bottom"><b>vector_downward</b> (<a class="el" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &&other) <a class="el" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<a class="el" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &other)</td></tr> +<tr class="separator:a5f8dff5b7288b40bdd193667f6246cad"><td class="memSeparator" colspan="2"> </td></tr> </table> <hr/>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="flatbuffers_8h_source.html">flatbuffers.h</a></li> diff --git a/classflatbuffers_1_1vector__downward.js b/classflatbuffers_1_1vector__downward.js index c258ffa0..c14ec8d2 100644 --- a/classflatbuffers_1_1vector__downward.js +++ b/classflatbuffers_1_1vector__downward.js @@ -1,7 +1,7 @@ var classflatbuffers_1_1vector__downward = [ [ "vector_downward", "classflatbuffers_1_1vector__downward.html#a91d7ec62e1b729276605355d12f3456c", null ], - [ "vector_downward", "classflatbuffers_1_1vector__downward.html#a45e25d90a4bd4e1f11ff0abb49015538", null ], + [ "vector_downward", "classflatbuffers_1_1vector__downward.html#a5f8dff5b7288b40bdd193667f6246cad", null ], [ "~vector_downward", "classflatbuffers_1_1vector__downward.html#ad99943ac8c66263f3587e18539e9f176", null ], [ "capacity", "classflatbuffers_1_1vector__downward.html#aec8308b5b544432362049b94c3802800", null ], [ "clear", "classflatbuffers_1_1vector__downward.html#ae701e8e1cc468d1a3141e0fa22dc3a70", null ], diff --git a/flatbuffers_8h_source.html b/flatbuffers_8h_source.html index 95a0497a..74a22d3b 100644 --- a/flatbuffers_8h_source.html +++ b/flatbuffers_8h_source.html @@ -91,67 +91,68 @@ $(document).ready(function(){initNavTree('flatbuffers_8h_source.html','');}); <div class="title">flatbuffers.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2014 Google Inc. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef FLATBUFFERS_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define FLATBUFFERS_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "flatbuffers/base.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceflatbuffers.html">flatbuffers</a> {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// Wrapper for uoffset_t to allow safe template specialization.</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// Value is allowed to be 0 to indicate a null object (see e.g. AddOffset).</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_offset.html"> 25</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_offset.html">Offset</a> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  uoffset_t o;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset</a>() : o(0) {}</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset</a>(uoffset_t _o) : o(_o) {}</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<void></a> Union()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<void></a>(o); }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordtype">bool</span> IsNull()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !o; }</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> };</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> EndianCheck() {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordtype">int</span> endiantest = 1;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="comment">// If this fails, see FLATBUFFERS_LITTLEENDIAN above.</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  FLATBUFFERS_ASSERT(*reinterpret_cast<char *>(&endiantest) ==</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  FLATBUFFERS_LITTLEENDIAN);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  (void)endiantest;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> FLATBUFFERS_CONSTEXPR <span class="keywordtype">size_t</span> AlignOf() {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"> #ifdef _MSC_VER</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span> __alignof(T);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"> #ifndef alignof</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">return</span> __alignof__(T);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> <span class="keyword">alignof</span>(T);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// When we read serialized data from memory, in the case of most scalars,</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// we want to just read T, but in the case of Offset, we want to actually</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// perform the indirection and return a pointer.</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// The template specialization below does just that.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// It is wrapped in a struct since function templates can't overload on the</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// return type like this.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// The typedef is for the convenience of callers of this function</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// (avoiding the need for a trailing return decltype)</span></div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_indirect_helper.html"> 63</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">typedef</span> T return_type;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">typedef</span> T mutable_return_type;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> element_stride = <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">static</span> return_type Read(<span class="keyword">const</span> uint8_t *p, uoffset_t i) {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> EndianScalar((reinterpret_cast<const T *>(p))[i]);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> };</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html"> 71</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset</a><T>> {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">typedef</span> T *mutable_return_type;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> element_stride = <span class="keyword">sizeof</span>(uoffset_t);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">static</span> return_type Read(<span class="keyword">const</span> uint8_t *p, uoffset_t i) {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  p += i * <span class="keyword">sizeof</span>(uoffset_t);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>return_type<span class="keyword">></span>(p + ReadScalar<uoffset_t>(p));</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> };</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html"> 80</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a><const T *> {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">typedef</span> T *mutable_return_type;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> element_stride = <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">static</span> return_type Read(<span class="keyword">const</span> uint8_t *p, uoffset_t i) {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>T *<span class="keyword">></span>(p + i * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> };</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// An STL compatible iterator implementation for Vector below, effectively</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// calling Get() for every element.</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_vector_iterator.html"> 91</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> IT> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">typedef</span> IT value_type;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">typedef</span> ptrdiff_t difference_type;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">typedef</span> IT *pointer;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">typedef</span> IT &reference;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(<span class="keyword">const</span> uint8_t *data, uoffset_t i)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  : data_(data + <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a> * i) {}</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other) : data_(other.data_) {}</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator=(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other) {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  data_ = other.data_;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator=(<a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &&other) {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  data_ = other.data_;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> data_ == other.data_;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordtype">bool</span> operator<(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">return</span> data_ < other.data_;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">return</span> data_ != other.data_;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  difference_type operator-(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> (data_ - other.data_) / <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  IT operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(data_, 0); }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  IT operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(data_, 0); }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator++() {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  data_ += <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator++(<span class="keywordtype">int</span>) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> temp(data_, 0);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  data_ += <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> temp;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator+(<span class="keyword">const</span> uoffset_t &offset)<span class="keyword"> const </span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(data_ + offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>,</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  0);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator+=(<span class="keyword">const</span> uoffset_t &offset) {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  data_ += offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator--() {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  data_ -= <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator--(<span class="keywordtype">int</span>) {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> temp(data_, 0);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  data_ -= <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">return</span> temp;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator-(<span class="keyword">const</span> uoffset_t &offset) {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(data_ - offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  0);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator-=(<span class="keyword">const</span> uoffset_t &offset) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  data_ -= offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">const</span> uint8_t *data_;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> };</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_string.html">String</a>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// This is used as a helper type for accessing vectors.</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// Vector::data() assumes the vector elements start after the length field.</span></div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_vector.html"> 182</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_vector.html">Vector</a> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">typedef</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator<T, typename IndirectHelper<T>::mutable_return_type</a>></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">iterator</a>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">typedef</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator<T, typename IndirectHelper<T>::return_type</a>></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// Deprecated: use size(). Here for backwards compatibility.</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  uoffset_t Length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size(); }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> IndirectHelper<T>::return_type return_type;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> IndirectHelper<T>::mutable_return_type mutable_return_type;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  return_type Get(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(Data(), i);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  return_type operator[](uoffset_t i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Get(i); }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="comment">// If this is a Vector of enums, T will be its storage type, not the enum</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="comment">// type. This function makes it convenient to retrieve value with enum</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// type E.</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">template</span><<span class="keyword">typename</span> E> E GetEnum(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>E<span class="keyword">></span>(Get(i));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">// If this a vector of unions, this does the cast for you. There's no check</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// to make sure this is the right type!</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">const</span> U *GetAs(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>U *<span class="keyword">></span>(Get(i));</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="comment">// If this a vector of unions, this does the cast for you. There's no check</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="comment">// to make sure this is actually a string!</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *GetAsString(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> *<span class="keyword">></span>(Get(i));</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">const</span> <span class="keywordtype">void</span> *GetStructFromOffset(<span class="keywordtype">size_t</span> o)<span class="keyword"> const </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">void</span> *<span class="keyword">></span>(Data() + o);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  }</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  iterator begin() { <span class="keywordflow">return</span> iterator(Data(), 0); }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), 0); }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  iterator end() { <span class="keywordflow">return</span> iterator(Data(), size()); }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), size()); }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="comment">// Change elements if you have a non-const pointer to this object.</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// Scalars only. See reflection.h, and the documentation.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordtype">void</span> Mutate(uoffset_t i, <span class="keyword">const</span> T &val) {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  WriteScalar(data() + i, val);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="comment">// Change an element of a vector of tables (or strings).</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// "val" points to the new table/string, as you can obtain from</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// e.g. reflection::AddFlatBuffer().</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordtype">void</span> MutateOffset(uoffset_t i, <span class="keyword">const</span> uint8_t *val) {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  static_assert(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(uoffset_t), <span class="stringliteral">"Unrelated types"</span>);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  WriteScalar(data() + i,</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  static_cast<uoffset_t>(val - (Data() + i * <span class="keyword">sizeof</span>(uoffset_t))));</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">// Get a mutable pointer to tables/strings inside this vector.</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  mutable_return_type GetMutableObject(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span>mutable_return_type<span class="keyword">></span>(<a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(Data(), i));</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="comment">// The raw data in little endian format. Use with care.</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(&length_ + 1);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  uint8_t *Data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>uint8_t *<span class="keyword">></span>(&length_ + 1); }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="comment">// Similarly, but typed, much like std::vector::data</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> T *data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>T *<span class="keyword">></span>(Data()); }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  T *data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(Data()); }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">template</span><<span class="keyword">typename</span> K> return_type LookupByKey(K key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordtype">void</span> *search_result = std::bsearch(</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  &key, Data(), size(), <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>, KeyCompare<K>);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (!search_result) {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>; <span class="comment">// Key not found.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">const</span> uint8_t *element = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(search_result);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(element, 0);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="comment">// This class is only used to access pre-existing data. Don't ever</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// try to construct these manually.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a>();</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  uoffset_t length_;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// This class is a pointer. Copying will therefore create an invalid object.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">// Private and unimplemented copy constructor.</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a> &);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keyword">template</span><<span class="keyword">typename</span> K> <span class="keyword">static</span> <span class="keywordtype">int</span> KeyCompare(<span class="keyword">const</span> <span class="keywordtype">void</span> *ap, <span class="keyword">const</span> <span class="keywordtype">void</span> *bp) {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">const</span> K *key = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>K *<span class="keyword">></span>(ap);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">const</span> uint8_t *data = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(bp);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">auto</span> table = <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(data, 0);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="comment">// std::bsearch compares with the operands transposed, so we negate the</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="comment">// result here.</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">return</span> -table->KeyCompareWithValue(*key);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> };</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">// Represent a vector much like the template above, but in this case we</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">// don't know what the element types are (used with reflection.h).</span></div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_vector_of_any.html"> 305</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a> {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(&length_ + 1);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  uint8_t *Data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>uint8_t *<span class="keyword">></span>(&length_ + 1); }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a>();</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  uoffset_t length_;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a> &);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> };</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor">#ifndef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a>> *VectorCast(<a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<U></a>> *ptr) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  static_assert(std::is_base_of<T, U>::value, <span class="stringliteral">"Unrelated types"</span>);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a><span class="keyword">></span> *>(ptr);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a>> *VectorCast(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<U></a>> *ptr) {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  static_assert(std::is_base_of<T, U>::value, <span class="stringliteral">"Unrelated types"</span>);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a><span class="keyword">></span> *>(ptr);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// Convenient helper function to get the length of any vector, regardless</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment">// of whether it is null or not (the field is not set).</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> VectorLength(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<T></a> *v) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">return</span> v ? v->Length() : 0;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_string.html"> 343</a></span> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> : <span class="keyword">public</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><char> {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *c_str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">></span>(Data()); }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  std::string str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::string(c_str(), Length()); }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"> #ifdef FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  flatbuffers::string_view string_view()<span class="keyword"> const </span>{</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> flatbuffers::string_view(c_str(), Length());</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"> #endif // FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordtype">bool</span> operator<(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> &o)<span class="keyword"> const </span>{</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">return</span> strcmp(c_str(), o.c_str()) < 0;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> };</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment">// Convenience function to get std::string from a String returning an empty</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">// string on null pointer.</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="keyword">static</span> <span class="keyword">inline</span> std::string GetString(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> * str) {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> str ? str->str() : <span class="stringliteral">""</span>;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment">// Convenience function to get char* from a String returning an empty string on</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment">// null pointer.</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetCstring(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> * str) {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> str ? str->c_str() : <span class="stringliteral">""</span>;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment">// Allocator interface. This is flatbuffers-specific and meant only for</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment">// `vector_downward` usage.</span></div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_allocator.html"> 374</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keyword">virtual</span> ~<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a>() {}</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// Allocate `size` bytes of memory.</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keyword">virtual</span> uint8_t *allocate(<span class="keywordtype">size_t</span> size) = 0;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="comment">// Deallocate `size` bytes of memory at `p` allocated by this allocator.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate(uint8_t *p, <span class="keywordtype">size_t</span> size) = 0;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="comment">// Reallocate `new_size` bytes of memory, replacing the old region of size</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">// `old_size` at `p`. In contrast to a normal realloc, this grows downwards,</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="comment">// and is intended specifcally for `vector_downward` use.</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="comment">// `in_use_back` and `in_use_front` indicate how much of `old_size` is</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="comment">// actually in use at each end, and needs to be copied.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">virtual</span> uint8_t *reallocate_downward(uint8_t *old_p, <span class="keywordtype">size_t</span> old_size,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordtype">size_t</span> new_size, <span class="keywordtype">size_t</span> in_use_back,</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordtype">size_t</span> in_use_front) {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  FLATBUFFERS_ASSERT(new_size > old_size); <span class="comment">// vector_downward only grows</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  uint8_t *new_p = allocate(new_size);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  memcpy_downward(old_p, old_size, new_p, new_size, in_use_back,</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  in_use_front);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  deallocate(old_p, old_size);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">return</span> new_p;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="comment">// Called by `reallocate_downward` to copy memory from `old_p` of `old_size`</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="comment">// to `new_p` of `new_size`. Only memory of size `in_use_front` and</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="comment">// `in_use_back` will be copied from the front and back of the old memory</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="comment">// allocation.</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordtype">void</span> memcpy_downward(uint8_t *old_p, <span class="keywordtype">size_t</span> old_size,</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  uint8_t *new_p, <span class="keywordtype">size_t</span> new_size,</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordtype">size_t</span> in_use_back, <span class="keywordtype">size_t</span> in_use_front) {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  memcpy(new_p + new_size - in_use_back, old_p + old_size - in_use_back,</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  in_use_back);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  memcpy(new_p, old_p, in_use_front);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> };</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">// DefaultAllocator uses new/delete to allocate memory regions</span></div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_default_allocator.html"> 415</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a> : <span class="keyword">public</span> <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  uint8_t *allocate(<span class="keywordtype">size_t</span> size) FLATBUFFERS_OVERRIDE {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> uint8_t[size];</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordtype">void</span> deallocate(uint8_t *p, <span class="keywordtype">size_t</span>) FLATBUFFERS_OVERRIDE {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keyword">delete</span>[] p;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> };</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment">// These functions allow for a null allocator to mean use the default allocator,</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// as used by DetachedBuffer and vector_downward below.</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment">// This is to avoid having a statically or dynamically allocated default</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment">// allocator, or having to move it between the classes that may own it.</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="keyword">inline</span> uint8_t *Allocate(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, <span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">return</span> allocator ? allocator->allocate(size)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  : <a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a>().allocate(size);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> Deallocate(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, uint8_t *p, <span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (allocator) allocator->deallocate(p, size);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">else</span> <a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a>().deallocate(p, size);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="keyword">inline</span> uint8_t *ReallocateDownward(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, uint8_t *old_p,</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordtype">size_t</span> old_size, <span class="keywordtype">size_t</span> new_size,</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordtype">size_t</span> in_use_back, <span class="keywordtype">size_t</span> in_use_front) {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">return</span> allocator</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  ? allocator->reallocate_downward(old_p, old_size, new_size,</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  in_use_back, in_use_front)</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  : <a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a>().reallocate_downward(old_p, old_size, new_size,</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  in_use_back, in_use_front);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// DetachedBuffer is a finished flatbuffer memory region, detached from its</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">// builder. The original memory region and allocator are also stored so that</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment">// the DetachedBuffer can manage the memory lifetime.</span></div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_detached_buffer.html"> 453</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>()</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  : allocator_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  own_allocator_(<span class="keyword">false</span>),</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  buf_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  reserved_(0),</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  cur_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  size_(0) {}</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, <span class="keywordtype">bool</span> own_allocator, uint8_t *buf,</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordtype">size_t</span> reserved, uint8_t *cur, <span class="keywordtype">size_t</span> sz)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  : allocator_(allocator),</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  own_allocator_(own_allocator),</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  buf_(buf),</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  reserved_(reserved),</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  cur_(cur),</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  size_(sz) {}</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>(<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &&other)</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  : allocator_(other.allocator_),</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  own_allocator_(other.own_allocator_),</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  buf_(other.buf_),</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  reserved_(other.reserved_),</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  cur_(other.cur_),</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  size_(other.size_) {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  other.reset();</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &operator=(<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &&other) {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  destroy();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  allocator_ = other.allocator_;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  own_allocator_ = other.own_allocator_;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  buf_ = other.buf_;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  reserved_ = other.reserved_;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  cur_ = other.cur_;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  size_ = other.size_;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  other.reset();</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  ~<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>() { destroy(); }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keyword">const</span> uint8_t *data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> cur_; }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  uint8_t *data() { <span class="keywordflow">return</span> cur_; }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordtype">size_t</span> size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> #if 0 // disabled for now due to the ordering of classes in this header</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordtype">bool</span> Verify()<span class="keyword"> const </span>{</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  Verifier verifier(data(), size());</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">return</span> verifier.Verify<T>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">const</span> T* GetRoot()<span class="keyword"> const </span>{</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">return</span> flatbuffers::GetRoot<T>(data());</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  T* GetRoot() {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">return</span> flatbuffers::GetRoot<T>(data());</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// These may change access mode, leave these at end of public section</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  FLATBUFFERS_DELETE_FUNC(<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &other))</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  FLATBUFFERS_DELETE_FUNC(</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &<span class="keyword">operator</span>=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &other))</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator_;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordtype">bool</span> own_allocator_;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  uint8_t *buf_;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordtype">size_t</span> reserved_;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  uint8_t *cur_;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordtype">size_t</span> size_;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy() {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">if</span> (buf_) Deallocate(allocator_, buf_, reserved_);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span> (own_allocator_ && allocator_) { <span class="keyword">delete</span> allocator_; }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  reset();</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> reset() {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  allocator_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  reserved_ = 0;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  cur_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  size_ = 0;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> };</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment">// This is a minimal replication of std::vector<uint8_t> functionality,</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// except growing from higher to lower addresses. i.e push_back() inserts data</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// in the lowest address in the vector.</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="comment">// Since this vector leaves the lower part unused, we support a "scratch-pad"</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">// that can be stored there for temporary data, to share the allocated space.</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment">// Essentially, this supports 2 std::vectors in a single buffer.</span></div><div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1vector__downward.html"> 560</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keyword">explicit</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<span class="keywordtype">size_t</span> initial_size,</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator,</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordtype">bool</span> own_allocator,</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordtype">size_t</span> buffer_minalign)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  : allocator_(allocator),</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  own_allocator_(own_allocator),</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  initial_size_(initial_size),</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  buffer_minalign_(buffer_minalign),</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  reserved_(0),</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  buf_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  cur_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  scratch_(<span class="keyword">nullptr</span>) {}</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &&other)</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  : allocator_(other.allocator_),</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  own_allocator_(other.own_allocator_),</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  initial_size_(other.initial_size_),</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  buffer_minalign_(other.buffer_minalign_),</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  reserved_(other.reserved_),</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  buf_(other.buf_),</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  cur_(other.cur_),</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  scratch_(other.scratch_) {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="comment">// No change in other.allocator_</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="comment">// No change in other.initial_size_</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="comment">// No change in other.buffer_minalign_</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  other.own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  other.reserved_ = 0;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  other.buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  other.cur_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  other.scratch_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &operator=(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &&other) {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="comment">// Move construct a temporary and swap idiom</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> temp(std::move(other));</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  swap(temp);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  ~<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>() {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  clear_buffer();</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  clear_allocator();</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordtype">void</span> reset() {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  clear_buffer();</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  clear();</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordtype">void</span> clear() {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">if</span> (buf_) {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  cur_ = buf_ + reserved_;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  reserved_ = 0;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  cur_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  clear_scratch();</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordtype">void</span> clear_scratch() {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  scratch_ = buf_;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordtype">void</span> clear_allocator() {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">if</span> (own_allocator_ && allocator_) { <span class="keyword">delete</span> allocator_; }</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  allocator_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordtype">void</span> clear_buffer() {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keywordflow">if</span> (buf_) Deallocate(allocator_, buf_, reserved_);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="comment">// Relinquish the pointer to the caller.</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  uint8_t *release_raw(<span class="keywordtype">size_t</span> &allocated_bytes, <span class="keywordtype">size_t</span> &offset) {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">auto</span> *buf = buf_;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  allocated_bytes = reserved_;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  offset = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(cur_ - buf_);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="comment">// release_raw only relinquishes the buffer ownership.</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="comment">// Does not deallocate or reset the allocator. Destructor will do that.</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  clear();</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">return</span> buf;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="comment">// Relinquish the pointer to the caller.</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> release() {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="comment">// allocator ownership (if any) is transferred to DetachedBuffer.</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> fb(allocator_, own_allocator_, buf_, reserved_, cur_,</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  size());</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">if</span> (own_allocator_) {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  allocator_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  clear();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">return</span> fb;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  }</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordtype">size_t</span> ensure_space(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  FLATBUFFERS_ASSERT(cur_ >= scratch_ && scratch_ >= buf_);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">if</span> (len > static_cast<size_t>(cur_ - scratch_)) { reallocate(len); }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="comment">// Beyond this, signed offsets may not have enough range:</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="comment">// (FlatBuffers > 2GB not supported).</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  FLATBUFFERS_ASSERT(size() < FLATBUFFERS_MAX_BUFFER_SIZE);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="keywordflow">return</span> len;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keyword">inline</span> uint8_t *make_space(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordtype">size_t</span> space = ensure_space(len);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  cur_ -= space;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">return</span> cur_;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="comment">// Returns nullptr if using the DefaultAllocator.</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *get_custom_allocator() { <span class="keywordflow">return</span> allocator_; }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  uoffset_t size()<span class="keyword"> const </span>{</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uoffset_t<span class="keyword">></span>(reserved_ - (cur_ - buf_));</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  uoffset_t scratch_size()<span class="keyword"> const </span>{</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uoffset_t<span class="keyword">></span>(scratch_ - buf_);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordtype">size_t</span> capacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> reserved_; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  uint8_t *data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  FLATBUFFERS_ASSERT(cur_);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">return</span> cur_;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  uint8_t *scratch_data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  FLATBUFFERS_ASSERT(buf_);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">return</span> buf_;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  uint8_t *scratch_end()<span class="keyword"> const </span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  FLATBUFFERS_ASSERT(scratch_);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">return</span> scratch_;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  }</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  uint8_t *data_at(<span class="keywordtype">size_t</span> offset)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_ + reserved_ - offset; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordtype">void</span> push(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> num) {</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  memcpy(make_space(num), bytes, num);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="comment">// Specialized version of push() that avoids memcpy call for small data.</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> push_small(<span class="keyword">const</span> T &little_endian_t) {</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  make_space(<span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  *<span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(cur_) = little_endian_t;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> scratch_push_small(<span class="keyword">const</span> T &t) {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  ensure_space(<span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  *<span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(scratch_) = t;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  scratch_ += <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="comment">// fill() is most frequently called with small byte counts (<= 4),</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="comment">// which is why we're using loops rather than calling memset.</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordtype">void</span> fill(<span class="keywordtype">size_t</span> zero_pad_bytes) {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  make_space(zero_pad_bytes);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < zero_pad_bytes; i++) cur_[i] = 0;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="comment">// Version for when we know the size is larger.</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordtype">void</span> fill_big(<span class="keywordtype">size_t</span> zero_pad_bytes) {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  memset(make_space(zero_pad_bytes), 0, zero_pad_bytes);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  }</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordtype">void</span> pop(<span class="keywordtype">size_t</span> bytes_to_remove) { cur_ += bytes_to_remove; }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordtype">void</span> scratch_pop(<span class="keywordtype">size_t</span> bytes_to_remove) { scratch_ -= bytes_to_remove; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordtype">void</span> swap(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &other) {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  swap(allocator_, other.allocator_);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  swap(own_allocator_, other.own_allocator_);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  swap(initial_size_, other.initial_size_);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  swap(buffer_minalign_, other.buffer_minalign_);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  swap(reserved_, other.reserved_);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  swap(buf_, other.buf_);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  swap(cur_, other.cur_);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  swap(scratch_, other.scratch_);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  }</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordtype">void</span> swap_allocator(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &other) {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  swap(allocator_, other.allocator_);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  swap(own_allocator_, other.own_allocator_);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="comment">// You shouldn't really be copying instances of this class.</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  FLATBUFFERS_DELETE_FUNC(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &))</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  FLATBUFFERS_DELETE_FUNC(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &<span class="keyword">operator</span>=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &))</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span> </div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator_;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordtype">bool</span> own_allocator_;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordtype">size_t</span> initial_size_;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordtype">size_t</span> buffer_minalign_;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordtype">size_t</span> reserved_;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  uint8_t *buf_;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  uint8_t *cur_; <span class="comment">// Points at location between empty (below) and used (above).</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  uint8_t *scratch_; <span class="comment">// Points to the end of the scratchpad in use.</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span> </div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordtype">void</span> reallocate(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="keyword">auto</span> old_reserved = reserved_;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keyword">auto</span> old_size = size();</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keyword">auto</span> old_scratch_size = scratch_size();</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  reserved_ += (std::max)(len,</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  old_reserved ? old_reserved / 2 : initial_size_);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  reserved_ = (reserved_ + buffer_minalign_ - 1) & ~(buffer_minalign_ - 1);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">if</span> (buf_) {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  buf_ = ReallocateDownward(allocator_, buf_, old_reserved, reserved_,</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  old_size, old_scratch_size);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  buf_ = Allocate(allocator_, reserved_);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  }</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  cur_ = buf_ + reserved_ - old_size;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  scratch_ = buf_ + old_scratch_size;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span> };</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span> </div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="comment">// Converts a Field ID to a virtual table offset.</span></div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="keyword">inline</span> voffset_t FieldIndexToOffset(voffset_t field_id) {</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="comment">// Should correspond to what EndTable() below builds up.</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> fixed_fields = 2; <span class="comment">// Vtable size and Object Size.</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>voffset_t<span class="keyword">></span>((field_id + fixed_fields) * <span class="keyword">sizeof</span>(voffset_t));</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> </div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Alloc></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="keyword">const</span> T *data(<span class="keyword">const</span> std::vector<T, Alloc> &v) {</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">return</span> v.empty() ? nullptr : &v.front();</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Alloc> T *data(std::vector<T, Alloc> &v) {</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">return</span> v.empty() ? nullptr : &v.front();</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span> }</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="comment"></span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="comment">/// @endcond</span></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> <span class="comment">/// @addtogroup flatbuffers_cpp_api</span></div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="comment">/// @{</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="comment">/// @class FlatBufferBuilder</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="comment">/// @brief Helper class to hold data needed in creation of a FlatBuffer.</span></div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <span class="comment">/// To serialize data, you typically call one of the `Create*()` functions in</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <span class="comment">/// the generated code, which in turn call a sequence of `StartTable`/</span></div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span> <span class="comment">/// `PushElement`/`AddElement`/`EndTable`, or the builtin `CreateString`/</span></div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="comment">/// `CreateVector` functions. Do this is depth-first order to build up a tree to</span></div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="comment">/// the root. `Finish()` wraps up the buffer ready for transport.</span></div><div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html"> 815</a></span> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="comment"> /// @brief Default constructor for FlatBufferBuilder.</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="comment"> /// @param[in] initial_size The initial size of the buffer, in bytes. Defaults</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> <span class="comment"> /// to `1024`.</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span> <span class="comment"> /// @param[in] allocator An `Allocator` to use. If null will use</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="comment"> /// `DefaultAllocator`.</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="comment"> /// @param[in] own_allocator Whether the builder/vector should own the</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="comment"> /// allocator. Defaults to / `false`.</span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="comment"> /// @param[in] buffer_minalign Force the buffer to be aligned to the given</span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="comment"> /// minimum alignment upon reallocation. Only needed if you intend to store</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment"> /// types with custom alignment AND you wish to read the buffer in-place</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="comment"> /// directly after creation.</span></div><div class="line"><a name="l00828"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c"> 828</a></span> <span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">FlatBufferBuilder</a>(<span class="keywordtype">size_t</span> initial_size = 1024,</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator = <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordtype">bool</span> own_allocator = <span class="keyword">false</span>,</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordtype">size_t</span> buffer_minalign =</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  AlignOf<largest_scalar_t>())</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  : buf_(initial_size, allocator, own_allocator, buffer_minalign),</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  num_field_loc(0),</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  max_voffset_(0),</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  nested(false),</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  finished(false),</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  minalign_(1),</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  force_defaults_(false),</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  dedup_vtables_(true),</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  string_pool(nullptr) {</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  EndianCheck();</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="comment"></span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="comment"> /// @brief Move constructor for FlatBufferBuilder.</span></div><div class="line"><a name="l00846"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56"> 846</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56">FlatBufferBuilder</a>(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &&other)</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  : buf_(1024, nullptr, false, AlignOf<largest_scalar_t>()),</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  num_field_loc(0),</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  max_voffset_(0),</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  nested(false),</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  finished(false),</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  minalign_(1),</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  force_defaults_(false),</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  dedup_vtables_(true),</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  string_pool(nullptr) {</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  EndianCheck();</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="comment">// Default construct and swap idiom.</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="comment">// Lack of delegating constructors in vs2010 makes it more verbose than needed.</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  Swap(other);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="comment"></span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment"> /// @brief Move assignment operator for FlatBufferBuilder.</span></div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38"> 863</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38">operator=</a>(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &&other) {</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// Move construct a temporary and swap idiom</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> temp(std::move(other));</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  Swap(temp);</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  }</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordtype">void</span> Swap(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other) {</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  buf_.swap(other.buf_);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  swap(num_field_loc, other.num_field_loc);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  swap(max_voffset_, other.max_voffset_);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  swap(nested, other.nested);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  swap(finished, other.finished);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  swap(minalign_, other.minalign_);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  swap(force_defaults_, other.force_defaults_);</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  swap(dedup_vtables_, other.dedup_vtables_);</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  swap(string_pool, other.string_pool);</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span> </div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  ~<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>() {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordflow">if</span> (string_pool) <span class="keyword">delete</span> string_pool;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordtype">void</span> Reset() {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  Clear(); <span class="comment">// clear builder state</span></div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  buf_.reset(); <span class="comment">// deallocate buffer</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  }</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment"></span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="comment"> /// @brief Reset all the state in this FlatBufferBuilder so it can be reused</span></div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="comment"> /// to construct another buffer.</span></div><div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412"> 894</a></span> <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">Clear</a>() {</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  ClearOffsets();</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  buf_.clear();</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  nested = <span class="keyword">false</span>;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  finished = <span class="keyword">false</span>;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  minalign_ = 1;</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keywordflow">if</span> (string_pool) string_pool->clear();</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  }</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment"></span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment"> /// @brief The current size of the serialized buffer, counting from the end.</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment"> /// @return Returns an `uoffset_t` with the current size of the buffer.</span></div><div class="line"><a name="l00905"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f"> 905</a></span> <span class="comment"></span> uoffset_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">GetSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.size(); }</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment"></span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment"> /// @brief Get the serialized buffer (after you call `Finish()`).</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment"> /// @return Returns an `uint8_t` pointer to the FlatBuffer data inside the</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment"> /// buffer.</span></div><div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83"> 910</a></span> <span class="comment"></span> uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83">GetBufferPointer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  Finished();</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">return</span> buf_.data();</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="comment"></span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment"> /// @brief Get a pointer to an unfinished buffer.</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment"> /// @return Returns a `uint8_t` pointer to the unfinished buffer.</span></div><div class="line"><a name="l00917"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41"> 917</a></span> <span class="comment"></span> uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">GetCurrentBufferPointer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.data(); }</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment"></span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment"> /// @brief Get the released pointer to the serialized buffer.</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment"> /// @warning Do NOT attempt to use this FlatBufferBuilder afterwards!</span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="comment"> /// @return A `FlatBuffer` that owns the buffer and its allocator and</span></div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="comment"> /// behaves similar to a `unique_ptr` with a deleter.</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment"> /// Deprecated: use Release() instead</span></div><div class="line"><a name="l00924"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8"> 924</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8">ReleaseBufferPointer</a>() {</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  Finished();</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keywordflow">return</span> buf_.release();</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  }</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="comment"></span></div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="comment"> /// @brief Get the released DetachedBuffer.</span></div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="comment"> /// @return A `DetachedBuffer` that owns the buffer and its allocator.</span></div><div class="line"><a name="l00931"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45"> 931</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">Release</a>() {</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  Finished();</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keywordflow">return</span> buf_.release();</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  }</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="comment"></span></div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment"> /// @brief Get the released pointer to the serialized buffer.</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment"> /// @param The size of the memory block containing</span></div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment"> /// the serialized `FlatBuffer`.</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment"> /// @param The offset from the released pointer where the finished</span></div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment"> /// `FlatBuffer` starts.</span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment"> /// @return A raw pointer to the start of the memory block containing</span></div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment"> /// the serialized `FlatBuffer`.</span></div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment"> /// @remark If the allocator is owned, it gets deleted during this call.</span></div><div class="line"><a name="l00944"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416"> 944</a></span> <span class="comment"></span> uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">ReleaseRaw</a>(<span class="keywordtype">size_t</span> &size, <span class="keywordtype">size_t</span> &offset) {</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  Finished();</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">return</span> buf_.release_raw(size, offset);</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  }</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment"></span></div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment"> /// @brief get the minimum alignment this buffer needs to be accessed</span></div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment"> /// properly. This is only known once all elements have been written (after</span></div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment"> /// you call Finish()). You can use this information if you need to embed</span></div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment"> /// a FlatBuffer in some other buffer, such that you can later read it</span></div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment"> /// without first having to copy it into its own buffer.</span></div><div class="line"><a name="l00954"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b"> 954</a></span> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b">GetBufferMinAlignment</a>() {</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  Finished();</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <span class="keywordflow">return</span> minalign_;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment"></span></div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="comment"></span> <span class="keywordtype">void</span> Finished()<span class="keyword"> const </span>{</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="comment">// If you get this assert, you're attempting to get access a buffer</span></div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="comment">// which hasn't been finished yet. Be sure to call</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="comment">// FlatBufferBuilder::Finish with your root table.</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="comment">// If you really need to access an unfinished buffer, call</span></div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="comment">// GetCurrentBufferPointer instead.</span></div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  FLATBUFFERS_ASSERT(finished);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  }<span class="comment"></span></div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="comment"> /// @brief In order to save space, fields that are set to their default value</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="comment"> /// don't get serialized into the buffer.</span></div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="comment"> /// @param[in] bool fd When set to `true`, always serializes default values that are set.</span></div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="comment"> /// Optional fields which are not set explicitly, will still not be serialized.</span></div><div class="line"><a name="l00974"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a"> 974</a></span> <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">ForceDefaults</a>(<span class="keywordtype">bool</span> fd) { force_defaults_ = fd; }</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment"></span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment"> /// @brief By default vtables are deduped in order to save space.</span></div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="comment"> /// @param[in] bool dedup When set to `true`, dedup vtables.</span></div><div class="line"><a name="l00978"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961"> 978</a></span> <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">DedupVtables</a>(<span class="keywordtype">bool</span> dedup) { dedup_vtables_ = dedup; }</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment"></span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="comment"></span> <span class="keywordtype">void</span> Pad(<span class="keywordtype">size_t</span> num_bytes) { buf_.fill(num_bytes); }</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span> </div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="keywordtype">void</span> TrackMinAlign(<span class="keywordtype">size_t</span> elem_size) {</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="keywordflow">if</span> (elem_size > minalign_) minalign_ = elem_size;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  }</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span> </div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keywordtype">void</span> Align(<span class="keywordtype">size_t</span> elem_size) {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  TrackMinAlign(elem_size);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  buf_.fill(PaddingBytes(buf_.size(), elem_size));</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  }</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span> </div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="keywordtype">void</span> PushFlatBuffer(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  PushBytes(bytes, size);</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  finished = <span class="keyword">true</span>;</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  }</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span> </div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordtype">void</span> PushBytes(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> size) { buf_.push(bytes, size); }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordtype">void</span> PopBytes(<span class="keywordtype">size_t</span> amount) { buf_.pop(amount); }</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AssertScalarT() {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="comment">// The code assumes power of 2 sizes and endian-swap-ability.</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  static_assert(flatbuffers::is_scalar<T>::value, <span class="stringliteral">"T must be a scalar type"</span>);</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  }</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="comment">// Write a single aligned scalar to the buffer</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> uoffset_t PushElement(T element) {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  AssertScalarT<T>();</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  T litle_endian_element = EndianScalar(element);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  Align(<span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  buf_.push_small(litle_endian_element);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <span class="keywordflow">return</span> GetSize();</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> uoffset_t PushElement(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> off) {</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <span class="comment">// Special case for offsets: see ReferTo below.</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keywordflow">return</span> PushElement(ReferTo(off.o));</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="comment">// When writing fields, we track where they are, so we can create correct</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="comment">// vtables later.</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordtype">void</span> TrackField(voffset_t field, uoffset_t off) {</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a> fl = { off, field };</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  buf_.scratch_push_small(fl);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  num_field_loc++;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  max_voffset_ = (std::max)(max_voffset_, field);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  }</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="comment">// Like PushElement, but additionally tracks the field this represents.</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AddElement(voffset_t field, T e, T def) {</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="comment">// We don't serialize values equal to the default.</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">if</span> (e == def && !force_defaults_) <span class="keywordflow">return</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keyword">auto</span> off = PushElement(e);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  TrackField(field, off);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  }</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AddOffset(voffset_t field, <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> off) {</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="keywordflow">if</span> (off.IsNull()) <span class="keywordflow">return</span>; <span class="comment">// Don't store.</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> </div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AddStruct(voffset_t field, <span class="keyword">const</span> T *structptr) {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">if</span> (!structptr) <span class="keywordflow">return</span>; <span class="comment">// Default, don't store.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  Align(AlignOf<T>());</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  buf_.push_small(*structptr);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  TrackField(field, GetSize());</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="keywordtype">void</span> AddStructOffset(voffset_t field, uoffset_t off) {</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  TrackField(field, off);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  }</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="comment">// Offsets initially are relative to the end of the buffer (downwards).</span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="comment">// This function converts them to be relative to the current location</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="comment">// in the buffer (when stored here), pointing upwards.</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  uoffset_t ReferTo(uoffset_t off) {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="comment">// Align to ensure GetSize() below is correct.</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  Align(<span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="comment">// Offset must refer to something already in buffer.</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  FLATBUFFERS_ASSERT(off && off <= GetSize());</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="keywordflow">return</span> GetSize() - off + <span class="keyword">static_cast<</span>uoffset_t<span class="keyword">></span>(<span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  }</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="keywordtype">void</span> NotNested() {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// If you hit this, you're trying to construct a Table/Vector/String</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="comment">// during the construction of its parent table (between the MyTableBuilder</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <span class="comment">// and table.Finish().</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="comment">// Move the creation of these sub-objects to above the MyTableBuilder to</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="comment">// not get this assert.</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="comment">// Ignoring this assert may appear to work in simple cases, but the reason</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="comment">// it is here is that storing objects in-line may cause vtable offsets</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// to not fit anymore. It also leads to vtable duplication.</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  FLATBUFFERS_ASSERT(!nested);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="comment">// If you hit this, fields were added outside the scope of a table.</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  FLATBUFFERS_ASSERT(!num_field_loc);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="comment">// From generated code (or from the parser), we call StartTable/EndTable</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="comment">// with a sequence of AddElement calls in between.</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  uoffset_t StartTable() {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  NotNested();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  nested = <span class="keyword">true</span>;</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">return</span> GetSize();</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="comment">// This finishes one serialized object by generating the vtable if it's a</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <span class="comment">// table, comparing it against existing vtables, and writing the</span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="comment">// resulting vtable offset.</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  uoffset_t EndTable(uoffset_t start) {</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="comment">// If you get this assert, a corresponding StartTable wasn't called.</span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  FLATBUFFERS_ASSERT(nested);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="comment">// Write the vtable offset, which is the start of any Table.</span></div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="comment">// We fill it's value later.</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keyword">auto</span> vtableoffsetloc = PushElement<soffset_t>(0);</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <span class="comment">// Write a vtable, which consists entirely of voffset_t elements.</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="comment">// It starts with the number of offsets, followed by a type id, followed</span></div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="comment">// by the offsets themselves. In reverse:</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="comment">// Include space for the last offset and ensure empty tables have a</span></div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="comment">// minimum size.</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  max_voffset_ =</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  (std::max)(static_cast<voffset_t>(max_voffset_ + <span class="keyword">sizeof</span>(voffset_t)),</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  FieldIndexToOffset(0));</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  buf_.fill_big(max_voffset_);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keyword">auto</span> table_object_size = vtableoffsetloc - start;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="comment">// Vtable use 16bit offsets.</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  FLATBUFFERS_ASSERT(table_object_size < 0x10000);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  WriteScalar<voffset_t>(buf_.data() + <span class="keyword">sizeof</span>(voffset_t),</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  static_cast<voffset_t>(table_object_size));</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  WriteScalar<voffset_t>(buf_.data(), max_voffset_);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="comment">// Write the offsets into the table</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = buf_.scratch_end() - num_field_loc * <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a>);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  it < buf_.scratch_end(); it += <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a>)) {</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <span class="keyword">auto</span> field_location = <span class="keyword">reinterpret_cast<</span><a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a> *<span class="keyword">></span>(it);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <span class="keyword">auto</span> pos = <span class="keyword">static_cast<</span>voffset_t<span class="keyword">></span>(vtableoffsetloc - field_location->off);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="comment">// If this asserts, it means you've set a field twice.</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  FLATBUFFERS_ASSERT(</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  !ReadScalar<voffset_t>(buf_.data() + field_location->id));</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  WriteScalar<voffset_t>(buf_.data() + field_location->id, pos);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  ClearOffsets();</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keyword">auto</span> vt1 = <span class="keyword">reinterpret_cast<</span>voffset_t *<span class="keyword">></span>(buf_.data());</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keyword">auto</span> vt1_size = ReadScalar<voffset_t>(vt1);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keyword">auto</span> vt_use = GetSize();</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="comment">// See if we already have generated a vtable with this exact same</span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="comment">// layout before. If so, make it point to the old one, remove this one.</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="keywordflow">if</span> (dedup_vtables_) {</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = buf_.scratch_data(); it < buf_.scratch_end();</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  it += <span class="keyword">sizeof</span>(uoffset_t)) {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keyword">auto</span> vt_offset_ptr = <span class="keyword">reinterpret_cast<</span>uoffset_t *<span class="keyword">></span>(it);</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <span class="keyword">auto</span> vt2 = <span class="keyword">reinterpret_cast<</span>voffset_t *<span class="keyword">></span>(buf_.data_at(*vt_offset_ptr));</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keyword">auto</span> vt2_size = *vt2;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">if</span> (vt1_size != vt2_size || memcmp(vt2, vt1, vt1_size)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  vt_use = *vt_offset_ptr;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  buf_.pop(GetSize() - vtableoffsetloc);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  }</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  }</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="comment">// If this is a new vtable, remember it.</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordflow">if</span> (vt_use == GetSize()) { buf_.scratch_push_small(vt_use); }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="comment">// Fill the vtable offset we created above.</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="comment">// The offset points from the beginning of the object to where the</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="comment">// vtable is stored.</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <span class="comment">// Offsets default direction is downward in memory for future format</span></div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="comment">// flexibility (storing all vtables at the start of the file).</span></div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  WriteScalar(buf_.data_at(vtableoffsetloc),</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="keyword">static_cast<</span>soffset_t<span class="keyword">></span>(vt_use) -</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  static_cast<soffset_t>(vtableoffsetloc));</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  nested = <span class="keyword">false</span>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">return</span> vtableoffsetloc;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="comment">// DEPRECATED: call the version above instead.</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  uoffset_t EndTable(uoffset_t start, voffset_t <span class="comment">/*numfields*/</span>) {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <span class="keywordflow">return</span> EndTable(start);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  }</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="comment">// This checks a required field has been set in a given table that has</span></div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="comment">// just been constructed.</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> Required(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> table, voffset_t field);</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> </div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  uoffset_t StartStruct(<span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  Align(alignment);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <span class="keywordflow">return</span> GetSize();</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  }</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  uoffset_t EndStruct() { <span class="keywordflow">return</span> GetSize(); }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keywordtype">void</span> ClearOffsets() {</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  buf_.scratch_pop(num_field_loc * <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a>));</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  num_field_loc = 0;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  max_voffset_ = 0;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  }</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="comment">// Aligns such that when "len" bytes are written, an object can be written</span></div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="comment">// after it with "alignment" without padding.</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordtype">void</span> PreAlign(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  TrackMinAlign(alignment);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  buf_.fill(PaddingBytes(GetSize() + len, alignment));</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> PreAlign(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  AssertScalarT<T>();</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  PreAlign(len, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  }<span class="comment"></span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="comment"> /// @param[in] str A const char pointer to the data to be stored as a string.</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="comment"> /// @param[in] len The number of bytes that should be stored from `str`.</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe"> 1191</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  NotNested();</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  PreAlign<uoffset_t>(len + 1); <span class="comment">// Always 0-terminated.</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  buf_.fill(1);</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  PushBytes(reinterpret_cast<const uint8_t *>(str), len);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  PushElement(static_cast<uoffset_t>(len));</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a>(GetSize());</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  }</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment"></span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="comment"> /// @brief Store a string in the buffer, which is null-terminated.</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="comment"> /// @param[in] str A const char pointer to a C-string to add to the buffer.</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01203"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5"> 1203</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">CreateString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str) {</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  <span class="keywordflow">return</span> CreateString(str, strlen(str));</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  }</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment"></span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment"> /// @brief Store a string in the buffer, which is null-terminated.</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment"> /// @param[in] str A char pointer to a C-string to add to the buffer.</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01210"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154"> 1210</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154">CreateString</a>(<span class="keywordtype">char</span> *str) {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordflow">return</span> CreateString(str, strlen(str));</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment"></span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment"> /// @param[in] str A const reference to a std::string to store in the buffer.</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01217"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f"> 1217</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">CreateString</a>(<span class="keyword">const</span> std::string &str) {</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <span class="keywordflow">return</span> CreateString(str.c_str(), str.length());</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  }</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> </div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="preprocessor"> #ifdef FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment"></span><span class="comment"> /// @param[in] str A const string_view to copy in to the buffer.</span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment"></span><span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01226"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6"> 1226</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6">CreateString</a>(flatbuffers::string_view str) {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordflow">return</span> CreateString(str.data(), str.size());</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="preprocessor"> #endif // FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment"></span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment"> /// @param[in] str A const pointer to a `String` struct to add to the buffer.</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts</span></div><div class="line"><a name="l01235"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506"> 1235</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">CreateString</a>(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *str) {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <span class="keywordflow">return</span> str ? CreateString(str->c_str(), str->Length()) : 0;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  }</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment"></span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="comment"> /// @param[in] str A const reference to a std::string like type with support</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment"> /// of T::c_str() and T::length() to store in the buffer.</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01243"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685"> 1243</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685">CreateString</a>(<span class="keyword">const</span> T &str) {</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  <span class="keywordflow">return</span> CreateString(str.c_str(), str.length());</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  }</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment"></span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment"> /// @param[in] str A const char pointer to the data to be stored as a string.</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment"> /// @param[in] len The number of bytes that should be stored from `str`.</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01253"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1"> 1253</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">if</span> (!string_pool)</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  string_pool = <span class="keyword">new</span> StringOffsetMap(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a>(buf_));</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  <span class="keyword">auto</span> size_before_string = buf_.size();</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <span class="comment">// Must first serialize the string, since the set is all offsets into</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <span class="comment">// buffer.</span></div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <span class="keyword">auto</span> off = CreateString(str, len);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="keyword">auto</span> it = string_pool->find(off);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <span class="comment">// If it exists we reuse existing serialized data!</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <span class="keywordflow">if</span> (it != string_pool->end()) {</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="comment">// We can remove the string we serialized.</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  buf_.pop(buf_.size() - size_before_string);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="keywordflow">return</span> *it;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  }</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="comment">// Record this string for future use.</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  string_pool->insert(off);</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <span class="keywordflow">return</span> off;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment"></span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="comment"> /// @brief Store a string in the buffer, which null-terminated.</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="comment"> /// @param[in] str A const char pointer to a C-string to add to the buffer.</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01277"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7"> 1277</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">CreateSharedString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str) {</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <span class="keywordflow">return</span> CreateSharedString(str, strlen(str));</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  }</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="comment"></span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="comment"> /// @param[in] str A const reference to a std::string to store in the buffer.</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01286"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9"> 1286</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">CreateSharedString</a>(<span class="keyword">const</span> std::string &str) {</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  <span class="keywordflow">return</span> CreateSharedString(str.c_str(), str.length());</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  }</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="comment"></span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment"> /// @param[in] str A const pointer to a `String` struct to add to the buffer.</span></div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts</span></div><div class="line"><a name="l01295"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3"> 1295</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">CreateSharedString</a>(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *str) {</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keywordflow">return</span> CreateSharedString(str->c_str(), str->Length());</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  }</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"></span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment"></span> uoffset_t EndVector(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  FLATBUFFERS_ASSERT(nested); <span class="comment">// Hit if no corresponding StartVector.</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  nested = <span class="keyword">false</span>;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keywordflow">return</span> PushElement(static_cast<uoffset_t>(len));</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  }</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> </div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  <span class="keywordtype">void</span> StartVector(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize) {</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  NotNested();</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  nested = <span class="keyword">true</span>;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  PreAlign<uoffset_t>(len * elemsize);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  PreAlign(len * elemsize, elemsize); <span class="comment">// Just in case elemsize > uoffset_t.</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  }</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <span class="comment">// Call this right before StartVector/CreateVector if you want to force the</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="comment">// alignment to be something different than what the element size would</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <span class="comment">// normally dictate.</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <span class="comment">// This is useful when storing a nested_flatbuffer in a vector of bytes,</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  <span class="comment">// or when storing SIMD floats, etc.</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="keywordtype">void</span> ForceVectorAlignment(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize, <span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  PreAlign(len * elemsize, alignment);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  }</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="comment">// Similar to ForceVectorAlignment but for String fields.</span></div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <span class="keywordtype">void</span> ForceStringAlignment(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  PreAlign((len + 1) * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>), alignment);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  }</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment"></span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment"> /// @brief Serialize an array into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment"> /// @tparam T The data type of the array elements.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment"> /// @param[in] v A pointer to the array of type `T` to serialize into the</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01336"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3"> 1336</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">CreateVector</a>(<span class="keyword">const</span> T *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="comment">// If this assert hits, you're specifying a template argument that is</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <span class="comment">// causing the wrong overload to be selected, remove it.</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  AssertScalarT<T>();</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  StartVector(len, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="preprocessor"> #if FLATBUFFERS_LITTLEENDIAN</span></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  PushBytes(reinterpret_cast<const uint8_t *>(v), len * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 1) {</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  PushBytes(reinterpret_cast<const uint8_t *>(v), len);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i > 0; ) {</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  PushElement(v[--i]);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  }</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>>(EndVector(len));</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> </div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>> CreateVector(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  StartVector(len, <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a>));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i > 0;) { PushElement(v[--i]); }</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>>(EndVector(len));</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment"></span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="comment"> /// @brief Serialize a `std::vector` into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment"> /// @tparam T The data type of the `std::vector` elements.</span></div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment"> /// @param v A const reference to the `std::vector` to serialize into the</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01370"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207"> 1370</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">CreateVector</a>(<span class="keyword">const</span> std::vector<T> &v) {</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <span class="keywordflow">return</span> CreateVector(data(v), v.size());</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  }</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <span class="comment">// vector<bool> may be implemented using a bit-set, so we can't access it as</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <span class="comment">// an array. Instead, read elements manually.</span></div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="comment">// Background: https://isocpp.org/blog/2012/11/on-vectorbool</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<uint8_t></a>> CreateVector(<span class="keyword">const</span> std::vector<bool> &v) {</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  StartVector(v.size(), <span class="keyword">sizeof</span>(uint8_t));</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = v.size(); i > 0;) {</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  PushElement(static_cast<uint8_t>(v[--i]));</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  }</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<uint8_t></a>>(EndVector(v.size()));</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  }</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="preprocessor"> #ifndef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment"> /// @brief Serialize values returned by a function into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment"></span><span class="comment"> /// This is a convenience function that takes care of iteration for you.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment"></span><span class="comment"> /// @tparam T The data type of the `std::vector` elements.</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment"></span><span class="comment"> /// @param f A function that takes the current iteration 0..vector_size-1 and</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="comment"></span><span class="comment"> /// returns any type that you can construct a FlatBuffers vector out of.</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment"></span><span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="comment"></span><span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01394"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b"> 1394</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b">CreateVector</a>(<span class="keywordtype">size_t</span> vector_size,</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  <span class="keyword">const</span> std::function<T (<span class="keywordtype">size_t</span> i)> &f) {</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  std::vector<T> elems(vector_size);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) elems[i] = f(i);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <span class="keywordflow">return</span> CreateVector(elems);</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  }</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment"></span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="comment"> /// @brief Serialize values returned by a function into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment"> /// This is a convenience function that takes care of iteration for you.</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment"> /// @tparam T The data type of the `std::vector` elements.</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment"> /// @param f A function that takes the current iteration 0..vector_size-1,</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment"> /// and the state parameter returning any type that you can construct a</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="comment"> /// FlatBuffers vector out of.</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="comment"> /// @param state State passed to f.</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> F, <span class="keyword">typename</span> S></div><div class="line"><a name="l01413"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a"> 1413</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a">CreateVector</a>(<span class="keywordtype">size_t</span> vector_size, F f, S *state) {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  std::vector<T> elems(vector_size);</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) elems[i] = f(i, state);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  <span class="keywordflow">return</span> CreateVector(elems);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  }</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="comment"></span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="comment"> /// @brief Serialize a `std::vector<std::string>` into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="comment"> /// This is a convenience function for a common case.</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="comment"> /// @param v A const reference to the `std::vector` to serialize into the</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01425"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6"> 1425</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<String></a>>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6">CreateVectorOfStrings</a>(</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <span class="keyword">const</span> std::vector<std::string> &v) {</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  std::vector<Offset<String>> offsets(v.size());</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < v.size(); i++) offsets[i] = CreateString(v[i]);</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  <span class="keywordflow">return</span> CreateVector(offsets);</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  }</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment"></span></div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment"> /// @param[in] v A pointer to the array of type `T` to serialize into the</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01440"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7"> 1440</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">CreateVectorOfStructs</a>(<span class="keyword">const</span> T *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  StartVector(len * <span class="keyword">sizeof</span>(T) / AlignOf<T>(), AlignOf<T>());</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>  PushBytes(reinterpret_cast<const uint8_t *>(v), <span class="keyword">sizeof</span>(T) * len);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>>(EndVector(len));</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="comment"></span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment"> /// @brief Serialize an array of native structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> <span class="comment"> /// @tparam S The data type of the native struct array elements.</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="comment"> /// @param[in] v A pointer to the array of type `S` to serialize into the</span></div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01455"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53"> 1455</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53">CreateVectorOfNativeStructs</a>(<span class="keyword">const</span> S *v,</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  <span class="keyword">extern</span> T Pack(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keyword">typedef</span> T (*Pack_t)(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  std::vector<T> vv(len);</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  std::transform(v, v + len, vv.begin(), *(Pack_t)&Pack);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>  <span class="keywordflow">return</span> CreateVectorOfStructs<T>(vv.data(), vv.size());</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  }</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="preprocessor"> #ifndef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment"></span><span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="comment"></span><span class="comment"> /// @param[in] f A function that takes the current iteration 0..vector_size-1</span></div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="comment"></span><span class="comment"> /// and a pointer to the struct that must be filled.</span></div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment"></span><span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment"></span><span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="comment"></span><span class="comment"> /// This is mostly useful when flatbuffers are generated with mutation</span></div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment"></span><span class="comment"> /// accessors.</span></div><div class="line"><a name="l01474"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72"> 1474</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72">CreateVectorOfStructs</a>(</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  <span class="keywordtype">size_t</span> vector_size, <span class="keyword">const</span> std::function<<span class="keywordtype">void</span>(<span class="keywordtype">size_t</span> i, T *)> &filler) {</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  T* structs = StartVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) {</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  filler(i, structs);</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  structs++;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  }</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  <span class="keywordflow">return</span> EndVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment"></span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment"> /// @param[in] f A function that takes the current iteration 0..vector_size-1,</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment"> /// a pointer to the struct that must be filled and the state argument.</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="comment"> /// @param[in] state Arbitrary state to pass to f.</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="comment"> /// This is mostly useful when flatbuffers are generated with mutation</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment"> /// accessors.</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> F, <span class="keyword">typename</span> S></div><div class="line"><a name="l01496"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5"> 1496</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5">CreateVectorOfStructs</a>(<span class="keywordtype">size_t</span> vector_size, F f,</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>  S *state) {</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>  T *structs = StartVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) {</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>  f(i, structs, state);</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>  structs++;</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>  }</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>  <span class="keywordflow">return</span> EndVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>  }</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> <span class="comment"></span></div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="comment"> /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Alloc></div><div class="line"><a name="l01513"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42"> 1513</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42">CreateVectorOfStructs</a>(</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  <span class="keyword">const</span> std::vector<T, Alloc> &v) {</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>  <span class="keywordflow">return</span> CreateVectorOfStructs(data(v), v.size());</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  }</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="comment"></span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="comment"> /// @brief Serialize a `std::vector` of native structs into a FlatBuffer</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="comment"> /// `vector`.</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment"> /// @tparam S The data type of the `std::vector` native struct elements.</span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95"> 1527</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95">CreateVectorOfNativeStructs</a>(</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>  <span class="keyword">const</span> std::vector<S> &v) {</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  <span class="keywordflow">return</span> CreateVectorOfNativeStructs<T, S>(data(v), v.size());</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="comment"></span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>StructKeyComparator {</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> T &a, <span class="keyword">const</span> T &b)<span class="keyword"> const </span>{</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>  <span class="keywordflow">return</span> a.KeyCompareLessThan(&b);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  }</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> </div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  StructKeyComparator &operator=(<span class="keyword">const</span> StructKeyComparator &);</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  };<span class="comment"></span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment"> /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="comment"> /// in sorted order.</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01551"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15"> 1551</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15">CreateVectorOfSortedStructs</a>(std::vector<T> *v) {</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>  <span class="keywordflow">return</span> CreateVectorOfSortedStructs(data(*v), v->size());</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>  }</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="comment"></span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="comment"> /// @brief Serialize a `std::vector` of native structs into a FlatBuffer</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="comment"> /// `vector` in sorted order.</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="comment"> /// @tparam S The data type of the `std::vector` native struct elements.</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01564"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54"> 1564</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54">CreateVectorOfSortedNativeStructs</a>(</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  std::vector<S> *v) {</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  <span class="keywordflow">return</span> CreateVectorOfSortedNativeStructs<T, S>(data(*v), v->size());</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  }</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="comment"></span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector` in sorted</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment"> /// order.</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="comment"> /// @param[in] v A pointer to the array of type `T` to serialize into the</span></div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01578"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf"> 1578</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf">CreateVectorOfSortedStructs</a>(T *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  std::sort(v, v + len, StructKeyComparator<T>());</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <span class="keywordflow">return</span> CreateVectorOfStructs(v, len);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  }</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="comment"></span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> <span class="comment"> /// @brief Serialize an array of native structs into a FlatBuffer `vector` in</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="comment"> /// sorted order.</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> <span class="comment"> /// @tparam S The data type of the native struct array elements.</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> <span class="comment"> /// @param[in] v A pointer to the array of type `S` to serialize into the</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01593"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf"> 1593</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf">CreateVectorOfSortedNativeStructs</a>(S *v,</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  <span class="keyword">extern</span> T Pack(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  <span class="keyword">typedef</span> T (*Pack_t)(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  std::vector<T> vv(len);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  std::transform(v, v + len, vv.begin(), *(Pack_t)&Pack);</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  <span class="keywordflow">return</span> CreateVectorOfSortedStructs<T>(vv, len);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="comment"></span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>TableKeyComparator {</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  TableKeyComparator(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &buf) : buf_(buf) {}</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> &a, <span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> &b)<span class="keyword"> const </span>{</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  <span class="keyword">auto</span> table_a = <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(buf_.data_at(a.o));</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  <span class="keyword">auto</span> table_b = <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(buf_.data_at(b.o));</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <span class="keywordflow">return</span> table_a->KeyCompareLessThan(table_b);</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &buf_;</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  TableKeyComparator &operator=(<span class="keyword">const</span> TableKeyComparator &);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  };<span class="comment"></span></div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="comment"> /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment"> /// in sorted order.</span></div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="comment"> /// @tparam T The data type that the offset refers to.</span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="comment"> /// @param[in] v An array of type `Offset<T>` that contains the `table`</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment"> /// offsets to store in the buffer in sorted order.</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="comment"> /// @param[in] len The number of elements to store in the `vector`.</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01626"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6"> 1626</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">CreateVectorOfSortedTables</a>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> *v,</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>  std::sort(v, v + len, TableKeyComparator<T>(buf_));</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  <span class="keywordflow">return</span> CreateVector(v, len);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  }</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment"></span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="comment"> /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="comment"> /// in sorted order.</span></div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <span class="comment"> /// @tparam T The data type that the offset refers to.</span></div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="comment"> /// @param[in] v An array of type `Offset<T>` that contains the `table`</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="comment"> /// offsets to store in the buffer in sorted order.</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01640"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135"> 1640</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">CreateVectorOfSortedTables</a>(</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  std::vector<<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a>> *v) {</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  <span class="keywordflow">return</span> CreateVectorOfSortedTables(data(*v), v->size());</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="comment"></span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="comment"> /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="comment"> /// Write the data any time later to the returned buffer pointer `buf`.</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment"> /// @param[in] len The number of elements to store in the `vector`.</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="comment"> /// @param[in] elemsize The size of each element in the `vector`.</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="comment"> /// @param[out] buf A pointer to a `uint8_t` pointer that can be</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment"> /// written to at a later time to serialize the data into a `vector`</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment"> /// in the buffer.</span></div><div class="line"><a name="l01652"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c"> 1652</a></span> <span class="comment"></span> uoffset_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">CreateUninitializedVector</a>(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize,</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>  uint8_t **buf) {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>  NotNested();</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  StartVector(len, elemsize);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>  buf_.make_space(len * elemsize);</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>  <span class="keyword">auto</span> vec_start = GetSize();</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>  <span class="keyword">auto</span> vec_end = EndVector(len);</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  *buf = buf_.data_at(vec_start);</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>  <span class="keywordflow">return</span> vec_end;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  }</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="comment"></span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="comment"> /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="comment"> /// Write the data any time later to the returned buffer pointer `buf`.</span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="comment"> /// @tparam T The data type of the data that will be stored in the buffer</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment"> /// as a `vector`.</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="comment"> /// @param[in] len The number of elements to store in the `vector`.</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="comment"> /// @param[out] buf A pointer to a pointer of type `T` that can be</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment"> /// written to at a later time to serialize the data into a `vector`</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment"> /// in the buffer.</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01672"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50"> 1672</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">CreateUninitializedVector</a>(<span class="keywordtype">size_t</span> len, T **buf) {</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>  AssertScalarT<T>();</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>  <span class="keywordflow">return</span> CreateUninitializedVector(len, <span class="keyword">sizeof</span>(T),</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  reinterpret_cast<uint8_t **>(buf));</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>  }</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> </div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T*></a>> CreateUninitializedVectorOfStructs(<span class="keywordtype">size_t</span> len, T **buf) {</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>  <span class="keywordflow">return</span> CreateUninitializedVector(len, <span class="keyword">sizeof</span>(T),</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  reinterpret_cast<uint8_t **>(buf));</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>  }</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="comment"></span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment"> /// @brief Write a struct by itself, typically to be part of a union.</span></div><div class="line"><a name="l01685"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8"> 1685</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<const T *></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8">CreateStruct</a>(<span class="keyword">const</span> T &structobj) {</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  NotNested();</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  Align(AlignOf<T>());</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>  buf_.push_small(structobj);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<const T *></a>(GetSize());</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>  }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="comment"></span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="comment"> /// @brief The length of a FlatBuffer file header.</span></div><div class="line"><a name="l01693"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19"> 1693</a></span> <span class="comment"></span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kFileIdentifierLength = 4;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <span class="comment"></span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <span class="comment"> /// @brief Finish serializing a buffer by writing the root offset.</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="comment"> /// @param[in] file_identifier If a `file_identifier` is given, the buffer</span></div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="comment"> /// will be prefixed with a standard FlatBuffers file header.</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01699"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912"> 1699</a></span>  <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">Finish</a>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> root, <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier = <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>  Finish(root.o, file_identifier, <span class="keyword">false</span>);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="comment"></span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="comment"> /// @brief Finish a buffer with a 32 bit size field pre-fixed (size of the</span></div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> <span class="comment"> /// buffer following the size field). These buffers are NOT compatible</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment"> /// with standard buffers created by Finish, i.e. you can't call GetRoot</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="comment"> /// on them, you have to use GetSizePrefixedRoot instead.</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> <span class="comment"> /// All >32 bit quantities in this buffer will be aligned when the whole</span></div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="comment"> /// size pre-fixed buffer is aligned.</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="comment"> /// These kinds of buffers are useful for creating a stream of FlatBuffers.</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01711"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220"> 1711</a></span>  <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">FinishSizePrefixed</a>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> root,</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier = <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>  Finish(root.o, file_identifier, <span class="keyword">true</span>);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>  }</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> </div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>  <span class="comment">// You shouldn't really be copying instances of this class.</span></div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &);</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &operator=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> </div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  <span class="keywordtype">void</span> Finish(uoffset_t root, <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier, <span class="keywordtype">bool</span> size_prefix) {</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>  NotNested();</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  buf_.clear_scratch();</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>  <span class="comment">// This will cause the whole buffer to be aligned.</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>  PreAlign((size_prefix ? <span class="keyword">sizeof</span>(uoffset_t) : 0) + <span class="keyword">sizeof</span>(uoffset_t) +</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>  (file_identifier ? kFileIdentifierLength : 0),</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  minalign_);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>  <span class="keywordflow">if</span> (file_identifier) {</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>  FLATBUFFERS_ASSERT(strlen(file_identifier) == kFileIdentifierLength);</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>  PushBytes(reinterpret_cast<const uint8_t *>(file_identifier),</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  kFileIdentifierLength);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  }</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>  PushElement(ReferTo(root)); <span class="comment">// Location of root.</span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <span class="keywordflow">if</span> (size_prefix) { PushElement(GetSize()); }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>  finished = <span class="keyword">true</span>;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  }</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div><div class="line"><a name="l01738"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html"> 1738</a></span>  <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a> {</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>  uoffset_t off;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>  voffset_t id;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>  };</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> </div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> buf_;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> </div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>  <span class="comment">// Accumulating offsets of table members while it is being built.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  <span class="comment">// We store these in the scratch pad of buf_, after the vtable offsets.</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>  uoffset_t num_field_loc;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>  <span class="comment">// Track how much of the vtable is in use, so we can output the most compact</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>  <span class="comment">// possible vtable.</span></div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>  voffset_t max_voffset_;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> </div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>  <span class="comment">// Ensure objects are not nested.</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>  <span class="keywordtype">bool</span> nested;</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> </div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>  <span class="comment">// Ensure the buffer is finished before it is being accessed.</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>  <span class="keywordtype">bool</span> finished;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>  <span class="keywordtype">size_t</span> minalign_;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> </div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>  <span class="keywordtype">bool</span> force_defaults_; <span class="comment">// Serialize values equal to their defaults anyway.</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>  <span class="keywordtype">bool</span> dedup_vtables_;</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> </div><div class="line"><a name="l01764"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html"> 1764</a></span>  <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a> {</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>  <a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &buf) : buf_(&buf) {}</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>  <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> &a, <span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> &b)<span class="keyword"> const </span>{</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  <span class="keyword">auto</span> stra = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> *<span class="keyword">></span>(buf_->data_at(a.o));</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>  <span class="keyword">auto</span> strb = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> *<span class="keyword">></span>(buf_->data_at(b.o));</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>  <span class="keywordflow">return</span> strncmp(stra->c_str(), strb->c_str(),</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>  (std::min)(stra->size(), strb->size()) + 1) < 0;</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>  }</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>  <span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> *buf_;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>  };</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> </div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>  <span class="comment">// For use with CreateSharedString. Instantiated on first use only.</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>  <span class="keyword">typedef</span> std::set<Offset<String>, <a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a>> StringOffsetMap;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>  StringOffsetMap *string_pool;</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> </div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>  <span class="comment">// Allocates space for a vector of structures.</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>  <span class="comment">// Must be completed with EndVectorOfStructs().</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T *StartVectorOfStructs(<span class="keywordtype">size_t</span> vector_size) {</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>  StartVector(vector_size * <span class="keyword">sizeof</span>(T) / AlignOf<T>(), AlignOf<T>());</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(buf_.make_space(vector_size * <span class="keyword">sizeof</span>(T)));</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>  }</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> </div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>  <span class="comment">// End the vector of structues in the flatbuffers.</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>  <span class="comment">// Vector should have previously be started with StartVectorOfStructs().</span></div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> EndVectorOfStructs(<span class="keywordtype">size_t</span> vector_size) {</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>>(EndVector(vector_size));</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>  }</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> };<span class="comment"></span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="comment">/// @}</span></div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment"></span><span class="comment">// Helpers to get a typed pointer to the root object contained in the buffer.</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> T *GetMutableRoot(<span class="keywordtype">void</span> *buf) {</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>  EndianCheck();</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>  <span class="keyword">reinterpret_cast<</span>uint8_t *<span class="keyword">></span>(buf) +</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>  EndianScalar(*reinterpret_cast<uoffset_t *>(buf)));</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> }</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> </div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">const</span> T *GetRoot(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf) {</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>  <span class="keywordflow">return</span> GetMutableRoot<T>(<span class="keyword">const_cast<</span><span class="keywordtype">void</span> *<span class="keyword">></span>(buf));</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> }</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> </div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">const</span> T *GetSizePrefixedRoot(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf) {</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>  <span class="keywordflow">return</span> GetRoot<T>(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(buf) + <span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> }</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> <span class="comment"></span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment">/// Helpers to get a typed pointer to objects that are currently being built.</span></div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment">/// @warning Creating new objects will lead to reallocations and invalidates</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="comment">/// the pointer!</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment"></span><span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> T *GetMutableTemporaryPointer(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &fbb, <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> offset) {</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(fbb.<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">GetCurrentBufferPointer</a>() + fbb.<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">GetSize</a>() -</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>  offset.o);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> }</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="keyword">const</span> T *GetTemporaryPointer(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &fbb, <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> offset) {</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>  <span class="keywordflow">return</span> GetMutableTemporaryPointer<T>(fbb, offset);</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> }</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="comment"></span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="comment">/// @brief Get a pointer to the the file_identifier section of the buffer.</span></div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment">/// @return Returns a const char pointer to the start of the file_identifier</span></div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="comment">/// characters in the buffer. The returned char * has length</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="comment">/// 'flatbuffers::FlatBufferBuilder::kFileIdentifierLength'.</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment">/// This function is UNDEFINED for FlatBuffers whose schema does not include</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="comment">/// a file_identifier (likely points at padding or the start of a the root</span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="comment">/// vtable).</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *GetBufferIdentifier(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">bool</span> size_prefixed = <span class="keyword">false</span>) {</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">></span>(buf) +</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>  ((size_prefixed) ? 2 * <span class="keyword">sizeof</span>(uoffset_t) : <span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> </div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="comment">// Helper to see if the identifier in a buffer has the expected value.</span></div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> BufferHasIdentifier(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keyword">const</span> <span class="keywordtype">char</span> *identifier, <span class="keywordtype">bool</span> size_prefixed = <span class="keyword">false</span>) {</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>  <span class="keywordflow">return</span> strncmp(GetBufferIdentifier(buf, size_prefixed), identifier,</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">FlatBufferBuilder::kFileIdentifierLength</a>) == 0;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> }</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> </div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="comment">// Helper class to verify the integrity of a FlatBuffer</span></div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="keyword">class </span>Verifier FLATBUFFERS_FINAL_CLASS {</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>  Verifier(<span class="keyword">const</span> uint8_t *buf, <span class="keywordtype">size_t</span> buf_len, uoffset_t _max_depth = 64,</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>  uoffset_t _max_tables = 1000000)</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>  : buf_(buf),</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>  size_(buf_len),</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>  depth_(0),</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>  max_depth_(_max_depth),</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>  num_tables_(0),</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>  max_tables_(_max_tables)</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>  <span class="preprocessor">#ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>  , upper_bound_(0)</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>  <span class="preprocessor">#endif</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>  {</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>  assert(size_ < FLATBUFFERS_MAX_BUFFER_SIZE);</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>  }</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> </div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>  <span class="comment">// Central location where any verification failures register.</span></div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>  <span class="keywordtype">bool</span> Check(<span class="keywordtype">bool</span> ok)<span class="keyword"> const </span>{</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="preprocessor"> #ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE</span></div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>  FLATBUFFERS_ASSERT(ok);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>  <span class="keywordflow">if</span> (!ok)</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>  upper_bound_ = 0;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>  <span class="keywordflow">return</span> ok;</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  }</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>  <span class="comment">// Verify any range within the buffer.</span></div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>  <span class="keywordtype">bool</span> Verify(<span class="keywordtype">size_t</span> elem, <span class="keywordtype">size_t</span> elem_len)<span class="keyword"> const </span>{</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>  <span class="keyword">auto</span> upper_bound = elem + elem_len;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>  <span class="keywordflow">if</span> (upper_bound_ < upper_bound)</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>  upper_bound_ = upper_bound;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>  <span class="keywordflow">return</span> Check(elem_len < size_ && elem <= size_ - elem_len);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>  }</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> </div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyAlignment(<span class="keywordtype">size_t</span> elem)<span class="keyword"> const </span>{</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>  <span class="keywordflow">return</span> (elem & (<span class="keyword">sizeof</span>(T) - 1)) == 0;</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>  }</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> </div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>  <span class="comment">// Verify a range indicated by sizeof(T).</span></div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> Verify(<span class="keywordtype">size_t</span> elem)<span class="keyword"> const </span>{</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>  <span class="keywordflow">return</span> VerifyAlignment<T>(elem) && Verify(elem, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>  }</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> </div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>  <span class="comment">// Verify relative to a known-good base pointer.</span></div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>  <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> uint8_t *base, voffset_t elem_off, <span class="keywordtype">size_t</span> elem_len)<span class="keyword"> const </span>{</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  <span class="keywordflow">return</span> Verify(static_cast<size_t>(base - buf_) + elem_off, elem_len);</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>  }</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> </div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> uint8_t *base, voffset_t elem_off)<span class="keyword"></span></div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="keyword"> const </span>{</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>  <span class="keywordflow">return</span> Verify(static_cast<size_t>(base - buf_) + elem_off, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>  }</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> </div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  <span class="comment">// Verify a pointer (may be NULL) of a table type.</span></div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyTable(<span class="keyword">const</span> T *table) {</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  <span class="keywordflow">return</span> !table || table->Verify(*<span class="keyword">this</span>);</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  }</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>  <span class="comment">// Verify a pointer (may be NULL) of any vector type.</span></div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyVector(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<T></a> *vec)<span class="keyword"> const </span>{</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  <span class="keywordflow">return</span> !vec || VerifyVectorOrString(reinterpret_cast<const uint8_t *>(vec),</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>  }</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>  <span class="comment">// Verify a pointer (may be NULL) of a vector to struct.</span></div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyVector(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<const T *></a> *vec)<span class="keyword"> const </span>{</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>  <span class="keywordflow">return</span> VerifyVector(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classflatbuffers_1_1_vector.html">Vector<T></a> *<span class="keyword">></span>(vec));</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>  }</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> </div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>  <span class="comment">// Verify a pointer (may be NULL) to string.</span></div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>  <span class="keywordtype">bool</span> VerifyString(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *str)<span class="keyword"> const </span>{</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>  <span class="keywordtype">size_t</span> end;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>  <span class="keywordflow">return</span> !str ||</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>  (VerifyVectorOrString(reinterpret_cast<const uint8_t *>(str),</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  1, &end) &&</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>  Verify(end, 1) && <span class="comment">// Must have terminator</span></div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>  Check(buf_[end] == <span class="charliteral">'\0'</span>)); <span class="comment">// Terminating byte must be 0.</span></div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>  }</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>  <span class="comment">// Common code between vectors and strings.</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>  <span class="keywordtype">bool</span> VerifyVectorOrString(<span class="keyword">const</span> uint8_t *vec, <span class="keywordtype">size_t</span> elem_size,</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>  <span class="keywordtype">size_t</span> *end = <span class="keyword">nullptr</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  <span class="keyword">auto</span> veco = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(vec - buf_);</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>  <span class="comment">// Check we can read the size field.</span></div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>  <span class="keywordflow">if</span> (!Verify<uoffset_t>(veco)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>  <span class="comment">// Check the whole array. If this is a string, the byte past the array</span></div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  <span class="comment">// must be 0.</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>  <span class="keyword">auto</span> size = ReadScalar<uoffset_t>(vec);</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>  <span class="keyword">auto</span> max_elems = FLATBUFFERS_MAX_BUFFER_SIZE / elem_size;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>  <span class="keywordflow">if</span> (!Check(size < max_elems))</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Protect against byte_size overflowing.</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>  <span class="keyword">auto</span> byte_size = <span class="keyword">sizeof</span>(size) + elem_size * size;</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>  <span class="keywordflow">if</span> (end) *end = veco + byte_size;</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>  <span class="keywordflow">return</span> Verify(veco, byte_size);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  }</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> </div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>  <span class="comment">// Special case for string contents, after the above has been called.</span></div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>  <span class="keywordtype">bool</span> VerifyVectorOfStrings(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a>> *vec)<span class="keyword"> const </span>{</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>  <span class="keywordflow">if</span> (vec) {</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>  <span class="keywordflow">for</span> (uoffset_t i = 0; i < vec->size(); i++) {</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>  <span class="keywordflow">if</span> (!VerifyString(vec->Get(i))) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>  }</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  }</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>  }</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> </div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>  <span class="comment">// Special case for table contents, after the above has been called.</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyVectorOfTables(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a>> *vec) {</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  <span class="keywordflow">if</span> (vec) {</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>  <span class="keywordflow">for</span> (uoffset_t i = 0; i < vec->size(); i++) {</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  <span class="keywordflow">if</span> (!vec->Get(i)->Verify(*<span class="keyword">this</span>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>  }</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>  }</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  }</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> </div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  <span class="keywordtype">bool</span> VerifyTableStart(<span class="keyword">const</span> uint8_t *table) {</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  <span class="comment">// Check the vtable offset.</span></div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>  <span class="keyword">auto</span> tableo = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(table - buf_);</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  <span class="keywordflow">if</span> (!Verify<soffset_t>(tableo)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>  <span class="comment">// This offset may be signed, but doing the substraction unsigned always</span></div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>  <span class="comment">// gives the result we want.</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  <span class="keyword">auto</span> vtableo = tableo - <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(ReadScalar<soffset_t>(table));</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  <span class="comment">// Check the vtable size field, then check vtable fits in its entirety.</span></div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  <span class="keywordflow">return</span> VerifyComplexity() && Verify<voffset_t>(vtableo) &&</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  VerifyAlignment<voffset_t>(ReadScalar<voffset_t>(buf_ + vtableo)) &&</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  Verify(vtableo, ReadScalar<voffset_t>(buf_ + vtableo));</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>  }</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> </div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <span class="keywordtype">bool</span> VerifyBufferFromStart(<span class="keyword">const</span> <span class="keywordtype">char</span> *identifier, <span class="keywordtype">size_t</span> start) {</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>  <span class="keywordflow">if</span> (identifier &&</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>  (size_ < 2 * <span class="keyword">sizeof</span>(flatbuffers::uoffset_t) ||</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>  !BufferHasIdentifier(buf_ + start, identifier))) {</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>  }</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> </div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  <span class="comment">// Call T::Verify, which must be in the generated code for this type.</span></div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  <span class="keyword">auto</span> o = VerifyOffset(start);</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>  <span class="keywordflow">return</span> o && <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>T *<span class="keyword">></span>(buf_ + start + o)->Verify(*<span class="keyword">this</span>)</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>  <span class="preprocessor">#ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  && GetComputedSize()</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  <span class="preprocessor">#endif</span></div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>  ;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>  }</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> </div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  <span class="comment">// Verify this whole buffer, starting with root type T.</span></div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyBuffer() { <span class="keywordflow">return</span> VerifyBuffer<T>(<span class="keyword">nullptr</span>); }</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> </div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *identifier) {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>  <span class="keywordflow">return</span> VerifyBufferFromStart<T>(identifier, 0);</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>  }</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> </div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifySizePrefixedBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *identifier) {</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  <span class="keywordflow">return</span> Verify<uoffset_t>(0U) &&</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  ReadScalar<uoffset_t>(buf_) == size_ - <span class="keyword">sizeof</span>(uoffset_t) &&</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  VerifyBufferFromStart<T>(identifier, <span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  }</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> </div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  uoffset_t VerifyOffset(<span class="keywordtype">size_t</span> start)<span class="keyword"> const </span>{</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  <span class="keywordflow">if</span> (!Verify<uoffset_t>(start)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  <span class="keyword">auto</span> o = ReadScalar<uoffset_t>(buf_ + start);</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  <span class="comment">// May not point to itself.</span></div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  Check(o != 0);</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  <span class="comment">// Can't wrap around / buffers are max 2GB.</span></div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  <span class="keywordflow">if</span> (!Check(static_cast<soffset_t>(o) >= 0)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>  <span class="comment">// Must be inside the buffer to create a pointer from it (pointer outside</span></div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>  <span class="comment">// buffer is UB).</span></div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  <span class="keywordflow">if</span> (!Verify(start + o, 1)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  <span class="keywordflow">return</span> o;</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  }</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> </div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  uoffset_t VerifyOffset(<span class="keyword">const</span> uint8_t *base, voffset_t start)<span class="keyword"> const </span>{</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  <span class="keywordflow">return</span> VerifyOffset(static_cast<size_t>(base - buf_) + start);</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  }</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> </div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  <span class="comment">// Called at the start of a table to increase counters measuring data</span></div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  <span class="comment">// structure depth and amount, and possibly bails out with false if</span></div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  <span class="comment">// limits set by the constructor have been hit. Needs to be balanced</span></div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  <span class="comment">// with EndTable().</span></div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  <span class="keywordtype">bool</span> VerifyComplexity() {</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  depth_++;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  num_tables_++;</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  <span class="keywordflow">return</span> Check(depth_ <= max_depth_ && num_tables_ <= max_tables_);</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  }</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> </div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  <span class="comment">// Called at the end of a table to pop the depth count.</span></div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  <span class="keywordtype">bool</span> EndTable() {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>  depth_--;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  }</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> </div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  <span class="comment">// Returns the message size in bytes</span></div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  <span class="keywordtype">size_t</span> GetComputedSize()<span class="keyword"> const </span>{</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  uintptr_t size = upper_bound_;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  <span class="comment">// Align the size to uoffset_t</span></div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  size = (size - 1 + <span class="keyword">sizeof</span>(uoffset_t)) & ~(<span class="keyword">sizeof</span>(uoffset_t) - 1);</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  <span class="keywordflow">return</span> (size > size_) ? 0 : size;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  }</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> </div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>  <span class="keyword">const</span> uint8_t *buf_;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  <span class="keywordtype">size_t</span> size_;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  uoffset_t depth_;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  uoffset_t max_depth_;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  uoffset_t num_tables_;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  uoffset_t max_tables_;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  <span class="keyword">mutable</span> <span class="keywordtype">size_t</span> upper_bound_;</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> };</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> </div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment">// Convenient way to bundle a buffer and its length, to pass it around</span></div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> <span class="comment">// typed by its root.</span></div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> <span class="comment">// A BufferRef does not own its buffer.</span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> <span class="keyword">struct </span>BufferRefBase {}; <span class="comment">// for std::is_base_of</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>BufferRef : BufferRefBase {</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  BufferRef() : buf(<span class="keyword">nullptr</span>), len(0), must_free(<span class="keyword">false</span>) {}</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  BufferRef(uint8_t *_buf, uoffset_t _len)</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  : buf(_buf), len(_len), must_free(<span class="keyword">false</span>) {}</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> </div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>  ~BufferRef() {</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  <span class="keywordflow">if</span> (must_free) free(buf);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  }</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> </div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  <span class="keyword">const</span> T *GetRoot()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> flatbuffers::GetRoot<T>(buf); }</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> </div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  <span class="keywordtype">bool</span> Verify() {</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  Verifier verifier(buf, len);</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>  <span class="keywordflow">return</span> verifier.VerifyBuffer<T>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>  }</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> </div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  uint8_t *buf;</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>  uoffset_t len;</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>  <span class="keywordtype">bool</span> must_free;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> };</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> </div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> <span class="comment">// "structs" are flat structures that do not have an offset table, thus</span></div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> <span class="comment">// always have all members present and do not support forwards/backwards</span></div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="comment">// compatible extensions.</span></div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> </div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="keyword">class </span>Struct FLATBUFFERS_FINAL_CLASS {</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T GetField(uoffset_t o)<span class="keyword"> const </span>{</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  <span class="keywordflow">return</span> ReadScalar<T>(&data_[o]);</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>  }</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> </div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T GetStruct(uoffset_t o)<span class="keyword"> const </span>{</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T<span class="keyword">></span>(&data_[o]);</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  }</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>  <span class="keyword">const</span> uint8_t *GetAddressOf(uoffset_t o)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &data_[o]; }</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>  uint8_t *GetAddressOf(uoffset_t o) { <span class="keywordflow">return</span> &data_[o]; }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> </div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>  uint8_t data_[1];</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> };</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> </div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="comment">// "tables" use an offset table (possibly shared) that allows fields to be</span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> <span class="comment">// omitted and added at will, but uses an extra indirection to read.</span></div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> <span class="keyword">class </span>Table {</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>  <span class="keyword">const</span> uint8_t *GetVTable()<span class="keyword"> const </span>{</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>  <span class="keywordflow">return</span> data_ - ReadScalar<soffset_t>(data_);</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>  }</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> </div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>  <span class="comment">// This gets the field offset for any of the functions below it, or 0</span></div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>  <span class="comment">// if the field was not present.</span></div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>  voffset_t GetOptionalFieldOffset(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  <span class="comment">// The vtable offset is always at the start.</span></div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>  <span class="keyword">auto</span> vtable = GetVTable();</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>  <span class="comment">// The first element is the size of the vtable (fields + type id + itself).</span></div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>  <span class="keyword">auto</span> vtsize = ReadScalar<voffset_t>(vtable);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  <span class="comment">// If the field we're accessing is outside the vtable, we're reading older</span></div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>  <span class="comment">// data, so it's the same as if the offset was 0 (not present).</span></div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>  <span class="keywordflow">return</span> field < vtsize ? ReadScalar<voffset_t>(vtable + field) : 0;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>  }</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> </div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T GetField(voffset_t field, T defaultval)<span class="keyword"> const </span>{</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>  <span class="keywordflow">return</span> field_offset ? ReadScalar<T>(data_ + field_offset) : defaultval;</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>  }</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> </div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>  <span class="keyword">template</span><<span class="keyword">typename</span> P> P GetPointer(voffset_t field) {</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>  <span class="keyword">auto</span> p = data_ + field_offset;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>  <span class="keywordflow">return</span> field_offset ? <span class="keyword">reinterpret_cast<</span>P<span class="keyword">></span>(p + ReadScalar<uoffset_t>(p))</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>  : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  }</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  <span class="keyword">template</span><<span class="keyword">typename</span> P> P GetPointer(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span>Table *<span class="keyword">></span>(<span class="keyword">this</span>)->GetPointer<P>(field);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>  }</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> </div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  <span class="keyword">template</span><<span class="keyword">typename</span> P> P GetStruct(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>  <span class="keyword">auto</span> p = <span class="keyword">const_cast<</span>uint8_t *<span class="keyword">></span>(data_ + field_offset);</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  <span class="keywordflow">return</span> field_offset ? <span class="keyword">reinterpret_cast<</span>P<span class="keyword">></span>(p) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  }</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> </div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> SetField(voffset_t field, T val, T def) {</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>  <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> val == def;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>  WriteScalar(data_ + field_offset, val);</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>  }</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> </div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>  <span class="keywordtype">bool</span> SetPointer(voffset_t field, <span class="keyword">const</span> uint8_t *val) {</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>  <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>  WriteScalar(data_ + field_offset,</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>  static_cast<uoffset_t>(val - (data_ + field_offset)));</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>  }</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> </div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  uint8_t *GetAddressOf(voffset_t field) {</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>  <span class="keywordflow">return</span> field_offset ? data_ + field_offset : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  }</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>  <span class="keyword">const</span> uint8_t *GetAddressOf(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span>Table *<span class="keyword">></span>(<span class="keyword">this</span>)->GetAddressOf(field);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>  }</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> </div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  <span class="keywordtype">bool</span> CheckField(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>  <span class="keywordflow">return</span> GetOptionalFieldOffset(field) != 0;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>  }</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> </div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>  <span class="comment">// Verify the vtable of this table.</span></div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>  <span class="comment">// Call this once per table, followed by VerifyField once per field.</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>  <span class="keywordtype">bool</span> VerifyTableStart(Verifier &verifier)<span class="keyword"> const </span>{</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  <span class="keywordflow">return</span> verifier.VerifyTableStart(data_);</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>  }</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> </div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>  <span class="comment">// Verify a particular field.</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>  <span class="keywordtype">bool</span> VerifyField(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>  <span class="comment">// Calling GetOptionalFieldOffset should be safe now thanks to</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>  <span class="comment">// VerifyTable().</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>  <span class="comment">// Check the actual field.</span></div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>  <span class="keywordflow">return</span> !field_offset || verifier.Verify<T>(data_, field_offset);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>  }</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> </div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  <span class="comment">// VerifyField for required fields.</span></div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>  <span class="keywordtype">bool</span> VerifyFieldRequired(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>  <span class="keywordflow">return</span> verifier.Check(field_offset != 0) &&</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>  verifier.Verify<T>(data_, field_offset);</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>  }</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> </div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>  <span class="comment">// Versions for offsets.</span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>  <span class="keywordtype">bool</span> VerifyOffset(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>  <span class="keywordflow">return</span> !field_offset || verifier.VerifyOffset(data_, field_offset);</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>  }</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> </div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>  <span class="keywordtype">bool</span> VerifyOffsetRequired(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>  <span class="keywordflow">return</span> verifier.Check(field_offset != 0) &&</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>  verifier.VerifyOffset(data_, field_offset);</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>  }</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> </div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>  <span class="comment">// private constructor & copy constructor: you obtain instances of this</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>  <span class="comment">// class by pointing to existing data only</span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>  Table();</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>  Table(<span class="keyword">const</span> Table &other);</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> </div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>  uint8_t data_[1];</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> };</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> </div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> FlatBufferBuilder::Required(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> table,</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  voffset_t field) {</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  <span class="keyword">auto</span> table_ptr = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Table *<span class="keyword">></span>(buf_.data_at(table.o));</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>  <span class="keywordtype">bool</span> ok = table_ptr->GetOptionalFieldOffset(field) != 0;</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>  <span class="comment">// If this fails, the caller will show what field needs to be set.</span></div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>  FLATBUFFERS_ASSERT(ok);</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>  (void)ok;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> }</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="comment"></span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <span class="comment">/// @brief This can compute the start of a FlatBuffer from a root pointer, i.e.</span></div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="comment">/// it is the opposite transformation of GetRoot().</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="comment">/// This may be useful if you want to pass on a root and have the recipient</span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="comment">/// delete the buffer afterwards.</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> uint8_t *GetBufferStartFromRootPointer(<span class="keyword">const</span> <span class="keywordtype">void</span> *root) {</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>  <span class="keyword">auto</span> table = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Table *<span class="keyword">></span>(root);</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>  <span class="keyword">auto</span> vtable = table->GetVTable();</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>  <span class="comment">// Either the vtable is before the root or after the root.</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>  <span class="keyword">auto</span> start = (std::min)(vtable, reinterpret_cast<const uint8_t *>(root));</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>  <span class="comment">// Align to at least sizeof(uoffset_t).</span></div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  start = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span>uintptr_t<span class="keyword">></span>(start) &</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  ~(<span class="keyword">sizeof</span>(uoffset_t) - 1));</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  <span class="comment">// Additionally, there may be a file_identifier in the buffer, and the root</span></div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="comment">// offset. The buffer may have been aligned to any size between</span></div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  <span class="comment">// sizeof(uoffset_t) and FLATBUFFERS_MAX_ALIGNMENT (see "force_align").</span></div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>  <span class="comment">// Sadly, the exact alignment is only known when constructing the buffer,</span></div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  <span class="comment">// since it depends on the presence of values with said alignment properties.</span></div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  <span class="comment">// So instead, we simply look at the next uoffset_t values (root,</span></div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  <span class="comment">// file_identifier, and alignment padding) to see which points to the root.</span></div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>  <span class="comment">// None of the other values can "impersonate" the root since they will either</span></div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>  <span class="comment">// be 0 or four ASCII characters.</span></div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>  static_assert(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">FlatBufferBuilder::kFileIdentifierLength</a> == <span class="keyword">sizeof</span>(uoffset_t),</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  <span class="stringliteral">"file_identifier is assumed to be the same size as uoffset_t"</span>);</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> possible_roots = FLATBUFFERS_MAX_ALIGNMENT / <span class="keyword">sizeof</span>(uoffset_t) + 1;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>  possible_roots; possible_roots--) {</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>  start -= <span class="keyword">sizeof</span>(uoffset_t);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>  <span class="keywordflow">if</span> (ReadScalar<uoffset_t>(start) + start ==</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>  <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(root))</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>  <span class="keywordflow">return</span> start;</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  }</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>  <span class="comment">// We didn't find the root, either the "root" passed isn't really a root,</span></div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  <span class="comment">// or the buffer is corrupt.</span></div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>  <span class="comment">// Assert, because calling this function with bad data may cause reads</span></div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>  <span class="comment">// outside of buffer boundaries.</span></div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>  FLATBUFFERS_ASSERT(<span class="keyword">false</span>);</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> }</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="comment"></span></div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="comment">/// @brief This return the prefixed size of a FlatBuffer.</span></div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> <span class="comment"></span><span class="keyword">inline</span> uoffset_t GetPrefixedSize(<span class="keyword">const</span> uint8_t* buf){ <span class="keywordflow">return</span> ReadScalar<uoffset_t>(buf); }</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> </div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="comment">// Base class for native objects (FlatBuffer data de-serialized into native</span></div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> <span class="comment">// C++ data structures).</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="comment">// Contains no functionality, purely documentative.</span></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="keyword">struct </span>NativeTable {};</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="comment"></span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <span class="comment">/// @brief Function types to be used with resolving hashes into objects and</span></div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="comment">/// back again. The resolver gets a pointer to a field inside an object API</span></div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="comment">/// object that is of the type specified in the schema using the attribute</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="comment">/// `cpp_type` (it is thus important whatever you write to this address</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="comment">/// matches that type). The value of this field is initially null, so you</span></div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> <span class="comment">/// may choose to implement a delayed binding lookup using this function</span></div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="comment">/// if you wish. The resolver does the opposite lookup, for when the object</span></div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="comment">/// is being serialized again.</span></div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="comment"></span><span class="keyword">typedef</span> uint64_t hash_value_t;</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="preprocessor">#ifdef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>  <span class="keyword">typedef</span> void (*resolver_function_t)(<span class="keywordtype">void</span> **pointer_adr, hash_value_t hash);</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>  <span class="keyword">typedef</span> hash_value_t (*rehasher_function_t)(<span class="keywordtype">void</span> *pointer);</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>  <span class="keyword">typedef</span> std::function<void (void **pointer_adr, hash_value_t hash)></div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>  resolver_function_t;</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>  <span class="keyword">typedef</span> std::function<hash_value_t (void *pointer)> rehasher_function_t;</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> </div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="comment">// Helper function to test if a field is present, using any of the field</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> <span class="comment">// enums in the generated code.</span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <span class="comment">// `table` must be a generated table type. Since this is a template parameter,</span></div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> <span class="comment">// this is not typechecked to be a subclass of Table, so beware!</span></div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="comment">// Note: this function will return false for fields equal to the default</span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> <span class="comment">// value, since they're not stored in the buffer (unless force_defaults was</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> <span class="comment">// used).</span></div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> IsFieldPresent(<span class="keyword">const</span> T *table, voffset_t field) {</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>  <span class="comment">// Cast, since Table is a private baseclass of any table types.</span></div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Table *<span class="keyword">></span>(table)->CheckField(field);</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> }</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> </div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="comment">// Utility function for reverse lookups on the EnumNames*() functions</span></div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="comment">// (in the generated C++ code)</span></div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="comment">// names must be NULL terminated.</span></div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> LookupEnum(<span class="keyword">const</span> <span class="keywordtype">char</span> **names, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) {</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> **p = names; *p; p++)</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>  <span class="keywordflow">if</span> (!strcmp(*p, name)) <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(p - names);</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> }</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> </div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="comment">// These macros allow us to layout a struct with a guarantee that they'll end</span></div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="comment">// up looking the same on different compilers and platforms.</span></div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <span class="comment">// It does this by disallowing the compiler to do any padding, and then</span></div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> <span class="comment">// does padding itself by inserting extra padding fields that make every</span></div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="comment">// element aligned to its own size.</span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> <span class="comment">// Additionally, it manually sets the alignment of the struct as a whole,</span></div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="comment">// which is typically its largest element, or a custom size set in the schema</span></div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> <span class="comment">// by the force_align attribute.</span></div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> <span class="comment">// These are used in the generated code only.</span></div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> </div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> <span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> <span class="preprocessor"> #define FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(alignment) \</span></div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <span class="preprocessor"> __pragma(pack(1)); \</span></div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> <span class="preprocessor"> struct __declspec(align(alignment))</span></div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="preprocessor"> #define FLATBUFFERS_STRUCT_END(name, size) \</span></div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> <span class="preprocessor"> __pragma(pack()); \</span></div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> <span class="preprocessor"> static_assert(sizeof(name) == size, "compiler breaks packing rules")</span></div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="preprocessor">#elif defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="preprocessor"> #define FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(alignment) \</span></div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="preprocessor"> _Pragma("pack(1)") \</span></div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> <span class="preprocessor"> struct __attribute__((aligned(alignment)))</span></div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> <span class="preprocessor"> #define FLATBUFFERS_STRUCT_END(name, size) \</span></div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="preprocessor"> _Pragma("pack()") \</span></div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> <span class="preprocessor"> static_assert(sizeof(name) == size, "compiler breaks packing rules")</span></div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> <span class="preprocessor"> #error Unknown compiler, please define structure alignment macros</span></div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> </div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="comment">// Minimal reflection via code generation.</span></div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> <span class="comment">// Besides full-fat reflection (see reflection.h) and parsing/printing by</span></div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> <span class="comment">// loading schemas (see idl.h), we can also have code generation for mimimal</span></div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="comment">// reflection data which allows pretty-printing and other uses without needing</span></div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> <span class="comment">// a schema or a parser.</span></div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="comment">// Generate code with --reflect-types (types only) or --reflect-names (names</span></div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="comment">// also) to enable.</span></div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> <span class="comment">// See minireflect.h for utilities using this functionality.</span></div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> </div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> <span class="comment">// These types are organized slightly differently as the ones in idl.h.</span></div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="keyword">enum</span> SequenceType { ST_TABLE, ST_STRUCT, ST_UNION, ST_ENUM };</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> </div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="comment">// Scalars have the same order as in idl.h</span></div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="preprocessor">#define FLATBUFFERS_GEN_ELEMENTARY_TYPES(ET) \</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="preprocessor"> ET(ET_UTYPE) \</span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> <span class="preprocessor"> ET(ET_BOOL) \</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="preprocessor"> ET(ET_CHAR) \</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="preprocessor"> ET(ET_UCHAR) \</span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> <span class="preprocessor"> ET(ET_SHORT) \</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> <span class="preprocessor"> ET(ET_USHORT) \</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> <span class="preprocessor"> ET(ET_INT) \</span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> <span class="preprocessor"> ET(ET_UINT) \</span></div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> <span class="preprocessor"> ET(ET_LONG) \</span></div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> <span class="preprocessor"> ET(ET_ULONG) \</span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> <span class="preprocessor"> ET(ET_FLOAT) \</span></div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> <span class="preprocessor"> ET(ET_DOUBLE) \</span></div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> <span class="preprocessor"> ET(ET_STRING) \</span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <span class="preprocessor"> ET(ET_SEQUENCE) // See SequenceType.</span></div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> </div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> <span class="keyword">enum</span> ElementaryType {</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> <span class="preprocessor"> #define FLATBUFFERS_ET(E) E,</span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>  FLATBUFFERS_GEN_ELEMENTARY_TYPES(FLATBUFFERS_ET)</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>  <span class="preprocessor">#undef FLATBUFFERS_ET</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> };</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> </div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *ElementaryTypeNames() {</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> names[] = {</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> <span class="preprocessor"> #define FLATBUFFERS_ET(E) #E,</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>  FLATBUFFERS_GEN_ELEMENTARY_TYPES(FLATBUFFERS_ET)</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>  <span class="preprocessor">#undef FLATBUFFERS_ET</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>  };</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>  <span class="keywordflow">return</span> names;</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> }</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> </div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> <span class="comment">// Basic type info cost just 16bits per field!</span></div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> <span class="keyword">struct </span>TypeCode {</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>  uint16_t base_type : 4; <span class="comment">// ElementaryType</span></div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>  uint16_t is_vector : 1;</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>  int16_t sequence_ref : 11; <span class="comment">// Index into type_refs below, or -1 for none.</span></div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> };</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> </div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> static_assert(<span class="keyword">sizeof</span>(TypeCode) == 2, <span class="stringliteral">"TypeCode"</span>);</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> </div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="keyword">struct </span>TypeTable;</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> </div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> <span class="comment">// Signature of the static method present in each type.</span></div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> <span class="keyword">typedef</span> <span class="keyword">const</span> TypeTable *(*TypeFunction)();</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> </div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> <span class="keyword">struct </span>TypeTable {</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>  SequenceType st;</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>  <span class="keywordtype">size_t</span> num_elems; <span class="comment">// of type_codes, values, names (but not type_refs).</span></div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>  <span class="keyword">const</span> TypeCode *type_codes; <span class="comment">// num_elems count</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>  <span class="keyword">const</span> TypeFunction *type_refs; <span class="comment">// less than num_elems entries (see TypeCode).</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>  <span class="keyword">const</span> int32_t *values; <span class="comment">// Only set for non-consecutive enum/union or structs.</span></div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *names; <span class="comment">// Only set if compiled with --reflect-names.</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> };</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> </div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> <span class="comment">// String which identifies the current version of FlatBuffers.</span></div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="comment">// flatbuffer_version_string is used by Google developers to identify which</span></div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="comment">// applications uploaded to Google Play are using this library. This allows</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> <span class="comment">// the development team at Google to determine the popularity of the library.</span></div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> <span class="comment">// How it works: Applications that are uploaded to the Google Play Store are</span></div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> <span class="comment">// scanned for this version string. We track which applications are using it</span></div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="comment">// to measure popularity. You are free to remove it (of course) but we would</span></div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> <span class="comment">// appreciate if you left it in.</span></div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> </div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="comment">// Weak linkage is culled by VS & doesn't work on cygwin.</span></div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="preprocessor">#if !defined(_WIN32) && !defined(__CYGWIN__)</span></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> </div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="keyword">extern</span> <span class="keyword">volatile</span> __attribute__((weak)) <span class="keyword">const</span> <span class="keywordtype">char</span> *flatbuffer_version_string;</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> <span class="keyword">volatile</span> __attribute__((weak)) <span class="keyword">const</span> <span class="keywordtype">char</span> *flatbuffer_version_string =</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>  <span class="stringliteral">"FlatBuffers "</span></div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MAJOR) <span class="stringliteral">"."</span></div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MINOR) <span class="stringliteral">"."</span></div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_REVISION);</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> </div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> <span class="preprocessor">#endif // !defined(_WIN32) && !defined(__CYGWIN__)</span></div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> </div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> <span class="preprocessor">#define FLATBUFFERS_DEFINE_BITMASK_OPERATORS(E, T)\</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> <span class="preprocessor"> inline E operator | (E lhs, E rhs){\</span></div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> <span class="preprocessor"> return E(T(lhs) | T(rhs));\</span></div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="preprocessor"> inline E operator & (E lhs, E rhs){\</span></div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> <span class="preprocessor"> return E(T(lhs) & T(rhs));\</span></div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> <span class="preprocessor"> inline E operator ^ (E lhs, E rhs){\</span></div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> <span class="preprocessor"> return E(T(lhs) ^ T(rhs));\</span></div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> <span class="preprocessor"> inline E operator ~ (E lhs){\</span></div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> <span class="preprocessor"> return E(~T(lhs));\</span></div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> <span class="preprocessor"> inline E operator |= (E &lhs, E rhs){\</span></div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> <span class="preprocessor"> lhs = lhs | rhs;\</span></div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> <span class="preprocessor"> return lhs;\</span></div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> <span class="preprocessor"> inline E operator &= (E &lhs, E rhs){\</span></div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> <span class="preprocessor"> lhs = lhs & rhs;\</span></div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> <span class="preprocessor"> return lhs;\</span></div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> <span class="preprocessor"> inline E operator ^= (E &lhs, E rhs){\</span></div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> <span class="preprocessor"> lhs = lhs ^ rhs;\</span></div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> <span class="preprocessor"> return lhs;\</span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="preprocessor"> inline bool operator !(E rhs) \</span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> <span class="preprocessor"> {\</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="preprocessor"> return !bool(T(rhs)); \</span></div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="comment">/// @endcond</span></div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span> <span class="comment"></span>} <span class="comment">// namespace flatbuffers</span></div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> </div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> </div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> <span class="preprocessor">#endif // FLATBUFFERS_H_</span></div><div class="ttc" id="structflatbuffers_1_1_offset_html"><div class="ttname"><a href="structflatbuffers_1_1_offset.html">flatbuffers::Offset</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:25</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a1080c9e370e2d9d9d872dadd1131436b"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(size_t vector_size, const std::function< T(size_t i)> &f)</div><div class="ttdoc">Serialize values returned by a function into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1394</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac2b96292fa0fb1534fe7fd218a094d0c"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">flatbuffers::FlatBufferBuilder::CreateUninitializedVector</a></div><div class="ttdeci">uoffset_t CreateUninitializedVector(size_t len, size_t elemsize, uint8_t **buf)</div><div class="ttdoc">Specialized version of CreateVector for non-copying use cases. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1652</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a6e90ada59d9553636f72ce8e4a892f72"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(size_t vector_size, const std::function< void(size_t i, T *)> &filler)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1474</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab1f44cc1b130e13b41e9a80de76e25cf"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedStructs(T *v, size_t len)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1578</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a23aa4c910e053446cc404bc486012e54"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedNativeStructs(std::vector< S > *v)</div><div class="ttdoc">Serialize a std::vector of native structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1564</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a66c8fd33ab9b3b237954c9ea38648f7f"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">flatbuffers::FlatBufferBuilder::GetSize</a></div><div class="ttdeci">uoffset_t GetSize() const</div><div class="ttdoc">The current size of the serialized buffer, counting from the end. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:905</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac64d11c219559ea51567eab556e13135"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables</a></div><div class="ttdeci">Offset< Vector< Offset< T > > > CreateVectorOfSortedTables(std::vector< Offset< T >> *v)</div><div class="ttdoc">Serialize an array of table offsets as a vector in the buffer in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1640</div></div> -<div class="ttc" id="structflatbuffers_1_1_vector_iterator_html"><div class="ttname"><a href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:91</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></div><div class="ttdoc">Helper class to hold data needed in creation of a FlatBuffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:815</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ae65f0619ecb7715ffdae399ebfc56e38"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38">flatbuffers::FlatBufferBuilder::operator=</a></div><div class="ttdeci">FlatBufferBuilder & operator=(FlatBufferBuilder &&other)</div><div class="ttdoc">Move assignment operator for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:863</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac51db9083ac815eb81420b6d51f42154"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(char *str)</div><div class="ttdoc">Store a string in the buffer, which is null-terminated. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1210</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ae94b94ba71ea0aeb2d9a98c43b713412"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">flatbuffers::FlatBufferBuilder::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Reset all the state in this FlatBufferBuilder so it can be reused to construct another buffer...</div><div class="ttdef"><b>Definition:</b> flatbuffers.h:894</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a9cc09fa59ff9732e972877cfe911c8a5"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(size_t vector_size, F f, S *state)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1496</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a3d57074082aaab8cdeb8474ff9df0b53"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53">flatbuffers::FlatBufferBuilder::CreateVectorOfNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfNativeStructs(const S *v, size_t len)</div><div class="ttdoc">Serialize an array of native structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1455</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a43f51ba9c8f4f24ea2247a3979d095b8"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8">flatbuffers::FlatBufferBuilder::CreateStruct</a></div><div class="ttdeci">Offset< const T * > CreateStruct(const T &structobj)</div><div class="ttdoc">Write a struct by itself, typically to be part of a union. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1685</div></div> -<div class="ttc" id="namespaceflatbuffers_html"><div class="ttname"><a href="namespaceflatbuffers.html">flatbuffers</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:22</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a7ba8462e408431054c99d25120326220"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">flatbuffers::FlatBufferBuilder::FinishSizePrefixed</a></div><div class="ttdeci">void FinishSizePrefixed(Offset< T > root, const char *file_identifier=nullptr)</div><div class="ttdoc">Finish a buffer with a 32 bit size field pre-fixed (size of the buffer following the size field)...</div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1711</div></div> -<div class="ttc" id="classflatbuffers_1_1_detached_buffer_html"><div class="ttname"><a href="classflatbuffers_1_1_detached_buffer.html">flatbuffers::DetachedBuffer</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:453</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a3eb68613e5883dc4b8fff6cf7d1223d7"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const char *str)</div><div class="ttdoc">Store a string in the buffer, which null-terminated. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1277</div></div> -<div class="ttc" id="classflatbuffers_1_1_vector_of_any_html"><div class="ttname"><a href="classflatbuffers_1_1_vector_of_any.html">flatbuffers::VectorOfAny</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:305</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a86e1a348b7474fd5d239016ae97afc56"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56">flatbuffers::FlatBufferBuilder::FlatBufferBuilder</a></div><div class="ttdeci">FlatBufferBuilder(FlatBufferBuilder &&other)</div><div class="ttdoc">Move constructor for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:846</div></div> -<div class="ttc" id="structflatbuffers_1_1_indirect_helper_html"><div class="ttname"><a href="structflatbuffers_1_1_indirect_helper.html">flatbuffers::IndirectHelper</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:63</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aec6f9df2a0366b540b24822414d92cbe"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const char *str, size_t len)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1191</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a16a8fd46b34ad7727406c37b65b6b27a"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">flatbuffers::FlatBufferBuilder::ForceDefaults</a></div><div class="ttdeci">void ForceDefaults(bool fd)</div><div class="ttdoc">In order to save space, fields that are set to their default value don&#39;t get serialized into the buff...</div><div class="ttdef"><b>Definition:</b> flatbuffers.h:974</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab81ab8aa273c270b0942fd81489cad83"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83">flatbuffers::FlatBufferBuilder::GetBufferPointer</a></div><div class="ttdeci">uint8_t * GetBufferPointer() const</div><div class="ttdoc">Get the serialized buffer (after you call Finish()). </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:910</div></div> -<div class="ttc" id="classflatbuffers_1_1_default_allocator_html"><div class="ttname"><a href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:415</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aa905b29dce19a1795c7bce375cf29961"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">flatbuffers::FlatBufferBuilder::DedupVtables</a></div><div class="ttdeci">void DedupVtables(bool dedup)</div><div class="ttdoc">By default vtables are deduped in order to save space. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:978</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_af8c7583c92e1d1d6f438977da5158d19"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">flatbuffers::FlatBufferBuilder::kFileIdentifierLength</a></div><div class="ttdeci">static const size_t kFileIdentifierLength</div><div class="ttdoc">The length of a FlatBuffer file header. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1693</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab0173786ea4ec3e4ae10555639b2996c"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">flatbuffers::FlatBufferBuilder::FlatBufferBuilder</a></div><div class="ttdeci">FlatBufferBuilder(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())</div><div class="ttdoc">Default constructor for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:828</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac0b6a1c5d949f20ad84367fc0f9e1506"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const String *str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1235</div></div> -<div class="ttc" id="classflatbuffers_1_1vector__downward_html"><div class="ttname"><a href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:560</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a799701af34c398d8eb86e049b73bcecf"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedNativeStructs(S *v, size_t len)</div><div class="ttdoc">Serialize an array of native structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1593</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a840b769fbb4148f97d3eed266e4690c3"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const String *str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1295</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a099810f03046139d1854d20a1c2a2e41"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">flatbuffers::FlatBufferBuilder::GetCurrentBufferPointer</a></div><div class="ttdeci">uint8_t * GetCurrentBufferPointer() const</div><div class="ttdoc">Get a pointer to an unfinished buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:917</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab77d800e77fa76bc758a6c399fd37685"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const T &str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1243</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a7cc10b709dfa3e72083843d1a5e36c15"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedStructs(std::vector< T > *v)</div><div class="ttdoc">Serialize a std::vector of structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1551</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a592110519a6c8db1926f1365bf2a58e6"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6">flatbuffers::FlatBufferBuilder::CreateVectorOfStrings</a></div><div class="ttdeci">Offset< Vector< Offset< String > > > CreateVectorOfStrings(const std::vector< std::string > &v)</div><div class="ttdoc">Serialize a std::vector<std::string> into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1425</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a53504fc2cab681a7980b03260f8b2f7a"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(size_t vector_size, F f, S *state)</div><div class="ttdoc">Serialize values returned by a function into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1413</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aa1ebce1f3f46832946a95952af1e9c2b"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b">flatbuffers::FlatBufferBuilder::GetBufferMinAlignment</a></div><div class="ttdeci">size_t GetBufferMinAlignment()</div><div class="ttdoc">get the minimum alignment this buffer needs to be accessed properly. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:954</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a110c2a3298aebef1a9dfa3c44ee84f42"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(const std::vector< T, Alloc > &v)</div><div class="ttdoc">Serialize a std::vector of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1513</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_afede51fd9c32d146cbb1832f57c5e1b7"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(const T *v, size_t len)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1440</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a11c291ccd2159604c149600ee6180b95"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95">flatbuffers::FlatBufferBuilder::CreateVectorOfNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfNativeStructs(const std::vector< S > &v)</div><div class="ttdoc">Serialize a std::vector of native structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1527</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aad93d113ac24e86ed04b5236b3f4c0c5"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const char *str)</div><div class="ttdoc">Store a string in the buffer, which is null-terminated. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1203</div></div> -<div class="ttc" id="classflatbuffers_1_1_allocator_html"><div class="ttname"><a href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:374</div></div> -<div class="ttc" id="structflatbuffers_1_1_string_html"><div class="ttname"><a href="structflatbuffers_1_1_string.html">flatbuffers::String</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:343</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aa090a68856f7b554cc7cac3c279fb416"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">flatbuffers::FlatBufferBuilder::ReleaseRaw</a></div><div class="ttdeci">uint8_t * ReleaseRaw(size_t &size, size_t &offset)</div><div class="ttdoc">Get the released pointer to the serialized buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:944</div></div> -<div class="ttc" id="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc_html"><div class="ttname"><a href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">flatbuffers::FlatBufferBuilder::FieldLoc</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1738</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a8c3af55e64f5cda9aefa38ac5287ef9f"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const std::string &str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1217</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_af715dd24dd37cb0151dc7a980ad0f207"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(const std::vector< T > &v)</div><div class="ttdoc">Serialize a std::vector into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1370</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a2305b63d367845972b51669dd995cc50"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">flatbuffers::FlatBufferBuilder::CreateUninitializedVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateUninitializedVector(size_t len, T **buf)</div><div class="ttdoc">Specialized version of CreateVector for non-copying use cases. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1672</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a9a3a955fbff1c69e944c3560460dd7a6"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(flatbuffers::string_view str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1226</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a2cca5c89246a53e80e6ad9487f4c36f3"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(const T *v, size_t len)</div><div class="ttdoc">Serialize an array into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1336</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a10e8ec7d1c8fbdc21b1c7047bbbe38d9"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const std::string &str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1286</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a2130ef232ff405eebe2e7f184ecd06e6"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables</a></div><div class="ttdeci">Offset< Vector< Offset< T > > > CreateVectorOfSortedTables(Offset< T > *v, size_t len)</div><div class="ttdoc">Serialize an array of table offsets as a vector in the buffer in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1626</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a5e2c3a1e47f0ab4a3a3f07a07a52fb45"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">flatbuffers::FlatBufferBuilder::Release</a></div><div class="ttdeci">DetachedBuffer Release()</div><div class="ttdoc">Get the released DetachedBuffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:931</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab478a645216d2d613fc7b7c29b0ff9d1"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const char *str, size_t len)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1253</div></div> -<div class="ttc" id="classflatbuffers_1_1_vector_html"><div class="ttname"><a href="classflatbuffers_1_1_vector.html">flatbuffers::Vector</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:182</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a0e715d9019060b4b753c4e5228be56e8"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8">flatbuffers::FlatBufferBuilder::ReleaseBufferPointer</a></div><div class="ttdeci">DetachedBuffer ReleaseBufferPointer()</div><div class="ttdoc">Get the released pointer to the serialized buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:924</div></div> -<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a0c9e507b373d598b51052fab4fa34912"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">flatbuffers::FlatBufferBuilder::Finish</a></div><div class="ttdeci">void Finish(Offset< T > root, const char *file_identifier=nullptr)</div><div class="ttdoc">Finish serializing a buffer by writing the root offset. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1699</div></div> -<div class="ttc" id="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare_html"><div class="ttname"><a href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">flatbuffers::FlatBufferBuilder::StringOffsetCompare</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1764</div></div> +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright 2014 Google Inc. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifndef FLATBUFFERS_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define FLATBUFFERS_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "flatbuffers/base.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if defined(FLATBUFFERS_NAN_DEFAULTS)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <cmath></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="namespaceflatbuffers.html">flatbuffers</a> {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">// Generic 'operator==' with conditional specialisations.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">inline</span> <span class="keywordtype">bool</span> IsTheSameAs(T e, T def) { <span class="keywordflow">return</span> e == def; }</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#if defined(FLATBUFFERS_NAN_DEFAULTS) && \</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"> (!defined(_MSC_VER) || _MSC_VER >= 1800)</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// Like `operator==(e, def)` with weak NaN if T=(float|double).</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">bool</span> IsTheSameAs<float>(<span class="keywordtype">float</span> e, <span class="keywordtype">float</span> def) {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> (e == def) || (std::isnan(def) && std::isnan(e));</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">bool</span> IsTheSameAs<double>(<span class="keywordtype">double</span> e, <span class="keywordtype">double</span> def) {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordflow">return</span> (e == def) || (std::isnan(def) && std::isnan(e));</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// Wrapper for uoffset_t to allow safe template specialization.</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// Value is allowed to be 0 to indicate a null object (see e.g. AddOffset).</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_offset.html"> 43</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_offset.html">Offset</a> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  uoffset_t o;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset</a>() : o(0) {}</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset</a>(uoffset_t _o) : o(_o) {}</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<void></a> Union()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<void></a>(o); }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordtype">bool</span> IsNull()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !o; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> EndianCheck() {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">int</span> endiantest = 1;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// If this fails, see FLATBUFFERS_LITTLEENDIAN above.</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  FLATBUFFERS_ASSERT(*reinterpret_cast<char *>(&endiantest) ==</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  FLATBUFFERS_LITTLEENDIAN);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  (void)endiantest;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> FLATBUFFERS_CONSTEXPR <span class="keywordtype">size_t</span> AlignOf() {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"> #ifdef _MSC_VER</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> __alignof(T);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> #ifndef alignof</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> __alignof__(T);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">return</span> <span class="keyword">alignof</span>(T);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// When we read serialized data from memory, in the case of most scalars,</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// we want to just read T, but in the case of Offset, we want to actually</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// perform the indirection and return a pointer.</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// The template specialization below does just that.</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// It is wrapped in a struct since function templates can't overload on the</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// return type like this.</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// The typedef is for the convenience of callers of this function</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// (avoiding the need for a trailing return decltype)</span></div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_indirect_helper.html"> 81</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a> {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">typedef</span> T return_type;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">typedef</span> T mutable_return_type;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> element_stride = <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">static</span> return_type Read(<span class="keyword">const</span> uint8_t *p, uoffset_t i) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> EndianScalar((reinterpret_cast<const T *>(p))[i]);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> };</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html"> 89</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset</a><T>> {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">typedef</span> T *mutable_return_type;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> element_stride = <span class="keyword">sizeof</span>(uoffset_t);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">static</span> return_type Read(<span class="keyword">const</span> uint8_t *p, uoffset_t i) {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  p += i * <span class="keyword">sizeof</span>(uoffset_t);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>return_type<span class="keyword">></span>(p + ReadScalar<uoffset_t>(p));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> };</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html"> 98</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a><const T *> {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">typedef</span> T *mutable_return_type;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> element_stride = <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">static</span> return_type Read(<span class="keyword">const</span> uint8_t *p, uoffset_t i) {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>T *<span class="keyword">></span>(p + i * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> };</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// An STL compatible iterator implementation for Vector below, effectively</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// calling Get() for every element.</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_vector_iterator.html"> 109</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> IT> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">typedef</span> IT value_type;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">typedef</span> ptrdiff_t difference_type;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">typedef</span> IT *pointer;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">typedef</span> IT &reference;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(<span class="keyword">const</span> uint8_t *data, uoffset_t i)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  : data_(data + <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a> * i) {}</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other) : data_(other.data_) {}</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>() : data_(<span class="keyword">nullptr</span>) {}</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator=(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other) {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  data_ = other.data_;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator=(<a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &&other) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  data_ = other.data_;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"> #endif // !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> data_ == other.data_;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordtype">bool</span> operator<(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> data_ < other.data_;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> data_ != other.data_;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  difference_type operator-(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other)<span class="keyword"> const </span>{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">return</span> (data_ - other.data_) / <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  IT operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(data_, 0); }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  IT operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(data_, 0); }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator++() {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  data_ += <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator++(<span class="keywordtype">int</span>) {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> temp(data_, 0);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  data_ += <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">return</span> temp;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator+(<span class="keyword">const</span> uoffset_t &offset)<span class="keyword"> const </span>{</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(data_ + offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  0);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator+=(<span class="keyword">const</span> uoffset_t &offset) {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  data_ += offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator--() {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  data_ -= <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator--(<span class="keywordtype">int</span>) {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> temp(data_, 0);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  data_ -= <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">return</span> temp;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> operator-(<span class="keyword">const</span> uoffset_t &offset)<span class="keyword"> const </span>{</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>(data_ - offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  0);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &operator-=(<span class="keyword">const</span> uoffset_t &offset) {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  data_ -= offset * <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">const</span> uint8_t *data_;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> };</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_vector_reverse_iterator.html"> 201</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> Iterator> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a> :</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keyword">public</span> std::reverse_iterator<Iterator> {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keyword">explicit</span> <a class="code" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a>(Iterator iter) : iter_(iter) {}</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">typename</span> Iterator::value_type operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *(iter_ - 1); }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">typename</span> Iterator::value_type operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *(iter_ - 1); }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  Iterator iter_;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> };</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_string.html">String</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment">// This is used as a helper type for accessing vectors.</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// Vector::data() assumes the vector elements start after the length field.</span></div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_vector.html"> 218</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_vector.html">Vector</a> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">typedef</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator<T, typename IndirectHelper<T>::mutable_return_type</a>></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">iterator</a>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">typedef</span> <a class="code" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator<T, typename IndirectHelper<T>::return_type</a>></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <a class="code" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">typedef</span> <a class="code" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator<iterator></a> <a class="code" href="structflatbuffers_1_1_vector_reverse_iterator.html">reverse_iterator</a>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">typedef</span> <a class="code" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator<const_iterator></a> <a class="code" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// Deprecated: use size(). Here for backwards compatibility.</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  FLATBUFFERS_ATTRIBUTE(deprecated(<span class="stringliteral">"use size() instead"</span>))</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  uoffset_t Length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size(); }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> IndirectHelper<T>::return_type return_type;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> IndirectHelper<T>::mutable_return_type mutable_return_type;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  return_type Get(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(Data(), i);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  return_type operator[](uoffset_t i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Get(i); }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// If this is a Vector of enums, T will be its storage type, not the enum</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// type. This function makes it convenient to retrieve value with enum</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">// type E.</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">template</span><<span class="keyword">typename</span> E> E GetEnum(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>E<span class="keyword">></span>(Get(i));</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">// If this a vector of unions, this does the cast for you. There's no check</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="comment">// to make sure this is the right type!</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keyword">template</span><<span class="keyword">typename</span> U> <span class="keyword">const</span> U *GetAs(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>U *<span class="keyword">></span>(Get(i));</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="comment">// If this a vector of unions, this does the cast for you. There's no check</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">// to make sure this is actually a string!</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *GetAsString(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> *<span class="keyword">></span>(Get(i));</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> <span class="keywordtype">void</span> *GetStructFromOffset(<span class="keywordtype">size_t</span> o)<span class="keyword"> const </span>{</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">void</span> *<span class="keyword">></span>(Data() + o);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  iterator begin() { <span class="keywordflow">return</span> iterator(Data(), 0); }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), 0); }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  iterator end() { <span class="keywordflow">return</span> iterator(Data(), size()); }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), size()); }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  reverse_iterator rbegin() { <span class="keywordflow">return</span> reverse_iterator(end()); }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  const_reverse_iterator rbegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_reverse_iterator(end()); }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  reverse_iterator rend() { <span class="keywordflow">return</span> reverse_iterator(end()); }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  const_reverse_iterator rend()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_reverse_iterator(end()); }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  const_iterator cbegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> begin(); }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  const_iterator cend()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end(); }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  const_reverse_iterator crbegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rbegin(); }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  const_reverse_iterator crend()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rend(); }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="comment">// Change elements if you have a non-const pointer to this object.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Scalars only. See reflection.h, and the documentation.</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordtype">void</span> Mutate(uoffset_t i, <span class="keyword">const</span> T &val) {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  WriteScalar(data() + i, val);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// Change an element of a vector of tables (or strings).</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// "val" points to the new table/string, as you can obtain from</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">// e.g. reflection::AddFlatBuffer().</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordtype">void</span> MutateOffset(uoffset_t i, <span class="keyword">const</span> uint8_t *val) {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  static_assert(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(uoffset_t), <span class="stringliteral">"Unrelated types"</span>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  WriteScalar(data() + i,</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  static_cast<uoffset_t>(val - (Data() + i * <span class="keyword">sizeof</span>(uoffset_t))));</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">// Get a mutable pointer to tables/strings inside this vector.</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  mutable_return_type GetMutableObject(uoffset_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  FLATBUFFERS_ASSERT(i < size());</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span>mutable_return_type<span class="keyword">></span>(<a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(Data(), i));</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="comment">// The raw data in little endian format. Use with care.</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(&length_ + 1);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  uint8_t *Data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>uint8_t *<span class="keyword">></span>(&length_ + 1); }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// Similarly, but typed, much like std::vector::data</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">const</span> T *data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>T *<span class="keyword">></span>(Data()); }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  T *data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(Data()); }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">template</span><<span class="keyword">typename</span> K> return_type LookupByKey(K key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordtype">void</span> *search_result = std::bsearch(</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  &key, Data(), size(), <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::element_stride</a>, KeyCompare<K>);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (!search_result) {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>; <span class="comment">// Key not found.</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keyword">const</span> uint8_t *element = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(search_result);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(element, 0);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// This class is only used to access pre-existing data. Don't ever</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// try to construct these manually.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a>();</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  uoffset_t length_;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">// This class is a pointer. Copying will therefore create an invalid object.</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="comment">// Private and unimplemented copy constructor.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a> &);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">template</span><<span class="keyword">typename</span> K> <span class="keyword">static</span> <span class="keywordtype">int</span> KeyCompare(<span class="keyword">const</span> <span class="keywordtype">void</span> *ap, <span class="keyword">const</span> <span class="keywordtype">void</span> *bp) {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">const</span> K *key = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>K *<span class="keyword">></span>(ap);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">const</span> uint8_t *data = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(bp);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">auto</span> table = <a class="code" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper<T>::Read</a>(data, 0);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="comment">// std::bsearch compares with the operands transposed, so we negate the</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="comment">// result here.</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">return</span> -table->KeyCompareWithValue(*key);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> };</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// Represent a vector much like the template above, but in this case we</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment">// don't know what the element types are (used with reflection.h).</span></div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_vector_of_any.html"> 358</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a> {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(&length_ + 1);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  }</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  uint8_t *Data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>uint8_t *<span class="keyword">></span>(&length_ + 1); }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a>();</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  uoffset_t length_;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector_of_any.html">VectorOfAny</a> &);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> };</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor">#ifndef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a>> *VectorCast(<a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<U></a>> *ptr) {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  static_assert(std::is_base_of<T, U>::value, <span class="stringliteral">"Unrelated types"</span>);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a><span class="keyword">></span> *>(ptr);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a>> *VectorCast(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<U></a>> *ptr) {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  static_assert(std::is_base_of<T, U>::value, <span class="stringliteral">"Unrelated types"</span>);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classflatbuffers_1_1_vector.html">Vector<Offset<T></a><span class="keyword">></span> *>(ptr);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment">// Convenient helper function to get the length of any vector, regardless</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">// of whether it is null or not (the field is not set).</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> VectorLength(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<T></a> *v) {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">return</span> v ? v->size() : 0;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">// Lexicographically compare two strings (possibly containing nulls), and</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">// return true if the first is less than the second.</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> StringLessThan(<span class="keyword">const</span> <span class="keywordtype">char</span> *a_data, uoffset_t a_size,</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *b_data, uoffset_t b_size) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">const</span> <span class="keyword">auto</span> cmp = memcmp(a_data, b_data, (std::min)(a_size, b_size));</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> cmp == 0 ? a_size < b_size : cmp < 0;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_string.html"> 404</a></span> <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> : <span class="keyword">public</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><char> {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *c_str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">></span>(Data()); }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  std::string str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::string(c_str(), size()); }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> #ifdef FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  flatbuffers::string_view string_view()<span class="keyword"> const </span>{</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> flatbuffers::string_view(c_str(), size());</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"> #endif // FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordtype">bool</span> operator<(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> &o)<span class="keyword"> const </span>{</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">return</span> StringLessThan(this->data(), this->size(), o.data(), o.size());</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> };</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="comment">// Convenience function to get std::string from a String returning an empty</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="comment">// string on null pointer.</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword">static</span> <span class="keyword">inline</span> std::string GetString(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> * str) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">return</span> str ? str->str() : <span class="stringliteral">""</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">// Convenience function to get char* from a String returning an empty string on</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment">// null pointer.</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * GetCstring(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> * str) {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">return</span> str ? str->c_str() : <span class="stringliteral">""</span>;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="comment">// Allocator interface. This is flatbuffers-specific and meant only for</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="comment">// `vector_downward` usage.</span></div><div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_allocator.html"> 435</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> {</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keyword">virtual</span> ~<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a>() {}</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="comment">// Allocate `size` bytes of memory.</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keyword">virtual</span> uint8_t *allocate(<span class="keywordtype">size_t</span> size) = 0;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="comment">// Deallocate `size` bytes of memory at `p` allocated by this allocator.</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate(uint8_t *p, <span class="keywordtype">size_t</span> size) = 0;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="comment">// Reallocate `new_size` bytes of memory, replacing the old region of size</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="comment">// `old_size` at `p`. In contrast to a normal realloc, this grows downwards,</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="comment">// and is intended specifcally for `vector_downward` use.</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="comment">// `in_use_back` and `in_use_front` indicate how much of `old_size` is</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="comment">// actually in use at each end, and needs to be copied.</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">virtual</span> uint8_t *reallocate_downward(uint8_t *old_p, <span class="keywordtype">size_t</span> old_size,</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordtype">size_t</span> new_size, <span class="keywordtype">size_t</span> in_use_back,</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordtype">size_t</span> in_use_front) {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  FLATBUFFERS_ASSERT(new_size > old_size); <span class="comment">// vector_downward only grows</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  uint8_t *new_p = allocate(new_size);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  memcpy_downward(old_p, old_size, new_p, new_size, in_use_back,</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  in_use_front);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  deallocate(old_p, old_size);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">return</span> new_p;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keyword">protected</span>:</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="comment">// Called by `reallocate_downward` to copy memory from `old_p` of `old_size`</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="comment">// to `new_p` of `new_size`. Only memory of size `in_use_front` and</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="comment">// `in_use_back` will be copied from the front and back of the old memory</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="comment">// allocation.</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordtype">void</span> memcpy_downward(uint8_t *old_p, <span class="keywordtype">size_t</span> old_size,</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  uint8_t *new_p, <span class="keywordtype">size_t</span> new_size,</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordtype">size_t</span> in_use_back, <span class="keywordtype">size_t</span> in_use_front) {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  memcpy(new_p + new_size - in_use_back, old_p + old_size - in_use_back,</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  in_use_back);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  memcpy(new_p, old_p, in_use_front);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> };</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">// DefaultAllocator uses new/delete to allocate memory regions</span></div><div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_default_allocator.html"> 476</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a> : <span class="keyword">public</span> <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  uint8_t *allocate(<span class="keywordtype">size_t</span> size) FLATBUFFERS_OVERRIDE {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> uint8_t[size];</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordtype">void</span> deallocate(uint8_t *p, <span class="keywordtype">size_t</span>) FLATBUFFERS_OVERRIDE {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">delete</span>[] p;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> dealloc(<span class="keywordtype">void</span> *p, <span class="keywordtype">size_t</span>) {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keyword">delete</span>[] <span class="keyword">static_cast<</span>uint8_t *<span class="keyword">></span>(p);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> };</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="comment">// These functions allow for a null allocator to mean use the default allocator,</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment">// as used by DetachedBuffer and vector_downward below.</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment">// This is to avoid having a statically or dynamically allocated default</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="comment">// allocator, or having to move it between the classes that may own it.</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keyword">inline</span> uint8_t *Allocate(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, <span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">return</span> allocator ? allocator->allocate(size)</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  : <a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a>().allocate(size);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> Deallocate(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, uint8_t *p, <span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">if</span> (allocator) allocator->deallocate(p, size);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">else</span> <a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a>().deallocate(p, size);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">inline</span> uint8_t *ReallocateDownward(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, uint8_t *old_p,</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordtype">size_t</span> old_size, <span class="keywordtype">size_t</span> new_size,</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordtype">size_t</span> in_use_back, <span class="keywordtype">size_t</span> in_use_front) {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">return</span> allocator</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  ? allocator->reallocate_downward(old_p, old_size, new_size,</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  in_use_back, in_use_front)</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  : <a class="code" href="classflatbuffers_1_1_default_allocator.html">DefaultAllocator</a>().reallocate_downward(old_p, old_size, new_size,</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  in_use_back, in_use_front);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="comment">// DetachedBuffer is a finished flatbuffer memory region, detached from its</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="comment">// builder. The original memory region and allocator are also stored so that</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="comment">// the DetachedBuffer can manage the memory lifetime.</span></div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_detached_buffer.html"> 518</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> {</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>()</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  : allocator_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  own_allocator_(<span class="keyword">false</span>),</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  buf_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  reserved_(0),</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  cur_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  size_(0) {}</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>(<a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator, <span class="keywordtype">bool</span> own_allocator, uint8_t *buf,</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordtype">size_t</span> reserved, uint8_t *cur, <span class="keywordtype">size_t</span> sz)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  : allocator_(allocator),</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  own_allocator_(own_allocator),</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  buf_(buf),</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  reserved_(reserved),</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  cur_(cur),</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  size_(sz) {}</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>(<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &&other)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  : allocator_(other.allocator_),</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  own_allocator_(other.own_allocator_),</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  buf_(other.buf_),</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  reserved_(other.reserved_),</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  cur_(other.cur_),</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  size_(other.size_) {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  other.reset();</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"> #endif // !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &operator=(<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &&other) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  destroy();</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  allocator_ = other.allocator_;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  own_allocator_ = other.own_allocator_;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  buf_ = other.buf_;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  reserved_ = other.reserved_;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  cur_ = other.cur_;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  size_ = other.size_;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  other.reset();</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> #endif // !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  ~<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>() { destroy(); }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keyword">const</span> uint8_t *data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> cur_; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  uint8_t *data() { <span class="keywordflow">return</span> cur_; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordtype">size_t</span> size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; }</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> #if 0 // disabled for now due to the ordering of classes in this header</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordtype">bool</span> Verify()<span class="keyword"> const </span>{</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  Verifier verifier(data(), size());</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">return</span> verifier.Verify<T>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keyword">const</span> T* GetRoot()<span class="keyword"> const </span>{</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">return</span> flatbuffers::GetRoot<T>(data());</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  T* GetRoot() {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">return</span> flatbuffers::GetRoot<T>(data());</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="comment">// These may change access mode, leave these at end of public section</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  FLATBUFFERS_DELETE_FUNC(<a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &other))</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  FLATBUFFERS_DELETE_FUNC(</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &<span class="keyword">operator</span>=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> &other))</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="preprocessor">#endif // !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator_;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordtype">bool</span> own_allocator_;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  uint8_t *buf_;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordtype">size_t</span> reserved_;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  uint8_t *cur_;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordtype">size_t</span> size_;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> destroy() {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span> (buf_) Deallocate(allocator_, buf_, reserved_);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">if</span> (own_allocator_ && allocator_) { <span class="keyword">delete</span> allocator_; }</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  reset();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> reset() {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  allocator_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  reserved_ = 0;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  cur_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  size_ = 0;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> };</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment">// This is a minimal replication of std::vector<uint8_t> functionality,</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">// except growing from higher to lower addresses. i.e push_back() inserts data</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment">// in the lowest address in the vector.</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment">// Since this vector leaves the lower part unused, we support a "scratch-pad"</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment">// that can be stored there for temporary data, to share the allocated space.</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="comment">// Essentially, this supports 2 std::vectors in a single buffer.</span></div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1vector__downward.html"> 643</a></span> <span class="keyword">class </span><a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keyword">explicit</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<span class="keywordtype">size_t</span> initial_size,</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator,</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordtype">bool</span> own_allocator,</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordtype">size_t</span> buffer_minalign)</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  : allocator_(allocator),</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  own_allocator_(own_allocator),</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  initial_size_(initial_size),</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  buffer_minalign_(buffer_minalign),</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  reserved_(0),</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  buf_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  cur_(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  scratch_(<span class="keyword">nullptr</span>) {}</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &&other)</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="preprocessor">#else</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &other)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="preprocessor">#endif // defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  : allocator_(other.allocator_),</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  own_allocator_(other.own_allocator_),</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  initial_size_(other.initial_size_),</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  buffer_minalign_(other.buffer_minalign_),</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  reserved_(other.reserved_),</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  buf_(other.buf_),</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  cur_(other.cur_),</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  scratch_(other.scratch_) {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="comment">// No change in other.allocator_</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="comment">// No change in other.initial_size_</span></div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="comment">// No change in other.buffer_minalign_</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  other.own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  other.reserved_ = 0;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  other.buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  other.cur_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  other.scratch_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &operator=(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &&other) {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="comment">// Move construct a temporary and swap idiom</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> temp(std::move(other));</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  swap(temp);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"> #endif // defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  ~<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>() {</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  clear_buffer();</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  clear_allocator();</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordtype">void</span> reset() {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  clear_buffer();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  clear();</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  }</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordtype">void</span> clear() {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">if</span> (buf_) {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  cur_ = buf_ + reserved_;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  reserved_ = 0;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  cur_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  clear_scratch();</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  }</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordtype">void</span> clear_scratch() {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  scratch_ = buf_;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordtype">void</span> clear_allocator() {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">if</span> (own_allocator_ && allocator_) { <span class="keyword">delete</span> allocator_; }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  allocator_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordtype">void</span> clear_buffer() {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">if</span> (buf_) Deallocate(allocator_, buf_, reserved_);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="comment">// Relinquish the pointer to the caller.</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  uint8_t *release_raw(<span class="keywordtype">size_t</span> &allocated_bytes, <span class="keywordtype">size_t</span> &offset) {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="keyword">auto</span> *buf = buf_;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  allocated_bytes = reserved_;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  offset = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(cur_ - buf_);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="comment">// release_raw only relinquishes the buffer ownership.</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="comment">// Does not deallocate or reset the allocator. Destructor will do that.</span></div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  clear();</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">return</span> buf;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> </div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="comment">// Relinquish the pointer to the caller.</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> release() {</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="comment">// allocator ownership (if any) is transferred to DetachedBuffer.</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> fb(allocator_, own_allocator_, buf_, reserved_, cur_,</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  size());</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">if</span> (own_allocator_) {</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  allocator_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  own_allocator_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  }</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  buf_ = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  clear();</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">return</span> fb;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  }</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="keywordtype">size_t</span> ensure_space(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  FLATBUFFERS_ASSERT(cur_ >= scratch_ && scratch_ >= buf_);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">if</span> (len > static_cast<size_t>(cur_ - scratch_)) { reallocate(len); }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="comment">// Beyond this, signed offsets may not have enough range:</span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="comment">// (FlatBuffers > 2GB not supported).</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  FLATBUFFERS_ASSERT(size() < FLATBUFFERS_MAX_BUFFER_SIZE);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">return</span> len;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keyword">inline</span> uint8_t *make_space(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordtype">size_t</span> space = ensure_space(len);</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  cur_ -= space;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">return</span> cur_;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span> </div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="comment">// Returns nullptr if using the DefaultAllocator.</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *get_custom_allocator() { <span class="keywordflow">return</span> allocator_; }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span> </div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  uoffset_t size()<span class="keyword"> const </span>{</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uoffset_t<span class="keyword">></span>(reserved_ - (cur_ - buf_));</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span> </div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  uoffset_t scratch_size()<span class="keyword"> const </span>{</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uoffset_t<span class="keyword">></span>(scratch_ - buf_);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordtype">size_t</span> capacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> reserved_; }</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span> </div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  uint8_t *data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  FLATBUFFERS_ASSERT(cur_);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">return</span> cur_;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  uint8_t *scratch_data()<span class="keyword"> const </span>{</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  FLATBUFFERS_ASSERT(buf_);</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">return</span> buf_;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> </div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  uint8_t *scratch_end()<span class="keyword"> const </span>{</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  FLATBUFFERS_ASSERT(scratch_);</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">return</span> scratch_;</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  uint8_t *data_at(<span class="keywordtype">size_t</span> offset)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_ + reserved_ - offset; }</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span> </div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keywordtype">void</span> push(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> num) {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  memcpy(make_space(num), bytes, num);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="comment">// Specialized version of push() that avoids memcpy call for small data.</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> push_small(<span class="keyword">const</span> T &little_endian_t) {</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  make_space(<span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  *<span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(cur_) = little_endian_t;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  }</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> scratch_push_small(<span class="keyword">const</span> T &t) {</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  ensure_space(<span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  *<span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(scratch_) = t;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  scratch_ += <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="comment">// fill() is most frequently called with small byte counts (<= 4),</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="comment">// which is why we're using loops rather than calling memset.</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordtype">void</span> fill(<span class="keywordtype">size_t</span> zero_pad_bytes) {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  make_space(zero_pad_bytes);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < zero_pad_bytes; i++) cur_[i] = 0;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="comment">// Version for when we know the size is larger.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordtype">void</span> fill_big(<span class="keywordtype">size_t</span> zero_pad_bytes) {</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  memset(make_space(zero_pad_bytes), 0, zero_pad_bytes);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordtype">void</span> pop(<span class="keywordtype">size_t</span> bytes_to_remove) { cur_ += bytes_to_remove; }</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordtype">void</span> scratch_pop(<span class="keywordtype">size_t</span> bytes_to_remove) { scratch_ -= bytes_to_remove; }</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordtype">void</span> swap(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &other) {</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  swap(allocator_, other.allocator_);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  swap(own_allocator_, other.own_allocator_);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  swap(initial_size_, other.initial_size_);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  swap(buffer_minalign_, other.buffer_minalign_);</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  swap(reserved_, other.reserved_);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  swap(buf_, other.buf_);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  swap(cur_, other.cur_);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  swap(scratch_, other.scratch_);</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  }</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordtype">void</span> swap_allocator(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &other) {</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  swap(allocator_, other.allocator_);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  swap(own_allocator_, other.own_allocator_);</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  }</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> </div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="comment">// You shouldn't really be copying instances of this class.</span></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  FLATBUFFERS_DELETE_FUNC(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &))</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  FLATBUFFERS_DELETE_FUNC(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &<span class="keyword">operator</span>=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &))</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator_;</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordtype">bool</span> own_allocator_;</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordtype">size_t</span> initial_size_;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keywordtype">size_t</span> buffer_minalign_;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordtype">size_t</span> reserved_;</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  uint8_t *buf_;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  uint8_t *cur_; <span class="comment">// Points at location between empty (below) and used (above).</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  uint8_t *scratch_; <span class="comment">// Points to the end of the scratchpad in use.</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span> </div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordtype">void</span> reallocate(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keyword">auto</span> old_reserved = reserved_;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keyword">auto</span> old_size = size();</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keyword">auto</span> old_scratch_size = scratch_size();</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  reserved_ += (std::max)(len,</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  old_reserved ? old_reserved / 2 : initial_size_);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  reserved_ = (reserved_ + buffer_minalign_ - 1) & ~(buffer_minalign_ - 1);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">if</span> (buf_) {</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  buf_ = ReallocateDownward(allocator_, buf_, old_reserved, reserved_,</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  old_size, old_scratch_size);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  buf_ = Allocate(allocator_, reserved_);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  cur_ = buf_ + reserved_ - old_size;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  scratch_ = buf_ + old_scratch_size;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span> };</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="comment">// Converts a Field ID to a virtual table offset.</span></div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keyword">inline</span> voffset_t FieldIndexToOffset(voffset_t field_id) {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="comment">// Should correspond to what EndTable() below builds up.</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> fixed_fields = 2; <span class="comment">// Vtable size and Object Size.</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>voffset_t<span class="keyword">></span>((field_id + fixed_fields) * <span class="keyword">sizeof</span>(voffset_t));</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span> }</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Alloc></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="keyword">const</span> T *data(<span class="keyword">const</span> std::vector<T, Alloc> &v) {</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="keywordflow">return</span> v.empty() ? nullptr : &v.front();</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Alloc> T *data(std::vector<T, Alloc> &v) {</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="keywordflow">return</span> v.empty() ? nullptr : &v.front();</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> }</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="comment"></span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="comment">/// @endcond</span></div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="comment">/// @addtogroup flatbuffers_cpp_api</span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment">/// @{</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment">/// @class FlatBufferBuilder</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment">/// @brief Helper class to hold data needed in creation of a FlatBuffer.</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="comment">/// To serialize data, you typically call one of the `Create*()` functions in</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment">/// the generated code, which in turn call a sequence of `StartTable`/</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment">/// `PushElement`/`AddElement`/`EndTable`, or the builtin `CreateString`/</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment">/// `CreateVector` functions. Do this is depth-first order to build up a tree to</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment">/// the root. `Finish()` wraps up the buffer ready for transport.</span></div><div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html"> 910</a></span> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment"> /// @brief Default constructor for FlatBufferBuilder.</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="comment"> /// @param[in] initial_size The initial size of the buffer, in bytes. Defaults</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="comment"> /// to `1024`.</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment"> /// @param[in] allocator An `Allocator` to use. If null will use</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment"> /// `DefaultAllocator`.</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="comment"> /// @param[in] own_allocator Whether the builder/vector should own the</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment"> /// allocator. Defaults to / `false`.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment"> /// @param[in] buffer_minalign Force the buffer to be aligned to the given</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment"> /// minimum alignment upon reallocation. Only needed if you intend to store</span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="comment"> /// types with custom alignment AND you wish to read the buffer in-place</span></div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="comment"> /// directly after creation.</span></div><div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c"> 923</a></span> <span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">FlatBufferBuilder</a>(<span class="keywordtype">size_t</span> initial_size = 1024,</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <a class="code" href="classflatbuffers_1_1_allocator.html">Allocator</a> *allocator = <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="keywordtype">bool</span> own_allocator = <span class="keyword">false</span>,</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keywordtype">size_t</span> buffer_minalign =</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  AlignOf<largest_scalar_t>())</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  : buf_(initial_size, allocator, own_allocator, buffer_minalign),</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  num_field_loc(0),</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  max_voffset_(0),</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  nested(false),</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  finished(false),</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  minalign_(1),</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  force_defaults_(false),</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  dedup_vtables_(true),</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  string_pool(nullptr) {</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  EndianCheck();</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  }</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">// clang-format off</span><span class="comment"></span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment"> /// @brief Move constructor for FlatBufferBuilder.</span></div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment"></span><span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00943"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091"> 943</a></span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091">FlatBufferBuilder</a>(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &&other)</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="preprocessor">#else</span></div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other)</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="preprocessor">#endif // #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  : buf_(1024, <span class="keyword">nullptr</span>, <span class="keyword">false</span>, AlignOf<largest_scalar_t>()),</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  num_field_loc(0),</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  max_voffset_(0),</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  nested(<span class="keyword">false</span>),</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  finished(<span class="keyword">false</span>),</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  minalign_(1),</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  force_defaults_(<span class="keyword">false</span>),</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  dedup_vtables_(<span class="keyword">true</span>),</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  string_pool(<span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  EndianCheck();</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="comment">// Default construct and swap idiom.</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="comment">// Lack of delegating constructors in vs2010 makes it more verbose than needed.</span></div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  Swap(other);</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  }</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span> </div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="preprocessor"> #if !defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="comment">// clang-format on</span><span class="comment"></span></div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment"> /// @brief Move assignment operator for FlatBufferBuilder.</span></div><div class="line"><a name="l00967"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38"> 967</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38">operator=</a>(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &&other) {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="comment">// Move construct a temporary and swap idiom</span></div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> temp(std::move(other));</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  Swap(temp);</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  }</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="preprocessor"> #endif // defined(FLATBUFFERS_CPP98_STL)</span></div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span> </div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordtype">void</span> Swap(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other) {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  buf_.swap(other.buf_);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  swap(num_field_loc, other.num_field_loc);</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  swap(max_voffset_, other.max_voffset_);</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  swap(nested, other.nested);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  swap(finished, other.finished);</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  swap(minalign_, other.minalign_);</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  swap(force_defaults_, other.force_defaults_);</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  swap(dedup_vtables_, other.dedup_vtables_);</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  swap(string_pool, other.string_pool);</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  }</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  ~<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>() {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keywordflow">if</span> (string_pool) <span class="keyword">delete</span> string_pool;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span> </div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordtype">void</span> Reset() {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  Clear(); <span class="comment">// clear builder state</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  buf_.reset(); <span class="comment">// deallocate buffer</span></div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment"></span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment"> /// @brief Reset all the state in this FlatBufferBuilder so it can be reused</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment"> /// to construct another buffer.</span></div><div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412"> 1001</a></span> <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">Clear</a>() {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  ClearOffsets();</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  buf_.clear();</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  nested = <span class="keyword">false</span>;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  finished = <span class="keyword">false</span>;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  minalign_ = 1;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordflow">if</span> (string_pool) string_pool->clear();</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment"></span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment"> /// @brief The current size of the serialized buffer, counting from the end.</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment"> /// @return Returns an `uoffset_t` with the current size of the buffer.</span></div><div class="line"><a name="l01012"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f"> 1012</a></span> <span class="comment"></span> uoffset_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">GetSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.size(); }</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment"></span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment"> /// @brief Get the serialized buffer (after you call `Finish()`).</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment"> /// @return Returns an `uint8_t` pointer to the FlatBuffer data inside the</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment"> /// buffer.</span></div><div class="line"><a name="l01017"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83"> 1017</a></span> <span class="comment"></span> uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83">GetBufferPointer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  Finished();</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="keywordflow">return</span> buf_.data();</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  }</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment"></span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment"> /// @brief Get a pointer to an unfinished buffer.</span></div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment"> /// @return Returns a `uint8_t` pointer to the unfinished buffer.</span></div><div class="line"><a name="l01024"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41"> 1024</a></span> <span class="comment"></span> uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">GetCurrentBufferPointer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.data(); }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment"></span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment"> /// @brief Get the released pointer to the serialized buffer.</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment"> /// @warning Do NOT attempt to use this FlatBufferBuilder afterwards!</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="comment"> /// @return A `FlatBuffer` that owns the buffer and its allocator and</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment"> /// behaves similar to a `unique_ptr` with a deleter.</span></div><div class="line"><a name="l01030"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42"> 1030</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42">FLATBUFFERS_ATTRIBUTE</a>(deprecated(<span class="stringliteral">"use Release() instead"</span>)) <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a></div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  ReleaseBufferPointer() {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  Finished();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">return</span> buf_.release();</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  }</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment"></span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="comment"> /// @brief Get the released DetachedBuffer.</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment"> /// @return A `DetachedBuffer` that owns the buffer and its allocator.</span></div><div class="line"><a name="l01038"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45"> 1038</a></span> <span class="comment"></span> <a class="code" href="classflatbuffers_1_1_detached_buffer.html">DetachedBuffer</a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">Release</a>() {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  Finished();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keywordflow">return</span> buf_.release();</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  }</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment"></span></div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment"> /// @brief Get the released pointer to the serialized buffer.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment"> /// @param The size of the memory block containing</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="comment"> /// the serialized `FlatBuffer`.</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="comment"> /// @param The offset from the released pointer where the finished</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment"> /// `FlatBuffer` starts.</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment"> /// @return A raw pointer to the start of the memory block containing</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment"> /// the serialized `FlatBuffer`.</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment"> /// @remark If the allocator is owned, it gets deleted when the destructor is called..</span></div><div class="line"><a name="l01051"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416"> 1051</a></span> <span class="comment"></span> uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">ReleaseRaw</a>(<span class="keywordtype">size_t</span> &size, <span class="keywordtype">size_t</span> &offset) {</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  Finished();</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">return</span> buf_.release_raw(size, offset);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment"></span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="comment"> /// @brief get the minimum alignment this buffer needs to be accessed</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment"> /// properly. This is only known once all elements have been written (after</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment"> /// you call Finish()). You can use this information if you need to embed</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment"> /// a FlatBuffer in some other buffer, such that you can later read it</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment"> /// without first having to copy it into its own buffer.</span></div><div class="line"><a name="l01061"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b"> 1061</a></span> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b">GetBufferMinAlignment</a>() {</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  Finished();</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">return</span> minalign_;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment"></span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment"></span> <span class="keywordtype">void</span> Finished()<span class="keyword"> const </span>{</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="comment">// If you get this assert, you're attempting to get access a buffer</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="comment">// which hasn't been finished yet. Be sure to call</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="comment">// FlatBufferBuilder::Finish with your root table.</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="comment">// If you really need to access an unfinished buffer, call</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// GetCurrentBufferPointer instead.</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  FLATBUFFERS_ASSERT(finished);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  }<span class="comment"></span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment"> /// @brief In order to save space, fields that are set to their default value</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment"> /// don't get serialized into the buffer.</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment"> /// @param[in] bool fd When set to `true`, always serializes default values that are set.</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="comment"> /// Optional fields which are not set explicitly, will still not be serialized.</span></div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a"> 1081</a></span> <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">ForceDefaults</a>(<span class="keywordtype">bool</span> fd) { force_defaults_ = fd; }</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment"></span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment"> /// @brief By default vtables are deduped in order to save space.</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="comment"> /// @param[in] bool dedup When set to `true`, dedup vtables.</span></div><div class="line"><a name="l01085"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961"> 1085</a></span> <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">DedupVtables</a>(<span class="keywordtype">bool</span> dedup) { dedup_vtables_ = dedup; }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment"></span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment"></span> <span class="keywordtype">void</span> Pad(<span class="keywordtype">size_t</span> num_bytes) { buf_.fill(num_bytes); }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="keywordtype">void</span> TrackMinAlign(<span class="keywordtype">size_t</span> elem_size) {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="keywordflow">if</span> (elem_size > minalign_) minalign_ = elem_size;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  }</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keywordtype">void</span> Align(<span class="keywordtype">size_t</span> elem_size) {</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  TrackMinAlign(elem_size);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  buf_.fill(PaddingBytes(buf_.size(), elem_size));</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  }</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="keywordtype">void</span> PushFlatBuffer(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  PushBytes(bytes, size);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  finished = <span class="keyword">true</span>;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  }</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> </div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordtype">void</span> PushBytes(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> size) { buf_.push(bytes, size); }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <span class="keywordtype">void</span> PopBytes(<span class="keywordtype">size_t</span> amount) { buf_.pop(amount); }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AssertScalarT() {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="comment">// The code assumes power of 2 sizes and endian-swap-ability.</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  static_assert(flatbuffers::is_scalar<T>::value, <span class="stringliteral">"T must be a scalar type"</span>);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  }</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <span class="comment">// Write a single aligned scalar to the buffer</span></div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> uoffset_t PushElement(T element) {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  AssertScalarT<T>();</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  T litle_endian_element = EndianScalar(element);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  Align(<span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  buf_.push_small(litle_endian_element);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="keywordflow">return</span> GetSize();</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  }</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> uoffset_t PushElement(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> off) {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="comment">// Special case for offsets: see ReferTo below.</span></div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordflow">return</span> PushElement(ReferTo(off.o));</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  }</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="comment">// When writing fields, we track where they are, so we can create correct</span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="comment">// vtables later.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordtype">void</span> TrackField(voffset_t field, uoffset_t off) {</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a> fl = { off, field };</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  buf_.scratch_push_small(fl);</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  num_field_loc++;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  max_voffset_ = (std::max)(max_voffset_, field);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  }</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="comment">// Like PushElement, but additionally tracks the field this represents.</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AddElement(voffset_t field, T e, T def) {</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="comment">// We don't serialize values equal to the default.</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordflow">if</span> (IsTheSameAs(e, def) && !force_defaults_) <span class="keywordflow">return</span>;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keyword">auto</span> off = PushElement(e);</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  TrackField(field, off);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  }</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AddOffset(voffset_t field, <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> off) {</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">if</span> (off.IsNull()) <span class="keywordflow">return</span>; <span class="comment">// Don't store.</span></div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  AddElement(field, ReferTo(off.o), static_cast<uoffset_t>(0));</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  }</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> AddStruct(voffset_t field, <span class="keyword">const</span> T *structptr) {</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">if</span> (!structptr) <span class="keywordflow">return</span>; <span class="comment">// Default, don't store.</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  Align(AlignOf<T>());</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  buf_.push_small(*structptr);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  TrackField(field, GetSize());</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  }</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> </div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="keywordtype">void</span> AddStructOffset(voffset_t field, uoffset_t off) {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  TrackField(field, off);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  }</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="comment">// Offsets initially are relative to the end of the buffer (downwards).</span></div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="comment">// This function converts them to be relative to the current location</span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="comment">// in the buffer (when stored here), pointing upwards.</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  uoffset_t ReferTo(uoffset_t off) {</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <span class="comment">// Align to ensure GetSize() below is correct.</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  Align(<span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="comment">// Offset must refer to something already in buffer.</span></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  FLATBUFFERS_ASSERT(off && off <= GetSize());</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keywordflow">return</span> GetSize() - off + <span class="keyword">static_cast<</span>uoffset_t<span class="keyword">></span>(<span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> </div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  <span class="keywordtype">void</span> NotNested() {</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="comment">// If you hit this, you're trying to construct a Table/Vector/String</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <span class="comment">// during the construction of its parent table (between the MyTableBuilder</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="comment">// and table.Finish().</span></div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="comment">// Move the creation of these sub-objects to above the MyTableBuilder to</span></div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="comment">// not get this assert.</span></div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="comment">// Ignoring this assert may appear to work in simple cases, but the reason</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="comment">// it is here is that storing objects in-line may cause vtable offsets</span></div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="comment">// to not fit anymore. It also leads to vtable duplication.</span></div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  FLATBUFFERS_ASSERT(!nested);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="comment">// If you hit this, fields were added outside the scope of a table.</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  FLATBUFFERS_ASSERT(!num_field_loc);</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  }</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="comment">// From generated code (or from the parser), we call StartTable/EndTable</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="comment">// with a sequence of AddElement calls in between.</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  uoffset_t StartTable() {</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  NotNested();</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  nested = <span class="keyword">true</span>;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  <span class="keywordflow">return</span> GetSize();</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  }</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <span class="comment">// This finishes one serialized object by generating the vtable if it's a</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="comment">// table, comparing it against existing vtables, and writing the</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <span class="comment">// resulting vtable offset.</span></div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  uoffset_t EndTable(uoffset_t start) {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="comment">// If you get this assert, a corresponding StartTable wasn't called.</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  FLATBUFFERS_ASSERT(nested);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  <span class="comment">// Write the vtable offset, which is the start of any Table.</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="comment">// We fill it's value later.</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keyword">auto</span> vtableoffsetloc = PushElement<soffset_t>(0);</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  <span class="comment">// Write a vtable, which consists entirely of voffset_t elements.</span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="comment">// It starts with the number of offsets, followed by a type id, followed</span></div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  <span class="comment">// by the offsets themselves. In reverse:</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="comment">// Include space for the last offset and ensure empty tables have a</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <span class="comment">// minimum size.</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  max_voffset_ =</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  (std::max)(static_cast<voffset_t>(max_voffset_ + <span class="keyword">sizeof</span>(voffset_t)),</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  FieldIndexToOffset(0));</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  buf_.fill_big(max_voffset_);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keyword">auto</span> table_object_size = vtableoffsetloc - start;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  <span class="comment">// Vtable use 16bit offsets.</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  FLATBUFFERS_ASSERT(table_object_size < 0x10000);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  WriteScalar<voffset_t>(buf_.data() + <span class="keyword">sizeof</span>(voffset_t),</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  static_cast<voffset_t>(table_object_size));</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  WriteScalar<voffset_t>(buf_.data(), max_voffset_);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="comment">// Write the offsets into the table</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = buf_.scratch_end() - num_field_loc * <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a>);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  it < buf_.scratch_end(); it += <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a>)) {</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  <span class="keyword">auto</span> field_location = <span class="keyword">reinterpret_cast<</span><a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a> *<span class="keyword">></span>(it);</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keyword">auto</span> pos = <span class="keyword">static_cast<</span>voffset_t<span class="keyword">></span>(vtableoffsetloc - field_location->off);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  <span class="comment">// If this asserts, it means you've set a field twice.</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  FLATBUFFERS_ASSERT(</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  !ReadScalar<voffset_t>(buf_.data() + field_location->id));</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  WriteScalar<voffset_t>(buf_.data() + field_location->id, pos);</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  }</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  ClearOffsets();</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  <span class="keyword">auto</span> vt1 = <span class="keyword">reinterpret_cast<</span>voffset_t *<span class="keyword">></span>(buf_.data());</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <span class="keyword">auto</span> vt1_size = ReadScalar<voffset_t>(vt1);</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  <span class="keyword">auto</span> vt_use = GetSize();</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  <span class="comment">// See if we already have generated a vtable with this exact same</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  <span class="comment">// layout before. If so, make it point to the old one, remove this one.</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  <span class="keywordflow">if</span> (dedup_vtables_) {</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = buf_.scratch_data(); it < buf_.scratch_end();</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  it += <span class="keyword">sizeof</span>(uoffset_t)) {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <span class="keyword">auto</span> vt_offset_ptr = <span class="keyword">reinterpret_cast<</span>uoffset_t *<span class="keyword">></span>(it);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keyword">auto</span> vt2 = <span class="keyword">reinterpret_cast<</span>voffset_t *<span class="keyword">></span>(buf_.data_at(*vt_offset_ptr));</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  <span class="keyword">auto</span> vt2_size = *vt2;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">if</span> (vt1_size != vt2_size || 0 != memcmp(vt2, vt1, vt1_size)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  vt_use = *vt_offset_ptr;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  buf_.pop(GetSize() - vtableoffsetloc);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  }</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="comment">// If this is a new vtable, remember it.</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="keywordflow">if</span> (vt_use == GetSize()) { buf_.scratch_push_small(vt_use); }</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="comment">// Fill the vtable offset we created above.</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <span class="comment">// The offset points from the beginning of the object to where the</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="comment">// vtable is stored.</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="comment">// Offsets default direction is downward in memory for future format</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <span class="comment">// flexibility (storing all vtables at the start of the file).</span></div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  WriteScalar(buf_.data_at(vtableoffsetloc),</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="keyword">static_cast<</span>soffset_t<span class="keyword">></span>(vt_use) -</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  static_cast<soffset_t>(vtableoffsetloc));</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> </div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  nested = <span class="keyword">false</span>;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <span class="keywordflow">return</span> vtableoffsetloc;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  }</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> </div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  FLATBUFFERS_ATTRIBUTE(deprecated(<span class="stringliteral">"call the version above instead"</span>))</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  uoffset_t EndTable(uoffset_t start, voffset_t <span class="comment">/*numfields*/</span>) {</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <span class="keywordflow">return</span> EndTable(start);</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  }</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="comment">// This checks a required field has been set in a given table that has</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <span class="comment">// just been constructed.</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> Required(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> table, voffset_t field);</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  uoffset_t StartStruct(<span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  Align(alignment);</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordflow">return</span> GetSize();</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  uoffset_t EndStruct() { <span class="keywordflow">return</span> GetSize(); }</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> </div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  <span class="keywordtype">void</span> ClearOffsets() {</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  buf_.scratch_pop(num_field_loc * <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a>));</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  num_field_loc = 0;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  max_voffset_ = 0;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  }</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  <span class="comment">// Aligns such that when "len" bytes are written, an object can be written</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <span class="comment">// after it with "alignment" without padding.</span></div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  <span class="keywordtype">void</span> PreAlign(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  TrackMinAlign(alignment);</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  buf_.fill(PaddingBytes(GetSize() + len, alignment));</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  }</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> PreAlign(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  AssertScalarT<T>();</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  PreAlign(len, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  }<span class="comment"></span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment"> /// @param[in] str A const char pointer to the data to be stored as a string.</span></div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment"> /// @param[in] len The number of bytes that should be stored from `str`.</span></div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01298"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe"> 1298</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  NotNested();</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  PreAlign<uoffset_t>(len + 1); <span class="comment">// Always 0-terminated.</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  buf_.fill(1);</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  PushBytes(reinterpret_cast<const uint8_t *>(str), len);</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  PushElement(static_cast<uoffset_t>(len));</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a>(GetSize());</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  }</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment"></span></div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment"> /// @brief Store a string in the buffer, which is null-terminated.</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment"> /// @param[in] str A const char pointer to a C-string to add to the buffer.</span></div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01310"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5"> 1310</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">CreateString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str) {</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  <span class="keywordflow">return</span> CreateString(str, strlen(str));</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  }</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment"></span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment"> /// @brief Store a string in the buffer, which is null-terminated.</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment"> /// @param[in] str A char pointer to a C-string to add to the buffer.</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01317"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154"> 1317</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154">CreateString</a>(<span class="keywordtype">char</span> *str) {</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="keywordflow">return</span> CreateString(str, strlen(str));</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  }</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment"></span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="comment"> /// @param[in] str A const reference to a std::string to store in the buffer.</span></div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01324"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f"> 1324</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">CreateString</a>(<span class="keyword">const</span> std::string &str) {</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">return</span> CreateString(str.c_str(), str.length());</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  }</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> </div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="preprocessor"> #ifdef FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment"></span><span class="comment"> /// @param[in] str A const string_view to copy in to the buffer.</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment"></span><span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01333"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6"> 1333</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6">CreateString</a>(flatbuffers::string_view str) {</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keywordflow">return</span> CreateString(str.data(), str.size());</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  }</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="preprocessor"> #endif // FLATBUFFERS_HAS_STRING_VIEW</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment"></span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment"> /// @param[in] str A const pointer to a `String` struct to add to the buffer.</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts</span></div><div class="line"><a name="l01342"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506"> 1342</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">CreateString</a>(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *str) {</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  <span class="keywordflow">return</span> str ? CreateString(str->c_str(), str->size()) : 0;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  }</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="comment"></span></div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment"> /// @param[in] str A const reference to a std::string like type with support</span></div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment"> /// of T::c_str() and T::length() to store in the buffer.</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01350"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685"> 1350</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685">CreateString</a>(<span class="keyword">const</span> T &str) {</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">return</span> CreateString(str.c_str(), str.length());</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment"></span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment"> /// @param[in] str A const char pointer to the data to be stored as a string.</span></div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> <span class="comment"> /// @param[in] len The number of bytes that should be stored from `str`.</span></div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01360"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1"> 1360</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keywordflow">if</span> (!string_pool)</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  string_pool = <span class="keyword">new</span> StringOffsetMap(<a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a>(buf_));</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <span class="keyword">auto</span> size_before_string = buf_.size();</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  <span class="comment">// Must first serialize the string, since the set is all offsets into</span></div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="comment">// buffer.</span></div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  <span class="keyword">auto</span> off = CreateString(str, len);</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  <span class="keyword">auto</span> it = string_pool->find(off);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  <span class="comment">// If it exists we reuse existing serialized data!</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <span class="keywordflow">if</span> (it != string_pool->end()) {</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  <span class="comment">// We can remove the string we serialized.</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  buf_.pop(buf_.size() - size_before_string);</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <span class="keywordflow">return</span> *it;</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  }</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <span class="comment">// Record this string for future use.</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  string_pool->insert(off);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="keywordflow">return</span> off;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  }</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment"></span></div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment"> /// @brief Store a string in the buffer, which null-terminated.</span></div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment"> /// @param[in] str A const char pointer to a C-string to add to the buffer.</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01384"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7"> 1384</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">CreateSharedString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str) {</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <span class="keywordflow">return</span> CreateSharedString(str, strlen(str));</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  }</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment"></span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="comment"> /// @param[in] str A const reference to a std::string to store in the buffer.</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts.</span></div><div class="line"><a name="l01393"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9"> 1393</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">CreateSharedString</a>(<span class="keyword">const</span> std::string &str) {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <span class="keywordflow">return</span> CreateSharedString(str.c_str(), str.length());</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  }</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment"></span></div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="comment"> /// @brief Store a string in the buffer, which can contain any binary data.</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="comment"> /// If a string with this exact contents has already been serialized before,</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="comment"> /// instead simply returns the offset of the existing string.</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="comment"> /// @param[in] str A const pointer to a `String` struct to add to the buffer.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment"> /// @return Returns the offset in the buffer where the string starts</span></div><div class="line"><a name="l01402"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3"> 1402</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">CreateSharedString</a>(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *str) {</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="keywordflow">return</span> CreateSharedString(str->c_str(), str->size());</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  }</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment"></span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment"></span> uoffset_t EndVector(<span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  FLATBUFFERS_ASSERT(nested); <span class="comment">// Hit if no corresponding StartVector.</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  nested = <span class="keyword">false</span>;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">return</span> PushElement(static_cast<uoffset_t>(len));</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  }</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  <span class="keywordtype">void</span> StartVector(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize) {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  NotNested();</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  nested = <span class="keyword">true</span>;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  PreAlign<uoffset_t>(len * elemsize);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  PreAlign(len * elemsize, elemsize); <span class="comment">// Just in case elemsize > uoffset_t.</span></div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  }</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="comment">// Call this right before StartVector/CreateVector if you want to force the</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <span class="comment">// alignment to be something different than what the element size would</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>  <span class="comment">// normally dictate.</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <span class="comment">// This is useful when storing a nested_flatbuffer in a vector of bytes,</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>  <span class="comment">// or when storing SIMD floats, etc.</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <span class="keywordtype">void</span> ForceVectorAlignment(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize, <span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  PreAlign(len * elemsize, alignment);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  }</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  <span class="comment">// Similar to ForceVectorAlignment but for String fields.</span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  <span class="keywordtype">void</span> ForceStringAlignment(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> alignment) {</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  PreAlign((len + 1) * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>), alignment);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  }</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="comment"></span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="comment"> /// @brief Serialize an array into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment"> /// @tparam T The data type of the array elements.</span></div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="comment"> /// @param[in] v A pointer to the array of type `T` to serialize into the</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01443"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3"> 1443</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">CreateVector</a>(<span class="keyword">const</span> T *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  <span class="comment">// If this assert hits, you're specifying a template argument that is</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="comment">// causing the wrong overload to be selected, remove it.</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  AssertScalarT<T>();</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  StartVector(len, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="preprocessor"> #if FLATBUFFERS_LITTLEENDIAN</span></div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  PushBytes(reinterpret_cast<const uint8_t *>(v), len * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 1) {</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  PushBytes(reinterpret_cast<const uint8_t *>(v), len);</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i > 0; ) {</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  PushElement(v[--i]);</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  }</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  }</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>>(EndVector(len));</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  }</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>> CreateVector(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  StartVector(len, <span class="keyword">sizeof</span>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a>));</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i > 0;) { PushElement(v[--i]); }</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>>(EndVector(len));</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  }</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment"></span></div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment"> /// @brief Serialize a `std::vector` into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="comment"> /// @tparam T The data type of the `std::vector` elements.</span></div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment"> /// @param v A const reference to the `std::vector` to serialize into the</span></div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01477"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207"> 1477</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">CreateVector</a>(<span class="keyword">const</span> std::vector<T> &v) {</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  <span class="keywordflow">return</span> CreateVector(data(v), v.size());</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  }</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  <span class="comment">// vector<bool> may be implemented using a bit-set, so we can't access it as</span></div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  <span class="comment">// an array. Instead, read elements manually.</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  <span class="comment">// Background: https://isocpp.org/blog/2012/11/on-vectorbool</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<uint8_t></a>> CreateVector(<span class="keyword">const</span> std::vector<bool> &v) {</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>  StartVector(v.size(), <span class="keyword">sizeof</span>(uint8_t));</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = v.size(); i > 0;) {</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  PushElement(static_cast<uint8_t>(v[--i]));</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  }</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<uint8_t></a>>(EndVector(v.size()));</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  }</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> </div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="preprocessor"> #ifndef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment"> /// @brief Serialize values returned by a function into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment"></span><span class="comment"> /// This is a convenience function that takes care of iteration for you.</span></div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="comment"></span><span class="comment"> /// @tparam T The data type of the `std::vector` elements.</span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment"></span><span class="comment"> /// @param f A function that takes the current iteration 0..vector_size-1 and</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment"></span><span class="comment"> /// returns any type that you can construct a FlatBuffers vector out of.</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="comment"></span><span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="comment"></span><span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01501"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b"> 1501</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b">CreateVector</a>(<span class="keywordtype">size_t</span> vector_size,</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>  <span class="keyword">const</span> std::function<T (<span class="keywordtype">size_t</span> i)> &f) {</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>  std::vector<T> elems(vector_size);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) elems[i] = f(i);</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>  <span class="keywordflow">return</span> CreateVector(elems);</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>  }</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="comment"></span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="comment"> /// @brief Serialize values returned by a function into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="comment"> /// This is a convenience function that takes care of iteration for you.</span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="comment"> /// @tparam T The data type of the `std::vector` elements.</span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="comment"> /// @param f A function that takes the current iteration 0..vector_size-1,</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="comment"> /// and the state parameter returning any type that you can construct a</span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="comment"> /// FlatBuffers vector out of.</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="comment"> /// @param state State passed to f.</span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> F, <span class="keyword">typename</span> S></div><div class="line"><a name="l01520"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a"> 1520</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a">CreateVector</a>(<span class="keywordtype">size_t</span> vector_size, F f, S *state) {</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>  std::vector<T> elems(vector_size);</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) elems[i] = f(i, state);</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  <span class="keywordflow">return</span> CreateVector(elems);</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>  }</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment"></span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="comment"> /// @brief Serialize a `std::vector<std::string>` into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="comment"> /// This is a convenience function for a common case.</span></div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> <span class="comment"> /// @param v A const reference to the `std::vector` to serialize into the</span></div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01532"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6"> 1532</a></span> <span class="comment"></span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<String></a>>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6">CreateVectorOfStrings</a>(</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="keyword">const</span> std::vector<std::string> &v) {</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  std::vector<Offset<String>> offsets(v.size());</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < v.size(); i++) offsets[i] = CreateString(v[i]);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  <span class="keywordflow">return</span> CreateVector(offsets);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  }</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> <span class="comment"></span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="comment"> /// @param[in] v A pointer to the array of type `T` to serialize into the</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01547"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7"> 1547</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">CreateVectorOfStructs</a>(<span class="keyword">const</span> T *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  StartVector(len * <span class="keyword">sizeof</span>(T) / AlignOf<T>(), AlignOf<T>());</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>  PushBytes(reinterpret_cast<const uint8_t *>(v), <span class="keyword">sizeof</span>(T) * len);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>>(EndVector(len));</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>  }</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="comment"></span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="comment"> /// @brief Serialize an array of native structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="comment"> /// @tparam S The data type of the native struct array elements.</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="comment"> /// @param[in] v A pointer to the array of type `S` to serialize into the</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01562"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53"> 1562</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53">CreateVectorOfNativeStructs</a>(<span class="keyword">const</span> S *v,</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>  <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  <span class="keyword">extern</span> T Pack(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  <span class="keyword">typedef</span> T (*Pack_t)(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  std::vector<T> vv(len);</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  std::transform(v, v + len, vv.begin(), <span class="keyword">static_cast<</span>Pack_t&<span class="keyword">></span>(Pack));</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  <span class="keywordflow">return</span> CreateVectorOfStructs<T>(vv.data(), vv.size());</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  }</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> </div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="preprocessor"> #ifndef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="comment"></span><span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment"></span><span class="comment"> /// @param[in] f A function that takes the current iteration 0..vector_size-1</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment"></span><span class="comment"> /// and a pointer to the struct that must be filled.</span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment"></span><span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="comment"></span><span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="comment"></span><span class="comment"> /// This is mostly useful when flatbuffers are generated with mutation</span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="comment"></span><span class="comment"> /// accessors.</span></div><div class="line"><a name="l01581"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72"> 1581</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72">CreateVectorOfStructs</a>(</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>  <span class="keywordtype">size_t</span> vector_size, <span class="keyword">const</span> std::function<<span class="keywordtype">void</span>(<span class="keywordtype">size_t</span> i, T *)> &filler) {</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  T* structs = StartVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) {</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  filler(i, structs);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  structs++;</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  }</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  <span class="keywordflow">return</span> EndVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="comment"></span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="comment"> /// @param[in] f A function that takes the current iteration 0..vector_size-1,</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment"> /// a pointer to the struct that must be filled and the state argument.</span></div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment"> /// @param[in] state Arbitrary state to pass to f.</span></div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="comment"> /// This is mostly useful when flatbuffers are generated with mutation</span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="comment"> /// accessors.</span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> F, <span class="keyword">typename</span> S></div><div class="line"><a name="l01603"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5"> 1603</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5">CreateVectorOfStructs</a>(<span class="keywordtype">size_t</span> vector_size, F f,</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  S *state) {</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  T *structs = StartVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < vector_size; i++) {</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  f(i, structs, state);</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  structs++;</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  <span class="keywordflow">return</span> EndVectorOfStructs<T>(vector_size);</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  }</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> <span class="comment"></span></div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> <span class="comment"> /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`.</span></div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Alloc></div><div class="line"><a name="l01620"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42"> 1620</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42">CreateVectorOfStructs</a>(</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>  <span class="keyword">const</span> std::vector<T, Alloc> &v) {</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  <span class="keywordflow">return</span> CreateVectorOfStructs(data(v), v.size());</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  }</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="comment"></span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="comment"> /// @brief Serialize a `std::vector` of native structs into a FlatBuffer</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="comment"> /// `vector`.</span></div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="comment"> /// @tparam S The data type of the `std::vector` native struct elements.</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01634"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95"> 1634</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95">CreateVectorOfNativeStructs</a>(</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>  <span class="keyword">const</span> std::vector<S> &v) {</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>  <span class="keywordflow">return</span> CreateVectorOfNativeStructs<T, S>(data(v), v.size());</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>  }</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="comment"></span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>StructKeyComparator {</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> T &a, <span class="keyword">const</span> T &b)<span class="keyword"> const </span>{</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  <span class="keywordflow">return</span> a.KeyCompareLessThan(&b);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> </div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>  StructKeyComparator &operator=(<span class="keyword">const</span> StructKeyComparator &);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>  };<span class="comment"></span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment"> /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment"> /// in sorted order.</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01658"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15"> 1658</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15">CreateVectorOfSortedStructs</a>(std::vector<T> *v) {</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  <span class="keywordflow">return</span> CreateVectorOfSortedStructs(data(*v), v->size());</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>  }</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="comment"></span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="comment"> /// @brief Serialize a `std::vector` of native structs into a FlatBuffer</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="comment"> /// `vector` in sorted order.</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="comment"> /// @tparam T The data type of the `std::vector` struct elements.</span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="comment"> /// @tparam S The data type of the `std::vector` native struct elements.</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment"> /// @param[in]] v A const reference to the `std::vector` of structs to</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="comment"> /// serialize into the buffer as a `vector`.</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01671"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54"> 1671</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54">CreateVectorOfSortedNativeStructs</a>(</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>  std::vector<S> *v) {</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>  <span class="keywordflow">return</span> CreateVectorOfSortedNativeStructs<T, S>(data(*v), v->size());</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>  }</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="comment"></span></div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="comment"> /// @brief Serialize an array of structs into a FlatBuffer `vector` in sorted</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="comment"> /// order.</span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="comment"> /// @param[in] v A pointer to the array of type `T` to serialize into the</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01685"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf"> 1685</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf">CreateVectorOfSortedStructs</a>(T *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  std::sort(v, v + len, StructKeyComparator<T>());</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  <span class="keywordflow">return</span> CreateVectorOfStructs(v, len);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>  }</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> <span class="comment"></span></div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="comment"> /// @brief Serialize an array of native structs into a FlatBuffer `vector` in</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="comment"> /// sorted order.</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="comment"> /// @tparam T The data type of the struct array elements.</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="comment"> /// @tparam S The data type of the native struct array elements.</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <span class="comment"> /// @param[in] v A pointer to the array of type `S` to serialize into the</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <span class="comment"> /// buffer as a `vector`.</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="comment"> /// @param[in] len The number of elements to serialize.</span></div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> S></div><div class="line"><a name="l01700"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf"> 1700</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf">CreateVectorOfSortedNativeStructs</a>(S *v,</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>  <span class="keyword">extern</span> T Pack(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  <span class="keyword">typedef</span> T (*Pack_t)(<span class="keyword">const</span> S &);</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>  std::vector<T> vv(len);</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>  std::transform(v, v + len, vv.begin(), <span class="keyword">static_cast<</span>Pack_t&<span class="keyword">></span>(Pack));</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>  <span class="keywordflow">return</span> CreateVectorOfSortedStructs<T>(vv, len);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>  }</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="comment"></span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="comment"> /// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>TableKeyComparator {</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>  TableKeyComparator(<a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &buf) : buf_(buf) {}</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> &a, <span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> &b)<span class="keyword"> const </span>{</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>  <span class="keyword">auto</span> table_a = <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(buf_.data_at(a.o));</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>  <span class="keyword">auto</span> table_b = <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(buf_.data_at(b.o));</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  <span class="keywordflow">return</span> table_a->KeyCompareLessThan(table_b);</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>  }</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &buf_;</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> </div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>  TableKeyComparator &operator=(<span class="keyword">const</span> TableKeyComparator &);</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  };<span class="comment"></span></div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="comment"> /// @endcond</span></div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> <span class="comment"> /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> <span class="comment"> /// in sorted order.</span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment"> /// @tparam T The data type that the offset refers to.</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="comment"> /// @param[in] v An array of type `Offset<T>` that contains the `table`</span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> <span class="comment"> /// offsets to store in the buffer in sorted order.</span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="comment"> /// @param[in] len The number of elements to store in the `vector`.</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01733"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6"> 1733</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">CreateVectorOfSortedTables</a>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> *v,</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>  std::sort(v, v + len, TableKeyComparator<T>(buf_));</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  <span class="keywordflow">return</span> CreateVector(v, len);</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>  }</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment"></span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment"> /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment"> /// in sorted order.</span></div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment"> /// @tparam T The data type that the offset refers to.</span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment"> /// @param[in] v An array of type `Offset<T>` that contains the `table`</span></div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="comment"> /// offsets to store in the buffer in sorted order.</span></div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="comment"> /// @return Returns a typed `Offset` into the serialized data indicating</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment"> /// where the vector is stored.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01747"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135"> 1747</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<Offset<T></a>>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">CreateVectorOfSortedTables</a>(</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>  std::vector<<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a>> *v) {</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>  <span class="keywordflow">return</span> CreateVectorOfSortedTables(data(*v), v->size());</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>  }</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="comment"></span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> <span class="comment"> /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> <span class="comment"> /// Write the data any time later to the returned buffer pointer `buf`.</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="comment"> /// @param[in] len The number of elements to store in the `vector`.</span></div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> <span class="comment"> /// @param[in] elemsize The size of each element in the `vector`.</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment"> /// @param[out] buf A pointer to a `uint8_t` pointer that can be</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment"> /// written to at a later time to serialize the data into a `vector`</span></div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="comment"> /// in the buffer.</span></div><div class="line"><a name="l01759"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c"> 1759</a></span> <span class="comment"></span> uoffset_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">CreateUninitializedVector</a>(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize,</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>  uint8_t **buf) {</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>  NotNested();</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>  StartVector(len, elemsize);</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>  buf_.make_space(len * elemsize);</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>  <span class="keyword">auto</span> vec_start = GetSize();</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>  <span class="keyword">auto</span> vec_end = EndVector(len);</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>  *buf = buf_.data_at(vec_start);</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  <span class="keywordflow">return</span> vec_end;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>  }</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment"></span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="comment"> /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment"> /// Write the data any time later to the returned buffer pointer `buf`.</span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment"> /// @tparam T The data type of the data that will be stored in the buffer</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment"> /// as a `vector`.</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment"> /// @param[in] len The number of elements to store in the `vector`.</span></div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="comment"> /// @param[out] buf A pointer to a pointer of type `T` that can be</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment"> /// written to at a later time to serialize the data into a `vector`</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment"> /// in the buffer.</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01779"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50"> 1779</a></span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">CreateUninitializedVector</a>(<span class="keywordtype">size_t</span> len, T **buf) {</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>  AssertScalarT<T>();</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>  <span class="keywordflow">return</span> CreateUninitializedVector(len, <span class="keyword">sizeof</span>(T),</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>  reinterpret_cast<uint8_t **>(buf));</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>  }</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> </div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T*></a>> CreateUninitializedVectorOfStructs(<span class="keywordtype">size_t</span> len, T **buf) {</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>  <span class="keywordflow">return</span> CreateUninitializedVector(len, <span class="keyword">sizeof</span>(T),</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>  reinterpret_cast<uint8_t **>(buf));</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>  }</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> </div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> </div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>  <span class="comment">// @brief Create a vector of scalar type T given as input a vector of scalar</span></div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>  <span class="comment">// type U, useful with e.g. pre "enum class" enums, or any existing scalar</span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>  <span class="comment">// data of the wrong type.</span></div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>> CreateVectorScalarCast(<span class="keyword">const</span> U *v, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>  AssertScalarT<T>();</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>  AssertScalarT<U>();</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>  StartVector(len, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i > 0;) { PushElement(static_cast<T>(v[--i])); }</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<T></a>>(EndVector(len));</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>  }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="comment"></span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment"> /// @brief Write a struct by itself, typically to be part of a union.</span></div><div class="line"><a name="l01805"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8"> 1805</a></span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<const T *></a> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8">CreateStruct</a>(<span class="keyword">const</span> T &structobj) {</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>  NotNested();</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>  Align(AlignOf<T>());</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>  buf_.push_small(structobj);</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<const T *></a>(GetSize());</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>  }</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> <span class="comment"></span></div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> <span class="comment"> /// @brief The length of a FlatBuffer file header.</span></div><div class="line"><a name="l01813"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19"> 1813</a></span> <span class="comment"></span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kFileIdentifierLength = 4;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment"></span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="comment"> /// @brief Finish serializing a buffer by writing the root offset.</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment"> /// @param[in] file_identifier If a `file_identifier` is given, the buffer</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="comment"> /// will be prefixed with a standard FlatBuffers file header.</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01819"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912"> 1819</a></span>  <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">Finish</a>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> root, <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier = <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>  Finish(root.o, file_identifier, <span class="keyword">false</span>);</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>  }</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="comment"></span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="comment"> /// @brief Finish a buffer with a 32 bit size field pre-fixed (size of the</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="comment"> /// buffer following the size field). These buffers are NOT compatible</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment"> /// with standard buffers created by Finish, i.e. you can't call GetRoot</span></div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="comment"> /// on them, you have to use GetSizePrefixedRoot instead.</span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="comment"> /// All >32 bit quantities in this buffer will be aligned when the whole</span></div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment"> /// size pre-fixed buffer is aligned.</span></div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="comment"> /// These kinds of buffers are useful for creating a stream of FlatBuffers.</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="comment"></span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01831"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220"> 1831</a></span>  <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">FinishSizePrefixed</a>(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> root,</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier = <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>  Finish(root.o, file_identifier, <span class="keyword">true</span>);</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>  }</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> </div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>  <span class="keywordtype">void</span> SwapBufAllocator(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &other) {</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>  buf_.swap_allocator(other.buf_);</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>  }</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> </div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> </div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>  <span class="comment">// You shouldn't really be copying instances of this class.</span></div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &operator=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &);</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> </div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>  <span class="keywordtype">void</span> Finish(uoffset_t root, <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier, <span class="keywordtype">bool</span> size_prefix) {</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>  NotNested();</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>  buf_.clear_scratch();</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>  <span class="comment">// This will cause the whole buffer to be aligned.</span></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>  PreAlign((size_prefix ? <span class="keyword">sizeof</span>(uoffset_t) : 0) + <span class="keyword">sizeof</span>(uoffset_t) +</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>  (file_identifier ? kFileIdentifierLength : 0),</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>  minalign_);</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>  <span class="keywordflow">if</span> (file_identifier) {</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>  FLATBUFFERS_ASSERT(strlen(file_identifier) == kFileIdentifierLength);</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>  PushBytes(reinterpret_cast<const uint8_t *>(file_identifier),</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>  kFileIdentifierLength);</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>  }</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>  PushElement(ReferTo(root)); <span class="comment">// Location of root.</span></div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>  <span class="keywordflow">if</span> (size_prefix) { PushElement(GetSize()); }</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>  finished = <span class="keyword">true</span>;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>  }</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> </div><div class="line"><a name="l01863"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html"> 1863</a></span>  <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">FieldLoc</a> {</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>  uoffset_t off;</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>  voffset_t id;</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>  };</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> </div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>  <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> buf_;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>  <span class="comment">// Accumulating offsets of table members while it is being built.</span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>  <span class="comment">// We store these in the scratch pad of buf_, after the vtable offsets.</span></div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>  uoffset_t num_field_loc;</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>  <span class="comment">// Track how much of the vtable is in use, so we can output the most compact</span></div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>  <span class="comment">// possible vtable.</span></div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>  voffset_t max_voffset_;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> </div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  <span class="comment">// Ensure objects are not nested.</span></div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>  <span class="keywordtype">bool</span> nested;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> </div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>  <span class="comment">// Ensure the buffer is finished before it is being accessed.</span></div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>  <span class="keywordtype">bool</span> finished;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> </div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>  <span class="keywordtype">size_t</span> minalign_;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>  <span class="keywordtype">bool</span> force_defaults_; <span class="comment">// Serialize values equal to their defaults anyway.</span></div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> </div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>  <span class="keywordtype">bool</span> dedup_vtables_;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> </div><div class="line"><a name="l01889"></a><span class="lineno"><a class="line" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html"> 1889</a></span>  <span class="keyword">struct </span><a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a> {</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>  <a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> &buf) : buf_(&buf) {}</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>  <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> &a, <span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a> &b)<span class="keyword"> const </span>{</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>  <span class="keyword">auto</span> stra = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> *<span class="keyword">></span>(buf_->data_at(a.o));</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>  <span class="keyword">auto</span> strb = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="structflatbuffers_1_1_string.html">String</a> *<span class="keyword">></span>(buf_->data_at(b.o));</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>  <span class="keywordflow">return</span> StringLessThan(stra->data(), stra->size(),</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>  strb->data(), strb->size());</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>  }</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>  <span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1vector__downward.html">vector_downward</a> *buf_;</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>  };</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> </div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>  <span class="comment">// For use with CreateSharedString. Instantiated on first use only.</span></div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>  <span class="keyword">typedef</span> std::set<Offset<String>, <a class="code" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">StringOffsetCompare</a>> StringOffsetMap;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  StringOffsetMap *string_pool;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> </div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>  <span class="comment">// Allocates space for a vector of structures.</span></div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>  <span class="comment">// Must be completed with EndVectorOfStructs().</span></div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T *StartVectorOfStructs(<span class="keywordtype">size_t</span> vector_size) {</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>  StartVector(vector_size * <span class="keyword">sizeof</span>(T) / AlignOf<T>(), AlignOf<T>());</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(buf_.make_space(vector_size * <span class="keyword">sizeof</span>(T)));</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  }</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  <span class="comment">// End the vector of structues in the flatbuffers.</span></div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  <span class="comment">// Vector should have previously be started with StartVectorOfStructs().</span></div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>  <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>> EndVectorOfStructs(<span class="keywordtype">size_t</span> vector_size) {</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>  <span class="keywordflow">return</span> <a class="code" href="structflatbuffers_1_1_offset.html">Offset<Vector<const T *></a>>(EndVector(vector_size));</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  }</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> };<span class="comment"></span></div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="comment">/// @}</span></div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="comment"></span><span class="comment">// Helpers to get a typed pointer to the root object contained in the buffer.</span></div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> T *GetMutableRoot(<span class="keywordtype">void</span> *buf) {</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>  EndianCheck();</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>  <span class="keyword">reinterpret_cast<</span>uint8_t *<span class="keyword">></span>(buf) +</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>  EndianScalar(*reinterpret_cast<uoffset_t *>(buf)));</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> }</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> </div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">const</span> T *GetRoot(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf) {</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  <span class="keywordflow">return</span> GetMutableRoot<T>(<span class="keyword">const_cast<</span><span class="keywordtype">void</span> *<span class="keyword">></span>(buf));</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> }</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> </div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">const</span> T *GetSizePrefixedRoot(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf) {</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>  <span class="keywordflow">return</span> GetRoot<T>(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(buf) + <span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> }</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> <span class="comment"></span></div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> <span class="comment">/// Helpers to get a typed pointer to objects that are currently being built.</span></div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> <span class="comment">/// @warning Creating new objects will lead to reallocations and invalidates</span></div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="comment">/// the pointer!</span></div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="comment"></span><span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> T *GetMutableTemporaryPointer(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &fbb, <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> offset) {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T *<span class="keyword">></span>(fbb.<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">GetCurrentBufferPointer</a>() + fbb.<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">GetSize</a>() -</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>  offset.o);</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> }</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> </div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="keyword">const</span> T *GetTemporaryPointer(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &fbb, <a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> offset) {</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>  <span class="keywordflow">return</span> GetMutableTemporaryPointer<T>(fbb, offset);</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> }</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> <span class="comment"></span></div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">/// @brief Get a pointer to the the file_identifier section of the buffer.</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="comment">/// @return Returns a const char pointer to the start of the file_identifier</span></div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="comment">/// characters in the buffer. The returned char * has length</span></div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> <span class="comment">/// 'flatbuffers::FlatBufferBuilder::kFileIdentifierLength'.</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment">/// This function is UNDEFINED for FlatBuffers whose schema does not include</span></div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> <span class="comment">/// a file_identifier (likely points at padding or the start of a the root</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="comment">/// vtable).</span></div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *GetBufferIdentifier(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keywordtype">bool</span> size_prefixed = <span class="keyword">false</span>) {</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">></span>(buf) +</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>  ((size_prefixed) ? 2 * <span class="keyword">sizeof</span>(uoffset_t) : <span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> }</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">// Helper to see if the identifier in a buffer has the expected value.</span></div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> BufferHasIdentifier(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, <span class="keyword">const</span> <span class="keywordtype">char</span> *identifier, <span class="keywordtype">bool</span> size_prefixed = <span class="keyword">false</span>) {</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>  <span class="keywordflow">return</span> strncmp(GetBufferIdentifier(buf, size_prefixed), identifier,</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">FlatBufferBuilder::kFileIdentifierLength</a>) == 0;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> }</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> </div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment">// Helper class to verify the integrity of a FlatBuffer</span></div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="keyword">class </span>Verifier FLATBUFFERS_FINAL_CLASS {</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  Verifier(<span class="keyword">const</span> uint8_t *buf, <span class="keywordtype">size_t</span> buf_len, uoffset_t _max_depth = 64,</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  uoffset_t _max_tables = 1000000, <span class="keywordtype">bool</span> _check_alignment = <span class="keyword">true</span>)</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>  : buf_(buf),</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  size_(buf_len),</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>  depth_(0),</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>  max_depth_(_max_depth),</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  num_tables_(0),</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  max_tables_(_max_tables),</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  upper_bound_(0),</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  check_alignment_(_check_alignment)</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  {</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>  FLATBUFFERS_ASSERT(size_ < FLATBUFFERS_MAX_BUFFER_SIZE);</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>  }</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> </div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <span class="comment">// Central location where any verification failures register.</span></div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>  <span class="keywordtype">bool</span> Check(<span class="keywordtype">bool</span> ok)<span class="keyword"> const </span>{</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> <span class="preprocessor"> #ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE</span></div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  FLATBUFFERS_ASSERT(ok);</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  <span class="keywordflow">if</span> (!ok)</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  upper_bound_ = 0;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>  <span class="keywordflow">return</span> ok;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  }</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> </div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>  <span class="comment">// Verify any range within the buffer.</span></div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <span class="keywordtype">bool</span> Verify(<span class="keywordtype">size_t</span> elem, <span class="keywordtype">size_t</span> elem_len)<span class="keyword"> const </span>{</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  <span class="keyword">auto</span> upper_bound = elem + elem_len;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>  <span class="keywordflow">if</span> (upper_bound_ < upper_bound)</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>  upper_bound_ = upper_bound;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>  <span class="keywordflow">return</span> Check(elem_len < size_ && elem <= size_ - elem_len);</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>  }</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> </div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyAlignment(<span class="keywordtype">size_t</span> elem)<span class="keyword"> const </span>{</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  <span class="keywordflow">return</span> (elem & (<span class="keyword">sizeof</span>(T) - 1)) == 0 || !check_alignment_;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  }</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> </div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  <span class="comment">// Verify a range indicated by sizeof(T).</span></div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> Verify(<span class="keywordtype">size_t</span> elem)<span class="keyword"> const </span>{</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  <span class="keywordflow">return</span> VerifyAlignment<T>(elem) && Verify(elem, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  }</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> </div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  <span class="comment">// Verify relative to a known-good base pointer.</span></div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> uint8_t *base, voffset_t elem_off, <span class="keywordtype">size_t</span> elem_len)<span class="keyword"> const </span>{</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  <span class="keywordflow">return</span> Verify(static_cast<size_t>(base - buf_) + elem_off, elem_len);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>  }</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> </div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> uint8_t *base, voffset_t elem_off)<span class="keyword"></span></div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="keyword"> const </span>{</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  <span class="keywordflow">return</span> Verify(static_cast<size_t>(base - buf_) + elem_off, <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  }</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> </div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  <span class="comment">// Verify a pointer (may be NULL) of a table type.</span></div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyTable(<span class="keyword">const</span> T *table) {</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  <span class="keywordflow">return</span> !table || table->Verify(*<span class="keyword">this</span>);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  }</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> </div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  <span class="comment">// Verify a pointer (may be NULL) of any vector type.</span></div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyVector(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<T></a> *vec)<span class="keyword"> const </span>{</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  <span class="keywordflow">return</span> !vec || VerifyVectorOrString(reinterpret_cast<const uint8_t *>(vec),</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  }</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> </div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  <span class="comment">// Verify a pointer (may be NULL) of a vector to struct.</span></div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyVector(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector<const T *></a> *vec)<span class="keyword"> const </span>{</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  <span class="keywordflow">return</span> VerifyVector(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classflatbuffers_1_1_vector.html">Vector<T></a> *<span class="keyword">></span>(vec));</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  }</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> </div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <span class="comment">// Verify a pointer (may be NULL) to string.</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  <span class="keywordtype">bool</span> VerifyString(<span class="keyword">const</span> <a class="code" href="structflatbuffers_1_1_string.html">String</a> *str)<span class="keyword"> const </span>{</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>  <span class="keywordtype">size_t</span> end;</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  <span class="keywordflow">return</span> !str ||</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  (VerifyVectorOrString(reinterpret_cast<const uint8_t *>(str),</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  1, &end) &&</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  Verify(end, 1) && <span class="comment">// Must have terminator</span></div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  Check(buf_[end] == <span class="charliteral">'\0'</span>)); <span class="comment">// Terminating byte must be 0.</span></div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  }</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> </div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  <span class="comment">// Common code between vectors and strings.</span></div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  <span class="keywordtype">bool</span> VerifyVectorOrString(<span class="keyword">const</span> uint8_t *vec, <span class="keywordtype">size_t</span> elem_size,</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>  <span class="keywordtype">size_t</span> *end = <span class="keyword">nullptr</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  <span class="keyword">auto</span> veco = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(vec - buf_);</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>  <span class="comment">// Check we can read the size field.</span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  <span class="keywordflow">if</span> (!Verify<uoffset_t>(veco)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>  <span class="comment">// Check the whole array. If this is a string, the byte past the array</span></div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  <span class="comment">// must be 0.</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  <span class="keyword">auto</span> size = ReadScalar<uoffset_t>(vec);</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  <span class="keyword">auto</span> max_elems = FLATBUFFERS_MAX_BUFFER_SIZE / elem_size;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  <span class="keywordflow">if</span> (!Check(size < max_elems))</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Protect against byte_size overflowing.</span></div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  <span class="keyword">auto</span> byte_size = <span class="keyword">sizeof</span>(size) + elem_size * size;</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>  <span class="keywordflow">if</span> (end) *end = veco + byte_size;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  <span class="keywordflow">return</span> Verify(veco, byte_size);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  }</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> </div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  <span class="comment">// Special case for string contents, after the above has been called.</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>  <span class="keywordtype">bool</span> VerifyVectorOfStrings(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<String></a>> *vec)<span class="keyword"> const </span>{</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>  <span class="keywordflow">if</span> (vec) {</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>  <span class="keywordflow">for</span> (uoffset_t i = 0; i < vec->size(); i++) {</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>  <span class="keywordflow">if</span> (!VerifyString(vec->Get(i))) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>  }</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  }</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  }</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> </div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  <span class="comment">// Special case for table contents, after the above has been called.</span></div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyVectorOfTables(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_vector.html">Vector</a><<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a>> *vec) {</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  <span class="keywordflow">if</span> (vec) {</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  <span class="keywordflow">for</span> (uoffset_t i = 0; i < vec->size(); i++) {</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  <span class="keywordflow">if</span> (!vec->Get(i)->Verify(*<span class="keyword">this</span>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  }</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>  }</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  }</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> </div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>  <span class="keywordtype">bool</span> VerifyTableStart(<span class="keyword">const</span> uint8_t *table) {</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>  <span class="comment">// Check the vtable offset.</span></div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  <span class="keyword">auto</span> tableo = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(table - buf_);</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>  <span class="keywordflow">if</span> (!Verify<soffset_t>(tableo)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>  <span class="comment">// This offset may be signed, but doing the substraction unsigned always</span></div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  <span class="comment">// gives the result we want.</span></div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  <span class="keyword">auto</span> vtableo = tableo - <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(ReadScalar<soffset_t>(table));</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>  <span class="comment">// Check the vtable size field, then check vtable fits in its entirety.</span></div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>  <span class="keywordflow">return</span> VerifyComplexity() && Verify<voffset_t>(vtableo) &&</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>  VerifyAlignment<voffset_t>(ReadScalar<voffset_t>(buf_ + vtableo)) &&</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>  Verify(vtableo, ReadScalar<voffset_t>(buf_ + vtableo));</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>  }</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> </div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  <span class="keywordtype">bool</span> VerifyBufferFromStart(<span class="keyword">const</span> <span class="keywordtype">char</span> *identifier, <span class="keywordtype">size_t</span> start) {</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>  <span class="keywordflow">if</span> (identifier &&</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>  (size_ < 2 * <span class="keyword">sizeof</span>(flatbuffers::uoffset_t) ||</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>  !BufferHasIdentifier(buf_ + start, identifier))) {</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  }</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>  <span class="comment">// Call T::Verify, which must be in the generated code for this type.</span></div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>  <span class="keyword">auto</span> o = VerifyOffset(start);</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>  <span class="keywordflow">return</span> o && <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>T *<span class="keyword">></span>(buf_ + start + o)->Verify(*<span class="keyword">this</span>)</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>  <span class="preprocessor">#ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>  && GetComputedSize()</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>  <span class="preprocessor">#endif</span></div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>  ;</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>  }</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> </div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>  <span class="comment">// Verify this whole buffer, starting with root type T.</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyBuffer() { <span class="keywordflow">return</span> VerifyBuffer<T>(<span class="keyword">nullptr</span>); }</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> </div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifyBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *identifier) {</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>  <span class="keywordflow">return</span> VerifyBufferFromStart<T>(identifier, 0);</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>  }</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> </div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> VerifySizePrefixedBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *identifier) {</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>  <span class="keywordflow">return</span> Verify<uoffset_t>(0U) &&</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>  ReadScalar<uoffset_t>(buf_) == size_ - <span class="keyword">sizeof</span>(uoffset_t) &&</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>  VerifyBufferFromStart<T>(identifier, <span class="keyword">sizeof</span>(uoffset_t));</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  }</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> </div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>  uoffset_t VerifyOffset(<span class="keywordtype">size_t</span> start)<span class="keyword"> const </span>{</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>  <span class="keywordflow">if</span> (!Verify<uoffset_t>(start)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>  <span class="keyword">auto</span> o = ReadScalar<uoffset_t>(buf_ + start);</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>  <span class="comment">// May not point to itself.</span></div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>  <span class="keywordflow">if</span> (!Check(o != 0)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>  <span class="comment">// Can't wrap around / buffers are max 2GB.</span></div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>  <span class="keywordflow">if</span> (!Check(static_cast<soffset_t>(o) >= 0)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>  <span class="comment">// Must be inside the buffer to create a pointer from it (pointer outside</span></div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>  <span class="comment">// buffer is UB).</span></div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>  <span class="keywordflow">if</span> (!Verify(start + o, 1)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>  <span class="keywordflow">return</span> o;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>  }</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> </div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  uoffset_t VerifyOffset(<span class="keyword">const</span> uint8_t *base, voffset_t start)<span class="keyword"> const </span>{</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  <span class="keywordflow">return</span> VerifyOffset(static_cast<size_t>(base - buf_) + start);</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>  }</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> </div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>  <span class="comment">// Called at the start of a table to increase counters measuring data</span></div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  <span class="comment">// structure depth and amount, and possibly bails out with false if</span></div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  <span class="comment">// limits set by the constructor have been hit. Needs to be balanced</span></div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>  <span class="comment">// with EndTable().</span></div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  <span class="keywordtype">bool</span> VerifyComplexity() {</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  depth_++;</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>  num_tables_++;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>  <span class="keywordflow">return</span> Check(depth_ <= max_depth_ && num_tables_ <= max_tables_);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>  }</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> </div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>  <span class="comment">// Called at the end of a table to pop the depth count.</span></div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>  <span class="keywordtype">bool</span> EndTable() {</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>  depth_--;</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>  }</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> </div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>  <span class="comment">// Returns the message size in bytes</span></div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>  <span class="keywordtype">size_t</span> GetComputedSize()<span class="keyword"> const </span>{</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>  <span class="comment">// clang-format off</span></div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <span class="preprocessor"> #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE</span></div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>  uintptr_t size = upper_bound_;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>  <span class="comment">// Align the size to uoffset_t</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  size = (size - 1 + <span class="keyword">sizeof</span>(uoffset_t)) & ~(<span class="keyword">sizeof</span>(uoffset_t) - 1);</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>  <span class="keywordflow">return</span> (size > size_) ? 0 : size;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> <span class="preprocessor"> #else</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  <span class="comment">// Must turn on FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE for this to work.</span></div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>  (void)upper_bound_;</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>  FLATBUFFERS_ASSERT(<span class="keyword">false</span>);</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="preprocessor"> #endif</span></div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  <span class="comment">// clang-format on</span></div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>  }</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> </div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>  <span class="keyword">const</span> uint8_t *buf_;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>  <span class="keywordtype">size_t</span> size_;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>  uoffset_t depth_;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  uoffset_t max_depth_;</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>  uoffset_t num_tables_;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>  uoffset_t max_tables_;</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>  <span class="keyword">mutable</span> <span class="keywordtype">size_t</span> upper_bound_;</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>  <span class="keywordtype">bool</span> check_alignment_;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> };</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> </div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="comment">// Convenient way to bundle a buffer and its length, to pass it around</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="comment">// typed by its root.</span></div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> <span class="comment">// A BufferRef does not own its buffer.</span></div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> <span class="keyword">struct </span>BufferRefBase {}; <span class="comment">// for std::is_base_of</span></div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keyword">struct </span>BufferRef : BufferRefBase {</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  BufferRef() : buf(<span class="keyword">nullptr</span>), len(0), must_free(<span class="keyword">false</span>) {}</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  BufferRef(uint8_t *_buf, uoffset_t _len)</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>  : buf(_buf), len(_len), must_free(<span class="keyword">false</span>) {}</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> </div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  ~BufferRef() {</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>  <span class="keywordflow">if</span> (must_free) free(buf);</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>  }</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> </div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>  <span class="keyword">const</span> T *GetRoot()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> flatbuffers::GetRoot<T>(buf); }</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> </div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>  <span class="keywordtype">bool</span> Verify() {</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>  Verifier verifier(buf, len);</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>  <span class="keywordflow">return</span> verifier.VerifyBuffer<T>(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>  }</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> </div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>  uint8_t *buf;</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>  uoffset_t len;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>  <span class="keywordtype">bool</span> must_free;</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> };</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> </div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> <span class="comment">// "structs" are flat structures that do not have an offset table, thus</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="comment">// always have all members present and do not support forwards/backwards</span></div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="comment">// compatible extensions.</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> </div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="keyword">class </span>Struct FLATBUFFERS_FINAL_CLASS {</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T GetField(uoffset_t o)<span class="keyword"> const </span>{</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>  <span class="keywordflow">return</span> ReadScalar<T>(&data_[o]);</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>  }</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> </div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T GetStruct(uoffset_t o)<span class="keyword"> const </span>{</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T<span class="keyword">></span>(&data_[o]);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  }</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> </div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>  <span class="keyword">const</span> uint8_t *GetAddressOf(uoffset_t o)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &data_[o]; }</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>  uint8_t *GetAddressOf(uoffset_t o) { <span class="keywordflow">return</span> &data_[o]; }</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> </div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>  uint8_t data_[1];</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> };</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> </div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="comment">// "tables" use an offset table (possibly shared) that allows fields to be</span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="comment">// omitted and added at will, but uses an extra indirection to read.</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="keyword">class </span>Table {</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>  <span class="keyword">const</span> uint8_t *GetVTable()<span class="keyword"> const </span>{</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>  <span class="keywordflow">return</span> data_ - ReadScalar<soffset_t>(data_);</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>  }</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> </div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  <span class="comment">// This gets the field offset for any of the functions below it, or 0</span></div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  <span class="comment">// if the field was not present.</span></div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  voffset_t GetOptionalFieldOffset(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="comment">// The vtable offset is always at the start.</span></div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  <span class="keyword">auto</span> vtable = GetVTable();</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>  <span class="comment">// The first element is the size of the vtable (fields + type id + itself).</span></div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  <span class="keyword">auto</span> vtsize = ReadScalar<voffset_t>(vtable);</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  <span class="comment">// If the field we're accessing is outside the vtable, we're reading older</span></div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  <span class="comment">// data, so it's the same as if the offset was 0 (not present).</span></div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>  <span class="keywordflow">return</span> field < vtsize ? ReadScalar<voffset_t>(vtable + field) : 0;</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>  }</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> </div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> T GetField(voffset_t field, T defaultval)<span class="keyword"> const </span>{</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>  <span class="keywordflow">return</span> field_offset ? ReadScalar<T>(data_ + field_offset) : defaultval;</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>  }</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> </div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>  <span class="keyword">template</span><<span class="keyword">typename</span> P> P GetPointer(voffset_t field) {</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  <span class="keyword">auto</span> p = data_ + field_offset;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>  <span class="keywordflow">return</span> field_offset ? <span class="keyword">reinterpret_cast<</span>P<span class="keyword">></span>(p + ReadScalar<uoffset_t>(p))</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>  }</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>  <span class="keyword">template</span><<span class="keyword">typename</span> P> P GetPointer(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span>Table *<span class="keyword">></span>(<span class="keyword">this</span>)->GetPointer<P>(field);</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>  }</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> </div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>  <span class="keyword">template</span><<span class="keyword">typename</span> P> P GetStruct(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>  <span class="keyword">auto</span> p = <span class="keyword">const_cast<</span>uint8_t *<span class="keyword">></span>(data_ + field_offset);</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>  <span class="keywordflow">return</span> field_offset ? <span class="keyword">reinterpret_cast<</span>P<span class="keyword">></span>(p) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>  }</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> </div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">bool</span> SetField(voffset_t field, T val, T def) {</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>  <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> IsTheSameAs(val, def);</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>  WriteScalar(data_ + field_offset, val);</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>  }</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> </div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>  <span class="keywordtype">bool</span> SetPointer(voffset_t field, <span class="keyword">const</span> uint8_t *val) {</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>  <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>  WriteScalar(data_ + field_offset,</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>  static_cast<uoffset_t>(val - (data_ + field_offset)));</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>  }</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> </div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>  uint8_t *GetAddressOf(voffset_t field) {</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>  <span class="keywordflow">return</span> field_offset ? data_ + field_offset : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>  }</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>  <span class="keyword">const</span> uint8_t *GetAddressOf(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span>Table *<span class="keyword">></span>(<span class="keyword">this</span>)->GetAddressOf(field);</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>  }</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> </div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>  <span class="keywordtype">bool</span> CheckField(voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>  <span class="keywordflow">return</span> GetOptionalFieldOffset(field) != 0;</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>  }</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> </div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>  <span class="comment">// Verify the vtable of this table.</span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>  <span class="comment">// Call this once per table, followed by VerifyField once per field.</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>  <span class="keywordtype">bool</span> VerifyTableStart(Verifier &verifier)<span class="keyword"> const </span>{</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>  <span class="keywordflow">return</span> verifier.VerifyTableStart(data_);</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>  }</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> </div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>  <span class="comment">// Verify a particular field.</span></div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>  <span class="keywordtype">bool</span> VerifyField(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>  <span class="comment">// Calling GetOptionalFieldOffset should be safe now thanks to</span></div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>  <span class="comment">// VerifyTable().</span></div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>  <span class="comment">// Check the actual field.</span></div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>  <span class="keywordflow">return</span> !field_offset || verifier.Verify<T>(data_, field_offset);</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>  }</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> </div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>  <span class="comment">// VerifyField for required fields.</span></div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>  <span class="keywordtype">bool</span> VerifyFieldRequired(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>  <span class="keywordflow">return</span> verifier.Check(field_offset != 0) &&</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>  verifier.Verify<T>(data_, field_offset);</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>  }</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>  <span class="comment">// Versions for offsets.</span></div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>  <span class="keywordtype">bool</span> VerifyOffset(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>  <span class="keywordflow">return</span> !field_offset || verifier.VerifyOffset(data_, field_offset);</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>  }</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> </div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>  <span class="keywordtype">bool</span> VerifyOffsetRequired(<span class="keyword">const</span> Verifier &verifier, voffset_t field)<span class="keyword"> const </span>{</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>  <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>  <span class="keywordflow">return</span> verifier.Check(field_offset != 0) &&</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>  verifier.VerifyOffset(data_, field_offset);</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>  }</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> </div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>  <span class="comment">// private constructor & copy constructor: you obtain instances of this</span></div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>  <span class="comment">// class by pointing to existing data only</span></div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>  Table();</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>  Table(<span class="keyword">const</span> Table &other);</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> </div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>  uint8_t data_[1];</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> };</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> </div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> <span class="keyword">template</span><<span class="keyword">typename</span> T> <span class="keywordtype">void</span> FlatBufferBuilder::Required(<a class="code" href="structflatbuffers_1_1_offset.html">Offset<T></a> table,</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>  voffset_t field) {</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>  <span class="keyword">auto</span> table_ptr = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Table *<span class="keyword">></span>(buf_.data_at(table.o));</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>  <span class="keywordtype">bool</span> ok = table_ptr->GetOptionalFieldOffset(field) != 0;</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>  <span class="comment">// If this fails, the caller will show what field needs to be set.</span></div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>  FLATBUFFERS_ASSERT(ok);</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>  (void)ok;</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> }</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="comment"></span></div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> <span class="comment">/// @brief This can compute the start of a FlatBuffer from a root pointer, i.e.</span></div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> <span class="comment">/// it is the opposite transformation of GetRoot().</span></div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> <span class="comment">/// This may be useful if you want to pass on a root and have the recipient</span></div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="comment">/// delete the buffer afterwards.</span></div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> <span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> uint8_t *GetBufferStartFromRootPointer(<span class="keyword">const</span> <span class="keywordtype">void</span> *root) {</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>  <span class="keyword">auto</span> table = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Table *<span class="keyword">></span>(root);</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>  <span class="keyword">auto</span> vtable = table->GetVTable();</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>  <span class="comment">// Either the vtable is before the root or after the root.</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>  <span class="keyword">auto</span> start = (std::min)(vtable, reinterpret_cast<const uint8_t *>(root));</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>  <span class="comment">// Align to at least sizeof(uoffset_t).</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>  start = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span>uintptr_t<span class="keyword">></span>(start) &</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>  ~(<span class="keyword">sizeof</span>(uoffset_t) - 1));</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>  <span class="comment">// Additionally, there may be a file_identifier in the buffer, and the root</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>  <span class="comment">// offset. The buffer may have been aligned to any size between</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>  <span class="comment">// sizeof(uoffset_t) and FLATBUFFERS_MAX_ALIGNMENT (see "force_align").</span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>  <span class="comment">// Sadly, the exact alignment is only known when constructing the buffer,</span></div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>  <span class="comment">// since it depends on the presence of values with said alignment properties.</span></div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>  <span class="comment">// So instead, we simply look at the next uoffset_t values (root,</span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>  <span class="comment">// file_identifier, and alignment padding) to see which points to the root.</span></div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>  <span class="comment">// None of the other values can "impersonate" the root since they will either</span></div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>  <span class="comment">// be 0 or four ASCII characters.</span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>  static_assert(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">FlatBufferBuilder::kFileIdentifierLength</a> == <span class="keyword">sizeof</span>(uoffset_t),</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>  <span class="stringliteral">"file_identifier is assumed to be the same size as uoffset_t"</span>);</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> possible_roots = FLATBUFFERS_MAX_ALIGNMENT / <span class="keyword">sizeof</span>(uoffset_t) + 1;</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>  possible_roots; possible_roots--) {</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>  start -= <span class="keyword">sizeof</span>(uoffset_t);</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>  <span class="keywordflow">if</span> (ReadScalar<uoffset_t>(start) + start ==</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>  <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>uint8_t *<span class="keyword">></span>(root))</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>  <span class="keywordflow">return</span> start;</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>  }</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>  <span class="comment">// We didn't find the root, either the "root" passed isn't really a root,</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>  <span class="comment">// or the buffer is corrupt.</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>  <span class="comment">// Assert, because calling this function with bad data may cause reads</span></div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>  <span class="comment">// outside of buffer boundaries.</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>  FLATBUFFERS_ASSERT(<span class="keyword">false</span>);</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> }</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> <span class="comment"></span></div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> <span class="comment">/// @brief This return the prefixed size of a FlatBuffer.</span></div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> <span class="comment"></span><span class="keyword">inline</span> uoffset_t GetPrefixedSize(<span class="keyword">const</span> uint8_t* buf){ <span class="keywordflow">return</span> ReadScalar<uoffset_t>(buf); }</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> <span class="comment">// Base class for native objects (FlatBuffer data de-serialized into native</span></div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> <span class="comment">// C++ data structures).</span></div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> <span class="comment">// Contains no functionality, purely documentative.</span></div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> <span class="keyword">struct </span>NativeTable {};</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <span class="comment"></span></div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> <span class="comment">/// @brief Function types to be used with resolving hashes into objects and</span></div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> <span class="comment">/// back again. The resolver gets a pointer to a field inside an object API</span></div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="comment">/// object that is of the type specified in the schema using the attribute</span></div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> <span class="comment">/// `cpp_type` (it is thus important whatever you write to this address</span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> <span class="comment">/// matches that type). The value of this field is initially null, so you</span></div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> <span class="comment">/// may choose to implement a delayed binding lookup using this function</span></div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> <span class="comment">/// if you wish. The resolver does the opposite lookup, for when the object</span></div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> <span class="comment">/// is being serialized again.</span></div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="comment"></span><span class="keyword">typedef</span> uint64_t hash_value_t;</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span> <span class="preprocessor">#ifdef FLATBUFFERS_CPP98_STL</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>  <span class="keyword">typedef</span> void (*resolver_function_t)(<span class="keywordtype">void</span> **pointer_adr, hash_value_t hash);</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>  <span class="keyword">typedef</span> hash_value_t (*rehasher_function_t)(<span class="keywordtype">void</span> *pointer);</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>  <span class="keyword">typedef</span> std::function<void (void **pointer_adr, hash_value_t hash)></div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>  resolver_function_t;</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>  <span class="keyword">typedef</span> std::function<hash_value_t (void *pointer)> rehasher_function_t;</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> </div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> <span class="comment">// Helper function to test if a field is present, using any of the field</span></div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span> <span class="comment">// enums in the generated code.</span></div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="comment">// `table` must be a generated table type. Since this is a template parameter,</span></div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> <span class="comment">// this is not typechecked to be a subclass of Table, so beware!</span></div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> <span class="comment">// Note: this function will return false for fields equal to the default</span></div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="comment">// value, since they're not stored in the buffer (unless force_defaults was</span></div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="comment">// used).</span></div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> <span class="keywordtype">bool</span> IsFieldPresent(<span class="keyword">const</span> T *table, <span class="keyword">typename</span> T::FlatBuffersVTableOffset field) {</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>  <span class="comment">// Cast, since Table is a private baseclass of any table types.</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Table *<span class="keyword">></span>(table)->CheckField(</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>  static_cast<voffset_t>(field));</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> }</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> </div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="comment">// Utility function for reverse lookups on the EnumNames*() functions</span></div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> <span class="comment">// (in the generated C++ code)</span></div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> <span class="comment">// names must be NULL terminated.</span></div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> <span class="keyword">inline</span> <span class="keywordtype">int</span> LookupEnum(<span class="keyword">const</span> <span class="keywordtype">char</span> **names, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) {</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> **p = names; *p; p++)</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>  <span class="keywordflow">if</span> (!strcmp(*p, name)) <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(p - names);</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> }</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> </div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> <span class="comment">// These macros allow us to layout a struct with a guarantee that they'll end</span></div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> <span class="comment">// up looking the same on different compilers and platforms.</span></div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> <span class="comment">// It does this by disallowing the compiler to do any padding, and then</span></div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> <span class="comment">// does padding itself by inserting extra padding fields that make every</span></div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="comment">// element aligned to its own size.</span></div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> <span class="comment">// Additionally, it manually sets the alignment of the struct as a whole,</span></div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> <span class="comment">// which is typically its largest element, or a custom size set in the schema</span></div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> <span class="comment">// by the force_align attribute.</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> <span class="comment">// These are used in the generated code only.</span></div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> </div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span> <span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> <span class="preprocessor"> #define FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(alignment) \</span></div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> <span class="preprocessor"> __pragma(pack(1)) \</span></div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> <span class="preprocessor"> struct __declspec(align(alignment))</span></div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> <span class="preprocessor"> #define FLATBUFFERS_STRUCT_END(name, size) \</span></div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> <span class="preprocessor"> __pragma(pack()) \</span></div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> <span class="preprocessor"> static_assert(sizeof(name) == size, "compiler breaks packing rules")</span></div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> <span class="preprocessor">#elif defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="preprocessor"> #define FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(alignment) \</span></div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="preprocessor"> _Pragma("pack(1)") \</span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> <span class="preprocessor"> struct __attribute__((aligned(alignment)))</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="preprocessor"> #define FLATBUFFERS_STRUCT_END(name, size) \</span></div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> <span class="preprocessor"> _Pragma("pack()") \</span></div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="preprocessor"> static_assert(sizeof(name) == size, "compiler breaks packing rules")</span></div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> <span class="preprocessor"> #error Unknown compiler, please define structure alignment macros</span></div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> </div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> <span class="comment">// Minimal reflection via code generation.</span></div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> <span class="comment">// Besides full-fat reflection (see reflection.h) and parsing/printing by</span></div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> <span class="comment">// loading schemas (see idl.h), we can also have code generation for mimimal</span></div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> <span class="comment">// reflection data which allows pretty-printing and other uses without needing</span></div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> <span class="comment">// a schema or a parser.</span></div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> <span class="comment">// Generate code with --reflect-types (types only) or --reflect-names (names</span></div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <span class="comment">// also) to enable.</span></div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> <span class="comment">// See minireflect.h for utilities using this functionality.</span></div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> </div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> <span class="comment">// These types are organized slightly differently as the ones in idl.h.</span></div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="keyword">enum</span> SequenceType { ST_TABLE, ST_STRUCT, ST_UNION, ST_ENUM };</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> </div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> <span class="comment">// Scalars have the same order as in idl.h</span></div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <span class="preprocessor">#define FLATBUFFERS_GEN_ELEMENTARY_TYPES(ET) \</span></div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> <span class="preprocessor"> ET(ET_UTYPE) \</span></div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> <span class="preprocessor"> ET(ET_BOOL) \</span></div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <span class="preprocessor"> ET(ET_CHAR) \</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="preprocessor"> ET(ET_UCHAR) \</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <span class="preprocessor"> ET(ET_SHORT) \</span></div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> <span class="preprocessor"> ET(ET_USHORT) \</span></div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> <span class="preprocessor"> ET(ET_INT) \</span></div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> <span class="preprocessor"> ET(ET_UINT) \</span></div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> <span class="preprocessor"> ET(ET_LONG) \</span></div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> <span class="preprocessor"> ET(ET_ULONG) \</span></div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> <span class="preprocessor"> ET(ET_FLOAT) \</span></div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span> <span class="preprocessor"> ET(ET_DOUBLE) \</span></div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> <span class="preprocessor"> ET(ET_STRING) \</span></div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> <span class="preprocessor"> ET(ET_SEQUENCE) // See SequenceType.</span></div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> </div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> <span class="keyword">enum</span> ElementaryType {</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> <span class="preprocessor"> #define FLATBUFFERS_ET(E) E,</span></div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>  FLATBUFFERS_GEN_ELEMENTARY_TYPES(FLATBUFFERS_ET)</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>  <span class="preprocessor">#undef FLATBUFFERS_ET</span></div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> };</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> </div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *ElementaryTypeNames() {</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> names[] = {</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> <span class="preprocessor"> #define FLATBUFFERS_ET(E) #E,</span></div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>  FLATBUFFERS_GEN_ELEMENTARY_TYPES(FLATBUFFERS_ET)</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>  <span class="preprocessor">#undef FLATBUFFERS_ET</span></div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>  };</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>  <span class="keywordflow">return</span> names;</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span> }</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> </div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> <span class="comment">// Basic type info cost just 16bits per field!</span></div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> <span class="keyword">struct </span>TypeCode {</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>  uint16_t base_type : 4; <span class="comment">// ElementaryType</span></div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>  uint16_t is_vector : 1;</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>  int16_t sequence_ref : 11; <span class="comment">// Index into type_refs below, or -1 for none.</span></div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span> };</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> </div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> static_assert(<span class="keyword">sizeof</span>(TypeCode) == 2, <span class="stringliteral">"TypeCode"</span>);</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> </div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span> <span class="keyword">struct </span>TypeTable;</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> </div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span> <span class="comment">// Signature of the static method present in each type.</span></div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> <span class="keyword">typedef</span> <span class="keyword">const</span> TypeTable *(*TypeFunction)();</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span> </div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> <span class="keyword">struct </span>TypeTable {</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>  SequenceType st;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>  <span class="keywordtype">size_t</span> num_elems; <span class="comment">// of type_codes, values, names (but not type_refs).</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>  <span class="keyword">const</span> TypeCode *type_codes; <span class="comment">// num_elems count</span></div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>  <span class="keyword">const</span> TypeFunction *type_refs; <span class="comment">// less than num_elems entries (see TypeCode).</span></div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>  <span class="keyword">const</span> int64_t *values; <span class="comment">// Only set for non-consecutive enum/union or structs.</span></div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> * <span class="keyword">const</span> *names; <span class="comment">// Only set if compiled with --reflect-names.</span></div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> };</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> </div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> <span class="comment">// String which identifies the current version of FlatBuffers.</span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> <span class="comment">// flatbuffer_version_string is used by Google developers to identify which</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> <span class="comment">// applications uploaded to Google Play are using this library. This allows</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> <span class="comment">// the development team at Google to determine the popularity of the library.</span></div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <span class="comment">// How it works: Applications that are uploaded to the Google Play Store are</span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> <span class="comment">// scanned for this version string. We track which applications are using it</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> <span class="comment">// to measure popularity. You are free to remove it (of course) but we would</span></div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> <span class="comment">// appreciate if you left it in.</span></div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> </div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> <span class="comment">// Weak linkage is culled by VS & doesn't work on cygwin.</span></div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> <span class="comment">// clang-format off</span></div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> <span class="preprocessor">#if !defined(_WIN32) && !defined(__CYGWIN__)</span></div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> </div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> <span class="keyword">extern</span> <span class="keyword">volatile</span> __attribute__((weak)) <span class="keyword">const</span> <span class="keywordtype">char</span> *flatbuffer_version_string;</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> <span class="keyword">volatile</span> __attribute__((weak)) <span class="keyword">const</span> <span class="keywordtype">char</span> *flatbuffer_version_string =</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>  <span class="stringliteral">"FlatBuffers "</span></div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MAJOR) <span class="stringliteral">"."</span></div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MINOR) <span class="stringliteral">"."</span></div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_REVISION);</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> </div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> <span class="preprocessor">#endif // !defined(_WIN32) && !defined(__CYGWIN__)</span></div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> </div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> <span class="preprocessor">#define FLATBUFFERS_DEFINE_BITMASK_OPERATORS(E, T)\</span></div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> <span class="preprocessor"> inline E operator | (E lhs, E rhs){\</span></div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> <span class="preprocessor"> return E(T(lhs) | T(rhs));\</span></div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> <span class="preprocessor"> inline E operator & (E lhs, E rhs){\</span></div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> <span class="preprocessor"> return E(T(lhs) & T(rhs));\</span></div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span> <span class="preprocessor"> inline E operator ^ (E lhs, E rhs){\</span></div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> <span class="preprocessor"> return E(T(lhs) ^ T(rhs));\</span></div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> <span class="preprocessor"> inline E operator ~ (E lhs){\</span></div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> <span class="preprocessor"> return E(~T(lhs));\</span></div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> <span class="preprocessor"> inline E operator |= (E &lhs, E rhs){\</span></div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span> <span class="preprocessor"> lhs = lhs | rhs;\</span></div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span> <span class="preprocessor"> return lhs;\</span></div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> <span class="preprocessor"> inline E operator &= (E &lhs, E rhs){\</span></div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> <span class="preprocessor"> lhs = lhs & rhs;\</span></div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> <span class="preprocessor"> return lhs;\</span></div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span> <span class="preprocessor"> inline E operator ^= (E &lhs, E rhs){\</span></div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> <span class="preprocessor"> lhs = lhs ^ rhs;\</span></div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> <span class="preprocessor"> return lhs;\</span></div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> <span class="preprocessor"> }\</span></div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> <span class="preprocessor"> inline bool operator !(E rhs) \</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> <span class="preprocessor"> {\</span></div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> <span class="preprocessor"> return !bool(T(rhs)); \</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span> <span class="comment">/// @endcond</span></div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> <span class="comment"></span>} <span class="comment">// namespace flatbuffers</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> </div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> <span class="comment">// clang-format on</span></div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> </div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> <span class="preprocessor">#endif // FLATBUFFERS_H_</span></div><div class="ttc" id="structflatbuffers_1_1_offset_html"><div class="ttname"><a href="structflatbuffers_1_1_offset.html">flatbuffers::Offset</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:43</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a1080c9e370e2d9d9d872dadd1131436b"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(size_t vector_size, const std::function< T(size_t i)> &f)</div><div class="ttdoc">Serialize values returned by a function into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1501</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac2b96292fa0fb1534fe7fd218a094d0c"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">flatbuffers::FlatBufferBuilder::CreateUninitializedVector</a></div><div class="ttdeci">uoffset_t CreateUninitializedVector(size_t len, size_t elemsize, uint8_t **buf)</div><div class="ttdoc">Specialized version of CreateVector for non-copying use cases. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1759</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a5fcede355ddb6a347edf8b189ada2e42"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42">flatbuffers::FlatBufferBuilder::FLATBUFFERS_ATTRIBUTE</a></div><div class="ttdeci">FLATBUFFERS_ATTRIBUTE(deprecated("use Release() instead")) DetachedBuffer ReleaseBufferPointer()</div><div class="ttdoc">Get the released pointer to the serialized buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1030</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a6e90ada59d9553636f72ce8e4a892f72"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(size_t vector_size, const std::function< void(size_t i, T *)> &filler)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1581</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab1f44cc1b130e13b41e9a80de76e25cf"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedStructs(T *v, size_t len)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1685</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a23aa4c910e053446cc404bc486012e54"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedNativeStructs(std::vector< S > *v)</div><div class="ttdoc">Serialize a std::vector of native structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1671</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a66c8fd33ab9b3b237954c9ea38648f7f"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">flatbuffers::FlatBufferBuilder::GetSize</a></div><div class="ttdeci">uoffset_t GetSize() const</div><div class="ttdoc">The current size of the serialized buffer, counting from the end. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1012</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac64d11c219559ea51567eab556e13135"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables</a></div><div class="ttdeci">Offset< Vector< Offset< T > > > CreateVectorOfSortedTables(std::vector< Offset< T >> *v)</div><div class="ttdoc">Serialize an array of table offsets as a vector in the buffer in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1747</div></div> +<div class="ttc" id="structflatbuffers_1_1_vector_iterator_html"><div class="ttname"><a href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:109</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a></div><div class="ttdoc">Helper class to hold data needed in creation of a FlatBuffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:910</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ae65f0619ecb7715ffdae399ebfc56e38"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38">flatbuffers::FlatBufferBuilder::operator=</a></div><div class="ttdeci">FlatBufferBuilder & operator=(FlatBufferBuilder &&other)</div><div class="ttdoc">Move assignment operator for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:967</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac51db9083ac815eb81420b6d51f42154"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(char *str)</div><div class="ttdoc">Store a string in the buffer, which is null-terminated. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1317</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ae94b94ba71ea0aeb2d9a98c43b713412"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">flatbuffers::FlatBufferBuilder::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Reset all the state in this FlatBufferBuilder so it can be reused to construct another buffer...</div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1001</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a9cc09fa59ff9732e972877cfe911c8a5"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(size_t vector_size, F f, S *state)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1603</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a3d57074082aaab8cdeb8474ff9df0b53"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53">flatbuffers::FlatBufferBuilder::CreateVectorOfNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfNativeStructs(const S *v, size_t len)</div><div class="ttdoc">Serialize an array of native structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1562</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a43f51ba9c8f4f24ea2247a3979d095b8"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8">flatbuffers::FlatBufferBuilder::CreateStruct</a></div><div class="ttdeci">Offset< const T * > CreateStruct(const T &structobj)</div><div class="ttdoc">Write a struct by itself, typically to be part of a union. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1805</div></div> +<div class="ttc" id="namespaceflatbuffers_html"><div class="ttname"><a href="namespaceflatbuffers.html">flatbuffers</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:26</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a7ba8462e408431054c99d25120326220"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">flatbuffers::FlatBufferBuilder::FinishSizePrefixed</a></div><div class="ttdeci">void FinishSizePrefixed(Offset< T > root, const char *file_identifier=nullptr)</div><div class="ttdoc">Finish a buffer with a 32 bit size field pre-fixed (size of the buffer following the size field)...</div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1831</div></div> +<div class="ttc" id="classflatbuffers_1_1_detached_buffer_html"><div class="ttname"><a href="classflatbuffers_1_1_detached_buffer.html">flatbuffers::DetachedBuffer</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:518</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a3eb68613e5883dc4b8fff6cf7d1223d7"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const char *str)</div><div class="ttdoc">Store a string in the buffer, which null-terminated. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1384</div></div> +<div class="ttc" id="classflatbuffers_1_1_vector_of_any_html"><div class="ttname"><a href="classflatbuffers_1_1_vector_of_any.html">flatbuffers::VectorOfAny</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:358</div></div> +<div class="ttc" id="structflatbuffers_1_1_indirect_helper_html"><div class="ttname"><a href="structflatbuffers_1_1_indirect_helper.html">flatbuffers::IndirectHelper</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:81</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aec6f9df2a0366b540b24822414d92cbe"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const char *str, size_t len)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1298</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ae91e78212d88465e992d750ea215d091"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091">flatbuffers::FlatBufferBuilder::FlatBufferBuilder</a></div><div class="ttdeci">FlatBufferBuilder(FlatBufferBuilder &&other) FlatBufferBuilder(FlatBufferBuilder &other)</div><div class="ttdoc">Move constructor for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:943</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a16a8fd46b34ad7727406c37b65b6b27a"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">flatbuffers::FlatBufferBuilder::ForceDefaults</a></div><div class="ttdeci">void ForceDefaults(bool fd)</div><div class="ttdoc">In order to save space, fields that are set to their default value don&#39;t get serialized into the buff...</div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1081</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab81ab8aa273c270b0942fd81489cad83"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83">flatbuffers::FlatBufferBuilder::GetBufferPointer</a></div><div class="ttdeci">uint8_t * GetBufferPointer() const</div><div class="ttdoc">Get the serialized buffer (after you call Finish()). </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1017</div></div> +<div class="ttc" id="classflatbuffers_1_1_default_allocator_html"><div class="ttname"><a href="classflatbuffers_1_1_default_allocator.html">flatbuffers::DefaultAllocator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:476</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aa905b29dce19a1795c7bce375cf29961"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">flatbuffers::FlatBufferBuilder::DedupVtables</a></div><div class="ttdeci">void DedupVtables(bool dedup)</div><div class="ttdoc">By default vtables are deduped in order to save space. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1085</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_af8c7583c92e1d1d6f438977da5158d19"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">flatbuffers::FlatBufferBuilder::kFileIdentifierLength</a></div><div class="ttdeci">static const size_t kFileIdentifierLength</div><div class="ttdoc">The length of a FlatBuffer file header. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1813</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab0173786ea4ec3e4ae10555639b2996c"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">flatbuffers::FlatBufferBuilder::FlatBufferBuilder</a></div><div class="ttdeci">FlatBufferBuilder(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())</div><div class="ttdoc">Default constructor for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:923</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac0b6a1c5d949f20ad84367fc0f9e1506"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const String *str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1342</div></div> +<div class="ttc" id="classflatbuffers_1_1vector__downward_html"><div class="ttname"><a href="classflatbuffers_1_1vector__downward.html">flatbuffers::vector_downward</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:643</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a799701af34c398d8eb86e049b73bcecf"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedNativeStructs(S *v, size_t len)</div><div class="ttdoc">Serialize an array of native structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1700</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a840b769fbb4148f97d3eed266e4690c3"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const String *str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1402</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a099810f03046139d1854d20a1c2a2e41"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">flatbuffers::FlatBufferBuilder::GetCurrentBufferPointer</a></div><div class="ttdeci">uint8_t * GetCurrentBufferPointer() const</div><div class="ttdoc">Get a pointer to an unfinished buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1024</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab77d800e77fa76bc758a6c399fd37685"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const T &str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1350</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a7cc10b709dfa3e72083843d1a5e36c15"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfSortedStructs(std::vector< T > *v)</div><div class="ttdoc">Serialize a std::vector of structs into a FlatBuffer vector in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1658</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a592110519a6c8db1926f1365bf2a58e6"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6">flatbuffers::FlatBufferBuilder::CreateVectorOfStrings</a></div><div class="ttdeci">Offset< Vector< Offset< String > > > CreateVectorOfStrings(const std::vector< std::string > &v)</div><div class="ttdoc">Serialize a std::vector<std::string> into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1532</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a53504fc2cab681a7980b03260f8b2f7a"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(size_t vector_size, F f, S *state)</div><div class="ttdoc">Serialize values returned by a function into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1520</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aa1ebce1f3f46832946a95952af1e9c2b"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b">flatbuffers::FlatBufferBuilder::GetBufferMinAlignment</a></div><div class="ttdeci">size_t GetBufferMinAlignment()</div><div class="ttdoc">get the minimum alignment this buffer needs to be accessed properly. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1061</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a110c2a3298aebef1a9dfa3c44ee84f42"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(const std::vector< T, Alloc > &v)</div><div class="ttdoc">Serialize a std::vector of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1620</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_afede51fd9c32d146cbb1832f57c5e1b7"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfStructs(const T *v, size_t len)</div><div class="ttdoc">Serialize an array of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1547</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a11c291ccd2159604c149600ee6180b95"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95">flatbuffers::FlatBufferBuilder::CreateVectorOfNativeStructs</a></div><div class="ttdeci">Offset< Vector< const T * > > CreateVectorOfNativeStructs(const std::vector< S > &v)</div><div class="ttdoc">Serialize a std::vector of native structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1634</div></div> +<div class="ttc" id="structflatbuffers_1_1_vector_reverse_iterator_html"><div class="ttname"><a href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:201</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aad93d113ac24e86ed04b5236b3f4c0c5"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const char *str)</div><div class="ttdoc">Store a string in the buffer, which is null-terminated. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1310</div></div> +<div class="ttc" id="classflatbuffers_1_1_allocator_html"><div class="ttname"><a href="classflatbuffers_1_1_allocator.html">flatbuffers::Allocator</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:435</div></div> +<div class="ttc" id="structflatbuffers_1_1_string_html"><div class="ttname"><a href="structflatbuffers_1_1_string.html">flatbuffers::String</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:404</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_aa090a68856f7b554cc7cac3c279fb416"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">flatbuffers::FlatBufferBuilder::ReleaseRaw</a></div><div class="ttdeci">uint8_t * ReleaseRaw(size_t &size, size_t &offset)</div><div class="ttdoc">Get the released pointer to the serialized buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1051</div></div> +<div class="ttc" id="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc_html"><div class="ttname"><a href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html">flatbuffers::FlatBufferBuilder::FieldLoc</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1863</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a8c3af55e64f5cda9aefa38ac5287ef9f"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(const std::string &str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1324</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_af715dd24dd37cb0151dc7a980ad0f207"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(const std::vector< T > &v)</div><div class="ttdoc">Serialize a std::vector into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1477</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a2305b63d367845972b51669dd995cc50"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">flatbuffers::FlatBufferBuilder::CreateUninitializedVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateUninitializedVector(size_t len, T **buf)</div><div class="ttdoc">Specialized version of CreateVector for non-copying use cases. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1779</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a9a3a955fbff1c69e944c3560460dd7a6"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6">flatbuffers::FlatBufferBuilder::CreateString</a></div><div class="ttdeci">Offset< String > CreateString(flatbuffers::string_view str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1333</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a2cca5c89246a53e80e6ad9487f4c36f3"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">flatbuffers::FlatBufferBuilder::CreateVector</a></div><div class="ttdeci">Offset< Vector< T > > CreateVector(const T *v, size_t len)</div><div class="ttdoc">Serialize an array into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1443</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a10e8ec7d1c8fbdc21b1c7047bbbe38d9"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const std::string &str)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1393</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a2130ef232ff405eebe2e7f184ecd06e6"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables</a></div><div class="ttdeci">Offset< Vector< Offset< T > > > CreateVectorOfSortedTables(Offset< T > *v, size_t len)</div><div class="ttdoc">Serialize an array of table offsets as a vector in the buffer in sorted order. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1733</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a5e2c3a1e47f0ab4a3a3f07a07a52fb45"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">flatbuffers::FlatBufferBuilder::Release</a></div><div class="ttdeci">DetachedBuffer Release()</div><div class="ttdoc">Get the released DetachedBuffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1038</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ab478a645216d2d613fc7b7c29b0ff9d1"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">flatbuffers::FlatBufferBuilder::CreateSharedString</a></div><div class="ttdeci">Offset< String > CreateSharedString(const char *str, size_t len)</div><div class="ttdoc">Store a string in the buffer, which can contain any binary data. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1360</div></div> +<div class="ttc" id="classflatbuffers_1_1_vector_html"><div class="ttname"><a href="classflatbuffers_1_1_vector.html">flatbuffers::Vector</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:218</div></div> +<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a0c9e507b373d598b51052fab4fa34912"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">flatbuffers::FlatBufferBuilder::Finish</a></div><div class="ttdeci">void Finish(Offset< T > root, const char *file_identifier=nullptr)</div><div class="ttdoc">Finish serializing a buffer by writing the root offset. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1819</div></div> +<div class="ttc" id="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare_html"><div class="ttname"><a href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html">flatbuffers::FlatBufferBuilder::StringOffsetCompare</a></div><div class="ttdef"><b>Definition:</b> flatbuffers.h:1889</div></div> </div><!-- fragment --></div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/flatbuffers_grammar.html b/flatbuffers_grammar.html index 4be72242..3f793740 100644 --- a/flatbuffers_grammar.html +++ b/flatbuffers_grammar.html @@ -96,7 +96,7 @@ $(document).ready(function(){initNavTree('flatbuffers_grammar.html','');}); <p>namespace_decl = <code>namespace</code> ident ( <code>.</code> ident )* <code>;</code></p> <p>attribute_decl = <code>attribute</code> ident | <code>"</tt>ident<tt>"</code> <code>;</code></p> <p>type_decl = ( <code>table</code> | <code>struct</code> ) ident metadata <code>{</code> field_decl+ <code>}</code></p> -<p>enum_decl = ( <code>enum</code> ident [ <code>:</code> type ] | <code>union</code> ident ) metadata <code>{</code> commasep( enumval_decl ) <code>}</code></p> +<p>enum_decl = ( <code>enum</code> ident <code>:</code> type | <code>union</code> ident ) metadata <code>{</code> commasep( enumval_decl ) <code>}</code></p> <p>root_decl = <code>root_type</code> ident <code>;</code></p> <p>field_decl = ident <code>:</code> type [ <code>=</code> scalar ] metadata <code>;</code></p> <p>rpc_decl = <code>rpc_service</code> ident <code>{</code> rpc_method+ <code>}</code></p> @@ -111,10 +111,18 @@ $(document).ready(function(){initNavTree('flatbuffers_grammar.html','');}); <p>commasep(x) = [ x ( <code>,</code> x )* ]</p> <p>file_extension_decl = <code>file_extension</code> string_constant <code>;</code></p> <p>file_identifier_decl = <code>file_identifier</code> string_constant <code>;</code></p> -<p>integer_constant = <code>-?[0-9]+</code> | <code>true</code> | <code>false</code></p> -<p>float_constant = <code>-?[0-9]+.[0-9]+((e|E)(+|-)?[0-9]+)?</code></p> <p>string_constant = <code>\".*?\\"</code></p> -<p>ident = <code>[a-zA-Z_][a-zA-Z0-9_]*</code> </p> +<p>ident = <code>[a-zA-Z_][a-zA-Z0-9_]*</code></p> +<p><code>[:digit:]</code> = <code>[0-9]</code></p> +<p><code>[:xdigit:]</code> = <code>[0-9a-fA-F]</code></p> +<p>dec_integer_constant = <code>[-+]?[:digit:]+</code></p> +<p>hex_integer_constant = <code>[-+]?0[xX][:xdigit:]+</code></p> +<p>integer_constant = dec_integer_constant | hex_integer_constant</p> +<p>dec_float_constant = <code>[-+]?(([.][:digit:]+)|([:digit:]+[.][:digit:]*)|([:digit:]+))([eE][-+]?[:digit:]+)?</code></p> +<p>hex_float_constant = <code>[-+]?0[xX](([.][:xdigit:]+)|([:xdigit:]+[.][:xdigit:]*)|([:xdigit:]+))([pP][-+]?[:digit:]+)</code></p> +<p>special_float_constant = <code>[-+]?(nan|inf|infinity)</code></p> +<p>float_constant = decimal_float_constant | hexadecimal_float_constant | special_float_constant</p> +<p>boolean_constant = <code>(true|false)</code> | (integer_constant ? <code>true</code> : <code>false</code>) </p> </div></div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/flatbuffers_guide_building.html b/flatbuffers_guide_building.html index f7e00d70..82930780 100644 --- a/flatbuffers_guide_building.html +++ b/flatbuffers_guide_building.html @@ -108,6 +108,8 @@ cmake -G "Xcode" -DCMAKE_BUILD_TYPE=Release <h3>Using in CMake-based projects</h3> <p>If you want to use FlatBuffers in a project which already uses CMake, then a more robust and flexible approach is to build FlatBuffers as part of that project directly. This is done by making the FlatBuffers source code available to the main build and adding it using CMake's <code>add_subdirectory()</code> command. This has the significant advantage that the same compiler and linker settings are used between FlatBuffers and the rest of your project, so issues associated with using incompatible libraries (eg debug/release), etc. are avoided. This is particularly useful on Windows.</p> <p>Suppose you put FlatBuffers source code in directory <code>${FLATBUFFERS_SRC_DIR}</code>. To build it as part of your project, add following code to your <code>CMakeLists.txt</code> file: </p><div class="fragment"><div class="line"># Add FlatBuffers directly to our build. This defines the `flatbuffers` target.</div><div class="line">add_subdirectory(${FLATBUFFERS_SRC_DIR}</div><div class="line"> ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build</div><div class="line"> EXCLUDE_FROM_ALL)</div><div class="line"></div><div class="line"># Now simply link against flatbuffers as needed to your already declared target.</div><div class="line"># The flatbuffers target carry header search path automatically if CMake > 2.8.11.</div><div class="line">target_link_libraries(own_project_target PRIVATE flatbuffers)</div></div><!-- fragment --><p> When build your project the <code>flatbuffers</code> library will be compiled and linked to a target as part of your project.</p> +<h4>Override default depth limit of nested objects</h4> +<p>To override <a class="el" href="flatbuffers_guide_use_cpp.html">the depth limit of recursion</a>, add this directive: </p><div class="fragment"><div class="line">set(FLATBUFFERS_MAX_PARSING_DEPTH 16)</div></div><!-- fragment --><p> to <code>CMakeLists.txt</code> file before <code>add_subdirectory(${FLATBUFFERS_SRC_DIR})</code> line.</p> <h4>For Google Play apps</h4> <p>For applications on Google Play that integrate this library, usage is tracked. This tracking is done automatically using the embedded version string (flatbuffer_version_string), and helps us continue to optimize it. Aside from consuming a few extra bytes in your application binary, it shouldn't affect your application at all. We use this information to let us know if FlatBuffers is useful and if we should continue to invest in it. Since this is open source, you are free to remove the version string but we would appreciate if you would leave it in. </p> </div></div><!-- contents --> diff --git a/flatbuffers_guide_tutorial.html b/flatbuffers_guide_tutorial.html index 783c534b..29242ce5 100644 --- a/flatbuffers_guide_tutorial.html +++ b/flatbuffers_guide_tutorial.html @@ -200,14 +200,14 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_tutorial.html','');} <div class="language-c"> <em>Note: If you're working in C, you need to use the separate project <a href="https://github.com/dvidelabs/flatcc">FlatCC</a> which contains a schema compiler and runtime library in C for C.</em> <br /> See <a href="https://github.com/dvidelabs/flatcc#building">flatcc build instructions</a>. <br /> Please be aware of the difference between <code>flatc</code> and <code>flatcc</code> tools. <br /> - </div><div class="language-cpp"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --cpp monster.fbs</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --java monster.fbs</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --csharp monster.fbs</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --go monster.fbs</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --python monster.fbs</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --js monster.fbs</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --ts monster.fbs</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --php monster.fbs</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">cd flatcc</div><div class="line">mkdir -p build/tmp/samples/monster</div><div class="line">bin/flatcc -a -o build/tmp/samples/monster samples/monster/monster.fbs</div><div class="line"># or just</div><div class="line">flatcc/samples/monster/build.sh</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --dart monster.fbs</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --lua monster.fbs</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --lobster monster.fbs</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --rust monster.fbs</div></div><!-- fragment --> </div><p>For a more complete guide to using the <code>flatc</code> compiler, please read the <a class="el" href="flatbuffers_guide_using_schema_compiler.html">Using the schema compiler</a> section of the Programmer's Guide.</p> + </div><div class="language-cpp"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --cpp monster.fbs</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --java monster.fbs</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --csharp monster.fbs</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --go monster.fbs</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --python monster.fbs</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --js monster.fbs</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --ts monster.fbs</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">cd flatbuffers/sample</div><div class="line">./../flatc --php monster.fbs</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">cd flatcc</div><div class="line">mkdir -p build/tmp/samples/monster</div><div class="line">bin/flatcc -a -o build/tmp/samples/monster samples/monster/monster.fbs</div><div class="line"># or just</div><div class="line">flatcc/samples/monster/build.sh</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --dart monster.fbs</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --lua monster.fbs</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --lobster monster.fbs</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">cd flatbuffers/samples</div><div class="line">./../flatc --rust monster.fbs</div></div><!-- fragment --> </div><p>For a more complete guide to using the <code>flatc</code> compiler, please read the <a class="el" href="flatbuffers_guide_using_schema_compiler.html">Using the schema compiler</a> section of the Programmer's Guide.</p> <h2>Reading and Writing Monster FlatBuffers</h2> <p>Now that we have compiled the schema for our programming language, we can start creating some monsters and serializing/deserializing them from FlatBuffers.</p> <h4>Creating and Writing Orc FlatBuffers</h4> <p>The first step is to import/include the library, generated files, etc.</p> -<div class="language-cpp"> <div class="fragment"><div class="line"><span class="preprocessor">#include "monster_generate.h"</span> <span class="comment">// This was generated by `flatc`.</span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span>MyGame::Sample; <span class="comment">// Specified in the schema.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keyword">import</span> MyGame.Sample.*; <span class="comment">//The `flatc` generated files. (Monster, Vec3, etc.)</span></div><div class="line"></div><div class="line"><span class="keyword">import</span> <a class="code" href="namespacecom.html">com</a>.<a class="code" href="namespacecom_1_1google.html">google</a>.<a class="code" href="namespacecom_1_1google_1_1flatbuffers.html">flatbuffers</a>.<a class="code" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>;</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="keyword">using</span> <a class="code" href="namespace_flat_buffers.html">FlatBuffers</a>;</div><div class="line"><span class="keyword">using</span> MyGame.Sample; <span class="comment">// The `flatc` generated files. (Monster, Vec3, etc.)</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">import (</div><div class="line"> flatbuffers "github.com/google/flatbuffers/go"</div><div class="line"> sample "MyGame/Sample"</div><div class="line">)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="keyword">import</span> flatbuffers</div><div class="line"></div><div class="line"><span class="comment"># Generated by `flatc`.</span></div><div class="line"><span class="keyword">import</span> MyGame.Sample.Color</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Equipment</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Monster</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Vec3</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Weapon</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// The following code is for JavaScript module loaders (e.g. Node.js). See</div><div class="line">// below for a browser-based HTML/JavaScript example of including the library.</div><div class="line">var flatbuffers = require('/js/flatbuffers').flatbuffers;</div><div class="line">var MyGame = require('./monster_generated').MyGame; // Generated by `flatc`.</div><div class="line"></div><div class="line">//--------------------------------------------------------------------------//</div><div class="line"></div><div class="line">// The following code is for browser-based HTML/JavaScript. Use the above code</div><div class="line">// for JavaScript module loaders (e.g. Node.js).</div><div class="line"><script src="../js/flatbuffers.js"></script></div><div class="line"><script src="monster_generated.js"></script> // Generated by `flatc`.</div></div><!-- fragment --> </div> <div class="language-typescript"> // note: import flabuffers with your desired import method</div><div class="language-typescript"> import { MyGame } from './monster_generated'; </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// It is recommended that your use PSR autoload when using FlatBuffers in PHP.</span></div><div class="line"><span class="comment">// Here is an example from `SampleBinary.php`:</span></div><div class="line"><span class="keyword">function</span> __autoload($class_name) {</div><div class="line"> <span class="comment">// The last segment of the class name matches the file name.</span></div><div class="line"> $class = substr($class_name, strrpos($class_name, <span class="stringliteral">"\\"</span>) + 1);</div><div class="line"> $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); <span class="comment">// `flatbuffers` root.</span></div><div class="line"></div><div class="line"> <span class="comment">// Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.</span></div><div class="line"> $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"php"</span>)),</div><div class="line"> join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"samples"</span>, <span class="stringliteral">"MyGame"</span>, <span class="stringliteral">"Sample"</span>)));</div><div class="line"> <span class="keywordflow">foreach</span> ($paths as $path) {</div><div class="line"> $file = join(DIRECTORY_SEPARATOR, array($path, $class . <span class="stringliteral">".php"</span>));</div><div class="line"> <span class="keywordflow">if</span> (file_exists($file)) {</div><div class="line"> require($file);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="preprocessor">#include "monster_builder.h"</span> <span class="comment">// Generated by `flatcc`.</span></div><div class="line"></div><div class="line"><span class="comment">// Convenient namespace macro to manage long namespace prefix.</span></div><div class="line"><span class="preprocessor">#undef ns</span></div><div class="line"><span class="preprocessor">#define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x) // Specified in the schema.</span></div><div class="line"></div><div class="line"><span class="comment">// A helper to simplify creating vectors from C-arrays.</span></div><div class="line"><span class="preprocessor">#define c_vec_len(V) (sizeof(V)/sizeof((V)[0]))</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">import 'package:flat_buffers/flat_buffers.dart' as fb;</div><div class="line"></div><div class="line">// Generated by `flatc`.</div><div class="line">import 'monster_my_game.sample_generated.dart' as myGame;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- require the flatbuffers module</div><div class="line">local flatbuffers = require("flatbuffers")</div><div class="line"></div><div class="line">-- require the generated files from `flatc`.</div><div class="line">local color = require("MyGame.Sample.Color")</div><div class="line">local equipment = require("MyGame.Sample.Equipment")</div><div class="line">local monster = require("MyGame.Sample.Monster")</div><div class="line">local vec3 = require("MyGame.Sample.Vec3")</div><div class="line">local weapon = require("MyGame.Sample.Weapon")</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">include from "../lobster/" // Where to find flatbuffers.lobster</div><div class="line">include "monster_generated.lobster"</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// import the flatbuffers runtime library</div><div class="line">extern crate flatbuffers;</div><div class="line"></div><div class="line">// import the generated code</div><div class="line">#[path = "./monster_generated.rs"]</div><div class="line">mod monster_generated;</div><div class="line">pub use monster_generated::my_game::sample::{get_root_as_monster,</div><div class="line"> Color, Equipment,</div><div class="line"> Monster, MonsterArgs,</div><div class="line"> Vec3,</div><div class="line"> Weapon, WeaponArgs};</div></div><!-- fragment --> </div><p>Now we are ready to start building some buffers. In order to start, we need to create an instance of the <code>FlatBufferBuilder</code>, which will contain the buffer as it grows. You can pass an initial size of the buffer (here 1024 bytes), which will grow automatically if needed:</p> +<div class="language-cpp"> <div class="fragment"><div class="line"><span class="preprocessor">#include "monster_generated.h"</span> <span class="comment">// This was generated by `flatc`.</span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span>MyGame::Sample; <span class="comment">// Specified in the schema.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keyword">import</span> MyGame.Sample.*; <span class="comment">//The `flatc` generated files. (Monster, Vec3, etc.)</span></div><div class="line"></div><div class="line"><span class="keyword">import</span> <a class="code" href="namespacecom.html">com</a>.<a class="code" href="namespacecom_1_1google.html">google</a>.<a class="code" href="namespacecom_1_1google_1_1flatbuffers.html">flatbuffers</a>.<a class="code" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>;</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="keyword">using</span> <a class="code" href="namespace_flat_buffers.html">FlatBuffers</a>;</div><div class="line"><span class="keyword">using</span> MyGame.Sample; <span class="comment">// The `flatc` generated files. (Monster, Vec3, etc.)</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">import (</div><div class="line"> flatbuffers "github.com/google/flatbuffers/go"</div><div class="line"> sample "MyGame/Sample"</div><div class="line">)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="keyword">import</span> flatbuffers</div><div class="line"></div><div class="line"><span class="comment"># Generated by `flatc`.</span></div><div class="line"><span class="keyword">import</span> MyGame.Sample.Color</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Equipment</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Monster</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Vec3</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Weapon</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// The following code is for JavaScript module loaders (e.g. Node.js). See</div><div class="line">// below for a browser-based HTML/JavaScript example of including the library.</div><div class="line">var flatbuffers = require('/js/flatbuffers').flatbuffers;</div><div class="line">var MyGame = require('./monster_generated').MyGame; // Generated by `flatc`.</div><div class="line"></div><div class="line">//--------------------------------------------------------------------------//</div><div class="line"></div><div class="line">// The following code is for browser-based HTML/JavaScript. Use the above code</div><div class="line">// for JavaScript module loaders (e.g. Node.js).</div><div class="line"><script src="../js/flatbuffers.js"></script></div><div class="line"><script src="monster_generated.js"></script> // Generated by `flatc`.</div></div><!-- fragment --> </div> <div class="language-typescript"> // note: import flabuffers with your desired import method</div><div class="language-typescript"> import { MyGame } from './monster_generated'; </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// It is recommended that your use PSR autoload when using FlatBuffers in PHP.</span></div><div class="line"><span class="comment">// Here is an example from `SampleBinary.php`:</span></div><div class="line"><span class="keyword">function</span> __autoload($class_name) {</div><div class="line"> <span class="comment">// The last segment of the class name matches the file name.</span></div><div class="line"> $class = substr($class_name, strrpos($class_name, <span class="stringliteral">"\\"</span>) + 1);</div><div class="line"> $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); <span class="comment">// `flatbuffers` root.</span></div><div class="line"></div><div class="line"> <span class="comment">// Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.</span></div><div class="line"> $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"php"</span>)),</div><div class="line"> join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"samples"</span>, <span class="stringliteral">"MyGame"</span>, <span class="stringliteral">"Sample"</span>)));</div><div class="line"> <span class="keywordflow">foreach</span> ($paths as $path) {</div><div class="line"> $file = join(DIRECTORY_SEPARATOR, array($path, $class . <span class="stringliteral">".php"</span>));</div><div class="line"> <span class="keywordflow">if</span> (file_exists($file)) {</div><div class="line"> require($file);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="preprocessor">#include "monster_builder.h"</span> <span class="comment">// Generated by `flatcc`.</span></div><div class="line"></div><div class="line"><span class="comment">// Convenient namespace macro to manage long namespace prefix.</span></div><div class="line"><span class="preprocessor">#undef ns</span></div><div class="line"><span class="preprocessor">#define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x) // Specified in the schema.</span></div><div class="line"></div><div class="line"><span class="comment">// A helper to simplify creating vectors from C-arrays.</span></div><div class="line"><span class="preprocessor">#define c_vec_len(V) (sizeof(V)/sizeof((V)[0]))</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">import 'package:flat_buffers/flat_buffers.dart' as fb;</div><div class="line"></div><div class="line">// Generated by `flatc`.</div><div class="line">import 'monster_my_game.sample_generated.dart' as myGame;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- require the flatbuffers module</div><div class="line">local flatbuffers = require("flatbuffers")</div><div class="line"></div><div class="line">-- require the generated files from `flatc`.</div><div class="line">local color = require("MyGame.Sample.Color")</div><div class="line">local equipment = require("MyGame.Sample.Equipment")</div><div class="line">local monster = require("MyGame.Sample.Monster")</div><div class="line">local vec3 = require("MyGame.Sample.Vec3")</div><div class="line">local weapon = require("MyGame.Sample.Weapon")</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">include from "../lobster/" // Where to find flatbuffers.lobster</div><div class="line">include "monster_generated.lobster"</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// import the flatbuffers runtime library</div><div class="line">extern crate flatbuffers;</div><div class="line"></div><div class="line">// import the generated code</div><div class="line">#[allow(dead_code, unused_imports)]</div><div class="line">#[path = "./monster_generated.rs"]</div><div class="line">mod monster_generated;</div><div class="line">pub use monster_generated::my_game::sample::{get_root_as_monster,</div><div class="line"> Color, Equipment,</div><div class="line"> Monster, MonsterArgs,</div><div class="line"> Vec3,</div><div class="line"> Weapon, WeaponArgs};</div></div><!-- fragment --> </div><p>Now we are ready to start building some buffers. In order to start, we need to create an instance of the <code>FlatBufferBuilder</code>, which will contain the buffer as it grows. You can pass an initial size of the buffer (here 1024 bytes), which will grow automatically if needed:</p> <div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// Create a `FlatBufferBuilder`, which will be used to create our</span></div><div class="line"><span class="comment">// monsters' FlatBuffers.</span></div><div class="line"><a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a> builder(1024);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// Create a `FlatBufferBuilder`, which will be used to create our</span></div><div class="line"><span class="comment">// monsters' FlatBuffers.</span></div><div class="line">FlatBufferBuilder builder = <span class="keyword">new</span> FlatBufferBuilder(1024);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// Create a `FlatBufferBuilder`, which will be used to create our</span></div><div class="line"><span class="comment">// monsters' FlatBuffers.</span></div><div class="line">var builder = <span class="keyword">new</span> FlatBufferBuilder(1024);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// Create a `FlatBufferBuilder`, which will be used to create our</div><div class="line">// monsters' FlatBuffers.</div><div class="line">builder := flatbuffers.NewBuilder(1024)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># Create a `FlatBufferBuilder`, which will be used to create our</span></div><div class="line"><span class="comment"># monsters' FlatBuffers.</span></div><div class="line">builder = flatbuffers.Builder(1024)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// Create a `flatbuffer.Builder`, which will be used to create our</div><div class="line">// monsters' FlatBuffers.</div><div class="line">var builder = new flatbuffers.Builder(1024);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// Create a `flatbuffer.Builder`, which will be used to create our</div><div class="line">// monsters' FlatBuffers.</div><div class="line">let builder = new flatbuffers.Builder(1024);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Create a `FlatBufferBuilder`, which will be used to create our</span></div><div class="line"><span class="comment">// monsters' FlatBuffers.</span></div><div class="line">$builder = <span class="keyword">new</span> <a class="code" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html">Google\FlatBuffers\FlatbufferBuilder</a>(1024);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">flatcc_builder_t builder, *B;</div><div class="line">B = &builder;</div><div class="line"><span class="comment">// Initialize the builder object.</span></div><div class="line">flatcc_builder_init(B);</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Create the fb.Builder object that will be used by our generated builders</div><div class="line">// Note that if you are only planning to immediately get the byte array this builder would create,</div><div class="line">// you can use the convenience method `toBytes()` on the generated builders.</div><div class="line">// For example, you could do something like `new myGame.MonsterBuilder(...).toBytes()`</div><div class="line">var builder = new fb.Builder(initialSize: 1024);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- get access to the builder, providing an array of size 1024</div><div class="line">local builder = flatbuffers.Builder(1024)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">-- get access to the builder</div><div class="line">let builder = flatbuffers_builder {}</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Build up a serialized buffer algorithmically.</div><div class="line">// Initialize it with a capacity of 1024 bytes.</div><div class="line">let mut builder = flatbuffers::FlatBufferBuilder::new_with_capacity(1024);</div></div><!-- fragment --> </div><p>After creating the <code>builder</code>, we can start serializing our data. Before we make our <code>orc</code> Monster, lets create some <code>Weapon</code>s: a <code>Sword</code> and an <code>Axe</code>.</p> -<div class="language-cpp"> <div class="fragment"><div class="line"><span class="keyword">auto</span> weapon_one_name = builder.CreateString(<span class="stringliteral">"Sword"</span>);</div><div class="line"><span class="keywordtype">short</span> weapon_one_damage = 3;</div><div class="line"></div><div class="line"><span class="keyword">auto</span> weapon_two_name = builder.CreateString(<span class="stringliteral">"Axe"</span>);</div><div class="line"><span class="keywordtype">short</span> weapon_two_damage = 5;</div><div class="line"></div><div class="line"><span class="comment">// Use the `CreateWeapon` shortcut to create Weapons with all the fields set.</span></div><div class="line"><span class="keyword">auto</span> sword = CreateWeapon(builder, weapon_one_name, weapon_one_damage);</div><div class="line"><span class="keyword">auto</span> axe = CreateWeapon(builder, weapon_two_name, weapon_two_damage);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keywordtype">int</span> weaponOneName = builder.createString(<span class="stringliteral">"Sword"</span>)</div><div class="line"><span class="keywordtype">short</span> weaponOneDamage = 3;</div><div class="line"></div><div class="line"><span class="keywordtype">int</span> weaponTwoName = builder.createString(<span class="stringliteral">"Axe"</span>);</div><div class="line"><span class="keywordtype">short</span> weaponTwoDamage = 5;</div><div class="line"></div><div class="line"><span class="comment">// Use the `createWeapon()` helper function to create the weapons, since we set every field.</span></div><div class="line"><span class="keywordtype">int</span> sword = Weapon.createWeapon(builder, weaponOneName, weaponOneDamage);</div><div class="line"><span class="keywordtype">int</span> axe = Weapon.createWeapon(builder, weaponTwoName, weaponTwoDamage);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">var weaponOneName = builder.CreateString(<span class="stringliteral">"Sword"</span>);</div><div class="line">var weaponOneDamage = 3;</div><div class="line"></div><div class="line">var weaponTwoName = builder.CreateString(<span class="stringliteral">"Axe"</span>);</div><div class="line">var weaponTwoDamage = 5;</div><div class="line"></div><div class="line"><span class="comment">// Use the `CreateWeapon()` helper function to create the weapons, since we set every field.</span></div><div class="line">var sword = Weapon.CreateWeapon(builder, weaponOneName, (<span class="keywordtype">short</span>)weaponOneDamage);</div><div class="line">var axe = Weapon.CreateWeapon(builder, weaponTwoName, (<span class="keywordtype">short</span>)weaponTwoDamage);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">weaponOne := builder.CreateString("Sword")</div><div class="line">weaponTwo := builder.CreateString("Axe")</div><div class="line"></div><div class="line">// Create the first `Weapon` ("Sword").</div><div class="line">sample.WeaponStart(builder)</div><div class="line">sample.Weapon.AddName(builder, weaponOne)</div><div class="line">sample.Weapon.AddDamage(builder, 3)</div><div class="line">sword := sample.WeaponEnd(builder)</div><div class="line"></div><div class="line">// Create the second `Weapon` ("Axe").</div><div class="line">sample.WeaponStart(builder)</div><div class="line">sample.Weapon.AddName(builder, weaponTwo)</div><div class="line">sample.Weapon.AddDamage(builder, 5)</div><div class="line">axe := sample.WeaponEnd(builder)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">weapon_one = builder.CreateString(<span class="stringliteral">'Sword'</span>)</div><div class="line">weapon_two = builder.CreateString(<span class="stringliteral">'Axe'</span>)</div><div class="line"></div><div class="line"><span class="comment"># Create the first `Weapon` ('Sword').</span></div><div class="line">MyGame.Sample.Weapon.WeaponStart(builder)</div><div class="line">MyGame.Sample.Weapon.WeaponAddName(builder, weapon_one)</div><div class="line">MyGame.Sample.Weapon.WeaponAddDamage(builder, 3)</div><div class="line">sword = MyGame.Sample.Weapon.WeaponEnd(builder)</div><div class="line"></div><div class="line"><span class="comment"># Create the second `Weapon` ('Axe').</span></div><div class="line">MyGame.Sample.Weapon.WeaponStart(builder)</div><div class="line">MyGame.Sample.Weapon.WeaponAddName(builder, weapon_two)</div><div class="line">MyGame.Sample.Weapon.WeaponAddDamage(builder, 5)</div><div class="line">axe = MyGame.Sample.Weapon.WeaponEnd(builder)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">var weaponOne = builder.createString('Sword');</div><div class="line">var weaponTwo = builder.createString('Axe');</div><div class="line"></div><div class="line">// Create the first `Weapon` ('Sword').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponOne);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 3);</div><div class="line">var sword = MyGame.Sample.Weapon.endWeapon(builder);</div><div class="line"></div><div class="line">// Create the second `Weapon` ('Axe').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponTwo);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 5);</div><div class="line">var axe = MyGame.Sample.Weapon.endWeapon(builder);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">let weaponOne = builder.createString('Sword');</div><div class="line">let weaponTwo = builder.createString('Axe');</div><div class="line"></div><div class="line">// Create the first `Weapon` ('Sword').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponOne);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 3);</div><div class="line">let sword = MyGame.Sample.Weapon.endWeapon(builder);</div><div class="line"></div><div class="line">// Create the second `Weapon` ('Axe').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponTwo);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 5);</div><div class="line">let axe = MyGame.Sample.Weapon.endWeapon(builder);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Create the `Weapon`s using the `createWeapon()` helper function.</span></div><div class="line">$weapon_one_name = $builder->createString(<span class="stringliteral">"Sword"</span>);</div><div class="line">$sword = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_one_name, 3);</div><div class="line"></div><div class="line">$weapon_two_name = $builder->createString(<span class="stringliteral">"Axe"</span>);</div><div class="line">$axe = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_two_name, 5);</div><div class="line"></div><div class="line"><span class="comment">// Create an array from the two `Weapon`s and pass it to the</span></div><div class="line"><span class="comment">// `CreateWeaponsVector()` method to create a FlatBuffer vector.</span></div><div class="line">$weaps = array($sword, $axe);</div><div class="line">$weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">ns(Weapon_ref_t) weapon_one_name = flatbuffers_string_create_str(B, <span class="stringliteral">"Sword"</span>);</div><div class="line">uint16_t weapon_one_damage = 3;</div><div class="line"></div><div class="line">ns(Weapon_ref_t) weapon_two_name = flatbuffers_string_create_str(B, <span class="stringliteral">"Axe"</span>);</div><div class="line">uint16_t weapon_two_damage = 5;</div><div class="line"></div><div class="line">ns(Weapon_ref_t) sword = ns(Weapon_create(B, weapon_one_name, weapon_one_damage));</div><div class="line">ns(Weapon_ref_t) axe = ns(Weapon_create(B, weapon_two_name, weapon_two_damage));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// The generated Builder classes work much like in other languages,</div><div class="line">final int weaponOneName = builder.writeString("Sword");</div><div class="line">final int weaponOneDamage = 3;</div><div class="line"></div><div class="line">final int weaponTwoName = builder.writeString("Axe");</div><div class="line">final int weaponTwoDamage = 5;</div><div class="line"></div><div class="line">final swordBuilder = new myGame.WeaponBuilder(builder)</div><div class="line"> ..begin()</div><div class="line"> ..addNameOffset(weaponOneName)</div><div class="line"> ..addDamage(weaponOneDamage);</div><div class="line">final int sword = swordBuilder.finish();</div><div class="line"></div><div class="line">final axeBuilder = new myGame.WeaponBuilder(builder)</div><div class="line"> ..begin()</div><div class="line"> ..addNameOffset(weaponTwoName)</div><div class="line"> ..addDamage(weaponTwoDamage);</div><div class="line">final int axe = axeBuilder.finish();</div><div class="line"></div><div class="line"></div><div class="line"></div><div class="line">// The genearted ObjectBuilder classes offer an easier to use alternative</div><div class="line">// at the cost of requiring some additional reference allocations. If memory</div><div class="line">// usage is critical, or if you'll be working with especially large messages</div><div class="line">// or tables, you should prefer using the generated Builder classes.</div><div class="line">// The following code would produce an identical buffer as above.</div><div class="line">final String weaponOneName = "Sword";</div><div class="line">final int weaponOneDamage = 3;</div><div class="line"></div><div class="line">final String weaponTwoName = "Axe";</div><div class="line">final int weaponTwoDamage = 5;</div><div class="line"></div><div class="line">final myGame.WeaponBuilder sword = new myGame.WeaponObjectBuilder(</div><div class="line"> name: weaponOneName,</div><div class="line"> damage: weaponOneDamage,</div><div class="line">);</div><div class="line"></div><div class="line">final myGame.WeaponBuilder axe = new myGame.WeaponObjectBuilder(</div><div class="line"> name: weaponTwoName,</div><div class="line"> damage: weaponTwoDamage,</div><div class="line">);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">local weaponOne = builder:CreateString("Sword")</div><div class="line">local weaponTwo = builder:CreateString("Axe")</div><div class="line"></div><div class="line">-- Create the first 'Weapon'</div><div class="line">weapon.Start(builder)</div><div class="line">weapon.AddName(builder, weaponOne)</div><div class="line">weapon.AddDamage(builder, 3)</div><div class="line">local sword = weapon.End(builder)</div><div class="line"></div><div class="line">-- Create the second 'Weapon'</div><div class="line">weapon.Start(builder)</div><div class="line">weapon.AddName(builder, weaponTwo)</div><div class="line">weapon.AddDamage(builder, 5)</div><div class="line">local axe = weapon.End(builder)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">let weapon_names = [ "Sword", "Axe" ]</div><div class="line">let weapon_damages = [ 3, 5 ]</div><div class="line"></div><div class="line">weapon_offsets := map(weapon_names) name, i:</div><div class="line"> let ns = builder.CreateString(name)</div><div class="line"> builder.MyGame_Sample_WeaponStart()</div><div class="line"> builder.MyGame_Sample_WeaponAddName(ns)</div><div class="line"> builder.MyGame_Sample_WeaponAddDamage(weapon_damages[i])</div><div class="line"> builder.MyGame_Sample_WeaponEnd()</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Serialize some weapons for the Monster: A 'sword' and an 'axe'.</div><div class="line">let weapon_one_name = builder.create_string("Sword");</div><div class="line">let weapon_two_name = builder.create_string("Axe");</div><div class="line"></div><div class="line">// Use the `Weapon::create` shortcut to create Weapons with named field</div><div class="line">// arguments.</div><div class="line">let sword = Weapon::create(&mut builder, &WeaponArgs{</div><div class="line"> name: Some(weapon_one_name),</div><div class="line"> damage: 3,</div><div class="line">});</div><div class="line">let axe = Weapon::create(&mut builder, &WeaponArgs{</div><div class="line"> name: Some(weapon_two_name),</div><div class="line"> damage: 5,</div><div class="line">});</div></div><!-- fragment --> </div><p>Now let's create our monster, the <code>orc</code>. For this <code>orc</code>, lets make him <code>red</code> with rage, positioned at <code>(1.0, 2.0, 3.0)</code>, and give him a large pool of hit points with <code>300</code>. We can give him a vector of weapons to choose from (our <code>Sword</code> and <code>Axe</code> from earlier). In this case, we will equip him with the <code>Axe</code>, since it is the most powerful of the two. Lastly, let's fill his inventory with some potential treasures that can be taken once he is defeated.</p> +<div class="language-cpp"> <div class="fragment"><div class="line"><span class="keyword">auto</span> weapon_one_name = builder.CreateString(<span class="stringliteral">"Sword"</span>);</div><div class="line"><span class="keywordtype">short</span> weapon_one_damage = 3;</div><div class="line"></div><div class="line"><span class="keyword">auto</span> weapon_two_name = builder.CreateString(<span class="stringliteral">"Axe"</span>);</div><div class="line"><span class="keywordtype">short</span> weapon_two_damage = 5;</div><div class="line"></div><div class="line"><span class="comment">// Use the `CreateWeapon` shortcut to create Weapons with all the fields set.</span></div><div class="line"><span class="keyword">auto</span> sword = CreateWeapon(builder, weapon_one_name, weapon_one_damage);</div><div class="line"><span class="keyword">auto</span> axe = CreateWeapon(builder, weapon_two_name, weapon_two_damage);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keywordtype">int</span> weaponOneName = builder.createString(<span class="stringliteral">"Sword"</span>)</div><div class="line"><span class="keywordtype">short</span> weaponOneDamage = 3;</div><div class="line"></div><div class="line"><span class="keywordtype">int</span> weaponTwoName = builder.createString(<span class="stringliteral">"Axe"</span>);</div><div class="line"><span class="keywordtype">short</span> weaponTwoDamage = 5;</div><div class="line"></div><div class="line"><span class="comment">// Use the `createWeapon()` helper function to create the weapons, since we set every field.</span></div><div class="line"><span class="keywordtype">int</span> sword = Weapon.createWeapon(builder, weaponOneName, weaponOneDamage);</div><div class="line"><span class="keywordtype">int</span> axe = Weapon.createWeapon(builder, weaponTwoName, weaponTwoDamage);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">var weaponOneName = builder.CreateString(<span class="stringliteral">"Sword"</span>);</div><div class="line">var weaponOneDamage = 3;</div><div class="line"></div><div class="line">var weaponTwoName = builder.CreateString(<span class="stringliteral">"Axe"</span>);</div><div class="line">var weaponTwoDamage = 5;</div><div class="line"></div><div class="line"><span class="comment">// Use the `CreateWeapon()` helper function to create the weapons, since we set every field.</span></div><div class="line">var sword = Weapon.CreateWeapon(builder, weaponOneName, (<span class="keywordtype">short</span>)weaponOneDamage);</div><div class="line">var axe = Weapon.CreateWeapon(builder, weaponTwoName, (<span class="keywordtype">short</span>)weaponTwoDamage);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">weaponOne := builder.CreateString("Sword")</div><div class="line">weaponTwo := builder.CreateString("Axe")</div><div class="line"></div><div class="line">// Create the first `Weapon` ("Sword").</div><div class="line">sample.WeaponStart(builder)</div><div class="line">sample.WeaponAddName(builder, weaponOne)</div><div class="line">sample.WeaponAddDamage(builder, 3)</div><div class="line">sword := sample.WeaponEnd(builder)</div><div class="line"></div><div class="line">// Create the second `Weapon` ("Axe").</div><div class="line">sample.WeaponStart(builder)</div><div class="line">sample.WeaponAddName(builder, weaponTwo)</div><div class="line">sample.WeaponAddDamage(builder, 5)</div><div class="line">axe := sample.WeaponEnd(builder)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">weapon_one = builder.CreateString(<span class="stringliteral">'Sword'</span>)</div><div class="line">weapon_two = builder.CreateString(<span class="stringliteral">'Axe'</span>)</div><div class="line"></div><div class="line"><span class="comment"># Create the first `Weapon` ('Sword').</span></div><div class="line">MyGame.Sample.Weapon.WeaponStart(builder)</div><div class="line">MyGame.Sample.Weapon.WeaponAddName(builder, weapon_one)</div><div class="line">MyGame.Sample.Weapon.WeaponAddDamage(builder, 3)</div><div class="line">sword = MyGame.Sample.Weapon.WeaponEnd(builder)</div><div class="line"></div><div class="line"><span class="comment"># Create the second `Weapon` ('Axe').</span></div><div class="line">MyGame.Sample.Weapon.WeaponStart(builder)</div><div class="line">MyGame.Sample.Weapon.WeaponAddName(builder, weapon_two)</div><div class="line">MyGame.Sample.Weapon.WeaponAddDamage(builder, 5)</div><div class="line">axe = MyGame.Sample.Weapon.WeaponEnd(builder)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">var weaponOne = builder.createString('Sword');</div><div class="line">var weaponTwo = builder.createString('Axe');</div><div class="line"></div><div class="line">// Create the first `Weapon` ('Sword').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponOne);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 3);</div><div class="line">var sword = MyGame.Sample.Weapon.endWeapon(builder);</div><div class="line"></div><div class="line">// Create the second `Weapon` ('Axe').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponTwo);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 5);</div><div class="line">var axe = MyGame.Sample.Weapon.endWeapon(builder);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">let weaponOne = builder.createString('Sword');</div><div class="line">let weaponTwo = builder.createString('Axe');</div><div class="line"></div><div class="line">// Create the first `Weapon` ('Sword').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponOne);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 3);</div><div class="line">let sword = MyGame.Sample.Weapon.endWeapon(builder);</div><div class="line"></div><div class="line">// Create the second `Weapon` ('Axe').</div><div class="line">MyGame.Sample.Weapon.startWeapon(builder);</div><div class="line">MyGame.Sample.Weapon.addName(builder, weaponTwo);</div><div class="line">MyGame.Sample.Weapon.addDamage(builder, 5);</div><div class="line">let axe = MyGame.Sample.Weapon.endWeapon(builder);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Create the `Weapon`s using the `createWeapon()` helper function.</span></div><div class="line">$weapon_one_name = $builder->createString(<span class="stringliteral">"Sword"</span>);</div><div class="line">$sword = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_one_name, 3);</div><div class="line"></div><div class="line">$weapon_two_name = $builder->createString(<span class="stringliteral">"Axe"</span>);</div><div class="line">$axe = \MyGame\Sample\Weapon::CreateWeapon($builder, $weapon_two_name, 5);</div><div class="line"></div><div class="line"><span class="comment">// Create an array from the two `Weapon`s and pass it to the</span></div><div class="line"><span class="comment">// `CreateWeaponsVector()` method to create a FlatBuffer vector.</span></div><div class="line">$weaps = array($sword, $axe);</div><div class="line">$weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">flatbuffers_string_ref_t weapon_one_name = flatbuffers_string_create_str(B, <span class="stringliteral">"Sword"</span>);</div><div class="line">uint16_t weapon_one_damage = 3;</div><div class="line"></div><div class="line">flatbuffers_string_ref_t weapon_two_name = flatbuffers_string_create_str(B, <span class="stringliteral">"Axe"</span>);</div><div class="line">uint16_t weapon_two_damage = 5;</div><div class="line"></div><div class="line">ns(Weapon_ref_t) sword = ns(Weapon_create(B, weapon_one_name, weapon_one_damage));</div><div class="line">ns(Weapon_ref_t) axe = ns(Weapon_create(B, weapon_two_name, weapon_two_damage));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// The generated Builder classes work much like in other languages,</div><div class="line">final int weaponOneName = builder.writeString("Sword");</div><div class="line">final int weaponOneDamage = 3;</div><div class="line"></div><div class="line">final int weaponTwoName = builder.writeString("Axe");</div><div class="line">final int weaponTwoDamage = 5;</div><div class="line"></div><div class="line">final swordBuilder = new myGame.WeaponBuilder(builder)</div><div class="line"> ..begin()</div><div class="line"> ..addNameOffset(weaponOneName)</div><div class="line"> ..addDamage(weaponOneDamage);</div><div class="line">final int sword = swordBuilder.finish();</div><div class="line"></div><div class="line">final axeBuilder = new myGame.WeaponBuilder(builder)</div><div class="line"> ..begin()</div><div class="line"> ..addNameOffset(weaponTwoName)</div><div class="line"> ..addDamage(weaponTwoDamage);</div><div class="line">final int axe = axeBuilder.finish();</div><div class="line"></div><div class="line"></div><div class="line"></div><div class="line">// The generated ObjectBuilder classes offer an easier to use alternative</div><div class="line">// at the cost of requiring some additional reference allocations. If memory</div><div class="line">// usage is critical, or if you'll be working with especially large messages</div><div class="line">// or tables, you should prefer using the generated Builder classes.</div><div class="line">// The following code would produce an identical buffer as above.</div><div class="line">final String weaponOneName = "Sword";</div><div class="line">final int weaponOneDamage = 3;</div><div class="line"></div><div class="line">final String weaponTwoName = "Axe";</div><div class="line">final int weaponTwoDamage = 5;</div><div class="line"></div><div class="line">final myGame.WeaponBuilder sword = new myGame.WeaponObjectBuilder(</div><div class="line"> name: weaponOneName,</div><div class="line"> damage: weaponOneDamage,</div><div class="line">);</div><div class="line"></div><div class="line">final myGame.WeaponBuilder axe = new myGame.WeaponObjectBuilder(</div><div class="line"> name: weaponTwoName,</div><div class="line"> damage: weaponTwoDamage,</div><div class="line">);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">local weaponOne = builder:CreateString("Sword")</div><div class="line">local weaponTwo = builder:CreateString("Axe")</div><div class="line"></div><div class="line">-- Create the first 'Weapon'</div><div class="line">weapon.Start(builder)</div><div class="line">weapon.AddName(builder, weaponOne)</div><div class="line">weapon.AddDamage(builder, 3)</div><div class="line">local sword = weapon.End(builder)</div><div class="line"></div><div class="line">-- Create the second 'Weapon'</div><div class="line">weapon.Start(builder)</div><div class="line">weapon.AddName(builder, weaponTwo)</div><div class="line">weapon.AddDamage(builder, 5)</div><div class="line">local axe = weapon.End(builder)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">let weapon_names = [ "Sword", "Axe" ]</div><div class="line">let weapon_damages = [ 3, 5 ]</div><div class="line"></div><div class="line">weapon_offsets := map(weapon_names) name, i:</div><div class="line"> let ns = builder.CreateString(name)</div><div class="line"> builder.MyGame_Sample_WeaponStart()</div><div class="line"> builder.MyGame_Sample_WeaponAddName(ns)</div><div class="line"> builder.MyGame_Sample_WeaponAddDamage(weapon_damages[i])</div><div class="line"> builder.MyGame_Sample_WeaponEnd()</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Serialize some weapons for the Monster: A 'sword' and an 'axe'.</div><div class="line">let weapon_one_name = builder.create_string("Sword");</div><div class="line">let weapon_two_name = builder.create_string("Axe");</div><div class="line"></div><div class="line">// Use the `Weapon::create` shortcut to create Weapons with named field</div><div class="line">// arguments.</div><div class="line">let sword = Weapon::create(&mut builder, &WeaponArgs{</div><div class="line"> name: Some(weapon_one_name),</div><div class="line"> damage: 3,</div><div class="line">});</div><div class="line">let axe = Weapon::create(&mut builder, &WeaponArgs{</div><div class="line"> name: Some(weapon_two_name),</div><div class="line"> damage: 5,</div><div class="line">});</div></div><!-- fragment --> </div><p>Now let's create our monster, the <code>orc</code>. For this <code>orc</code>, lets make him <code>red</code> with rage, positioned at <code>(1.0, 2.0, 3.0)</code>, and give him a large pool of hit points with <code>300</code>. We can give him a vector of weapons to choose from (our <code>Sword</code> and <code>Axe</code> from earlier). In this case, we will equip him with the <code>Axe</code>, since it is the most powerful of the two. Lastly, let's fill his inventory with some potential treasures that can be taken once he is defeated.</p> <p>Before we serialize a monster, we need to first serialize any objects that are contained there-in, i.e. we serialize the data tree using depth-first, pre-order traversal. This is generally easy to do on any tree structures.</p> <div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// Serialize a name for our monster, called "Orc".</span></div><div class="line"><span class="keyword">auto</span> name = builder.CreateString(<span class="stringliteral">"Orc"</span>);</div><div class="line"></div><div class="line"><span class="comment">// Create a `vector` representing the inventory of the Orc. Each number</span></div><div class="line"><span class="comment">// could correspond to an item that can be claimed after he is slain.</span></div><div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> treasure[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><span class="keyword">auto</span> inventory = builder.CreateVector(treasure, 10);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// Serialize a name for our monster, called "Orc".</span></div><div class="line"><span class="keywordtype">int</span> name = builder.createString(<span class="stringliteral">"Orc"</span>);</div><div class="line"></div><div class="line"><span class="comment">// Create a `vector` representing the inventory of the Orc. Each number</span></div><div class="line"><span class="comment">// could correspond to an item that can be claimed after he is slain.</span></div><div class="line">byte[] treasure = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line"><span class="keywordtype">int</span> inv = Monster.createInventoryVector(builder, treasure);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// Serialize a name for our monster, called "Orc".</span></div><div class="line">var name = builder.CreateString(<span class="stringliteral">"Orc"</span>);</div><div class="line"></div><div class="line"><span class="comment">// Create a `vector` representing the inventory of the Orc. Each number</span></div><div class="line"><span class="comment">// could correspond to an item that can be claimed after he is slain.</span></div><div class="line"><span class="comment">// Note: Since we prepend the bytes, this loop iterates in reverse order.</span></div><div class="line">Monster.StartInventoryVector(builder, 10);</div><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 9; i >= 0; i--)</div><div class="line">{</div><div class="line"> builder.AddByte((byte)i);</div><div class="line">}</div><div class="line">var inv = builder.EndVector();</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// Serialize a name for our monster, called "Orc".</div><div class="line">name := builder.CreateString("Orc")</div><div class="line"></div><div class="line">// Create a `vector` representing the inventory of the Orc. Each number</div><div class="line">// could correspond to an item that can be claimed after he is slain.</div><div class="line">// Note: Since we prepend the bytes, this loop iterates in reverse.</div><div class="line">sample.MonsterStartInventoryVector(builder, 10)</div><div class="line">for i := 9; i >= 0; i-- {</div><div class="line"> builder.PrependByte(byte(i))</div><div class="line">}</div><div class="line">inv := builder.EndVector(10)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># Serialize a name for our monster, called "Orc".</span></div><div class="line">name = builder.CreateString(<span class="stringliteral">"Orc"</span>)</div><div class="line"></div><div class="line"><span class="comment"># Create a `vector` representing the inventory of the Orc. Each number</span></div><div class="line"><span class="comment"># could correspond to an item that can be claimed after he is slain.</span></div><div class="line"><span class="comment"># Note: Since we prepend the bytes, this loop iterates in reverse.</span></div><div class="line">MyGame.Sample.Monster.MonsterStartInventoryVector(builder, 10)</div><div class="line"><span class="keywordflow">for</span> i <span class="keywordflow">in</span> reversed(range(0, 10)):</div><div class="line"> builder.PrependByte(i)</div><div class="line">inv = builder.EndVector(10)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// Serialize a name for our monster, called 'Orc'.</div><div class="line">var name = builder.createString('Orc');</div><div class="line"></div><div class="line">// Create a `vector` representing the inventory of the Orc. Each number</div><div class="line">// could correspond to an item that can be claimed after he is slain.</div><div class="line">var treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];</div><div class="line">var inv = MyGame.Sample.Monster.createInventoryVector(builder, treasure);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// Serialize a name for our monster, called 'Orc'.</div><div class="line">let name = builder.createString('Orc');</div><div class="line"></div><div class="line">// Create a `vector` representing the inventory of the Orc. Each number</div><div class="line">// could correspond to an item that can be claimed after he is slain.</div><div class="line">let treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];</div><div class="line">let inv = MyGame.Sample.Monster.createInventoryVector(builder, treasure);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Serialize a name for our monster, called "Orc".</span></div><div class="line">$name = $builder->createString(<span class="stringliteral">"Orc"</span>);</div><div class="line"></div><div class="line"><span class="comment">// Create a `vector` representing the inventory of the Orc. Each number</span></div><div class="line"><span class="comment">// could correspond to an item that can be claimed after he is slain.</span></div><div class="line">$treasure = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);</div><div class="line">$inv = \MyGame\Sample\Monster::CreateInventoryVector($builder, $treasure);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Serialize a name for our monster, called "Orc".</span></div><div class="line"><span class="comment">// The _str suffix indicates the source is an ascii-z string.</span></div><div class="line">flatbuffers_string_ref_t name = flatbuffers_string_create_str(B, <span class="stringliteral">"Orc"</span>);</div><div class="line"></div><div class="line"><span class="comment">// Create a `vector` representing the inventory of the Orc. Each number</span></div><div class="line"><span class="comment">// could correspond to an item that can be claimed after he is slain.</span></div><div class="line">uint8_t treasure[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};</div><div class="line">flatbuffers_uint8_vec_ref_t inventory;</div><div class="line"><span class="comment">// `c_vec_len` is the convenience macro we defined earlier.</span></div><div class="line">inventory = flatbuffers_uint8_vec_create(B, treasure, c_vec_len(treasure));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Serialize a name for our monster, called "Orc".</div><div class="line">final int name = builder.writeString('Orc');</div><div class="line"></div><div class="line">// Create a list representing the inventory of the Orc. Each number</div><div class="line">// could correspond to an item that can be claimed after he is slain.</div><div class="line">final List<int> treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];</div><div class="line">final inventory = builder.writeListUint8(treasure);</div><div class="line"></div><div class="line">// The following code should be used instead if you intend to use the</div><div class="line">// ObjectBuilder classes:</div><div class="line">// Serialize a name for our monster, called "Orc".</div><div class="line">final String name = 'Orc';</div><div class="line"></div><div class="line">// Create a list representing the inventory of the Orc. Each number</div><div class="line">// could correspond to an item that can be claimed after he is slain.</div><div class="line">final List<int> treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Serialize a name <span class="keywordflow">for</span> our mosnter, called <span class="stringliteral">'orc'</span></div><div class="line">local name = builder:CreateString(<span class="stringliteral">"Orc"</span>)</div><div class="line"></div><div class="line">-- Create a `vector` representing the inventory of the Orc. Each number</div><div class="line">-- could correspond to an item that can be claimed after he <span class="keywordflow">is</span> slain.</div><div class="line">-- Note: Since we prepend the bytes, this loop iterates <span class="keywordflow">in</span> reverse.</div><div class="line">monster.StartInventoryVector(builder, 10)</div><div class="line"><span class="keywordflow">for</span> i=10,1,-1 do</div><div class="line"> builder:PrependByte(i)</div><div class="line">end</div><div class="line">local inv = builder:EndVector(10)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">// Name of the monster.</div><div class="line">let name = builder.CreateString("Orc")</div><div class="line"></div><div class="line">// Inventory.</div><div class="line">let inv = builder.MyGame_Sample_MonsterCreateInventoryVector(map(10): _)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Name of the Monster.</div><div class="line">let name = builder.create_string("Orc");</div><div class="line"></div><div class="line">// Inventory.</div><div class="line">let inventory = builder.create_vector(&[0u8, 1, 2, 3, 4, 5, 6, 7, 8, 9]);</div></div><!-- fragment --> </div><p>We serialized two built-in data types (<code>string</code> and <code>vector</code>) and captured their return values. These values are offsets into the serialized data, indicating where they are stored, such that we can refer to them below when adding fields to our monster.</p> <p><em>Note: To create a <code>vector</code> of nested objects (e.g. <code>table</code>s, <code>string</code>s, or other <code>vector</code>s), collect their offsets into a temporary data structure, and then create an additional <code>vector</code> containing their offsets.</em></p> @@ -216,8 +216,8 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_tutorial.html','');} <div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// Place the weapons into a `std::vector`, then convert that into a FlatBuffer `vector`.</span></div><div class="line">std::vector<flatbuffers::Offset<Weapon>> weapons_vector;</div><div class="line">weapons_vector.push_back(sword);</div><div class="line">weapons_vector.push_back(axe);</div><div class="line"><span class="keyword">auto</span> weapons = builder.CreateVector(weapons_vector);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// Place the two weapons into an array, and pass it to the `createWeaponsVector()` method to</span></div><div class="line"><span class="comment">// create a FlatBuffer vector.</span></div><div class="line"><span class="keywordtype">int</span>[] weaps = <span class="keyword">new</span> <span class="keywordtype">int</span>[2];</div><div class="line">weaps[0] = sword;</div><div class="line">weaps[1] = axe;</div><div class="line"></div><div class="line"><span class="comment">// Pass the `weaps` array into the `createWeaponsVector()` method to create a FlatBuffer vector.</span></div><div class="line"><span class="keywordtype">int</span> weapons = Monster.createWeaponsVector(builder, weaps);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">var weaps = <span class="keyword">new</span> Offset<Weapon>[2];</div><div class="line">weaps[0] = sword;</div><div class="line">weaps[1] = axe;</div><div class="line"></div><div class="line"><span class="comment">// Pass the `weaps` array into the `CreateWeaponsVector()` method to create a FlatBuffer vector.</span></div><div class="line">var weapons = Monster.CreateWeaponsVector(builder, weaps);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// Create a FlatBuffer vector and prepend the weapons.</div><div class="line">// Note: Since we prepend the data, prepend them in reverse order.</div><div class="line">sample.MonsterStartWeaponsVector(builder, 2)</div><div class="line">builder.PrependUOffsetT(axe)</div><div class="line">builder.PrependUOffsetT(sword)</div><div class="line">weapons := builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># Create a FlatBuffer vector and prepend the weapons.</span></div><div class="line"><span class="comment"># Note: Since we prepend the data, prepend them in reverse order.</span></div><div class="line">MyGame.Sample.Monster.MonsterStartWeaponsVector(builder, 2)</div><div class="line">builder.PrependUOffsetTRelative(axe)</div><div class="line">builder.PrependUOffsetTRelative(sword)</div><div class="line">weapons = builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// Create an array from the two `Weapon`s and pass it to the</div><div class="line">// `createWeaponsVector()` method to create a FlatBuffer vector.</div><div class="line">var weaps = [sword, axe];</div><div class="line">var weapons = MyGame.Sample.Monster.createWeaponsVector(builder, weaps);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// Create an array from the two `Weapon`s and pass it to the</div><div class="line">// `createWeaponsVector()` method to create a FlatBuffer vector.</div><div class="line">let weaps = [sword, axe];</div><div class="line">let weapons = MyGame.Sample.Monster.createWeaponsVector(builder, weaps);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Create an array from the two `Weapon`s and pass it to the</span></div><div class="line"><span class="comment">// `CreateWeaponsVector()` method to create a FlatBuffer vector.</span></div><div class="line">$weaps = array($sword, $axe);</div><div class="line">$weapons = \MyGame\Sample\Monster::CreateWeaponsVector($builder, $weaps);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// We use the internal builder stack to implement a dynamic vector.</span></div><div class="line">ns(Weapon_vec_start(B));</div><div class="line">ns(Weapon_vec_push(B, sword));</div><div class="line">ns(Weapon_vec_push(B, axe));</div><div class="line">ns(Weapon_vec_ref_t) weapons = ns(Weapon_vec_end(B));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// If using the Builder classes, serialize the `[sword,axe]`</div><div class="line">final weapons = builder.writeList([sword, axe]);</div><div class="line"></div><div class="line">// If using the ObjectBuilders, just create an array from the two `Weapon`s</div><div class="line">final List<myGame.WeaponBuilder> weaps = [sword, axe];</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Create a FlatBuffer vector and prepend the weapons.</div><div class="line">-- Note: Since we prepend the data, prepend them in reverse order.</div><div class="line">monster.StartWeaponsVector(builder, 2)</div><div class="line">builder:PrependUOffsetTRelative(axe)</div><div class="line">builder:PrependUOffsetTRelative(sword)</div><div class="line">local weapons = builder:EndVector(2)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">let weapons = builder.MyGame_Sample_MonsterCreateWeaponsVector(weapon_offsets)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Create a FlatBuffer `vector` that contains offsets to the sword and axe</div><div class="line">// we created above.</div><div class="line">let weapons = builder.create_vector(&[sword, axe]);</div></div><!-- fragment --> </div><p><br /> Note there's additional convenience overloads of <code>CreateVector</code>, allowing you to work with data that's not in a <code>std::vector</code>, or allowing you to generate elements by calling a lambda. For the common case of <code>std::vector<std::string></code> there's also <code>CreateVectorOfStrings</code>. </p> <p>Note that vectors of structs are serialized differently from tables, since structs are stored in-line in the vector. For example, to create a vector for the <code>path</code> field above:</p> -<div class="language-cpp"> <div class="fragment"><div class="line">Vec3 points[] = { Vec3(1.0f, 2.0f, 3.0f), Vec3(4.0f, 5.0f, 6.0f) };</div><div class="line"><span class="keyword">auto</span> path = builder.CreateVectorOfStructs(points, 2);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">Monster.startPathVector(fbb, 2);</div><div class="line">Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f);</div><div class="line">Vec3.createVec3(builder, 4.0f, 5.0f, 6.0f);</div><div class="line"><span class="keywordtype">int</span> path = fbb.endVector();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">Monster.StartPathVector(fbb, 2);</div><div class="line">Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);</div><div class="line">Vec3.CreateVec3(builder, 4.0f, 5.0f, 6.0f);</div><div class="line">var path = fbb.EndVector();</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">sample.MonsterStartPathVector(builder, 2)</div><div class="line">sample.CreateVec3(builder, 1.0, 2.0, 3.0)</div><div class="line">sample.CreateVec3(builder, 4.0, 5.0, 6.0)</div><div class="line">path := builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">MyGame.Sample.Monster.MonsterStartPathVector(builder, 2)</div><div class="line">MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0)</div><div class="line">MyGame.Sample.Vec3.CreateVec3(builder, 4.0, 5.0, 6.0)</div><div class="line">path = builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.startPathVector(builder, 2);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 4.0, 5.0, 6.0);</div><div class="line">var path = builder.endVector();</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.startPathVector(builder, 2);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 4.0, 5.0, 6.0);</div><div class="line">let path = builder.endVector();</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">\MyGame\Example\Monster::StartPathVector($builder, 2);</div><div class="line">\MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0);</div><div class="line">\MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0);</div><div class="line">$path = $builder->endVector();</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// TBD</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Using the Builder classes, you can write a list of structs like so:</div><div class="line">// Note that the intended order should be reversed if order is important.</div><div class="line">final vec3Builder = new myGame.Vec3Builder(builder);</div><div class="line">vec3Builder.finish(4.0, 5.0, 6.0);</div><div class="line">vec3Builder.finish(1.0, 2.0, 3.0);</div><div class="line">final int path = builder.endStructVector(2); // the lenght of the vector</div><div class="line"></div><div class="line">// Otherwise, using the ObjectBuilder classes:</div><div class="line">// The dart implementation provides a simple interface for writing vectors</div><div class="line">// of structs, in `writeListOfStructs`. This method takes</div><div class="line">// `List<ObjectBuilder>` and is used by the generated builder classes.</div><div class="line">final List<myGame.Vec3ObjectBuilder> path = [</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 1.0, y: 2.0, z: 3.0),</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 4.0, y: 5.0, z: 6.0)</div><div class="line">];</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Create a FlatBuffer vector and prepend the path locations.</div><div class="line">-- Note: Since we prepend the data, prepend them in reverse order.</div><div class="line">monster.StartPathVector(builder, 2)</div><div class="line">vec3.CreateVec3(builder, 1.0, 2.0, 3.0)</div><div class="line">vec3.CreateVec3(builder, 4.0, 5.0, 6.0)</div><div class="line">local path = builder:EndVector(2)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">builder.MyGame_Sample_MonsterStartPathVector(2)</div><div class="line">builder.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0)</div><div class="line">builder.MyGame_Sample_CreateVec3(4.0, 5.0, 6.0)</div><div class="line">let path = builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Create the path vector of Vec3 objects.</div><div class="line">let x = Vec3::new(1.0, 2.0, 3.0);</div><div class="line">let y = Vec3::new(4.0, 5.0, 6.0);</div><div class="line">let path = builder.create_vector(&[x, y]);</div><div class="line"></div><div class="line">// Note that, for convenience, it is also valid to create a vector of</div><div class="line">// references to structs, like this:</div><div class="line">// let path = builder.create_vector(&[&x, &y]);</div></div><!-- fragment --> </div><p>We have now serialized the non-scalar components of the orc, so we can serialize the monster itself:</p> -<div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// Create the position struct</span></div><div class="line"><span class="keyword">auto</span> position = Vec3(1.0f, 2.0f, 3.0f);</div><div class="line"></div><div class="line"><span class="comment">// Set his hit points to 300 and his mana to 150.</span></div><div class="line"><span class="keywordtype">int</span> hp = 300;</div><div class="line"><span class="keywordtype">int</span> mana = 150;</div><div class="line"></div><div class="line"><span class="comment">// Finally, create the monster using the `CreateMonster` helper function</span></div><div class="line"><span class="comment">// to set all fields.</span></div><div class="line"><span class="keyword">auto</span> orc = CreateMonster(builder, &position, mana, hp, name, inventory,</div><div class="line"> Color_Red, weapons, Equipment_Weapon, axe.Union(),</div><div class="line"> path);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// Create our monster using `startMonster()` and `endMonster()`.</span></div><div class="line">Monster.startMonster(builder);</div><div class="line">Monster.addPos(builder, Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f));</div><div class="line">Monster.addName(builder, name);</div><div class="line">Monster.addColor(builder, Color.Red);</div><div class="line">Monster.addHp(builder, (<span class="keywordtype">short</span>)300);</div><div class="line">Monster.addInventory(builder, inv);</div><div class="line">Monster.addWeapons(builder, weapons);</div><div class="line">Monster.addEquippedType(builder, Equipment.Weapon);</div><div class="line">Monster.addEquipped(builder, axe);</div><div class="line">Monster.addPath(builder, path);</div><div class="line"><span class="keywordtype">int</span> orc = Monster.endMonster(builder);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// Create our monster using `StartMonster()` and `EndMonster()`.</span></div><div class="line">Monster.StartMonster(builder);</div><div class="line">Monster.AddPos(builder, Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f));</div><div class="line">Monster.AddHp(builder, (<span class="keywordtype">short</span>)300);</div><div class="line">Monster.AddName(builder, name);</div><div class="line">Monster.AddInventory(builder, inv);</div><div class="line">Monster.AddColor(builder, Color.Red);</div><div class="line">Monster.AddWeapons(builder, weapons);</div><div class="line">Monster.AddEquippedType(builder, Equipment.Weapon);</div><div class="line">Monster.AddEquipped(builder, axe.Value); <span class="comment">// Axe</span></div><div class="line">Monster.AddPath(builder, path);</div><div class="line">var orc = Monster.EndMonster(builder);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// Create our monster using `MonsterStart()` and `MonsterEnd()`.</div><div class="line">sample.MonsterStart(builder)</div><div class="line">sample.MonsterAddPos(builder, sample.CreateVec3(builder, 1.0, 2.0, 3.0))</div><div class="line">sample.MonsterAddHp(builder, 300)</div><div class="line">sample.MonsterAddName(builder, name)</div><div class="line">sample.MonsterAddInventory(builder, inv)</div><div class="line">sample.MonsterAddColor(builder, sample.ColorRed)</div><div class="line">sample.MonsterAddWeapons(builder, weapons)</div><div class="line">sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon)</div><div class="line">sample.MonsterAddEquipped(builder, axe)</div><div class="line">sample.MonsterAddPath(builder, path)</div><div class="line">orc := sample.MonsterEnd(builder)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># Create our monster by using `MonsterStart()` and `MonsterEnd()`.</span></div><div class="line">MyGame.Sample.Monster.MonsterStart(builder)</div><div class="line">MyGame.Sample.Monster.MonsterAddPos(builder,</div><div class="line"> MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0))</div><div class="line">MyGame.Sample.Monster.MonsterAddHp(builder, 300)</div><div class="line">MyGame.Sample.Monster.MonsterAddName(builder, name)</div><div class="line">MyGame.Sample.Monster.MonsterAddInventory(builder, inv)</div><div class="line">MyGame.Sample.Monster.MonsterAddColor(builder,</div><div class="line"> MyGame.Sample.Color.Color().Red)</div><div class="line">MyGame.Sample.Monster.MonsterAddWeapons(builder, weapons)</div><div class="line">MyGame.Sample.Monster.MonsterAddEquippedType(</div><div class="line"> builder, MyGame.Sample.Equipment.Equipment().Weapon)</div><div class="line">MyGame.Sample.Monster.MonsterAddEquipped(builder, axe)</div><div class="line">MyGame.Sample.Monster.MonsterAddPath(builder, path)</div><div class="line">orc = MyGame.Sample.Monster.MonsterEnd(builder)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// Create our monster by using `startMonster()` and `endMonster()`.</div><div class="line">MyGame.Sample.Monster.startMonster(builder);</div><div class="line">MyGame.Sample.Monster.addPos(builder,</div><div class="line"> MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0));</div><div class="line">MyGame.Sample.Monster.addHp(builder, 300);</div><div class="line">MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red)</div><div class="line">MyGame.Sample.Monster.addName(builder, name);</div><div class="line">MyGame.Sample.Monster.addInventory(builder, inv);</div><div class="line">MyGame.Sample.Monster.addWeapons(builder, weapons);</div><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon);</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe);</div><div class="line">MyGame.Sample.Monster.addPath(builder, path);</div><div class="line">var orc = MyGame.Sample.Monster.endMonster(builder);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// Create our monster by using `startMonster()` and `endMonster()`.</div><div class="line">MyGame.Sample.Monster.startMonster(builder);</div><div class="line">MyGame.Sample.Monster.addPos(builder,</div><div class="line"> MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0));</div><div class="line">MyGame.Sample.Monster.addHp(builder, 300);</div><div class="line">MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red)</div><div class="line">MyGame.Sample.Monster.addName(builder, name);</div><div class="line">MyGame.Sample.Monster.addInventory(builder, inv);</div><div class="line">MyGame.Sample.Monster.addWeapons(builder, weapons);</div><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon);</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe);</div><div class="line">MyGame.Sample.Monster.addPath(builder, path);</div><div class="line">let orc = MyGame.Sample.Monster.endMonster(builder);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Create our monster by using `StartMonster()` and `EndMonster()`.</span></div><div class="line">\MyGame\Sample\Monster::StartMonster($builder);</div><div class="line">\MyGame\Sample\Monster::AddPos($builder,</div><div class="line"> \MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0));</div><div class="line">\MyGame\Sample\Monster::AddHp($builder, 300);</div><div class="line">\MyGame\Sample\Monster::AddName($builder, $name);</div><div class="line">\MyGame\Sample\Monster::AddInventory($builder, $inv);</div><div class="line">\MyGame\Sample\Monster::AddColor($builder, \MyGame\Sample\Color::Red);</div><div class="line">\MyGame\Sample\Monster::AddWeapons($builder, $weapons);</div><div class="line">\MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon);</div><div class="line">\MyGame\Sample\Monster::AddEquipped($builder, $axe);</div><div class="line">\MyGame\Sample\Monster::AddPath($builder, $path);</div><div class="line">$orc = \MyGame\Sample\Monster::EndMonster($builder);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Set his hit points to 300 and his mana to 150.</span></div><div class="line">uint16_t hp = 300;</div><div class="line">uint16_t mana = 150;</div><div class="line"></div><div class="line"><span class="comment">// Define an equipment union. `create` calls in C has a single</span></div><div class="line"><span class="comment">// argument for unions where C++ has both a type and a data argument.</span></div><div class="line">ns(Equipment_union_ref_t) equipped = ns(Equipment_as_Weapon(axe));</div><div class="line">ns(Vec3_t) pos = { 1.0f, 2.0f, 3.0f };</div><div class="line">ns(Monster_create_as_root(B, &pos, mana, hp, name, inventory, ns(Color_Red),</div><div class="line"> weapons, equipped, path));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Using the Builder API:</div><div class="line">// Set his hit points to 300 and his mana to 150.</div><div class="line">final int hp = 300;</div><div class="line">final int mana = 150;</div><div class="line"></div><div class="line">final monster = new myGame.MonsterBuilder(builder)</div><div class="line"> ..begin()</div><div class="line"> ..addNameOffset(name)</div><div class="line"> ..addInventoryOffset(inventory)</div><div class="line"> ..addWeaponsOffset(weapons)</div><div class="line"> ..addEquippedType(myGame.EquipmentTypeId.Weapon)</div><div class="line"> ..addEquippedOffset(axe)</div><div class="line"> ..addHp(hp)</div><div class="line"> ..addMana(mana)</div><div class="line"> ..addPos(vec3Builder.finish(1.0, 2.0, 3.0))</div><div class="line"> ..addPathOffset(path)</div><div class="line"> ..addColor(myGame.Color.Red);</div><div class="line"></div><div class="line">final int orc = monster.finish();</div><div class="line"></div><div class="line">// -Or- using the ObjectBuilder API:</div><div class="line">// Set his hit points to 300 and his mana to 150.</div><div class="line">final int hp = 300;</div><div class="line">final int mana = 150;</div><div class="line"></div><div class="line">// Note that these parameters are optional - it is not necessary to set</div><div class="line">// all of them.</div><div class="line">// Also note that it is not necessary to `finish` the builder helpers above</div><div class="line">// - the generated code will automatically reuse offsets if the same object</div><div class="line">// is used in more than one place (e.g. the axe appearing in `weapons` and</div><div class="line">// `equipped`).</div><div class="line">final myGame.MonsterBuilder orcBuilder = new myGame.MonsterBuilder(</div><div class="line"> name: name,</div><div class="line"> inventory: treasure,</div><div class="line"> weapons: weaps,</div><div class="line"> equippedType: myGame.EquipmentTypeId.Weapon,</div><div class="line"> equipped: axe,</div><div class="line"> path: path,</div><div class="line"> hp: hp,</div><div class="line"> mana: mana,</div><div class="line"> pos: new myGame.Vec3Builder(x: 1.0, y: 2.0, z: 3.0),</div><div class="line"> color: myGame.Color.Red,</div><div class="line"> path: [</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 1.0, y: 2.0, z: 3.0),</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 4.0, y: 5.0, z: 6.0)</div><div class="line"> ]);</div><div class="line"></div><div class="line">final int orc = orcBuilder.finish(builder);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Create our monster by using Start() andEnd()</div><div class="line">monster.Start(builder)</div><div class="line">monster.AddPos(builder, vec3.CreateVec3(builder, 1.0, 2.0, 3.0))</div><div class="line">monster.AddHp(builder, 300)</div><div class="line">monster.AddName(builder, name)</div><div class="line">monster.AddInventory(builder, inv)</div><div class="line">monster.AddColor(builder, color.Red)</div><div class="line">monster.AddWeapons(builder, weapons)</div><div class="line">monster.AddEquippedType(builder, equipment.Weapon)</div><div class="line">monster.AddEquipped(builder, axe)</div><div class="line">monster.AddPath(builder, path)</div><div class="line">local orc = monster.End(builder)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">builder.MyGame_Sample_MonsterStart()</div><div class="line">builder.MyGame_Sample_MonsterAddPos(builder.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0))</div><div class="line">builder.MyGame_Sample_MonsterAddHp(300)</div><div class="line">builder.MyGame_Sample_MonsterAddName(name)</div><div class="line">builder.MyGame_Sample_MonsterAddInventory(inv)</div><div class="line">builder.MyGame_Sample_MonsterAddColor(MyGame_Sample_Color_Red)</div><div class="line">builder.MyGame_Sample_MonsterAddWeapons(weapons)</div><div class="line">builder.MyGame_Sample_MonsterAddEquippedType(MyGame_Sample_Equipment_Weapon)</div><div class="line">builder.MyGame_Sample_MonsterAddEquipped(weapon_offsets[1])</div><div class="line">builder.MyGame_Sample_MonsterAddPath(path)</div><div class="line">let orc = builder.MyGame_Sample_MonsterEnd()</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Create the monster using the `Monster::create` helper function. This</div><div class="line">// function accepts a `MonsterArgs` struct, which supplies all of the data</div><div class="line">// needed to build a `Monster`. To supply empty/default fields, just use the</div><div class="line">// Rust built-in `Default::default()` function, as demononstrated below.</div><div class="line">let orc = Monster::create(&mut builder, &MonsterArgs{</div><div class="line"> pos: Some(&Vec3::new(1.0f32, 2.0f32, 3.0f32)),</div><div class="line"> mana: 150,</div><div class="line"> hp: 80,</div><div class="line"> name: Some(name),</div><div class="line"> inventory: Some(inventory),</div><div class="line"> color: Color::Red,</div><div class="line"> weapons: Some(weapons),</div><div class="line"> equipped_type: Equipment::Weapon,</div><div class="line"> equipped: Some(axe.as_union_value()),</div><div class="line"> path: Some(path),</div><div class="line"> ..Default::default()</div><div class="line">});</div></div><!-- fragment --> </div><p>Note how we create <code>Vec3</code> struct in-line in the table. Unlike tables, structs are simple combinations of scalars that are always stored inline, just like scalars themselves.</p> +<div class="language-cpp"> <div class="fragment"><div class="line">Vec3 points[] = { Vec3(1.0f, 2.0f, 3.0f), Vec3(4.0f, 5.0f, 6.0f) };</div><div class="line"><span class="keyword">auto</span> path = builder.CreateVectorOfStructs(points, 2);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">Monster.startPathVector(fbb, 2);</div><div class="line">Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f);</div><div class="line">Vec3.createVec3(builder, 4.0f, 5.0f, 6.0f);</div><div class="line"><span class="keywordtype">int</span> path = fbb.endVector();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">Monster.StartPathVector(fbb, 2);</div><div class="line">Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);</div><div class="line">Vec3.CreateVec3(builder, 4.0f, 5.0f, 6.0f);</div><div class="line">var path = fbb.EndVector();</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">sample.MonsterStartPathVector(builder, 2)</div><div class="line">sample.CreateVec3(builder, 1.0, 2.0, 3.0)</div><div class="line">sample.CreateVec3(builder, 4.0, 5.0, 6.0)</div><div class="line">path := builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">MyGame.Sample.Monster.MonsterStartPathVector(builder, 2)</div><div class="line">MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0)</div><div class="line">MyGame.Sample.Vec3.CreateVec3(builder, 4.0, 5.0, 6.0)</div><div class="line">path = builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.startPathVector(builder, 2);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 4.0, 5.0, 6.0);</div><div class="line">var path = builder.endVector();</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.startPathVector(builder, 2);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0);</div><div class="line">MyGame.Sample.Vec3.createVec3(builder, 4.0, 5.0, 6.0);</div><div class="line">let path = builder.endVector();</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">\MyGame\Example\Monster::StartPathVector($builder, 2);</div><div class="line">\MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0);</div><div class="line">\MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0);</div><div class="line">$path = $builder->endVector();</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// TBD</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Using the Builder classes, you can write a list of structs like so:</div><div class="line">// Note that the intended order should be reversed if order is important.</div><div class="line">final vec3Builder = new myGame.Vec3Builder(builder);</div><div class="line">vec3Builder.finish(4.0, 5.0, 6.0);</div><div class="line">vec3Builder.finish(1.0, 2.0, 3.0);</div><div class="line">final int path = builder.endStructVector(2); // the length of the vector</div><div class="line"></div><div class="line">// Otherwise, using the ObjectBuilder classes:</div><div class="line">// The dart implementation provides a simple interface for writing vectors</div><div class="line">// of structs, in `writeListOfStructs`. This method takes</div><div class="line">// `List<ObjectBuilder>` and is used by the generated builder classes.</div><div class="line">final List<myGame.Vec3ObjectBuilder> path = [</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 1.0, y: 2.0, z: 3.0),</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 4.0, y: 5.0, z: 6.0)</div><div class="line">];</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Create a FlatBuffer vector and prepend the path locations.</div><div class="line">-- Note: Since we prepend the data, prepend them in reverse order.</div><div class="line">monster.StartPathVector(builder, 2)</div><div class="line">vec3.CreateVec3(builder, 1.0, 2.0, 3.0)</div><div class="line">vec3.CreateVec3(builder, 4.0, 5.0, 6.0)</div><div class="line">local path = builder:EndVector(2)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">builder.MyGame_Sample_MonsterStartPathVector(2)</div><div class="line">builder.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0)</div><div class="line">builder.MyGame_Sample_CreateVec3(4.0, 5.0, 6.0)</div><div class="line">let path = builder.EndVector(2)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Create the path vector of Vec3 objects.</div><div class="line">let x = Vec3::new(1.0, 2.0, 3.0);</div><div class="line">let y = Vec3::new(4.0, 5.0, 6.0);</div><div class="line">let path = builder.create_vector(&[x, y]);</div><div class="line"></div><div class="line">// Note that, for convenience, it is also valid to create a vector of</div><div class="line">// references to structs, like this:</div><div class="line">// let path = builder.create_vector(&[&x, &y]);</div></div><!-- fragment --> </div><p>We have now serialized the non-scalar components of the orc, so we can serialize the monster itself:</p> +<div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// Create the position struct</span></div><div class="line"><span class="keyword">auto</span> position = Vec3(1.0f, 2.0f, 3.0f);</div><div class="line"></div><div class="line"><span class="comment">// Set his hit points to 300 and his mana to 150.</span></div><div class="line"><span class="keywordtype">int</span> hp = 300;</div><div class="line"><span class="keywordtype">int</span> mana = 150;</div><div class="line"></div><div class="line"><span class="comment">// Finally, create the monster using the `CreateMonster` helper function</span></div><div class="line"><span class="comment">// to set all fields.</span></div><div class="line"><span class="keyword">auto</span> orc = CreateMonster(builder, &position, mana, hp, name, inventory,</div><div class="line"> Color_Red, weapons, Equipment_Weapon, axe.Union(),</div><div class="line"> path);</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// Create our monster using `startMonster()` and `endMonster()`.</span></div><div class="line">Monster.startMonster(builder);</div><div class="line">Monster.addPos(builder, Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f));</div><div class="line">Monster.addName(builder, name);</div><div class="line">Monster.addColor(builder, Color.Red);</div><div class="line">Monster.addHp(builder, (<span class="keywordtype">short</span>)300);</div><div class="line">Monster.addInventory(builder, inv);</div><div class="line">Monster.addWeapons(builder, weapons);</div><div class="line">Monster.addEquippedType(builder, Equipment.Weapon);</div><div class="line">Monster.addEquipped(builder, axe);</div><div class="line">Monster.addPath(builder, path);</div><div class="line"><span class="keywordtype">int</span> orc = Monster.endMonster(builder);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// Create our monster using `StartMonster()` and `EndMonster()`.</span></div><div class="line">Monster.StartMonster(builder);</div><div class="line">Monster.AddPos(builder, Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f));</div><div class="line">Monster.AddHp(builder, (<span class="keywordtype">short</span>)300);</div><div class="line">Monster.AddName(builder, name);</div><div class="line">Monster.AddInventory(builder, inv);</div><div class="line">Monster.AddColor(builder, Color.Red);</div><div class="line">Monster.AddWeapons(builder, weapons);</div><div class="line">Monster.AddEquippedType(builder, Equipment.Weapon);</div><div class="line">Monster.AddEquipped(builder, axe.Value); <span class="comment">// Axe</span></div><div class="line">Monster.AddPath(builder, path);</div><div class="line">var orc = Monster.EndMonster(builder);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// Create our monster using `MonsterStart()` and `MonsterEnd()`.</div><div class="line">sample.MonsterStart(builder)</div><div class="line">sample.MonsterAddPos(builder, sample.CreateVec3(builder, 1.0, 2.0, 3.0))</div><div class="line">sample.MonsterAddHp(builder, 300)</div><div class="line">sample.MonsterAddName(builder, name)</div><div class="line">sample.MonsterAddInventory(builder, inv)</div><div class="line">sample.MonsterAddColor(builder, sample.ColorRed)</div><div class="line">sample.MonsterAddWeapons(builder, weapons)</div><div class="line">sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon)</div><div class="line">sample.MonsterAddEquipped(builder, axe)</div><div class="line">sample.MonsterAddPath(builder, path)</div><div class="line">orc := sample.MonsterEnd(builder)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># Create our monster by using `MonsterStart()` and `MonsterEnd()`.</span></div><div class="line">MyGame.Sample.Monster.MonsterStart(builder)</div><div class="line">MyGame.Sample.Monster.MonsterAddPos(builder,</div><div class="line"> MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0))</div><div class="line">MyGame.Sample.Monster.MonsterAddHp(builder, 300)</div><div class="line">MyGame.Sample.Monster.MonsterAddName(builder, name)</div><div class="line">MyGame.Sample.Monster.MonsterAddInventory(builder, inv)</div><div class="line">MyGame.Sample.Monster.MonsterAddColor(builder,</div><div class="line"> MyGame.Sample.Color.Color().Red)</div><div class="line">MyGame.Sample.Monster.MonsterAddWeapons(builder, weapons)</div><div class="line">MyGame.Sample.Monster.MonsterAddEquippedType(</div><div class="line"> builder, MyGame.Sample.Equipment.Equipment().Weapon)</div><div class="line">MyGame.Sample.Monster.MonsterAddEquipped(builder, axe)</div><div class="line">MyGame.Sample.Monster.MonsterAddPath(builder, path)</div><div class="line">orc = MyGame.Sample.Monster.MonsterEnd(builder)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// Create our monster by using `startMonster()` and `endMonster()`.</div><div class="line">MyGame.Sample.Monster.startMonster(builder);</div><div class="line">MyGame.Sample.Monster.addPos(builder,</div><div class="line"> MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0));</div><div class="line">MyGame.Sample.Monster.addHp(builder, 300);</div><div class="line">MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red)</div><div class="line">MyGame.Sample.Monster.addName(builder, name);</div><div class="line">MyGame.Sample.Monster.addInventory(builder, inv);</div><div class="line">MyGame.Sample.Monster.addWeapons(builder, weapons);</div><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon);</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe);</div><div class="line">MyGame.Sample.Monster.addPath(builder, path);</div><div class="line">var orc = MyGame.Sample.Monster.endMonster(builder);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// Create our monster by using `startMonster()` and `endMonster()`.</div><div class="line">MyGame.Sample.Monster.startMonster(builder);</div><div class="line">MyGame.Sample.Monster.addPos(builder,</div><div class="line"> MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0));</div><div class="line">MyGame.Sample.Monster.addHp(builder, 300);</div><div class="line">MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red)</div><div class="line">MyGame.Sample.Monster.addName(builder, name);</div><div class="line">MyGame.Sample.Monster.addInventory(builder, inv);</div><div class="line">MyGame.Sample.Monster.addWeapons(builder, weapons);</div><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon);</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe);</div><div class="line">MyGame.Sample.Monster.addPath(builder, path);</div><div class="line">let orc = MyGame.Sample.Monster.endMonster(builder);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Create our monster by using `StartMonster()` and `EndMonster()`.</span></div><div class="line">\MyGame\Sample\Monster::StartMonster($builder);</div><div class="line">\MyGame\Sample\Monster::AddPos($builder,</div><div class="line"> \MyGame\Sample\Vec3::CreateVec3($builder, 1.0, 2.0, 3.0));</div><div class="line">\MyGame\Sample\Monster::AddHp($builder, 300);</div><div class="line">\MyGame\Sample\Monster::AddName($builder, $name);</div><div class="line">\MyGame\Sample\Monster::AddInventory($builder, $inv);</div><div class="line">\MyGame\Sample\Monster::AddColor($builder, \MyGame\Sample\Color::Red);</div><div class="line">\MyGame\Sample\Monster::AddWeapons($builder, $weapons);</div><div class="line">\MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon);</div><div class="line">\MyGame\Sample\Monster::AddEquipped($builder, $axe);</div><div class="line">\MyGame\Sample\Monster::AddPath($builder, $path);</div><div class="line">$orc = \MyGame\Sample\Monster::EndMonster($builder);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Set his hit points to 300 and his mana to 150.</span></div><div class="line">uint16_t hp = 300;</div><div class="line">uint16_t mana = 150;</div><div class="line"></div><div class="line"><span class="comment">// Define an equipment union. `create` calls in C has a single</span></div><div class="line"><span class="comment">// argument for unions where C++ has both a type and a data argument.</span></div><div class="line">ns(Equipment_union_ref_t) equipped = ns(Equipment_as_Weapon(axe));</div><div class="line">ns(Vec3_t) pos = { 1.0f, 2.0f, 3.0f };</div><div class="line">ns(Monster_create_as_root(B, &pos, mana, hp, name, inventory, ns(Color_Red),</div><div class="line"> weapons, equipped, path));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Using the Builder API:</div><div class="line">// Set his hit points to 300 and his mana to 150.</div><div class="line">final int hp = 300;</div><div class="line">final int mana = 150;</div><div class="line"></div><div class="line">final monster = new myGame.MonsterBuilder(builder)</div><div class="line"> ..begin()</div><div class="line"> ..addNameOffset(name)</div><div class="line"> ..addInventoryOffset(inventory)</div><div class="line"> ..addWeaponsOffset(weapons)</div><div class="line"> ..addEquippedType(myGame.EquipmentTypeId.Weapon)</div><div class="line"> ..addEquippedOffset(axe)</div><div class="line"> ..addHp(hp)</div><div class="line"> ..addMana(mana)</div><div class="line"> ..addPos(vec3Builder.finish(1.0, 2.0, 3.0))</div><div class="line"> ..addPathOffset(path)</div><div class="line"> ..addColor(myGame.Color.Red);</div><div class="line"></div><div class="line">final int orc = monster.finish();</div><div class="line"></div><div class="line">// -Or- using the ObjectBuilder API:</div><div class="line">// Set his hit points to 300 and his mana to 150.</div><div class="line">final int hp = 300;</div><div class="line">final int mana = 150;</div><div class="line"></div><div class="line">// Note that these parameters are optional - it is not necessary to set</div><div class="line">// all of them.</div><div class="line">// Also note that it is not necessary to `finish` the builder helpers above</div><div class="line">// - the generated code will automatically reuse offsets if the same object</div><div class="line">// is used in more than one place (e.g. the axe appearing in `weapons` and</div><div class="line">// `equipped`).</div><div class="line">final myGame.MonsterBuilder orcBuilder = new myGame.MonsterBuilder(</div><div class="line"> name: name,</div><div class="line"> inventory: treasure,</div><div class="line"> weapons: weaps,</div><div class="line"> equippedType: myGame.EquipmentTypeId.Weapon,</div><div class="line"> equipped: axe,</div><div class="line"> path: path,</div><div class="line"> hp: hp,</div><div class="line"> mana: mana,</div><div class="line"> pos: new myGame.Vec3Builder(x: 1.0, y: 2.0, z: 3.0),</div><div class="line"> color: myGame.Color.Red,</div><div class="line"> path: [</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 1.0, y: 2.0, z: 3.0),</div><div class="line"> new myGame.Vec3ObjectBuilder(x: 4.0, y: 5.0, z: 6.0)</div><div class="line"> ]);</div><div class="line"></div><div class="line">final int orc = orcBuilder.finish(builder);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Create our monster by using Start() andEnd()</div><div class="line">monster.Start(builder)</div><div class="line">monster.AddPos(builder, vec3.CreateVec3(builder, 1.0, 2.0, 3.0))</div><div class="line">monster.AddHp(builder, 300)</div><div class="line">monster.AddName(builder, name)</div><div class="line">monster.AddInventory(builder, inv)</div><div class="line">monster.AddColor(builder, color.Red)</div><div class="line">monster.AddWeapons(builder, weapons)</div><div class="line">monster.AddEquippedType(builder, equipment.Weapon)</div><div class="line">monster.AddEquipped(builder, axe)</div><div class="line">monster.AddPath(builder, path)</div><div class="line">local orc = monster.End(builder)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">builder.MyGame_Sample_MonsterStart()</div><div class="line">builder.MyGame_Sample_MonsterAddPos(builder.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0))</div><div class="line">builder.MyGame_Sample_MonsterAddHp(300)</div><div class="line">builder.MyGame_Sample_MonsterAddName(name)</div><div class="line">builder.MyGame_Sample_MonsterAddInventory(inv)</div><div class="line">builder.MyGame_Sample_MonsterAddColor(MyGame_Sample_Color_Red)</div><div class="line">builder.MyGame_Sample_MonsterAddWeapons(weapons)</div><div class="line">builder.MyGame_Sample_MonsterAddEquippedType(MyGame_Sample_Equipment_Weapon)</div><div class="line">builder.MyGame_Sample_MonsterAddEquipped(weapon_offsets[1])</div><div class="line">builder.MyGame_Sample_MonsterAddPath(path)</div><div class="line">let orc = builder.MyGame_Sample_MonsterEnd()</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Create the monster using the `Monster::create` helper function. This</div><div class="line">// function accepts a `MonsterArgs` struct, which supplies all of the data</div><div class="line">// needed to build a `Monster`. To supply empty/default fields, just use the</div><div class="line">// Rust built-in `Default::default()` function, as demonstrated below.</div><div class="line">let orc = Monster::create(&mut builder, &MonsterArgs{</div><div class="line"> pos: Some(&Vec3::new(1.0f32, 2.0f32, 3.0f32)),</div><div class="line"> mana: 150,</div><div class="line"> hp: 80,</div><div class="line"> name: Some(name),</div><div class="line"> inventory: Some(inventory),</div><div class="line"> color: Color::Red,</div><div class="line"> weapons: Some(weapons),</div><div class="line"> equipped_type: Equipment::Weapon,</div><div class="line"> equipped: Some(axe.as_union_value()),</div><div class="line"> path: Some(path),</div><div class="line"> ..Default::default()</div><div class="line">});</div></div><!-- fragment --> </div><p>Note how we create <code>Vec3</code> struct in-line in the table. Unlike tables, structs are simple combinations of scalars that are always stored inline, just like scalars themselves.</p> <p><b>Important</b>: Unlike structs, you should not nest tables or other objects, which is why we created all the strings/vectors/tables that this monster refers to before <code>start</code>. If you try to create any of them between <code>start</code> and <code>end</code>, you will get an assert/exception/panic depending on your language.</p> <p><em>Note: Since we are passing <code>150</code> as the <code>mana</code> field, which happens to be the default value, the field will not actually be written to the buffer, since the default value will be returned on query anyway. This is a nice space savings, especially if default values are common in your data. It also means that you do not need to be worried of adding a lot of fields that are only used in a small number of instances, as it will not bloat the buffer if unused.</em></p> <div class="language-cpp"> <br /> @@ -226,16 +226,16 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_tutorial.html','');} <div class="fragment"><div class="line"><span class="comment">// It is important to pair `start_as_root` with `end_as_root`.</span></div><div class="line">ns(Monster_start_as_root(B));</div><div class="line">ns(Monster_pos_create(B, 1.0f, 2.0f, 3.0f));</div><div class="line"><span class="comment">// or alternatively</span></div><div class="line"><span class="comment">//ns(Monster_pos_add(&pos);</span></div><div class="line"></div><div class="line">ns(Monster_hp_add(B, hp));</div><div class="line"><span class="comment">// Notice that `Monser_name_add` adds a string reference unlike the</span></div><div class="line"><span class="comment">// add_str and add_strn variants.</span></div><div class="line">ns(Monster_name_add(B, name));</div><div class="line">ns(Monster_inventory_add(B, inventory));</div><div class="line">ns(Monster_color_add(B, ns(Color_Red)));</div><div class="line">ns(Monster_weapons_add(B, weapons));</div><div class="line">ns(Monster_equipped_add(B, equipped));</div><div class="line"><span class="comment">// Complete the monster object and make it the buffer root object.</span></div><div class="line">ns(Monster_end_as_root(B));</div></div><!-- fragment --> </div><p>Before finishing the serialization, let's take a quick look at FlatBuffer <code>union Equipped</code>. There are two parts to each FlatBuffer <code>union</code>. The first, is a hidden field <code>_type</code>, that is generated to hold the type of <code>table</code> referred to by the <code>union</code>. This allows you to know which type to cast to at runtime. Second, is the <code>union</code>'s data.</p> <p>In our example, the last two things we added to our <code>Monster</code> were the <code>Equipped Type</code> and the <code>Equipped</code> union itself.</p> <p>Here is a repetition these lines, to help highlight them more clearly:</p> -<div class="language-cpp"> <div class="fragment"><div class="line">monster_builder.add_equipped_type(Equipment_Weapon); <span class="comment">// Union type</span></div><div class="line">monster_builder.add_equipped(axe); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">Monster.addEquippedType(builder, Equipment.Weapon); <span class="comment">// Union type</span></div><div class="line">Monster.addEquipped(axe); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">Monster.AddEquippedType(builder, Equipment.Weapon); <span class="comment">// Union type</span></div><div class="line">Monster.AddEquipped(builder, axe.Value); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon) // Union type</div><div class="line">sample.MonsterAddEquipped(builder, axe) // Union data</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">MyGame.Sample.Monster.MonsterAddEquippedType( <span class="comment"># Union type</span></div><div class="line"> builder, MyGame.Sample.Equipment.Equipment().Weapon)</div><div class="line">MyGame.Sample.Monster.MonsterAddEquipped(builder, axe) <span class="comment"># Union data</span></div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon); // Union type</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe); // Union data</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon); // Union type</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe); // Union data</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">\MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon); <span class="comment">// Union type</span></div><div class="line">\MyGame\Sample\Monster::AddEquipped($builder, $axe); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Add union type and data simultanously.</span></div><div class="line">ns(Monster_equipped_Weapon_add(B, axe));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// using the builder API:</div><div class="line">..addEquippedType(myGame.EquipmentTypeId.Weapon)</div><div class="line">..addEquippedOffset(axe)</div><div class="line"></div><div class="line">// in the ObjectBuilder API:</div><div class="line">equippedTypeId: myGame.EquipmentTypeId.Weapon, // Union type</div><div class="line">equipped: axe, // Union data</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">monster.AddEquippedType(builder, equipment.Weapon) -- Union type</div><div class="line">monster.AddEquipped(builder, axe) -- Union data</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">builder.MyGame_Sample_MonsterAddEquippedType(MyGame_Sample_Equipment_Weapon)</div><div class="line">builder.MyGame_Sample_MonsterAddEquipped(axe)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// You need to call `as_union_value` to turn an object into a type that</div><div class="line">// can be used as a union value.</div><div class="line">monster_builder.add_equipped_type(Equipment::Weapon); // Union type</div><div class="line">monster_builder.add_equipped(axe.as_union_value()); // Union data</div></div><!-- fragment --> </div><p>After you have created your buffer, you will have the offset to the root of the data in the <code>orc</code> variable, so you can finish the buffer by calling the appropriate <code>finish</code> method.</p> +<div class="language-cpp"> <div class="fragment"><div class="line">monster_builder.add_equipped_type(Equipment_Weapon); <span class="comment">// Union type</span></div><div class="line">monster_builder.add_equipped(axe); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">Monster.addEquippedType(builder, Equipment.Weapon); <span class="comment">// Union type</span></div><div class="line">Monster.addEquipped(axe); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">Monster.AddEquippedType(builder, Equipment.Weapon); <span class="comment">// Union type</span></div><div class="line">Monster.AddEquipped(builder, axe.Value); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">sample.MonsterAddEquippedType(builder, sample.EquipmentWeapon) // Union type</div><div class="line">sample.MonsterAddEquipped(builder, axe) // Union data</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">MyGame.Sample.Monster.MonsterAddEquippedType( <span class="comment"># Union type</span></div><div class="line"> builder, MyGame.Sample.Equipment.Equipment().Weapon)</div><div class="line">MyGame.Sample.Monster.MonsterAddEquipped(builder, axe) <span class="comment"># Union data</span></div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon); // Union type</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe); // Union data</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon); // Union type</div><div class="line">MyGame.Sample.Monster.addEquipped(builder, axe); // Union data</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">\MyGame\Sample\Monster::AddEquippedType($builder, \MyGame\Sample\Equipment::Weapon); <span class="comment">// Union type</span></div><div class="line">\MyGame\Sample\Monster::AddEquipped($builder, $axe); <span class="comment">// Union data</span></div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Add union type and data simultaneously.</span></div><div class="line">ns(Monster_equipped_Weapon_add(B, axe));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// using the builder API:</div><div class="line">..addEquippedType(myGame.EquipmentTypeId.Weapon)</div><div class="line">..addEquippedOffset(axe)</div><div class="line"></div><div class="line">// in the ObjectBuilder API:</div><div class="line">equippedTypeId: myGame.EquipmentTypeId.Weapon, // Union type</div><div class="line">equipped: axe, // Union data</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">monster.AddEquippedType(builder, equipment.Weapon) -- Union type</div><div class="line">monster.AddEquipped(builder, axe) -- Union data</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">builder.MyGame_Sample_MonsterAddEquippedType(MyGame_Sample_Equipment_Weapon)</div><div class="line">builder.MyGame_Sample_MonsterAddEquipped(axe)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// You need to call `as_union_value` to turn an object into a type that</div><div class="line">// can be used as a union value.</div><div class="line">monster_builder.add_equipped_type(Equipment::Weapon); // Union type</div><div class="line">monster_builder.add_equipped(axe.as_union_value()); // Union data</div></div><!-- fragment --> </div><p>After you have created your buffer, you will have the offset to the root of the data in the <code>orc</code> variable, so you can finish the buffer by calling the appropriate <code>finish</code> method.</p> <div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// Call `Finish()` to instruct the builder that this monster is complete.</span></div><div class="line"><span class="comment">// Note: Regardless of how you created the `orc`, you still need to call</span></div><div class="line"><span class="comment">// `Finish()` on the `FlatBufferBuilder`.</span></div><div class="line">builder.Finish(orc); <span class="comment">// You could also call `FinishMonsterBuffer(builder,</span></div><div class="line"> <span class="comment">// orc);`.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// Call `finish()` to instruct the builder that this monster is complete.</span></div><div class="line">builder.finish(orc); <span class="comment">// You could also call `Monster.finishMonsterBuffer(builder, orc);`.</span></div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// Call `Finish()` to instruct the builder that this monster is complete.</span></div><div class="line">builder.Finish(orc.Value); <span class="comment">// You could also call `Monster.FinishMonsterBuffer(builder, orc);`.</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// Call `Finish()` to instruct the builder that this monster is complete.</div><div class="line">builder.Finish(orc)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># Call `Finish()` to instruct the builder that this monster is complete.</span></div><div class="line">builder.Finish(orc)</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// Call `finish()` to instruct the builder that this monster is complete.</div><div class="line">builder.finish(orc); // You could also call `MyGame.Sample.Monster.finishMonsterBuffer(builder,</div><div class="line"> // orc);`.</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// Call `finish()` to instruct the builder that this monster is complete.</div><div class="line">builder.finish(orc); // You could also call `MyGame.Sample.Monster.finishMonsterBuffer(builder,</div><div class="line"> // orc);`.</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// Call `finish()` to instruct the builder that this monster is complete.</span></div><div class="line"> $builder->finish($orc); <span class="comment">// You may also call `\MyGame\Sample\Monster::FinishMonsterBuffer(</span></div><div class="line"> <span class="comment">// $builder, $orc);`.</span></div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Because we used `Monster_create_as_root`, we do not need a `finish` call in C`.</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// Call `finish()` to instruct the builder that this monster is complete.</div><div class="line">// See the next code section, as in Dart `finish` will also return the byte array.</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Call 'Finish()' to instruct the builder that this monster is complete.</div><div class="line">builder:Finish(orc)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">// Call `Finish()` to instruct the builder that this monster is complete.</div><div class="line">builder.Finish(orc)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Call `finish()` to instruct the builder that this monster is complete.</div><div class="line">builder.finish(orc, None);</div></div><!-- fragment --> </div><p>The buffer is now ready to be stored somewhere, sent over the network, be compressed, or whatever you'd like to do with it. You can access the buffer like so:</p> -<div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `Finish()`.</span></div><div class="line">uint8_t *buf = builder.GetBufferPointer();</div><div class="line"><span class="keywordtype">int</span> size = builder.GetSize(); <span class="comment">// Returns the size of the buffer that</span></div><div class="line"> <span class="comment">// `GetBufferPointer()` points to.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `finish()`.</span></div><div class="line">java.nio.ByteBuffer buf = builder.dataBuffer();</div><div class="line"><span class="comment">// The data in this ByteBuffer does NOT start at 0, but at buf.position().</span></div><div class="line"><span class="comment">// The number of bytes is buf.remaining().</span></div><div class="line"></div><div class="line"><span class="comment">// Alternatively this copies the above data out of the ByteBuffer for you:</span></div><div class="line">byte[] buf = builder.sizedByteArray();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `Finish()`.</span></div><div class="line">var buf = builder.DataBuffer; <span class="comment">// Of type `FlatBuffers.ByteBuffer`.</span></div><div class="line"><span class="comment">// The data in this ByteBuffer does NOT start at 0, but at buf.Position.</span></div><div class="line"><span class="comment">// The end of the data is marked by buf.Length, so the size is</span></div><div class="line"><span class="comment">// buf.Length - buf.Position.</span></div><div class="line"></div><div class="line"><span class="comment">// Alternatively this copies the above data out of the ByteBuffer for you:</span></div><div class="line">byte[] buf = builder.SizedByteArray();</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// This must be called after `Finish()`.</div><div class="line">buf := builder.FinishedBytes() // Of type `byte[]`.</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># This must be called after `Finish()`.</span></div><div class="line">buf = builder.Output() // Of type `bytearray`.</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// This must be called after `finish()`.</div><div class="line">var buf = builder.asUint8Array(); // Of type `Uint8Array`.</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// This must be called after `finish()`.</div><div class="line">let buf = builder.asUint8Array(); // Of type `Uint8Array`.</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `finish()`.</span></div><div class="line">$buf = $builder->dataBuffer(); <span class="comment">// Of type `Google\FlatBuffers\ByteBuffer`</span></div><div class="line"><span class="comment">// The data in this ByteBuffer does NOT start at 0, but at buf->getPosition().</span></div><div class="line"><span class="comment">// The end of the data is marked by buf->capacity(), so the size is</span></div><div class="line"><span class="comment">// buf->capacity() - buf->getPosition().</span></div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">uint8_t *buf;</div><div class="line"><span class="keywordtype">size_t</span> size;</div><div class="line"></div><div class="line"><span class="comment">// Allocate and extract a readable buffer from internal builder heap.</span></div><div class="line"><span class="comment">// The returned buffer must be deallocated using `free`.</span></div><div class="line"><span class="comment">// NOTE: Finalizing the buffer does NOT change the builder, it</span></div><div class="line"><span class="comment">// just creates a snapshot of the builder content.</span></div><div class="line">buf = flatcc_builder_finalize_buffer(B, &size);</div><div class="line"><span class="comment">// use buf</span></div><div class="line">free(buf);</div><div class="line"></div><div class="line"><span class="comment">// Optionally reset builder to reuse builder without deallocating</span></div><div class="line"><span class="comment">// internal stack and heap.</span></div><div class="line">flatcc_builder_reset(B);</div><div class="line"><span class="comment">// build next buffer.</span></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="comment">// Cleanup.</span></div><div class="line">flatcc_builder_clear(B);</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">final Uint8List buf = builder.finish(orc);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Get the flatbuffer as a string containing the binary data</div><div class="line">local bufAsString = builder:Output()</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">// This must be called after `Finish()`.</div><div class="line">let buf = builder.SizedCopy() // Of type `string`.</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// This must be called after `finish()`.</div><div class="line">// `finished_data` returns a byte slice.</div><div class="line">let buf = builder.finished_data(); // Of type `&[u8]`</div></div><!-- fragment --> </div><p>Now you can write the bytes to a file, send them over the network.. <b>Make sure your file mode (or tranfer protocol) is set to BINARY, not text.</b> If you transfer a FlatBuffer in text mode, the buffer will be corrupted, which will lead to hard to find problems when you read the buffer.</p> +<div class="language-cpp"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `Finish()`.</span></div><div class="line">uint8_t *buf = builder.GetBufferPointer();</div><div class="line"><span class="keywordtype">int</span> size = builder.GetSize(); <span class="comment">// Returns the size of the buffer that</span></div><div class="line"> <span class="comment">// `GetBufferPointer()` points to.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `finish()`.</span></div><div class="line">java.nio.ByteBuffer buf = builder.dataBuffer();</div><div class="line"><span class="comment">// The data in this ByteBuffer does NOT start at 0, but at buf.position().</span></div><div class="line"><span class="comment">// The number of bytes is buf.remaining().</span></div><div class="line"></div><div class="line"><span class="comment">// Alternatively this copies the above data out of the ByteBuffer for you:</span></div><div class="line">byte[] buf = builder.sizedByteArray();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `Finish()`.</span></div><div class="line">var buf = builder.DataBuffer; <span class="comment">// Of type `FlatBuffers.ByteBuffer`.</span></div><div class="line"><span class="comment">// The data in this ByteBuffer does NOT start at 0, but at buf.Position.</span></div><div class="line"><span class="comment">// The end of the data is marked by buf.Length, so the size is</span></div><div class="line"><span class="comment">// buf.Length - buf.Position.</span></div><div class="line"></div><div class="line"><span class="comment">// Alternatively this copies the above data out of the ByteBuffer for you:</span></div><div class="line">byte[] buf = builder.SizedByteArray();</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">// This must be called after `Finish()`.</div><div class="line">buf := builder.FinishedBytes() // Of type `byte[]`.</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="comment"># This must be called after `Finish()`.</span></div><div class="line">buf = builder.Output() // Of type `bytearray`.</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// This must be called after `finish()`.</div><div class="line">var buf = builder.asUint8Array(); // Of type `Uint8Array`.</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// This must be called after `finish()`.</div><div class="line">let buf = builder.asUint8Array(); // Of type `Uint8Array`.</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// This must be called after `finish()`.</span></div><div class="line">$buf = $builder->dataBuffer(); <span class="comment">// Of type `Google\FlatBuffers\ByteBuffer`</span></div><div class="line"><span class="comment">// The data in this ByteBuffer does NOT start at 0, but at buf->getPosition().</span></div><div class="line"><span class="comment">// The end of the data is marked by buf->capacity(), so the size is</span></div><div class="line"><span class="comment">// buf->capacity() - buf->getPosition().</span></div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">uint8_t *buf;</div><div class="line"><span class="keywordtype">size_t</span> size;</div><div class="line"></div><div class="line"><span class="comment">// Allocate and extract a readable buffer from internal builder heap.</span></div><div class="line"><span class="comment">// The returned buffer must be deallocated using `free`.</span></div><div class="line"><span class="comment">// NOTE: Finalizing the buffer does NOT change the builder, it</span></div><div class="line"><span class="comment">// just creates a snapshot of the builder content.</span></div><div class="line">buf = flatcc_builder_finalize_buffer(B, &size);</div><div class="line"><span class="comment">// use buf</span></div><div class="line">free(buf);</div><div class="line"></div><div class="line"><span class="comment">// Optionally reset builder to reuse builder without deallocating</span></div><div class="line"><span class="comment">// internal stack and heap.</span></div><div class="line">flatcc_builder_reset(B);</div><div class="line"><span class="comment">// build next buffer.</span></div><div class="line"><span class="comment">// ...</span></div><div class="line"></div><div class="line"><span class="comment">// Cleanup.</span></div><div class="line">flatcc_builder_clear(B);</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">final Uint8List buf = builder.finish(orc);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- Get the flatbuffer as a string containing the binary data</div><div class="line">local bufAsString = builder:Output()</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">// This must be called after `Finish()`.</div><div class="line">let buf = builder.SizedCopy() // Of type `string`.</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// This must be called after `finish()`.</div><div class="line">// `finished_data` returns a byte slice.</div><div class="line">let buf = builder.finished_data(); // Of type `&[u8]`</div></div><!-- fragment --> </div><p>Now you can write the bytes to a file, send them over the network.. <b>Make sure your file mode (or transfer protocol) is set to BINARY, not text.</b> If you transfer a FlatBuffer in text mode, the buffer will be corrupted, which will lead to hard to find problems when you read the buffer.</p> <h4>Reading Orc FlatBuffers</h4> <p>Now that we have successfully created an <code>Orc</code> FlatBuffer, the monster data can be saved, sent over a network, etc. Let's now adventure into the inverse, and access a FlatBuffer.</p> <p>This section requires the same import/include, namespace, etc. requirements as before:</p> -<div class="language-cpp"> <div class="fragment"><div class="line"><span class="preprocessor">#include "monster_generate.h"</span> <span class="comment">// This was generated by `flatc`.</span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span>MyGame::Sample; <span class="comment">// Specified in the schema.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keyword">import</span> MyGame.Sample.*; <span class="comment">//The `flatc` generated files. (Monster, Vec3, etc.)</span></div><div class="line"></div><div class="line"><span class="keyword">import</span> <a class="code" href="namespacecom.html">com</a>.<a class="code" href="namespacecom_1_1google.html">google</a>.<a class="code" href="namespacecom_1_1google_1_1flatbuffers.html">flatbuffers</a>.<a class="code" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>;</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="keyword">using</span> <a class="code" href="namespace_flat_buffers.html">FlatBuffers</a>;</div><div class="line"><span class="keyword">using</span> MyGame.Sample; <span class="comment">// The `flatc` generated files. (Monster, Vec3, etc.)</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">import (</div><div class="line"> flatbuffers "github.com/google/flatbuffers/go"</div><div class="line"> sample "MyGame/Sample"</div><div class="line">)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="keyword">import</span> flatbuffers</div><div class="line"></div><div class="line"><span class="comment"># Generated by `flatc`.</span></div><div class="line"><span class="keyword">import</span> MyGame.Sample.Any</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Color</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Monster</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Vec3</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// The following code is for JavaScript module loaders (e.g. Node.js). See</div><div class="line">// below for a browser-based HTML/JavaScript example of including the library.</div><div class="line">var flatbuffers = require('/js/flatbuffers').flatbuffers;</div><div class="line">var MyGame = require('./monster_generated').MyGame; // Generated by `flatc`.</div><div class="line"></div><div class="line">//--------------------------------------------------------------------------//</div><div class="line"></div><div class="line">// The following code is for browser-based HTML/JavaScript. Use the above code</div><div class="line">// for JavaScript module loaders (e.g. Node.js).</div><div class="line"><script src="../js/flatbuffers.js"></script></div><div class="line"><script src="monster_generated.js"></script> // Generated by `flatc`.</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// note: import flabuffers with your desired import method</div><div class="line"></div><div class="line">import { MyGame } from './monster_generated';</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// It is recommended that your use PSR autoload when using FlatBuffers in PHP.</span></div><div class="line"><span class="comment">// Here is an example from `SampleBinary.php`:</span></div><div class="line"><span class="keyword">function</span> __autoload($class_name) {</div><div class="line"> <span class="comment">// The last segment of the class name matches the file name.</span></div><div class="line"> $class = substr($class_name, strrpos($class_name, <span class="stringliteral">"\\"</span>) + 1);</div><div class="line"> $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); <span class="comment">// `flatbuffers` root.</span></div><div class="line"></div><div class="line"> <span class="comment">// Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.</span></div><div class="line"> $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"php"</span>)),</div><div class="line"> join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"samples"</span>, <span class="stringliteral">"MyGame"</span>, <span class="stringliteral">"Sample"</span>)));</div><div class="line"> <span class="keywordflow">foreach</span> ($paths as $path) {</div><div class="line"> $file = join(DIRECTORY_SEPARATOR, array($path, $class . <span class="stringliteral">".php"</span>));</div><div class="line"> <span class="keywordflow">if</span> (file_exists($file)) {</div><div class="line"> require($file);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Only needed if we don't have `#include "monster_builder.h"`.</span></div><div class="line"><span class="preprocessor">#include "monster_reader.h"</span></div><div class="line"></div><div class="line"><span class="preprocessor">#undef ns</span></div><div class="line"><span class="preprocessor">#define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x) // Specified in the schema.</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">import 'package:flat_buffers/flat_buffers.dart' as fb;</div><div class="line">import './monster_my_game.sample_generated.dart' as myGame;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- require the flatbuffers module</div><div class="line">local flatbuffers = require("flatbuffers")</div><div class="line"></div><div class="line">-- require the generated files from `flatc`.</div><div class="line">local color = require("MyGame.Sample.Color")</div><div class="line">local equipment = require("MyGame.Sample.Equipment")</div><div class="line">local monster = require("MyGame.Sample.Monster")</div><div class="line">local vec3 = require("MyGame.Sample.Vec3")</div><div class="line">local weapon = require("MyGame.Sample.Weapon")</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">include from "../lobster/" // Where to find flatbuffers.lobster</div><div class="line">include "monster_generated.lobster"</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// import the flatbuffers runtime library</div><div class="line">extern crate flatbuffers;</div><div class="line"></div><div class="line">// import the generated code</div><div class="line">#[path = "./monster_generated.rs"]</div><div class="line">mod monster_generated;</div><div class="line">pub use monster_generated::my_game::sample::{get_root_as_monster,</div><div class="line"> Color, Equipment,</div><div class="line"> Monster, MonsterArgs,</div><div class="line"> Vec3,</div><div class="line"> Weapon, WeaponArgs};</div></div><!-- fragment --> </div><p>Then, assuming you have a buffer of bytes received from disk, network, etc., you can create start accessing the buffer like so:</p> +<div class="language-cpp"> <div class="fragment"><div class="line"><span class="preprocessor">#include "monster_generated.h"</span> <span class="comment">// This was generated by `flatc`.</span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span>MyGame::Sample; <span class="comment">// Specified in the schema.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keyword">import</span> MyGame.Sample.*; <span class="comment">//The `flatc` generated files. (Monster, Vec3, etc.)</span></div><div class="line"></div><div class="line"><span class="keyword">import</span> <a class="code" href="namespacecom.html">com</a>.<a class="code" href="namespacecom_1_1google.html">google</a>.<a class="code" href="namespacecom_1_1google_1_1flatbuffers.html">flatbuffers</a>.<a class="code" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>;</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="keyword">using</span> <a class="code" href="namespace_flat_buffers.html">FlatBuffers</a>;</div><div class="line"><span class="keyword">using</span> MyGame.Sample; <span class="comment">// The `flatc` generated files. (Monster, Vec3, etc.)</span></div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">import (</div><div class="line"> flatbuffers "github.com/google/flatbuffers/go"</div><div class="line"> sample "MyGame/Sample"</div><div class="line">)</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line"><span class="keyword">import</span> flatbuffers</div><div class="line"></div><div class="line"><span class="comment"># Generated by `flatc`.</span></div><div class="line"><span class="keyword">import</span> MyGame.Sample.Any</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Color</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Monster</div><div class="line"><span class="keyword">import</span> MyGame.Sample.Vec3</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">// The following code is for JavaScript module loaders (e.g. Node.js). See</div><div class="line">// below for a browser-based HTML/JavaScript example of including the library.</div><div class="line">var flatbuffers = require('/js/flatbuffers').flatbuffers;</div><div class="line">var MyGame = require('./monster_generated').MyGame; // Generated by `flatc`.</div><div class="line"></div><div class="line">//--------------------------------------------------------------------------//</div><div class="line"></div><div class="line">// The following code is for browser-based HTML/JavaScript. Use the above code</div><div class="line">// for JavaScript module loaders (e.g. Node.js).</div><div class="line"><script src="../js/flatbuffers.js"></script></div><div class="line"><script src="monster_generated.js"></script> // Generated by `flatc`.</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">// note: import flabuffers with your desired import method</div><div class="line"></div><div class="line">import { MyGame } from './monster_generated';</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line"><span class="comment">// It is recommended that your use PSR autoload when using FlatBuffers in PHP.</span></div><div class="line"><span class="comment">// Here is an example from `SampleBinary.php`:</span></div><div class="line"><span class="keyword">function</span> __autoload($class_name) {</div><div class="line"> <span class="comment">// The last segment of the class name matches the file name.</span></div><div class="line"> $class = substr($class_name, strrpos($class_name, <span class="stringliteral">"\\"</span>) + 1);</div><div class="line"> $root_dir = join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)))); <span class="comment">// `flatbuffers` root.</span></div><div class="line"></div><div class="line"> <span class="comment">// Contains the `*.php` files for the FlatBuffers library and the `flatc` generated files.</span></div><div class="line"> $paths = array(join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"php"</span>)),</div><div class="line"> join(DIRECTORY_SEPARATOR, array($root_dir, <span class="stringliteral">"samples"</span>, <span class="stringliteral">"MyGame"</span>, <span class="stringliteral">"Sample"</span>)));</div><div class="line"> <span class="keywordflow">foreach</span> ($paths as $path) {</div><div class="line"> $file = join(DIRECTORY_SEPARATOR, array($path, $class . <span class="stringliteral">".php"</span>));</div><div class="line"> <span class="keywordflow">if</span> (file_exists($file)) {</div><div class="line"> require($file);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Only needed if we don't have `#include "monster_builder.h"`.</span></div><div class="line"><span class="preprocessor">#include "monster_reader.h"</span></div><div class="line"></div><div class="line"><span class="preprocessor">#undef ns</span></div><div class="line"><span class="preprocessor">#define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x) // Specified in the schema.</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">import 'package:flat_buffers/flat_buffers.dart' as fb;</div><div class="line">import './monster_my_game.sample_generated.dart' as myGame;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">-- require the flatbuffers module</div><div class="line">local flatbuffers = require("flatbuffers")</div><div class="line"></div><div class="line">-- require the generated files from `flatc`.</div><div class="line">local color = require("MyGame.Sample.Color")</div><div class="line">local equipment = require("MyGame.Sample.Equipment")</div><div class="line">local monster = require("MyGame.Sample.Monster")</div><div class="line">local vec3 = require("MyGame.Sample.Vec3")</div><div class="line">local weapon = require("MyGame.Sample.Weapon")</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">include from "../lobster/" // Where to find flatbuffers.lobster</div><div class="line">include "monster_generated.lobster"</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// import the flatbuffers runtime library</div><div class="line">extern crate flatbuffers;</div><div class="line"></div><div class="line">// import the generated code</div><div class="line">#[allow(dead_code, unused_imports)]</div><div class="line">#[path = "./monster_generated.rs"]</div><div class="line">mod monster_generated;</div><div class="line">pub use monster_generated::my_game::sample::{get_root_as_monster,</div><div class="line"> Color, Equipment,</div><div class="line"> Monster, MonsterArgs,</div><div class="line"> Vec3,</div><div class="line"> Weapon, WeaponArgs};</div></div><!-- fragment --> </div><p>Then, assuming you have a buffer of bytes received from disk, network, etc., you can create start accessing the buffer like so:</p> <p><b>Again, make sure you read the bytes in BINARY mode, otherwise the code below won't work</b></p> <div class="language-cpp"> <div class="fragment"><div class="line">uint8_t *buffer_pointer = <span class="comment">/* the data you just read */</span>;</div><div class="line"></div><div class="line"><span class="comment">// Get a pointer to the root object inside the buffer.</span></div><div class="line"><span class="keyword">auto</span> monster = GetMonster(buffer_pointer);</div><div class="line"></div><div class="line"><span class="comment">// `monster` is of type `Monster *`.</span></div><div class="line"><span class="comment">// Note: root object pointers are NOT the same as `buffer_pointer`.</span></div><div class="line"><span class="comment">// `GetMonster` is a convenience function that calls `GetRoot<Monster>`,</span></div><div class="line"><span class="comment">// the latter is also available for non-root types.</span></div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">byte[] bytes = <span class="comment">/* the data you just read */</span></div><div class="line">java.nio.ByteBuffer buf = java.nio.ByteBuffer.wrap(bytes);</div><div class="line"></div><div class="line"><span class="comment">// Get an accessor to the root object inside the buffer.</span></div><div class="line">Monster monster = Monster.getRootAsMonster(buf);</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">byte[] bytes = <span class="comment">/* the data you just read */</span></div><div class="line">var buf = <span class="keyword">new</span> ByteBuffer(bytes);</div><div class="line"></div><div class="line"><span class="comment">// Get an accessor to the root object inside the buffer.</span></div><div class="line">var monster = Monster.GetRootAsMonster(buf);</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">var buf []byte = /* the data you just read */</div><div class="line"></div><div class="line">// Get an accessor to the root object inside the buffer.</div><div class="line">monster := sample.GetRootAsMonster(buf, 0)</div><div class="line"></div><div class="line">// Note: We use `0` for the offset here, which is typical for most buffers</div><div class="line">// you would read. If you wanted to read from `builder.Bytes` directly, you</div><div class="line">// would need to pass in the offset of `builder.Head()`, as the builder</div><div class="line">// constructs the buffer backwards, so may not start at offset 0.</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">buf = /* the data you just read, <span class="keywordflow">in</span> an object of type <span class="stringliteral">"bytearray"</span> */</div><div class="line"></div><div class="line">// Get an accessor to the root object inside the buffer.</div><div class="line">monster = MyGame.Sample.Monster.Monster.GetRootAsMonster(buf, 0)</div><div class="line"></div><div class="line"><span class="comment"># Note: We use `0` for the offset here, which is typical for most buffers</span></div><div class="line"><span class="comment"># you would read. If you wanted to read from the `builder.Bytes` directly,</span></div><div class="line"><span class="comment"># you would need to pass in the offset of `builder.Head()`, as the builder</span></div><div class="line"><span class="comment"># constructs the buffer backwards, so may not start at offset 0.</span></div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">var bytes = /* the data you just read, in an object of type "Uint8Array" */</div><div class="line">var buf = new flatbuffers.ByteBuffer(bytes);</div><div class="line"></div><div class="line">// Get an accessor to the root object inside the buffer.</div><div class="line">var monster = MyGame.Sample.Monster.getRootAsMonster(buf);</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">let bytes = /* the data you just read, in an object of type "Uint8Array" */</div><div class="line">let buf = new flatbuffers.ByteBuffer(bytes);</div><div class="line"></div><div class="line">// Get an accessor to the root object inside the buffer.</div><div class="line">let monster = MyGame.Sample.Monster.getRootAsMonster(buf);</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">$bytes = <span class="comment">/* the data you just read, in a string */</span></div><div class="line">$buf = Google\FlatBuffers\ByteBuffer::wrap($bytes);</div><div class="line"></div><div class="line"><span class="comment">// Get an accessor to the root object inside the buffer.</span></div><div class="line">$monster = \MyGame\Sample\Monster::GetRootAsMonster($buf);</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line"><span class="comment">// Note that we use the `table_t` suffix when reading a table object</span></div><div class="line"><span class="comment">// as opposed to the `ref_t` suffix used during the construction of</span></div><div class="line"><span class="comment">// the buffer.</span></div><div class="line">ns(Monster_table_t) monster = ns(Monster_as_root(buffer));</div><div class="line"></div><div class="line"><span class="comment">// Note: root object pointers are NOT the same as the `buffer` pointer.</span></div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">List<int> data = ... // the data, e.g. from file or network</div><div class="line">// A generated factory constructor that will read the data.</div><div class="line">myGame.Monster monster = new myGame.Monster(data);</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">local bufAsString = -- The data you just read in</div><div class="line"></div><div class="line">-- Convert the string representation into binary array Lua structure</div><div class="line">local buf = flatbuffers.binaryArray.New(bufAsString)</div><div class="line"></div><div class="line">-- Get an accessor to the root object insert the buffer</div><div class="line">local mon = monster.GetRootAsMonster(buf, 0)</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">buf = /* the data you just read, in a string */</div><div class="line"></div><div class="line">// Get an accessor to the root object inside the buffer.</div><div class="line">let monster = MyGame_Sample_GetRootAsMonster(buf)</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">let buf = /* the data you just read, in a &[u8] */</div><div class="line"></div><div class="line">// Get an accessor to the root object inside the buffer.</div><div class="line">let monster = get_root_as_monster(buf);</div></div><!-- fragment --> </div><p>If you look in the generated files from the schema compiler, you will see it generated accessors for all non-<code>deprecated</code> fields. For example:</p> -<div class="language-cpp"> <div class="fragment"><div class="line"><span class="keyword">auto</span> hp = monster->hp();</div><div class="line"><span class="keyword">auto</span> mana = monster->mana();</div><div class="line"><span class="keyword">auto</span> name = monster->name()->c_str();</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keywordtype">short</span> hp = monster.hp();</div><div class="line"><span class="keywordtype">short</span> mana = monster.mana();</div><div class="line">String name = monster.name();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// For C#, unlike most other languages support by FlatBuffers, most values (except for</span></div><div class="line"><span class="comment">// vectors and unions) are available as propreties instead of asccessor methods.</span></div><div class="line">var hp = monster.Hp</div><div class="line">var mana = monster.Mana</div><div class="line">var name = monster.Name</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">hp := monster.Hp()</div><div class="line">mana := monster.Mana()</div><div class="line">name := string(monster.Name()) // Note: `monster.Name()` returns a byte[].</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">hp = monster.Hp()</div><div class="line">mana = monster.Mana()</div><div class="line">name = monster.Name()</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">var hp = $monster.hp();</div><div class="line">var mana = $monster.mana();</div><div class="line">var name = $monster.name();</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">let hp = $monster.hp();</div><div class="line">let mana = $monster.mana();</div><div class="line">let name = $monster.name();</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">$hp = $monster->getHp();</div><div class="line">$mana = $monster->getMana();</div><div class="line">$name = monster->getName();</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">uint16_t hp = ns(Monster_hp(monster));</div><div class="line">uint16_t mana = ns(Monster_mana(monster));</div><div class="line">flatbuffers_string_t name = ns(Monster_name(monster));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// For Dart, unlike other languages support by FlatBuffers, most values</div><div class="line">// are available as propreties instead of asccessor methods.</div><div class="line">var hp = monster.hp;</div><div class="line">var mana = monster.mana;</div><div class="line">var name = monster.name;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">local hp = mon:Hp()</div><div class="line">local mana = mon:Mana()</div><div class="line">local name = mon:Name()</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">let hp = monster.hp</div><div class="line">let mana = monster.mana</div><div class="line">let name = monster.name</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Get and test some scalar types from the FlatBuffer.</div><div class="line">let hp = monster.hp();</div><div class="line">let mana = monster.mana();</div><div class="line">let name = monster.name();</div></div><!-- fragment --> </div><p>These should hold <code>300</code>, <code>150</code>, and <code>"Orc"</code> respectively.</p> +<div class="language-cpp"> <div class="fragment"><div class="line"><span class="keyword">auto</span> hp = monster->hp();</div><div class="line"><span class="keyword">auto</span> mana = monster->mana();</div><div class="line"><span class="keyword">auto</span> name = monster->name()->c_str();</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line"><span class="keywordtype">short</span> hp = monster.hp();</div><div class="line"><span class="keywordtype">short</span> mana = monster.mana();</div><div class="line">String name = monster.name();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line"><span class="comment">// For C#, unlike most other languages support by FlatBuffers, most values (except for</span></div><div class="line"><span class="comment">// vectors and unions) are available as properties instead of accessor methods.</span></div><div class="line">var hp = monster.Hp</div><div class="line">var mana = monster.Mana</div><div class="line">var name = monster.Name</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">hp := monster.Hp()</div><div class="line">mana := monster.Mana()</div><div class="line">name := string(monster.Name()) // Note: `monster.Name()` returns a byte[].</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">hp = monster.Hp()</div><div class="line">mana = monster.Mana()</div><div class="line">name = monster.Name()</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">var hp = $monster.hp();</div><div class="line">var mana = $monster.mana();</div><div class="line">var name = $monster.name();</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">let hp = $monster.hp();</div><div class="line">let mana = $monster.mana();</div><div class="line">let name = $monster.name();</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">$hp = $monster->getHp();</div><div class="line">$mana = $monster->getMana();</div><div class="line">$name = monster->getName();</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">uint16_t hp = ns(Monster_hp(monster));</div><div class="line">uint16_t mana = ns(Monster_mana(monster));</div><div class="line">flatbuffers_string_t name = ns(Monster_name(monster));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">// For Dart, unlike other languages support by FlatBuffers, most values</div><div class="line">// are available as properties instead of accessor methods.</div><div class="line">var hp = monster.hp;</div><div class="line">var mana = monster.mana;</div><div class="line">var name = monster.name;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">local hp = mon:Hp()</div><div class="line">local mana = mon:Mana()</div><div class="line">local name = mon:Name()</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">let hp = monster.hp</div><div class="line">let mana = monster.mana</div><div class="line">let name = monster.name</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">// Get and test some scalar types from the FlatBuffer.</div><div class="line">let hp = monster.hp();</div><div class="line">let mana = monster.mana();</div><div class="line">let name = monster.name();</div></div><!-- fragment --> </div><p>These should hold <code>300</code>, <code>150</code>, and <code>"Orc"</code> respectively.</p> <p><em>Note: The default value <code>150</code> wasn't stored in <code>mana</code>, but we are still able to retrieve it.</em></p> <p>To access sub-objects, in the case of our <code>pos</code>, which is a <code>Vec3</code>:</p> <div class="language-cpp"> <div class="fragment"><div class="line"><span class="keyword">auto</span> pos = monster->pos();</div><div class="line"><span class="keyword">auto</span> x = pos->x();</div><div class="line"><span class="keyword">auto</span> y = pos->y();</div><div class="line"><span class="keyword">auto</span> z = pos->z();</div></div><!-- fragment --> </div> <div class="language-java"> <div class="fragment"><div class="line">Vec3 pos = monster.pos();</div><div class="line"><span class="keywordtype">float</span> x = pos.x();</div><div class="line"><span class="keywordtype">float</span> y = pos.y();</div><div class="line"><span class="keywordtype">float</span> z = pos.z();</div></div><!-- fragment --> </div> <div class="language-csharp"> <div class="fragment"><div class="line">var pos = monster.Pos.Value;</div><div class="line">var x = pos.X;</div><div class="line">var y = pos.Y;</div><div class="line">var z = pos.Z;</div></div><!-- fragment --> </div> <div class="language-go"> <div class="fragment"><div class="line">pos := monster.Pos(nil)</div><div class="line">x := pos.X()</div><div class="line">y := pos.Y()</div><div class="line">z := pos.Z()</div><div class="line"></div><div class="line">// Note: Whenever you access a new object, like in `Pos()`, a new temporary</div><div class="line">// accessor object gets created. If your code is very performance sensitive,</div><div class="line">// you can pass in a pointer to an existing `Vec3` instead of `nil`. This</div><div class="line">// allows you to reuse it across many calls to reduce the amount of object</div><div class="line">// allocation/garbage collection.</div></div><!-- fragment --> </div> <div class="language-python"> <div class="fragment"><div class="line">pos = monster.Pos()</div><div class="line">x = pos.X()</div><div class="line">y = pos.Y()</div><div class="line">z = pos.Z()</div></div><!-- fragment --> </div> <div class="language-javascript"> <div class="fragment"><div class="line">var pos = monster.pos();</div><div class="line">var x = pos.x();</div><div class="line">var y = pos.y();</div><div class="line">var z = pos.z();</div></div><!-- fragment --> </div> <div class="language-typescript"> <div class="fragment"><div class="line">let pos = monster.pos();</div><div class="line">let x = pos.x();</div><div class="line">let y = pos.y();</div><div class="line">let z = pos.z();</div></div><!-- fragment --> </div> <div class="language-php"> <div class="fragment"><div class="line">$pos = $monster->getPos();</div><div class="line">$x = $pos->getX();</div><div class="line">$y = $pos->getY();</div><div class="line">$z = $pos->getZ();</div></div><!-- fragment --> </div> <div class="language-c"> <div class="fragment"><div class="line">ns(Vec3_struct_t) pos = ns(Monster_pos(monster));</div><div class="line"><span class="keywordtype">float</span> x = ns(Vec3_x(pos));</div><div class="line"><span class="keywordtype">float</span> y = ns(Vec3_y(pos));</div><div class="line"><span class="keywordtype">float</span> z = ns(Vec3_z(pos));</div></div><!-- fragment --> </div> <div class="language-dart"> <div class="fragment"><div class="line">myGame.Vec3 pos = monster.pos;</div><div class="line">double x = pos.x;</div><div class="line">double y = pos.y;</div><div class="line">double z = pos.z;</div></div><!-- fragment --> </div> <div class="language-lua"> <div class="fragment"><div class="line">local pos = mon:Pos()</div><div class="line">local x = pos:X()</div><div class="line">local y = pos:Y()</div><div class="line">local z = pos:Z()</div></div><!-- fragment --> </div> <div class="language-lobster"> <div class="fragment"><div class="line">let pos = monster.pos</div><div class="line">let x = pos.x</div><div class="line">let y = pos.y</div><div class="line">let z = pos.z</div></div><!-- fragment --> </div> <div class="language-rust"> <div class="fragment"><div class="line">let pos = monster.pos().unwrap();</div><div class="line">let x = pos.x();</div><div class="line">let y = pos.y();</div><div class="line">let z = pos.z();</div></div><!-- fragment --> </div><p><code>x</code>, <code>y</code>, and <code>z</code> will contain <code>1.0</code>, <code>2.0</code>, and <code>3.0</code>, respectively.</p> diff --git a/flatbuffers_guide_use_cpp.html b/flatbuffers_guide_use_cpp.html index f898223c..1bf9708b 100644 --- a/flatbuffers_guide_use_cpp.html +++ b/flatbuffers_guide_use_cpp.html @@ -109,6 +109,12 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_cpp.html','');}) <p>For example, here is how you would read a FlatBuffer binary file in C++: First, include the library and generated code. Then read the file into a <code>char *</code> array, which you pass to <code>GetMonster()</code>.</p> <div class="fragment"><div class="line"><span class="preprocessor">#include "flatbuffers/flatbuffers.h"</span></div><div class="line"><span class="preprocessor">#include "monster_test_generate.h"</span></div><div class="line"><span class="preprocessor">#include <iostream></span> <span class="comment">// C++ header file for printing</span></div><div class="line"><span class="preprocessor">#include <fstream></span> <span class="comment">// C++ header file for file access</span></div><div class="line"></div><div class="line"></div><div class="line">std::ifstream infile;</div><div class="line">infile.open(<span class="stringliteral">"monsterdata_test.mon"</span>, std::ios::binary | std::ios::in);</div><div class="line">infile.seekg(0,std::ios::end);</div><div class="line"><span class="keywordtype">int</span> length = infile.tellg();</div><div class="line">infile.seekg(0,std::ios::beg);</div><div class="line"><span class="keywordtype">char</span> *data = <span class="keyword">new</span> <span class="keywordtype">char</span>[length];</div><div class="line">infile.read(data, length);</div><div class="line">infile.close();</div><div class="line"></div><div class="line"><span class="keyword">auto</span> monster = GetMonster(data);</div></div><!-- fragment --><p><code>monster</code> is of type <code>Monster *</code>, and points to somewhere <em>inside</em> your buffer (root object pointers are not the same as <code>buffer_pointer</code> !). If you look in your generated header, you'll see it has convenient accessors for all fields, e.g. <code>hp()</code>, <code>mana()</code>, etc:</p> <div class="fragment"><div class="line">std::cout << <span class="stringliteral">"hp : "</span> << monster->hp() << std::endl; <span class="comment">// `80`</span></div><div class="line">std::cout << <span class="stringliteral">"mana : "</span> << monster->mana() << std::endl; <span class="comment">// default value of `150`</span></div><div class="line">std::cout << <span class="stringliteral">"name : "</span> << monster->name()->c_str() << std::endl; <span class="comment">// "MyMonster"</span></div></div><!-- fragment --><p><em>Note: That we never stored a <code>mana</code> value, so it will return the default.</em></p> +<p>The following attributes are supported:</p> +<ul> +<li><p class="startli"><code>shared</code> (on a field): For string fields, this enables the usage of string pooling (i.e. <code>CreateSharedString</code>) as default serialization behavior.</p> +<p class="startli">Specifically, <code>CreateXxxDirect</code> functions and <code>Pack</code> functions for object based API (see below) will use <code>CreateSharedString</code> to create strings.</p> +</li> +</ul> <p>FlatBuffers is all about memory efficiency, which is why its base API is written around using as little as possible of it. This does make the API clumsier (requiring pre-order construction of all data, and making mutation harder).</p> <p>For times when efficiency is less important a more convenient object based API can be used (through <code>--gen-object-api</code>) that is able to unpack & pack a FlatBuffer into objects and standard STL containers, allowing for convenient construction, access and mutation.</p> <p>To use:</p> @@ -141,7 +147,8 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_cpp.html','');}) </ul> <p>Finally, the following top-level attribute</p> <ul> -<li>native_include: "path" (at file level): Because the <code>native_type</code> attribute can be used to introduce types that are unknown to flatbuffers, it may be necessary to include "external" header files in the generated code. This attribute can be used to directly add an include directive to the top of the generated code that includes the specified path directly.</li> +<li><code>native_include</code>: "path" (at file level): Because the <code>native_type</code> attribute can be used to introduce types that are unknown to flatbuffers, it may be necessary to include "external" header files in the generated code. This attribute can be used to directly add an include directive to the top of the generated code that includes the specified path directly.</li> +<li><code>force_align</code>: this attribute may not be respected in the object API, depending on the aligned of the allocator used with <code>new</code>.</li> </ul> <h1>External references.</h1> <p>An additional feature of the object API is the ability to allow you to load multiple independent FlatBuffers, and have them refer to eachothers objects using hashes which are then represented as typed pointers in the object API.</p> @@ -149,10 +156,11 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_cpp.html','');}) <p>Then, in JSON or however you create these buffers, make sure they use the same string (or hash).</p> <p>When you call <code>UnPack</code> (or <code>Create</code>), you'll need a function that maps from hash to the object (see <code>resolver_function_t</code> for details).</p> <h1>Using different pointer types.</h1> -<p>By default the object tree is built out of <code>std::unique_ptr</code>, but you can influence this either globally (using the <code>--cpp-ptr-type</code> argument to <code>flatc</code>) or per field (using the <code>cpp_ptr_type</code> attribute) to by any smart pointer type (<code>my_ptr<T></code>), or by specifying <code>naked</code> as the type to get <code>T *</code> pointers. Unlike the smart pointers, naked pointers do not manage memory for you, so you'll have to manage their lifecycles manually.</p> +<p>By default the object tree is built out of <code>std::unique_ptr</code>, but you can influence this either globally (using the <code>--cpp-ptr-type</code> argument to <code>flatc</code>) or per field (using the <code>cpp_ptr_type</code> attribute) to by any smart pointer type (<code>my_ptr<T></code>), or by specifying <code>naked</code> as the type to get <code>T *</code> pointers. Unlike the smart pointers, naked pointers do not manage memory for you, so you'll have to manage their lifecycles manually. To reference the pointer type specified by the <code>--cpp-ptr-type</code> argument to <code>flatc</code> from a flatbuffer field set the <code>cpp_ptr_type</code> attribute to <code>default_ptr_type</code>.</p> <h1>Using different string type.</h1> <p>By default the object tree is built out of <code>std::string</code>, but you can influence this either globally (using the <code>--cpp-str-type</code> argument to <code>flatc</code>) or per field using the <code>cpp_str_type</code> attribute.</p> -<p>The type must support T::c_str() and T::length() as member functions.</p> +<p>The type must support T::c_str(), T::length() and T::empty() as member functions.</p> +<p>Further, the type must be constructible from std::string, as by default a std::string instance is constructed and then used to initialize the custom string type. This behavior impedes efficient and zero-copy construction of custom string types; the <code>--cpp-str-flex-ctor</code> argument to <code>flatc</code> or the per field attribute <code>cpp_str_flex_ctor</code> can be used to change this behavior, so that the custom string type is constructed by passing the pointer and length of the FlatBuffers String. The custom string class will require a constructor in the following format: custom_str_class(const char *, size_t). Please note that the character array is not guaranteed to be NULL terminated, you should always use the provided size to determine end of string.</p> <h2>Reflection (& Resizing)</h2> <p>There is experimental support for reflection in FlatBuffers, allowing you to read and write data even if you don't know the exact format of a buffer, and even allows you to change sizes of strings and vectors in-place.</p> <p>The way this works is very elegant; there is actually a FlatBuffer schema that describes schemas (!) which you can find in <code>reflection/reflection.fbs</code>. The compiler, <code>flatc</code>, can write out any schemas it has just parsed as a binary FlatBuffer, corresponding to this meta-schema.</p> @@ -215,7 +223,18 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_cpp.html','');}) <p>Since these features haven't been ported to other languages yet, if you choose to use them, you won't be able to use these buffers in other languages (<code>flatc</code> will refuse to compile a schema that uses these features).</p> <p>These features reduce the amount of "table wrapping" that was previously needed to use unions.</p> <p>To use scalars, simply wrap them in a struct.</p> -<p><br /> +<h2>Depth limit of nested objects and stack-overflow control</h2> +<p>The parser of Flatbuffers schema or json-files is kind of recursive parser. To avoid stack-overflow problem the parser has a built-in limiter of recursion depth. Number of nested declarations in a schema or number of nested json-objects is limited. By default, this depth limit set to <code>64</code>. It is possible to override this limit with <code>FLATBUFFERS_MAX_PARSING_DEPTH</code> definition. This definition can be helpful for testing purposes or embedded applications. For details see <a class="el" href="flatbuffers_guide_building.html">build</a> of CMake-based projects.</p> +<p>The Flatbuffers flatbuffers grammar "grammar" uses ASCII character set for identifiers, alphanumeric literals, reserved words.</p> +<p>Internal implementation of the Flatbuffers depends from functions which depend from C-locale: <code>strtod()</code> or <code>strtof()</code>, for example. The library expects the dot <code>.</code> symbol as the separator of an integer part from the fractional part of a float number. Another separator symbols (<code>,</code> for example) will break the compatibility and may lead to an error while parsing a Flatbuffers schema or a json file.</p> +<p>The Standard C locale is a global resource, there is only one locale for the entire application. Some modern compilers and platforms have locale-independent or locale-narrow functions <code>strtof_l</code>, <code>strtod_l</code>, <code>strtoll_l</code>, <code>strtoull_l</code> to resolve this dependency. These functions use specified locale rather than the global or per-thread locale instead. They are part of POSIX-2008 but not part of the C/C++ standard library, therefore, may be missing on some platforms.</p> +<p>The Flatbuffers library try to detect these functions at configuration and compile time:</p><ul> +<li><code>_MSC_VER >= 1900</code>: check MSVC2012 or higher for MSVC buid</li> +<li><code>_XOPEN_SOURCE>=700</code>: check POSIX-2008 for GCC/Clang build</li> +<li><code>check_cxx_symbol_exists(strtof_l stdlib.h)</code>: CMake check of <code>strtod_f</code></li> +</ul> +<p>After detection, the definition <code>FLATBUFFERS_LOCALE_INDEPENDENT</code> will be set to <code>0</code> or <code>1</code>.</p> +<p>It is possible to test the compatibility of the Flatbuffers library with a specific locale using the environment variable <code>FLATBUFFERS_TEST_LOCALE</code>: </p><div class="fragment"><div class="line">>FLATBUFFERS_TEST_LOCALE="" ./flattests</div><div class="line">>FLATBUFFERS_TEST_LOCALE="ru_RU.CP1251" ./flattests</div></div><!-- fragment --><p><br /> </p> </div></div><!-- contents --> </div><!-- doc-content --> diff --git a/flatbuffers_guide_use_dart.html b/flatbuffers_guide_use_dart.html index 5c88ec96..34f231d5 100644 --- a/flatbuffers_guide_use_dart.html +++ b/flatbuffers_guide_use_dart.html @@ -95,7 +95,7 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_dart.html','');} <p>Before diving into the FlatBuffers usage in Dart, it should be noted that the <a class="el" href="flatbuffers_guide_tutorial.html">Tutorial</a> page has a complete guide to general FlatBuffers usage in all of the supported languages (including Dart). This page is designed to cover the nuances of FlatBuffers usage, specific to Dart.</p> <p>You should also have read the <a class="el" href="flatbuffers_guide_building.html">Building</a> documentation to build <code>flatc</code> and should be familiar with <a class="el" href="flatbuffers_guide_using_schema_compiler.html">Using the schema compiler</a> and <a class="el" href="flatbuffers_guide_writing_schema.html">Writing a schema</a>.</p> <h2>FlatBuffers Dart library code location</h2> -<p>The code for the FlatBuffers Go library can be found at <code>flatbuffers/dart</code>. You can browse the library code on the <a href="https://github.com/google/flatbuffers/tree/master/dart">FlatBuffers GitHub page</a>.</p> +<p>The code for the FlatBuffers Dart library can be found at <code>flatbuffers/dart</code>. You can browse the library code on the <a href="https://github.com/google/flatbuffers/tree/master/dart">FlatBuffers GitHub page</a>.</p> <h2>Testing the FlatBuffers Dart library</h2> <p>The code to test the Dart library can be found at <code>flatbuffers/tests</code>. The test code itself is located in <a href="https://github.com/google/ flatbuffers/blob/master/tests/dart_test.dart">dart_test.dart</a>.</p> diff --git a/flatbuffers_guide_use_rust.html b/flatbuffers_guide_use_rust.html index ddcf934b..caccdca5 100644 --- a/flatbuffers_guide_use_rust.html +++ b/flatbuffers_guide_use_rust.html @@ -95,7 +95,8 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_rust.html','');} <p>Before diving into the FlatBuffers usage in Rust, it should be noted that the <a class="el" href="flatbuffers_guide_tutorial.html">Tutorial</a> page has a complete guide to general FlatBuffers usage in all of the supported languages (including Rust). This page is designed to cover the nuances of FlatBuffers usage, specific to Rust.</p> <h4>Prerequisites</h4> <p>This page assumes you have written a FlatBuffers schema and compiled it with the Schema Compiler. If you have not, please see <a class="el" href="flatbuffers_guide_using_schema_compiler.html">Using the schema compiler</a> and <a class="el" href="flatbuffers_guide_writing_schema.html">Writing a schema</a>.</p> -<p>Assuming you wrote a schema, say <code>mygame.fbs</code> (though the extension doesn't matter), you've generated a Rust file called <code>mygame_generated.rs</code> using the compiler (e.g. <code>flatc --rust mygame.fbs</code>), you can now start using this in your program by including the file. As noted, this header relies on the crate <code>flatbuffers</code>, which should be in your include <code>Cargo.toml</code>.</p> +<p>Assuming you wrote a schema, say <code>mygame.fbs</code> (though the extension doesn't matter), you've generated a Rust file called <code>mygame_generated.rs</code> using the compiler (e.g. <code>flatc --rust mygame.fbs</code> or via helpers listed in "Useful +tools created by others" section bellow), you can now start using this in your program by including the file. As noted, this header relies on the crate <code>flatbuffers</code>, which should be in your include <code>Cargo.toml</code>.</p> <h2>FlatBuffers Rust library code location</h2> <p>The code for the FlatBuffers Rust library can be found at <code>flatbuffers/rust</code>. You can browse the library code on the <a href="https://github.com/google/flatbuffers/tree/master/rust">FlatBuffers GitHub page</a>.</p> <h2>Testing the FlatBuffers Rust library</h2> @@ -110,7 +111,7 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_rust.html','');} <p>For example, here is how you would read a FlatBuffer binary file in Rust: First, include the library and generated code. Then read the file into a <code>u8</code> vector, which you pass, as a byte slice, to <code>get_root_as_monster()</code>.</p> <p>This full example program is available in the Rust test suite: <a href="https://github.com/google/flatbuffers/blob/master/tests/rust_usage_test/bin/monster_example.rs">monster_example.rs</a></p> <p>It can be run by <code>cd</code>ing to the <code>rust_usage_test</code> directory and executing: <code>cargo run monster_example</code>.</p> -<div class="fragment"><div class="line">extern crate flatbuffers;</div><div class="line"></div><div class="line">#[path = "../../monster_test_generated.rs"]</div><div class="line">mod monster_test_generated;</div><div class="line">pub use monster_test_generated::my_game;</div><div class="line"></div><div class="line">use std::io::Read;</div><div class="line"></div><div class="line">fn main() {</div><div class="line"> let mut f = std::fs::File::open("../monsterdata_test.mon").unwrap();</div><div class="line"> let mut buf = Vec::new();</div><div class="line"> f.read_to_end(&mut buf).expect("file reading failed");</div><div class="line"></div><div class="line"> let monster = my_game::example::get_root_as_monster(&buf[..]);</div></div><!-- fragment --><p><code>monster</code> is of type <code>Monster</code>, and points to somewhere <em>inside</em> your buffer (root object pointers are not the same as <code>buffer_pointer</code> !). If you look in your generated header, you'll see it has convenient accessors for all fields, e.g. <code>hp()</code>, <code>mana()</code>, etc:</p> +<div class="fragment"><div class="line">extern crate flatbuffers;</div><div class="line"></div><div class="line">#[allow(dead_code, unused_imports)]</div><div class="line">#[path = "../../monster_test_generated.rs"]</div><div class="line">mod monster_test_generated;</div><div class="line">pub use monster_test_generated::my_game;</div><div class="line"></div><div class="line">use std::io::Read;</div><div class="line"></div><div class="line">fn main() {</div><div class="line"> let mut f = std::fs::File::open("../monsterdata_test.mon").unwrap();</div><div class="line"> let mut buf = Vec::new();</div><div class="line"> f.read_to_end(&mut buf).expect("file reading failed");</div><div class="line"></div><div class="line"> let monster = my_game::example::get_root_as_monster(&buf[..]);</div></div><!-- fragment --><p><code>monster</code> is of type <code>Monster</code>, and points to somewhere <em>inside</em> your buffer (root object pointers are not the same as <code>buffer_pointer</code> !). If you look in your generated header, you'll see it has convenient accessors for all fields, e.g. <code>hp()</code>, <code>mana()</code>, etc:</p> <div class="fragment"><div class="line"> println!("{}", monster.hp()); // `80`</div><div class="line"> println!("{}", monster.mana()); // default value of `150`</div><div class="line"> println!("{:?}", monster.name()); // Some("MyMonster")</div><div class="line">}</div></div><!-- fragment --><p><em>Note: That we never stored a <code>mana</code> value, so it will return the default.</em></p> <h2>Direct memory access</h2> <p>As you can see from the above examples, all elements in a buffer are accessed through generated accessors. This is because everything is stored in little endian format on all platforms (the accessor performs a swap operation on big endian machines), and also because the layout of things is generally not known to the user.</p> @@ -126,6 +127,10 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_rust.html','');} <h2>Threading</h2> <p>Reading a FlatBuffer does not touch any memory outside the original buffer, and is entirely read-only (all immutable), so is safe to access from multiple threads even without synchronisation primitives.</p> <p>Creating a FlatBuffer is not thread safe. All state related to building a FlatBuffer is contained in a FlatBufferBuilder instance, and no memory outside of it is touched. To make this thread safe, either do not share instances of FlatBufferBuilder between threads (recommended), or manually wrap it in synchronisation primitives. There's no automatic way to accomplish this, by design, as we feel multithreaded construction of a single buffer will be rare, and synchronisation overhead would be costly.</p> +<h2>Useful tools created by others</h2> +<ul> +<li><a href="https://github.com/frol/flatc-rust">flatc-rust</a> - FlatBuffers compiler (flatc) as API for transparent <code>.fbs</code> to <code>.rs</code> code-generation via Cargo build scripts integration.</li> +</ul> <p><br /> </p> </div></div><!-- contents --> diff --git a/flatbuffers_guide_use_typescript.html b/flatbuffers_guide_use_typescript.html index ffbc961e..f4e02501 100644 --- a/flatbuffers_guide_use_typescript.html +++ b/flatbuffers_guide_use_typescript.html @@ -95,7 +95,7 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_use_typescript.html' <p>Before diving into the FlatBuffers usage in TypeScript, it should be noted that the <a class="el" href="flatbuffers_guide_tutorial.html">Tutorial</a> page has a complete guide to general FlatBuffers usage in all of the supported languages (including TypeScript). This page is specifically designed to cover the nuances of FlatBuffers usage in TypeScript.</p> <p>You should also have read the <a class="el" href="flatbuffers_guide_building.html">Building</a> documentation to build <code>flatc</code> and should be familiar with <a class="el" href="flatbuffers_guide_using_schema_compiler.html">Using the schema compiler</a> and <a class="el" href="flatbuffers_guide_writing_schema.html">Writing a schema</a>.</p> <h2>FlatBuffers TypeScript library code location</h2> -<p>The code for the FlatBuffers TypeScript library can be found at <code>flatbuffers/js</code> with typings available at /flatubffers.</p> +<p>The code for the FlatBuffers TypeScript library can be found at <code>flatbuffers/js</code> with typings available at <code>@types/flatbuffers</code>.</p> <h2>Testing the FlatBuffers TypeScript library</h2> <p>To run the tests, use the <a href="https://github.com/google/ flatbuffers/blob/master/tests/TypeScriptTest.sh">TypeScriptTest.sh</a> shell script.</p> diff --git a/flatbuffers_guide_using_schema_compiler.html b/flatbuffers_guide_using_schema_compiler.html index 2e70aa67..bf22603d 100644 --- a/flatbuffers_guide_using_schema_compiler.html +++ b/flatbuffers_guide_using_schema_compiler.html @@ -123,27 +123,45 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_using_schema_compile <li><code>-I PATH</code> : when encountering <code>include</code> statements, attempt to load the files from this path. Paths will be tried in the order given, and if all fail (or none are specified) it will try to load relative to the path of the schema file being parsed.</li> <li><code>-M</code> : Print make rules for generated files.</li> <li><code>--strict-json</code> : Require & generate strict JSON (field names are enclosed in quotes, no trailing commas in tables/vectors). By default, no quotes are required/generated, and trailing commas are allowed.</li> +<li><code>--allow-non-utf8</code> : Pass non-UTF-8 input through parser and emit nonstandard escapes in JSON. (Default is to raise parse error on non-UTF-8 input.)</li> +<li><code>--natural-utf8</code> : Output strings with UTF-8 as human-readable strings. By default, UTF-8 characters are printed as escapes."</li> <li><code>--defaults-json</code> : Output fields whose value is equal to the default value when writing JSON text.</li> <li><code>--no-prefix</code> : Don't prefix enum values in generated C++ by their enum type.</li> <li><code>--scoped-enums</code> : Use C++11 style scoped and strongly typed enums in generated C++. This also implies <code>--no-prefix</code>.</li> <li><code>--gen-includes</code> : (deprecated), this is the default behavior. If the original behavior is required (no include statements) use <code>--no-includes.</code></li> <li><code>--no-includes</code> : Don't generate include statements for included schemas the generated file depends on (C++).</li> -<li><p class="startli"><code>--gen-mutable</code> : Generate additional non-const accessors for mutating FlatBuffers in-place.</p> -<p class="startli"><code>--gen-object-api</code> : Generate an additional object-based API. This API is more convenient for object construction and mutation than the base API, at the cost of efficiency (object allocation). Recommended only to be used if other options are insufficient.</p> -</li> +<li><code>--gen-mutable</code> : Generate additional non-const accessors for mutating FlatBuffers in-place.</li> +<li><code>--gen-onefile</code> : Generate single output file for C# and Go.</li> +<li><code>--gen-name-strings</code> : Generate type name functions for C++.</li> +<li><code>--gen-object-api</code> : Generate an additional object-based API. This API is more convenient for object construction and mutation than the base API, at the cost of efficiency (object allocation). Recommended only to be used if other options are insufficient.</li> <li><code>--gen-compare</code> : Generate operator== for object-based API types.</li> -<li><code>--gen-onefile</code> : Generate single output file (useful for C#)</li> -<li><code>--gen-all</code>: Generate not just code for the current schema files, but for all files it includes as well. If the language uses a single file for output (by default the case for C++ and JS), all code will end up in this one file.</li> +<li><code>--gen-nullable</code> : Add Clang _Nullable for C++ pointer. or for Java.</li> +<li><code>--gen-generated</code> : Add annotation for Java.</li> +<li><code>--gen-all</code> : Generate not just code for the current schema files, but for all files it includes as well. If the language uses a single file for output (by default the case for C++ and JS), all code will end up in this one file.</li> +<li><code>--cpp-ptr-type T</code> : Set object API pointer type (default std::unique_ptr)</li> +<li><code>--cpp-str-type T</code> : Set object API string type (default std::string) T::c_str(), T::length() and T::empty() must be supported. The custom type also needs to be constructible from std::string (see the –cpp-str-flex-ctor option to change this behavior).</li> +<li><code>--cpp-str-flex-ctor</code> : Don't construct custom string types by passing std::string from Flatbuffers, but (char* + length). This allows efficient construction of custom string types, including zero-copy construction.</li> +<li><code>--object-prefix</code> : Customise class prefix for C++ object-based API.</li> +<li><code>--object-suffix</code> : Customise class suffix for C++ object-based API.</li> <li><code>--no-js-exports</code> : Removes Node.js style export lines (useful for JS)</li> <li><code>--goog-js-export</code> : Uses goog.exportsSymbol and goog.exportsProperty instead of Node.js style exporting. Needed for compatibility with the Google closure compiler (useful for JS).</li> <li><code>--es6-js-export</code> : Generates ECMAScript v6 style export definitions instead of Node.js style exporting. Useful when integrating flatbuffers with modern Javascript projects.</li> +<li><code>--go-namespace</code> : Generate the overrided namespace in Golang.</li> +<li><code>--go-import</code> : Generate the overrided import for flatbuffers in Golang. (default is "github.com/google/flatbuffers/go").</li> <li><code>--raw-binary</code> : Allow binaries without a file_indentifier to be read. This may crash flatc given a mismatched schema.</li> +<li><code>--size-prefixed</code> : Input binaries are size prefixed buffers.</li> <li><code>--proto</code>: Expect input files to be .proto files (protocol buffers). Output the corresponding .fbs file. Currently supports: <code>package</code>, <code>message</code>, <code>enum</code>, nested declarations, <code>import</code> (use <code>-I</code> for paths), <code>extend</code>, <code>oneof</code>, <code>group</code>. Does not support, but will skip without error: <code>option</code>, <code>service</code>, <code>extensions</code>, and most everything else.</li> +<li><code>--oneof-union</code> : Translate .proto oneofs to flatbuffer unions.</li> +<li><code>--grpc</code> : Generate GRPC interfaces for the specified languages.</li> <li><code>--schema</code>: Serialize schemas instead of JSON (use with -b). This will output a binary version of the specified schema that itself corresponds to the reflection/reflection.fbs schema. Loading this binary file is the basis for reflection functionality.</li> <li><code>--bfbs-comments</code>: Add doc comments to the binary schema files.</li> <li><code>--conform FILE</code> : Specify a schema the following schemas should be an evolution of. Gives errors if not. Useful to check if schema modifications don't break schema evolution rules.</li> +<li><code>--conform-includes PATH</code> : Include path for the schema given with <code>--conform PATH</code>.</li> <li><code>--include-prefix PATH</code> : Prefix this path to any generated include statements.</li> <li><code>--keep-prefix</code> : Keep original prefix of schema include statement.</li> +<li><code>--no-fb-impor</code> : Don't include flatbuffers import statement for TypeScript.</li> +<li><code>--no-ts-reexpor</code> : Don't re-export imported dependencies for TypeScript.</li> +<li><code>--short-name</code> : Use short function names for JS and TypeScript.</li> <li><code>--reflect-types</code> : Add minimal type reflection to code generation.</li> <li><code>--reflect-names</code> : Add minimal type/name reflection.</li> <li><code>--root-type T</code> : Select or override the default root_type.</li> diff --git a/flatbuffers_guide_writing_schema.html b/flatbuffers_guide_writing_schema.html index a0eb42b1..7320a231 100644 --- a/flatbuffers_guide_writing_schema.html +++ b/flatbuffers_guide_writing_schema.html @@ -153,9 +153,18 @@ root_type Monster; <p>You generally do not want to change default values after they're initially defined. Fields that have the default value are not actually stored in the serialized data (see also Gotchas below) but are generated in code, so when you change the default, you'd now get a different value than from code generated from an older version of the schema. There are situations, however, where this may be desirable, especially if you can ensure a simultaneous rebuild of all code.</p> <h3>Enums</h3> <p>Define a sequence of named constants, each with a given value, or increasing by one from the previous one. The default first value is <code>0</code>. As you can see in the enum declaration, you specify the underlying integral type of the enum with <code>:</code> (in this case <code>byte</code>), which then determines the type of any fields declared with this enum type.</p> +<p>Only integer types are allowed, i.e. <code>byte</code>, <code>ubyte</code>, <code>short</code> <code>ushort</code>, <code>int</code>, <code>uint</code>, <code>long</code> and <code>ulong</code>.</p> <p>Typically, enum values should only ever be added, never removed (there is no deprecation for enums). This requires code to handle forwards compatibility itself, by handling unknown enum values.</p> <h3>Unions</h3> -<p>Unions share a lot of properties with enums, but instead of new names for constants, you use names of tables. You can then declare a union field, which can hold a reference to any of those types, and additionally a hidden field with the suffix <code>_type</code> is generated that holds the corresponding enum value, allowing you to know which type to cast to at runtime.</p> +<p>Unions share a lot of properties with enums, but instead of new names for constants, you use names of tables. You can then declare a union field, which can hold a reference to any of those types, and additionally a field with the suffix <code>_type</code> is generated that holds the corresponding enum value, allowing you to know which type to cast to at runtime.</p> +<p>It's possible to give an alias name to a type union. This way a type can even be used to mean different things depending on the name used: </p><pre class="fragment">table PointPosition { x:uint; y:uint; } +table MarkerPosition {} +union Position { + Start:MarkerPosition, + Point:PointPosition, + Finish:MarkerPosition +} +</pre><p>Unions contain a special <code>NONE</code> marker to denote that no value is stored so that name cannot be used as an alias.</p> <p>Unions are a good way to be able to send multiple message types as a FlatBuffer. Note that because a union field is really two fields, it must always be part of a table, it cannot be the root of a FlatBuffer by itself.</p> <p>If you have a need to distinguish between different FlatBuffers in a more open-ended way, for example for use as files, see the file identification feature below.</p> <p>There is an experimental support only in C++ for a vector of unions (and types). In the example IDL file above, use [Any] to add a vector of Any to Monster table.</p> @@ -191,8 +200,8 @@ root_type Monster; <li><code>id: n</code> (on a table field): manually set the field identifier to <code>n</code>. If you use this attribute, you must use it on ALL fields of this table, and the numbers must be a contiguous range from 0 onwards. Additionally, since a union type effectively adds two fields, its id must be that of the second field (the first field is the type field and not explicitly declared in the schema). For example, if the last field before the union field had id 6, the union field should have id 8, and the unions type field will implicitly be 7. IDs allow the fields to be placed in any order in the schema. When a new field is added to the schema it must use the next available ID.</li> <li><code>deprecated</code> (on a field): do not generate accessors for this field anymore, code should stop using this data. Old data may still contain this field, but it won't be accessible anymore by newer code. Note that if you deprecate a field that was previous required, old code may fail to validate new data (when using the optional verifier).</li> <li><code>required</code> (on a non-scalar table field): this field must always be set. By default, all fields are optional, i.e. may be left out. This is desirable, as it helps with forwards/backwards compatibility, and flexibility of data structures. It is also a burden on the reading code, since for non-scalar fields it requires you to check against NULL and take appropriate action. By specifying this field, you force code that constructs FlatBuffers to ensure this field is initialized, so the reading code may access it directly, without checking for NULL. If the constructing code does not initialize this field, they will get an assert, and also the verifier will fail on buffers that have missing required fields. Note that if you add this attribute to an existing field, this will only be valid if existing data always contains this field / existing code always writes this field.</li> -<li><code>force_align: size</code> (on a struct): force the alignment of this struct to be something higher than what it is naturally aligned to. Causes these structs to be aligned to that amount inside a buffer, IF that buffer is allocated with that alignment (which is not necessarily the case for buffers accessed directly inside a <code>FlatBufferBuilder</code>).</li> -<li><code>bit_flags</code> (on an enum): the values of this field indicate bits, meaning that any value N specified in the schema will end up representing 1<<N, or if you don't specify values at all, you'll get the sequence 1, 2, 4, 8, ...</li> +<li><code>force_align: size</code> (on a struct): force the alignment of this struct to be something higher than what it is naturally aligned to. Causes these structs to be aligned to that amount inside a buffer, IF that buffer is allocated with that alignment (which is not necessarily the case for buffers accessed directly inside a <code>FlatBufferBuilder</code>). Note: currently not guaranteed to have an effect when used with <code>--object-api</code>, since that may allocate objects at alignments less than what you specify with <code>force_align</code>.</li> +<li><code>bit_flags</code> (on an unsigned enum): the values of this field indicate bits, meaning that any unsigned value N specified in the schema will end up representing 1<<N, or if you don't specify values at all, you'll get the sequence 1, 2, 4, 8, ...</li> <li><code>nested_flatbuffer: "table_name"</code> (on a field): this indicates that the field (which must be a vector of ubyte) contains flatbuffer data, for which the root type is given by <code>table_name</code>. The generated code will then produce a convenient accessor for the nested FlatBuffer.</li> <li><code>flexbuffer</code> (on a field): this indicates that the field (which must be a vector of ubyte) contains flexbuffer data. The generated code will then produce a convenient accessor for the FlexBuffer root.</li> <li><code>key</code> (on a field): this field is meant to be used as a key when sorting a vector of the type of table it sits in. Can be used for in-place binary search.</li> @@ -225,6 +234,18 @@ root_type Monster; <li><code>\xXX</code> - 8-bit binary hexadecimal number XX. This is the only one that is not in the JSON spec (see <a href="http://json.org/">http://json.org/</a>), but is needed to be able to encode arbitrary binary in strings to text and back without losing information (e.g. the byte 0xFF can't be represented in standard JSON).</li> </ul> <p>It also generates these escape codes back again when generating JSON from a binary representation.</p> +<p>When parsing numbers, the parser is more flexible than JSON. A format of numeric literals is more close to the C/C++. According to the <a class="el" href="flatbuffers_grammar.html">grammar</a>, it accepts the following numerical literals:</p> +<ul> +<li>An integer literal can have any number of leading zero <code>0</code> digits. Unlike C/C++, the parser ignores a leading zero, not interpreting it as the beginning of the octal number. The numbers <code>[081, -00094]</code> are equal to <code>[81, -94]</code> decimal integers.</li> +<li>The parser accepts unsigned and signed hexadecimal integer numbers. For example: <code>[0x123, +0x45, -0x67]</code> are equal to <code>[291, 69, -103]</code> decimals.</li> +<li><p class="startli">The format of float-point numbers is fully compatible with C/C++ format. If a modern C++ compiler is used the parser accepts hexadecimal and special float-point literals as well: <code>[-1.0, 2., .3e0, 3.e4, 0x21.34p-5, -inf, nan]</code>. The exponent suffix of hexadecimal float-point number is mandatory.</p> +<p class="startli">Extended float-point support was tested with:</p><ul> +<li>x64 Windows: <code>MSVC2015</code> and higher.</li> +<li>x64 Linux: <code>LLVM 6.0</code>, <code>GCC 4.9</code> and higher.</li> +</ul> +</li> +<li>For compatibility with a JSON lint tool all numeric literals of scalar fields can be wrapped to quoted string: <code>"1", "2.0", "0x48A", "0x0C.0Ep-1", "-inf", "true"</code>.</li> +</ul> <h2>Guidelines</h2> <h3>Efficiency</h3> <p>FlatBuffers is all about efficiency, but to realize that efficiency you require an efficient schema. There are usually multiple choices on how to represent data that have vastly different size characteristics.</p> diff --git a/functions.html b/functions.html index 0245db24..62c9a815 100644 --- a/functions.html +++ b/functions.html @@ -225,7 +225,7 @@ $(document).ready(function(){initNavTree('functions.html','');}); </li> <li>CreateString() : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070">FlatBuffers.FlatBufferBuilder</a> -, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">flatbuffers::FlatBufferBuilder</a> +, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685">flatbuffers::FlatBufferBuilder</a> </li> <li>createString() : <a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ac54a8acfac1dda020b610da53b2d9a0f">Google\FlatBuffers\FlatbufferBuilder</a> @@ -282,6 +282,10 @@ $(document).ready(function(){initNavTree('functions.html','');}); <li>dataBuffer() : <a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ae7e97c2d21da04ef483e6940d442938f">Google\FlatBuffers\FlatbufferBuilder</a> </li> +<li>decodeUtf8() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">com.google.flatbuffers.Utf8</a> +, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1">com.google.flatbuffers.Utf8Safe</a> +</li> <li>DedupVtables() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">flatbuffers::FlatBufferBuilder</a> </li> @@ -289,6 +293,13 @@ $(document).ready(function(){initNavTree('functions.html','');}); <h3><a id="index_e"></a>- e -</h3><ul> +<li>encodedLength() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">com.google.flatbuffers.Utf8</a> +</li> +<li>encodeUtf8() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">com.google.flatbuffers.Utf8</a> +, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43">com.google.flatbuffers.Utf8Safe</a> +</li> <li>EndVector() : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a7cacff748cbf996b52de2e31e731af41">FlatBuffers.FlatBufferBuilder</a> </li> @@ -300,7 +311,7 @@ $(document).ready(function(){initNavTree('functions.html','');}); : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2">com.google.flatbuffers.FlatBufferBuilder</a> </li> <li>Finish() -: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a709d1ded4ffd922b61bc6f7f4a12fb97">FlatBuffers.FlatBufferBuilder</a> +: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a703062d740b32a77d26c5f6d1928c75f">FlatBuffers.FlatBufferBuilder</a> , <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">flatbuffers::FlatBufferBuilder</a> </li> <li>finish() @@ -314,10 +325,13 @@ $(document).ready(function(){initNavTree('functions.html','');}); , <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220">flatbuffers::FlatBufferBuilder</a> </li> <li>FlatBufferBuilder() -: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d">com.google.flatbuffers.FlatBufferBuilder</a> -, <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d">FlatBuffers.FlatBufferBuilder</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387">com.google.flatbuffers.FlatBufferBuilder</a> +, <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a4c3de6ba2bdf4664678ab9666cce6ea1">FlatBuffers.FlatBufferBuilder</a> , <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">flatbuffers::FlatBufferBuilder</a> </li> +<li>FLATBUFFERS_ATTRIBUTE() +: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42">flatbuffers::FlatBufferBuilder</a> +</li> <li>forceDefaults() : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69">com.google.flatbuffers.FlatBufferBuilder</a> </li> @@ -341,6 +355,9 @@ $(document).ready(function(){initNavTree('functions.html','');}); <li>GetCurrentBufferPointer() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">flatbuffers::FlatBufferBuilder</a> </li> +<li>getDefault() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">com.google.flatbuffers.Utf8</a> +</li> <li>GetSize() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">flatbuffers::FlatBufferBuilder</a> </li> @@ -366,8 +383,7 @@ $(document).ready(function(){initNavTree('functions.html','');}); <h3><a id="index_n"></a>- n -</h3><ul> <li>newByteBuffer() -: <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> -, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> </li> </ul> @@ -417,11 +433,8 @@ $(document).ready(function(){initNavTree('functions.html','');}); <li>Release() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">flatbuffers::FlatBufferBuilder</a> </li> -<li>ReleaseBufferPointer() -: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8">flatbuffers::FlatBufferBuilder</a> -</li> <li>releaseByteBuffer() -: <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> </li> <li>ReleaseRaw() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">flatbuffers::FlatBufferBuilder</a> @@ -433,8 +446,11 @@ $(document).ready(function(){initNavTree('functions.html','');}); <h3><a id="index_s"></a>- s -</h3><ul> +<li>setDefault() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">com.google.flatbuffers.Utf8</a> +</li> <li>sizedByteArray() -: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078">com.google.flatbuffers.FlatBufferBuilder</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672">com.google.flatbuffers.FlatBufferBuilder</a> </li> <li>SizedByteArray() : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2">FlatBuffers.FlatBufferBuilder</a> diff --git a/functions_func.html b/functions_func.html index 4b680c20..8cccdcf7 100644 --- a/functions_func.html +++ b/functions_func.html @@ -218,7 +218,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); </li> <li>CreateString() : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070">FlatBuffers.FlatBufferBuilder</a> -, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154">flatbuffers::FlatBufferBuilder</a> +, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">flatbuffers::FlatBufferBuilder</a> </li> <li>createString() : <a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ac54a8acfac1dda020b610da53b2d9a0f">Google\FlatBuffers\FlatbufferBuilder</a> @@ -270,6 +270,10 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abf0fd34f0d93a9d89f595fddf752feb7">com.google.flatbuffers.FlatBufferBuilder</a> , <a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ae7e97c2d21da04ef483e6940d442938f">Google\FlatBuffers\FlatbufferBuilder</a> </li> +<li>decodeUtf8() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8">com.google.flatbuffers.Utf8</a> +, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1">com.google.flatbuffers.Utf8Safe</a> +</li> <li>DedupVtables() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961">flatbuffers::FlatBufferBuilder</a> </li> @@ -277,6 +281,13 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); <h3><a id="index_e"></a>- e -</h3><ul> +<li>encodedLength() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab">com.google.flatbuffers.Utf8</a> +</li> +<li>encodeUtf8() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb">com.google.flatbuffers.Utf8</a> +, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43">com.google.flatbuffers.Utf8Safe</a> +</li> <li>EndVector() : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a7cacff748cbf996b52de2e31e731af41">FlatBuffers.FlatBufferBuilder</a> </li> @@ -288,7 +299,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2">com.google.flatbuffers.FlatBufferBuilder</a> </li> <li>Finish() -: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a703062d740b32a77d26c5f6d1928c75f">FlatBuffers.FlatBufferBuilder</a> +: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73">FlatBuffers.FlatBufferBuilder</a> , <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">flatbuffers::FlatBufferBuilder</a> </li> <li>finish() @@ -304,7 +315,10 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); <li>FlatBufferBuilder() : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c">com.google.flatbuffers.FlatBufferBuilder</a> , <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d">FlatBuffers.FlatBufferBuilder</a> -, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c">flatbuffers::FlatBufferBuilder</a> +, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091">flatbuffers::FlatBufferBuilder</a> +</li> +<li>FLATBUFFERS_ATTRIBUTE() +: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42">flatbuffers::FlatBufferBuilder</a> </li> <li>forceDefaults() : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69">com.google.flatbuffers.FlatBufferBuilder</a> @@ -328,6 +342,9 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); <li>GetCurrentBufferPointer() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41">flatbuffers::FlatBufferBuilder</a> </li> +<li>getDefault() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858">com.google.flatbuffers.Utf8</a> +</li> <li>GetSize() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f">flatbuffers::FlatBufferBuilder</a> </li> @@ -346,8 +363,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); <h3><a id="index_n"></a>- n -</h3><ul> <li>newByteBuffer() -: <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> -, <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> </li> </ul> @@ -397,11 +413,8 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); <li>Release() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45">flatbuffers::FlatBufferBuilder</a> </li> -<li>ReleaseBufferPointer() -: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8">flatbuffers::FlatBufferBuilder</a> -</li> <li>releaseByteBuffer() -: <a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a> </li> <li>ReleaseRaw() : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416">flatbuffers::FlatBufferBuilder</a> @@ -413,8 +426,11 @@ $(document).ready(function(){initNavTree('functions_func.html','');}); <h3><a id="index_s"></a>- s -</h3><ul> +<li>setDefault() +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17">com.google.flatbuffers.Utf8</a> +</li> <li>sizedByteArray() -: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078">com.google.flatbuffers.FlatBufferBuilder</a> +: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672">com.google.flatbuffers.FlatBufferBuilder</a> </li> <li>SizedByteArray() : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2">FlatBuffers.FlatBufferBuilder</a> diff --git a/group__flatbuffers__cpp__api.js b/group__flatbuffers__cpp__api.js index 4e7924c9..e9609e57 100644 --- a/group__flatbuffers__cpp__api.js +++ b/group__flatbuffers__cpp__api.js @@ -12,7 +12,7 @@ var group__flatbuffers__cpp__api = ] ], [ "StringOffsetMap", "classflatbuffers_1_1_flat_buffer_builder.html#a9190cb2d5a4324ab0c52263b834fff09", null ], [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c", null ], - [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56", null ], + [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091", null ], [ "~FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#a01dabf5cdd6b1b2881337e1e84aa1683", null ], [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ace4606286a25d3fedfb1532934d4cea1", null ], [ "Clear", "classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412", null ], @@ -50,10 +50,12 @@ var group__flatbuffers__cpp__api = [ "CreateVectorOfStructs", "classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72", null ], [ "CreateVectorOfStructs", "classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5", null ], [ "CreateVectorOfStructs", "classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42", null ], + [ "CreateVectorScalarCast", "classflatbuffers_1_1_flat_buffer_builder.html#a8f4ce606347c10854ab05cf0ef7e8b2c", null ], [ "DedupVtables", "classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961", null ], [ "Finish", "classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912", null ], [ "Finish", "classflatbuffers_1_1_flat_buffer_builder.html#a2e4de5642bad6dcd01eb7e7eaf719c89", null ], [ "FinishSizePrefixed", "classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220", null ], + [ "FLATBUFFERS_ATTRIBUTE", "classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42", null ], [ "ForceDefaults", "classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a", null ], [ "GetBufferMinAlignment", "classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b", null ], [ "GetBufferPointer", "classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83", null ], @@ -62,10 +64,10 @@ var group__flatbuffers__cpp__api = [ "operator=", "classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38", null ], [ "operator=", "classflatbuffers_1_1_flat_buffer_builder.html#a376bb6858e8b1baab9a437f3f9f0b334", null ], [ "Release", "classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45", null ], - [ "ReleaseBufferPointer", "classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8", null ], [ "ReleaseRaw", "classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416", null ], [ "Reset", "classflatbuffers_1_1_flat_buffer_builder.html#a952495120d5c56d600640091334b5341", null ], [ "Swap", "classflatbuffers_1_1_flat_buffer_builder.html#a59f39e7a4d9b0b32a805c77bffed245a", null ], + [ "SwapBufAllocator", "classflatbuffers_1_1_flat_buffer_builder.html#acbb6de9402ccd756acb912f839f5c112", null ], [ "buf_", "classflatbuffers_1_1_flat_buffer_builder.html#a9a3886be63710d8bb88f2ade4ac8420d", null ], [ "dedup_vtables_", "classflatbuffers_1_1_flat_buffer_builder.html#a6b31b32fb478a9ec68164e1579c7ebe7", null ], [ "finished", "classflatbuffers_1_1_flat_buffer_builder.html#ab2cc618aeb6f6c411c7ab734649e1a81", null ], diff --git a/group__flatbuffers__java__api.js b/group__flatbuffers__java__api.js index d6cccb75..a99cf1b3 100644 --- a/group__flatbuffers__java__api.js +++ b/group__flatbuffers__java__api.js @@ -5,14 +5,16 @@ var group__flatbuffers__java__api = [ "removeSizePrefix", "classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a58d6c39c53a0c981a2f72a5eca7d992c", null ] ] ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html", [ - [ "ByteBufferFactory", "interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html", [ - [ "newByteBuffer", "interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a", null ], - [ "releaseByteBuffer", "interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f", null ] + [ "ByteBufferFactory", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html", [ + [ "newByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f", null ], + [ "releaseByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca", null ] ] ], [ "HeapByteBufferFactory", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html", [ - [ "newByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644", null ] + [ "newByteBuffer", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644", null ], + [ "INSTANCE", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#a2d3f0962d4948ce8c97d710f0fa1962a", null ] ] ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c", null ], + [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf", null ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d", null ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387", null ], [ "FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39", null ], diff --git a/hierarchy.html b/hierarchy.html index 9b9a3741..fb18d202 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -95,26 +95,31 @@ $(document).ready(function(){initNavTree('hierarchy.html','');}); <div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory"> <tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_allocator.html" target="_self">flatbuffers::Allocator</a></td><td class="desc"></td></tr> <tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_default_allocator.html" target="_self">flatbuffers::DefaultAllocator</a></td><td class="desc"></td></tr> -<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html" target="_self">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td><td class="desc">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated </td></tr> +<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html" target="_self">com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory</a></td><td class="desc">An interface that provides a user of the FlatBufferBuilder class the ability to specify the method in which the internal buffer gets allocated </td></tr> <tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html" target="_self">com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory</a></td><td class="desc">An implementation of the ByteBufferFactory interface that is used when one is not provided by the user </td></tr> <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html" target="_self">com.google.flatbuffers.ByteBufferUtil</a></td><td class="desc">Class that collects utility functions around <code>ByteBuffer</code> </td></tr> <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_detached_buffer.html" target="_self">flatbuffers::DetachedBuffer</a></td><td class="desc"></td></tr> <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html" target="_self">flatbuffers::FlatBufferBuilder::FieldLoc</a></td><td class="desc"></td></tr> <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html" target="_self">com.google.flatbuffers.FlatBufferBuilder</a></td><td class="desc">Class that helps you build a FlatBuffer </td></tr> -<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html" target="_self">flatbuffers::FlatBufferBuilder</a></td><td class="desc">Helper class to hold data needed in creation of a FlatBuffer </td></tr> -<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html" target="_self">Google\FlatBuffers\FlatbufferBuilder</a></td><td class="desc"></td></tr> -<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html" target="_self">FlatBuffers.FlatBufferBuilder</a></td><td class="desc">Responsible for building up and accessing a FlatBuffer formatted byte array (via ByteBuffer) </td></tr> +<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html" target="_self">Google\FlatBuffers\FlatbufferBuilder</a></td><td class="desc"></td></tr> +<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html" target="_self">FlatBuffers.FlatBufferBuilder</a></td><td class="desc">Responsible for building up and accessing a FlatBuffer formatted byte array (via ByteBuffer) </td></tr> +<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html" target="_self">flatbuffers::FlatBufferBuilder</a></td><td class="desc">Helper class to hold data needed in creation of a FlatBuffer </td></tr> <tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper.html" target="_self">flatbuffers::IndirectHelper< T ></a></td><td class="desc"></td></tr> <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html" target="_self">flatbuffers::IndirectHelper< const T * ></a></td><td class="desc"></td></tr> <tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html" target="_self">flatbuffers::IndirectHelper< Offset< T > ></a></td><td class="desc"></td></tr> <tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_offset.html" target="_self">flatbuffers::Offset< T ></a></td><td class="desc"></td></tr> -<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html" target="_self">flatbuffers::FlatBufferBuilder::StringOffsetCompare</a></td><td class="desc"></td></tr> -<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector.html" target="_self">flatbuffers::Vector< T ></a></td><td class="desc"></td></tr> -<tr id="row_15_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_15_" class="arrow" onclick="toggleFolder('15_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector.html" target="_self">flatbuffers::Vector< char ></a></td><td class="desc"></td></tr> -<tr id="row_15_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_string.html" target="_self">flatbuffers::String</a></td><td class="desc"></td></tr> -<tr id="row_16_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1vector__downward.html" target="_self">flatbuffers::vector_downward</a></td><td class="desc"></td></tr> -<tr id="row_17_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_vector_iterator.html" target="_self">flatbuffers::VectorIterator< T, IT ></a></td><td class="desc"></td></tr> -<tr id="row_18_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector_of_any.html" target="_self">flatbuffers::VectorOfAny</a></td><td class="desc"></td></tr> +<tr id="row_13_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_13_" class="arrow" onclick="toggleFolder('13_')">▼</span><span class="icona"><span class="icon">C</span></span><b>reverse_iterator</b></td><td class="desc"></td></tr> +<tr id="row_13_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html" target="_self">flatbuffers::VectorReverseIterator< Iterator ></a></td><td class="desc"></td></tr> +<tr id="row_14_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html" target="_self">flatbuffers::FlatBufferBuilder::StringOffsetCompare</a></td><td class="desc"></td></tr> +<tr id="row_15_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_15_" class="arrow" onclick="toggleFolder('15_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8.html" target="_self">com.google.flatbuffers.Utf8</a></td><td class="desc"></td></tr> +<tr id="row_15_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html" target="_self">com.google.flatbuffers.Utf8Old</a></td><td class="desc">This class implements the Utf8 API using the Java Utf8 encoder </td></tr> +<tr id="row_15_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html" target="_self">com.google.flatbuffers.Utf8Safe</a></td><td class="desc">A set of low-level, high-performance static utility methods related to the UTF-8 character encoding </td></tr> +<tr id="row_16_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector.html" target="_self">flatbuffers::Vector< T ></a></td><td class="desc"></td></tr> +<tr id="row_17_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_17_" class="arrow" onclick="toggleFolder('17_')">▼</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector.html" target="_self">flatbuffers::Vector< char ></a></td><td class="desc"></td></tr> +<tr id="row_17_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_string.html" target="_self">flatbuffers::String</a></td><td class="desc"></td></tr> +<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1vector__downward.html" target="_self">flatbuffers::vector_downward</a></td><td class="desc"></td></tr> +<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structflatbuffers_1_1_vector_iterator.html" target="_self">flatbuffers::VectorIterator< T, IT ></a></td><td class="desc"></td></tr> +<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classflatbuffers_1_1_vector_of_any.html" target="_self">flatbuffers::VectorOfAny</a></td><td class="desc"></td></tr> </table> </div><!-- directory --> </div><!-- contents --> diff --git a/hierarchy.js b/hierarchy.js index 191fac4a..501beac3 100644 --- a/hierarchy.js +++ b/hierarchy.js @@ -3,21 +3,28 @@ var hierarchy = [ "flatbuffers::Allocator", "classflatbuffers_1_1_allocator.html", [ [ "flatbuffers::DefaultAllocator", "classflatbuffers_1_1_default_allocator.html", null ] ] ], - [ "com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory", "interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html", [ + [ "com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html", [ [ "com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html", null ] ] ], [ "com.google.flatbuffers.ByteBufferUtil", "classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html", null ], [ "flatbuffers::DetachedBuffer", "classflatbuffers_1_1_detached_buffer.html", null ], [ "flatbuffers::FlatBufferBuilder::FieldLoc", "structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html", null ], [ "com.google.flatbuffers.FlatBufferBuilder", "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html", null ], - [ "flatbuffers::FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html", null ], [ "Google\\FlatBuffers\\FlatbufferBuilder", "class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html", null ], [ "FlatBuffers.FlatBufferBuilder", "class_flat_buffers_1_1_flat_buffer_builder.html", null ], + [ "flatbuffers::FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html", null ], [ "flatbuffers::IndirectHelper< T >", "structflatbuffers_1_1_indirect_helper.html", null ], [ "flatbuffers::IndirectHelper< const T * >", "structflatbuffers_1_1_indirect_helper_3_01const_01_t_01_5_01_4.html", null ], [ "flatbuffers::IndirectHelper< Offset< T > >", "structflatbuffers_1_1_indirect_helper_3_01_offset_3_01_t_01_4_01_4.html", null ], [ "flatbuffers::Offset< T >", "structflatbuffers_1_1_offset.html", null ], + [ "reverse_iterator", null, [ + [ "flatbuffers::VectorReverseIterator< Iterator >", "structflatbuffers_1_1_vector_reverse_iterator.html", null ] + ] ], [ "flatbuffers::FlatBufferBuilder::StringOffsetCompare", "structflatbuffers_1_1_flat_buffer_builder_1_1_string_offset_compare.html", null ], + [ "com.google.flatbuffers.Utf8", "classcom_1_1google_1_1flatbuffers_1_1_utf8.html", [ + [ "com.google.flatbuffers.Utf8Old", "classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html", null ], + [ "com.google.flatbuffers.Utf8Safe", "classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html", null ] + ] ], [ "flatbuffers::Vector< T >", "classflatbuffers_1_1_vector.html", null ], [ "flatbuffers::Vector< char >", "classflatbuffers_1_1_vector.html", [ [ "flatbuffers::String", "structflatbuffers_1_1_string.html", null ] diff --git a/menudata.js b/menudata.js index d69176f1..75b09223 100644 --- a/menudata.js +++ b/menudata.js @@ -15,6 +15,7 @@ var menudata={children:[ {text:"Use in Dart",url:"flatbuffers_guide_use_dart.html"}, {text:"Use in Lua",url:"flatbuffers_guide_use_lua.html"}, {text:"Use in Lobster",url:"flatbuffers_guide_use_lobster.html"}, +{text:"Use in Rust",url:"flatbuffers_guide_use_rust.html"}, {text:"Schema-less version",url:"flexbuffers.html"}, {text:"gRPC",url:"usergroup1.html",children:[ {text:"Use in C++",url:"flatbuffers_grpc_guide_use_cpp.html"}]}]}, diff --git a/navtreedata.js b/navtreedata.js index d7c91601..5986d6aa 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -18,6 +18,7 @@ var NAVTREE = [ "Use in Dart", "flatbuffers_guide_use_dart.html", null ], [ "Use in Lua", "flatbuffers_guide_use_lua.html", null ], [ "Use in Lobster", "flatbuffers_guide_use_lobster.html", null ], + [ "Use in Rust", "flatbuffers_guide_use_rust.html", null ], [ "Schema-less version", "flexbuffers.html", null ], [ "gRPC", "usergroup1.html", [ [ "Use in C++", "flatbuffers_grpc_guide_use_cpp.html", null ] @@ -49,7 +50,7 @@ var NAVTREE = var NAVTREEINDEX = [ ".html", -"classflatbuffers_1_1vector__downward.html#a70c8de02d393caddcedde603a5a45ae7" +"classflatbuffers_1_1_vector.html#aa754e17cb08c36fb8442784c6bc442da" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/navtreeindex0.js b/navtreeindex0.js index 280fc342..a5496570 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -62,49 +62,68 @@ var NAVTREEINDEX0 = "classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a4c87c63fa8d31e039b344bbaef00a3be":[7,0,1,0,0], "classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a58d6c39c53a0c981a2f72a5eca7d992c":[7,0,1,0,1], "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html":[7,0,1,1], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a083507c3c359c28bb008142e8ad41a7d":[7,0,1,1,38], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e1215f334989ecc59b49a3239aed5b5":[7,0,1,1,12], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e3fae083ea9c9bff3b80cde3f4581bb":[7,0,1,1,36], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a108d4c3d931b4f2a63a71aeefa562bba":[7,0,1,1,37], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a189de474e0c39d663cc65fa21a63f071":[7,0,1,1,25], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a1c0ae381bf6adb84b18e613aadf8d4db":[7,0,1,1,11], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a2023123a33f19d670182d5f00ef9aa59":[7,0,1,1,32], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a24114cfb1adb89f1e3d72736b06a8df0":[7,0,1,1,33], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a24ea4649f508a7843e429737a4a9fad1":[7,0,1,1,20], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39":[7,0,1,1,5], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a36bc3231cc9f86e6fd2750dcec8b7336":[7,0,1,1,35], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a37b5debda58afd1fcb71ec82efe663b9":[7,0,1,1,16], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3a5dd461dc86a2132eaa4f0348b4c001":[7,0,1,1,15], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a4a2e8c6430c6538509147225b8a4697e":[7,0,1,1,31], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a53e6356cfef3d6be298efb9a0d67be06":[7,0,1,1,7], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a55c20e99ba68be516dfbddfddb9efd4d":[7,0,1,1,10], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a5a98de8b6e8fc5df984c435ba3181690":[7,0,1,1,39], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99":[7,0,1,1,6], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a67a9f5dcd251735d6b96e1ad46de9d94":[7,0,1,1,14], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078":[7,0,1,1,40], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a86b42641d0c600afa11f8c8493f5e6a3":[7,0,1,1,34], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577":[7,0,1,1,18], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54":[7,0,1,1,26], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672":[7,0,1,1,41], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69":[7,0,1,1,28], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35":[7,0,1,1,27], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab8fc86fe501b182b4a1a50fcdbcb3e6b":[7,0,1,1,42], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abd3b2f9b239a702ffaa8a1e97894f09e":[7,0,1,1,17], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abf0fd34f0d93a9d89f595fddf752feb7":[7,0,1,1,21], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac36c1fc72851b17129fc763da00cff32":[7,0,1,1,9], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387":[7,0,1,1,4], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#acc889115f91460ca89ce981cb02c2039":[7,0,1,1,19], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#adf671e70a4d30c85f37393c47a7a7dd1":[7,0,1,1,29], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae019d7ee089c95a37421365d5fb9533b":[7,0,1,1,8], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae3a3fbf645e64ce784a524f935a6e6f2":[7,0,1,1,30], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae817751382089b603753452cc1e56790":[7,0,1,1,13], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a083507c3c359c28bb008142e8ad41a7d":[7,0,1,1,39], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e1215f334989ecc59b49a3239aed5b5":[7,0,1,1,13], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e3fae083ea9c9bff3b80cde3f4581bb":[7,0,1,1,37], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a108d4c3d931b4f2a63a71aeefa562bba":[7,0,1,1,38], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a189de474e0c39d663cc65fa21a63f071":[7,0,1,1,26], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a1c0ae381bf6adb84b18e613aadf8d4db":[7,0,1,1,12], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a2023123a33f19d670182d5f00ef9aa59":[7,0,1,1,33], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a24114cfb1adb89f1e3d72736b06a8df0":[7,0,1,1,34], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a24ea4649f508a7843e429737a4a9fad1":[7,0,1,1,21], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39":[7,0,1,1,6], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a36bc3231cc9f86e6fd2750dcec8b7336":[7,0,1,1,36], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a37b5debda58afd1fcb71ec82efe663b9":[7,0,1,1,17], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3a5dd461dc86a2132eaa4f0348b4c001":[7,0,1,1,16], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a4a2e8c6430c6538509147225b8a4697e":[7,0,1,1,32], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a53e6356cfef3d6be298efb9a0d67be06":[7,0,1,1,8], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a55c20e99ba68be516dfbddfddb9efd4d":[7,0,1,1,11], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a5a98de8b6e8fc5df984c435ba3181690":[7,0,1,1,40], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99":[7,0,1,1,7], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a67a9f5dcd251735d6b96e1ad46de9d94":[7,0,1,1,15], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078":[7,0,1,1,41], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a86b42641d0c600afa11f8c8493f5e6a3":[7,0,1,1,35], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577":[7,0,1,1,19], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf":[7,0,1,1,3], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54":[7,0,1,1,27], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672":[7,0,1,1,42], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69":[7,0,1,1,29], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35":[7,0,1,1,28], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab8fc86fe501b182b4a1a50fcdbcb3e6b":[7,0,1,1,43], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abd3b2f9b239a702ffaa8a1e97894f09e":[7,0,1,1,18], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abf0fd34f0d93a9d89f595fddf752feb7":[7,0,1,1,22], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac36c1fc72851b17129fc763da00cff32":[7,0,1,1,10], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387":[7,0,1,1,5], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#acc889115f91460ca89ce981cb02c2039":[7,0,1,1,20], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#adf671e70a4d30c85f37393c47a7a7dd1":[7,0,1,1,30], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae019d7ee089c95a37421365d5fb9533b":[7,0,1,1,9], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae3a3fbf645e64ce784a524f935a6e6f2":[7,0,1,1,31], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae817751382089b603753452cc1e56790":[7,0,1,1,14], "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c":[7,0,1,1,2], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14":[7,0,1,1,23], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2":[7,0,1,1,22], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d":[7,0,1,1,3], -"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#afc31aba1a9523fde4be3558f8f19f49b":[7,0,1,1,24], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14":[7,0,1,1,24], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2":[7,0,1,1,23], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d":[7,0,1,1,4], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#afc31aba1a9523fde4be3558f8f19f49b":[7,0,1,1,25], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html":[7,0,1,1,0], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca":[7,0,1,1,0,1], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f":[7,0,1,1,0,0], "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html":[7,0,1,1,1], +"classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#a2d3f0962d4948ce8c97d710f0fa1962a":[7,0,1,1,1,1], "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644":[7,0,1,1,1,0], +"classcom_1_1google_1_1flatbuffers_1_1_utf8.html":[7,1,0,0,0,0,2], +"classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8":[7,1,0,0,0,0,2,0], +"classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858":[7,1,0,0,0,0,2,3], +"classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17":[7,1,0,0,0,0,2,4], +"classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb":[7,1,0,0,0,0,2,2], +"classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab":[7,1,0,0,0,0,2,1], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html":[7,1,0,0,0,0,3], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#a0624ce5b0badb691abffcde6f89418a6":[7,1,0,0,0,0,3,0], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#af5a4971f1696a7efb4b2f56bbcdaf553":[7,1,0,0,0,0,3,2], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html#af955284b2754ee1f27832845fa8f29f1":[7,1,0,0,0,0,3,1], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html":[7,1,0,0,0,0,4], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1":[7,1,0,0,0,0,4,0], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43":[7,1,0,0,0,0,4,2], +"classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#af89e3718e33e96bf9875faf42d158239":[7,1,0,0,0,0,4,1], "classes.html":[7,1,1], "classflatbuffers_1_1_allocator.html":[7,1,0,1,0], "classflatbuffers_1_1_allocator.html#a1344ebeb1c1ab40a6d5b78b4e20ed187":[7,1,0,1,0,4], @@ -113,7 +132,8 @@ var NAVTREEINDEX0 = "classflatbuffers_1_1_allocator.html#afa22a0382f1886795440785d7e3bb478":[7,1,0,1,0,3], "classflatbuffers_1_1_allocator.html#afbce153366f4087f2876384ecc9d0674":[7,1,0,1,0,1], "classflatbuffers_1_1_default_allocator.html":[7,1,0,1,1], -"classflatbuffers_1_1_default_allocator.html#acfc866696fe9db8e74d9529d8fc70aac":[7,1,0,1,1,1], +"classflatbuffers_1_1_default_allocator.html#a7549b946d7bd892dcb773db38a44907c":[7,1,0,1,1,1], +"classflatbuffers_1_1_default_allocator.html#acfc866696fe9db8e74d9529d8fc70aac":[7,1,0,1,1,2], "classflatbuffers_1_1_default_allocator.html#af14dc83724cf6373c7f757c3e2518e6e":[7,1,0,1,1,0], "classflatbuffers_1_1_detached_buffer.html":[7,1,0,1,2], "classflatbuffers_1_1_detached_buffer.html#a030d603f1f72c17b515a1e8621a5482c":[7,1,0,1,2,9], @@ -137,117 +157,97 @@ var NAVTREEINDEX0 = "classflatbuffers_1_1_detached_buffer.html#aef5440a10f42f2c067f2857dc74fc15b":[7,1,0,1,2,7], "classflatbuffers_1_1_flat_buffer_builder.html":[7,0,4,0], "classflatbuffers_1_1_flat_buffer_builder.html#a01dabf5cdd6b1b2881337e1e84aa1683":[7,0,4,0,5], -"classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41":[7,0,4,0,49], -"classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912":[7,0,4,0,43], -"classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8":[7,0,4,0,54], +"classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41":[7,0,4,0,51], +"classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912":[7,0,4,0,44], "classflatbuffers_1_1_flat_buffer_builder.html#a1080c9e370e2d9d9d872dadd1131436b":[7,0,4,0,27], "classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9":[7,0,4,0,10], "classflatbuffers_1_1_flat_buffer_builder.html#a110c2a3298aebef1a9dfa3c44ee84f42":[7,0,4,0,41], "classflatbuffers_1_1_flat_buffer_builder.html#a11c291ccd2159604c149600ee6180b95":[7,0,4,0,30], -"classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a":[7,0,4,0,46], +"classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a":[7,0,4,0,48], "classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6":[7,0,4,0,35], "classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50":[7,0,4,0,21], "classflatbuffers_1_1_flat_buffer_builder.html#a23aa4c910e053446cc404bc486012e54":[7,0,4,0,31], "classflatbuffers_1_1_flat_buffer_builder.html#a274b1afcfa16bab2c884129b2788db19":[7,0,4,0,26], "classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3":[7,0,4,0,23], -"classflatbuffers_1_1_flat_buffer_builder.html#a2e4de5642bad6dcd01eb7e7eaf719c89":[7,0,4,0,44], -"classflatbuffers_1_1_flat_buffer_builder.html#a376bb6858e8b1baab9a437f3f9f0b334":[7,0,4,0,52], +"classflatbuffers_1_1_flat_buffer_builder.html#a2e4de5642bad6dcd01eb7e7eaf719c89":[7,0,4,0,45], +"classflatbuffers_1_1_flat_buffer_builder.html#a376bb6858e8b1baab9a437f3f9f0b334":[7,0,4,0,54], "classflatbuffers_1_1_flat_buffer_builder.html#a3d57074082aaab8cdeb8474ff9df0b53":[7,0,4,0,29], "classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7":[7,0,4,0,9], "classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8":[7,0,4,0,19], "classflatbuffers_1_1_flat_buffer_builder.html#a44960c5aca0227f960c96a7ed4b881b4":[7,0,4,0,24], "classflatbuffers_1_1_flat_buffer_builder.html#a53504fc2cab681a7980b03260f8b2f7a":[7,0,4,0,28], "classflatbuffers_1_1_flat_buffer_builder.html#a592110519a6c8db1926f1365bf2a58e6":[7,0,4,0,37], -"classflatbuffers_1_1_flat_buffer_builder.html#a59f39e7a4d9b0b32a805c77bffed245a":[7,0,4,0,57], -"classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45":[7,0,4,0,53], -"classflatbuffers_1_1_flat_buffer_builder.html#a5e604e3caf95fd0f0e74545af5a8420a":[7,0,4,0,63], -"classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f":[7,0,4,0,50], -"classflatbuffers_1_1_flat_buffer_builder.html#a6b31b32fb478a9ec68164e1579c7ebe7":[7,0,4,0,59], +"classflatbuffers_1_1_flat_buffer_builder.html#a59f39e7a4d9b0b32a805c77bffed245a":[7,0,4,0,58], +"classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45":[7,0,4,0,55], +"classflatbuffers_1_1_flat_buffer_builder.html#a5e604e3caf95fd0f0e74545af5a8420a":[7,0,4,0,65], +"classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42":[7,0,4,0,47], +"classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f":[7,0,4,0,52], +"classflatbuffers_1_1_flat_buffer_builder.html#a6b31b32fb478a9ec68164e1579c7ebe7":[7,0,4,0,61], "classflatbuffers_1_1_flat_buffer_builder.html#a6e90ada59d9553636f72ce8e4a892f72":[7,0,4,0,39], "classflatbuffers_1_1_flat_buffer_builder.html#a799701af34c398d8eb86e049b73bcecf":[7,0,4,0,32], -"classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220":[7,0,4,0,45], +"classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220":[7,0,4,0,46], "classflatbuffers_1_1_flat_buffer_builder.html#a7cc10b709dfa3e72083843d1a5e36c15":[7,0,4,0,33], "classflatbuffers_1_1_flat_buffer_builder.html#a7f9032692fea71e6b61e3f3de499f130":[7,0,4,0,22], "classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3":[7,0,4,0,11], -"classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56":[7,0,4,0,4], -"classflatbuffers_1_1_flat_buffer_builder.html#a89c2d7c686a2df8014cb453ec70fdccd":[7,0,4,0,61], +"classflatbuffers_1_1_flat_buffer_builder.html#a89c2d7c686a2df8014cb453ec70fdccd":[7,0,4,0,63], "classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f":[7,0,4,0,15], +"classflatbuffers_1_1_flat_buffer_builder.html#a8f4ce606347c10854ab05cf0ef7e8b2c":[7,0,4,0,42], "classflatbuffers_1_1_flat_buffer_builder.html#a9190cb2d5a4324ab0c52263b834fff09":[7,0,4,0,2], -"classflatbuffers_1_1_flat_buffer_builder.html#a952495120d5c56d600640091334b5341":[7,0,4,0,56], -"classflatbuffers_1_1_flat_buffer_builder.html#a9a3886be63710d8bb88f2ade4ac8420d":[7,0,4,0,58], +"classflatbuffers_1_1_flat_buffer_builder.html#a952495120d5c56d600640091334b5341":[7,0,4,0,57], +"classflatbuffers_1_1_flat_buffer_builder.html#a9a3886be63710d8bb88f2ade4ac8420d":[7,0,4,0,60], "classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6":[7,0,4,0,16], "classflatbuffers_1_1_flat_buffer_builder.html#a9cc09fa59ff9732e972877cfe911c8a5":[7,0,4,0,40], -"classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416":[7,0,4,0,55], -"classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b":[7,0,4,0,47], -"classflatbuffers_1_1_flat_buffer_builder.html#aa7e64b654cef62869c3dfd27def92e5d":[7,0,4,0,67], -"classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961":[7,0,4,0,42], +"classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416":[7,0,4,0,56], +"classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b":[7,0,4,0,49], +"classflatbuffers_1_1_flat_buffer_builder.html#aa7e64b654cef62869c3dfd27def92e5d":[7,0,4,0,69], +"classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961":[7,0,4,0,43], "classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5":[7,0,4,0,13], "classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c":[7,0,4,0,3], "classflatbuffers_1_1_flat_buffer_builder.html#ab1f44cc1b130e13b41e9a80de76e25cf":[7,0,4,0,34], -"classflatbuffers_1_1_flat_buffer_builder.html#ab2cc618aeb6f6c411c7ab734649e1a81":[7,0,4,0,60], +"classflatbuffers_1_1_flat_buffer_builder.html#ab2cc618aeb6f6c411c7ab734649e1a81":[7,0,4,0,62], "classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1":[7,0,4,0,8], "classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685":[7,0,4,0,18], -"classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83":[7,0,4,0,48], -"classflatbuffers_1_1_flat_buffer_builder.html#ab9942e76ff29eefc702b006b19ce02ba":[7,0,4,0,64], +"classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83":[7,0,4,0,50], +"classflatbuffers_1_1_flat_buffer_builder.html#ab9942e76ff29eefc702b006b19ce02ba":[7,0,4,0,66], "classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506":[7,0,4,0,17], "classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c":[7,0,4,0,20], "classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154":[7,0,4,0,14], "classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135":[7,0,4,0,36], +"classflatbuffers_1_1_flat_buffer_builder.html#acbb6de9402ccd756acb912f839f5c112":[7,0,4,0,59], "classflatbuffers_1_1_flat_buffer_builder.html#ace4606286a25d3fedfb1532934d4cea1":[7,0,4,0,6], -"classflatbuffers_1_1_flat_buffer_builder.html#adb473c5fd1305213b91eecaa779ecafa":[7,0,4,0,66], -"classflatbuffers_1_1_flat_buffer_builder.html#add6d502accf426e35f91f2539baff6b2":[7,0,4,0,65], -"classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38":[7,0,4,0,51], +"classflatbuffers_1_1_flat_buffer_builder.html#adb473c5fd1305213b91eecaa779ecafa":[7,0,4,0,68], +"classflatbuffers_1_1_flat_buffer_builder.html#add6d502accf426e35f91f2539baff6b2":[7,0,4,0,67], +"classflatbuffers_1_1_flat_buffer_builder.html#ae65f0619ecb7715ffdae399ebfc56e38":[7,0,4,0,53], +"classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091":[7,0,4,0,4], "classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412":[7,0,4,0,7], "classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe":[7,0,4,0,12], "classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207":[7,0,4,0,25], -"classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19":[7,0,4,0,62], +"classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19":[7,0,4,0,64], "classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7":[7,0,4,0,38], "classflatbuffers_1_1_vector.html":[7,1,0,1,9], -"classflatbuffers_1_1_vector.html#a0ab8113b331fb069dbaa0a108f6077e1":[7,1,0,1,9,8], -"classflatbuffers_1_1_vector.html#a0c322798bd0cebd2d20b0b0f92de2f9b":[7,1,0,1,9,13], -"classflatbuffers_1_1_vector.html#a0eeca1798d12e29e1003e6f831668986":[7,1,0,1,9,1], -"classflatbuffers_1_1_vector.html#a161e5fb2aa923fbf2ce210ceea785942":[7,1,0,1,9,15], -"classflatbuffers_1_1_vector.html#a1dc52eb3974e0484a5421752589d436b":[7,1,0,1,9,18], -"classflatbuffers_1_1_vector.html#a22b4449883dc8e24e87cde27839294c4":[7,1,0,1,9,16], -"classflatbuffers_1_1_vector.html#a28dab085738663f5c866cf6570bb6289":[7,1,0,1,9,3], -"classflatbuffers_1_1_vector.html#a29803cd584a620bf076a69b6e97ecf5c":[7,1,0,1,9,22], -"classflatbuffers_1_1_vector.html#a36bbc83839910913cb0dd0699b1cccf7":[7,1,0,1,9,14], -"classflatbuffers_1_1_vector.html#a53e9c0cb1d27e4bd355034dbd43f0127":[7,1,0,1,9,11], -"classflatbuffers_1_1_vector.html#a602e093850b2984a95581edc0b47b2f3":[7,1,0,1,9,24], -"classflatbuffers_1_1_vector.html#a62170e531ab5fcef8b4c717c0e84553d":[7,1,0,1,9,25], +"classflatbuffers_1_1_vector.html#a0ab8113b331fb069dbaa0a108f6077e1":[7,1,0,1,9,14], +"classflatbuffers_1_1_vector.html#a0c322798bd0cebd2d20b0b0f92de2f9b":[7,1,0,1,9,20], +"classflatbuffers_1_1_vector.html#a0eeca1798d12e29e1003e6f831668986":[7,1,0,1,9,2], +"classflatbuffers_1_1_vector.html#a0f25c70b8f279c53a93141a91dff5d1e":[7,1,0,1,9,12], +"classflatbuffers_1_1_vector.html#a161e5fb2aa923fbf2ce210ceea785942":[7,1,0,1,9,22], +"classflatbuffers_1_1_vector.html#a1761e25f7960e8b71a9a393b5d538d57":[7,1,0,1,9,19], +"classflatbuffers_1_1_vector.html#a1dc52eb3974e0484a5421752589d436b":[7,1,0,1,9,25], +"classflatbuffers_1_1_vector.html#a1e75de0fd258865cf18c504fc8ed1a86":[7,1,0,1,9,31], +"classflatbuffers_1_1_vector.html#a22b4449883dc8e24e87cde27839294c4":[7,1,0,1,9,23], +"classflatbuffers_1_1_vector.html#a28dab085738663f5c866cf6570bb6289":[7,1,0,1,9,4], +"classflatbuffers_1_1_vector.html#a29803cd584a620bf076a69b6e97ecf5c":[7,1,0,1,9,28], +"classflatbuffers_1_1_vector.html#a36bbc83839910913cb0dd0699b1cccf7":[7,1,0,1,9,21], +"classflatbuffers_1_1_vector.html#a422c0671cb2c884865cb09f09141fc1f":[7,1,0,1,9,11], +"classflatbuffers_1_1_vector.html#a53e9c0cb1d27e4bd355034dbd43f0127":[7,1,0,1,9,17], +"classflatbuffers_1_1_vector.html#a5d61bd0fd7d9017b1d62c45416666669":[7,1,0,1,9,33], +"classflatbuffers_1_1_vector.html#a602e093850b2984a95581edc0b47b2f3":[7,1,0,1,9,34], +"classflatbuffers_1_1_vector.html#a62170e531ab5fcef8b4c717c0e84553d":[7,1,0,1,9,35], "classflatbuffers_1_1_vector.html#a66212ee5146550ed418a358a8b756dc6":[7,1,0,1,9,0], -"classflatbuffers_1_1_vector.html#a7703f4b1cbb1f99087b48cd58abb740e":[7,1,0,1,9,2], -"classflatbuffers_1_1_vector.html#a7ad86e7c749fd750a4e506439a358b06":[7,1,0,1,9,19], -"classflatbuffers_1_1_vector.html#a8342962f2f9d5e872c90abdeaea8d24e":[7,1,0,1,9,21], -"classflatbuffers_1_1_vector.html#a874b185e7dec18bb24b1f0ee42afb7cb":[7,1,0,1,9,10], -"classflatbuffers_1_1_vector.html#a9fcfb2e218f49d6d66a8b4a22aa58755":[7,1,0,1,9,12], -"classflatbuffers_1_1_vector.html#aa754e17cb08c36fb8442784c6bc442da":[7,1,0,1,9,7], -"classflatbuffers_1_1_vector.html#ab51b30f24f9841203b4364af38d424b8":[7,1,0,1,9,4], -"classflatbuffers_1_1_vector.html#abf919e27aa3e9b60ac30386972c94e65":[7,1,0,1,9,20], -"classflatbuffers_1_1_vector.html#ac1ab40cdffad6cd50c222fe42c51437b":[7,1,0,1,9,5], -"classflatbuffers_1_1_vector.html#ac3ac8d3a0c31f1c822d8f2d37e8099cc":[7,1,0,1,9,23], -"classflatbuffers_1_1_vector.html#ac4633f563a5a52980ff0b56fa683a4de":[7,1,0,1,9,6], -"classflatbuffers_1_1_vector.html#ad806c60362e99576ec5706aef30c2a67":[7,1,0,1,9,17], -"classflatbuffers_1_1_vector.html#ae8e4163ff0781720c5ddb3a6f625d435":[7,1,0,1,9,9], -"classflatbuffers_1_1_vector_of_any.html":[7,1,0,1,12], -"classflatbuffers_1_1_vector_of_any.html#a12e968418ca9e4e1d9136ee592ac87e0":[7,1,0,1,12,3], -"classflatbuffers_1_1_vector_of_any.html#a4ddb1c5d56cf35be5705a63c97b780ed":[7,1,0,1,12,2], -"classflatbuffers_1_1_vector_of_any.html#a6dd4c5eb58d26510c1e75b104428e078":[7,1,0,1,12,1], -"classflatbuffers_1_1_vector_of_any.html#a6fb11905e2ac4ad77193151bbe47030a":[7,1,0,1,12,0], -"classflatbuffers_1_1_vector_of_any.html#ab299b866b29e7010b4b0572daa38c95f":[7,1,0,1,12,4], -"classflatbuffers_1_1vector__downward.html":[7,1,0,1,10], -"classflatbuffers_1_1vector__downward.html#a0591728ad3c54a3a1cc3479765f1f271":[7,1,0,1,10,29], -"classflatbuffers_1_1vector__downward.html#a05dca3cd52b334b0643e2ae9e88b8b87":[7,1,0,1,10,7], -"classflatbuffers_1_1vector__downward.html#a0f613cf5b0523cc6bf5224e5f1c7411e":[7,1,0,1,10,28], -"classflatbuffers_1_1vector__downward.html#a23cd3d0692fe86eacc6324ea4b58a599":[7,1,0,1,10,16], -"classflatbuffers_1_1vector__downward.html#a23d309dc71c82cc13d1edefff0e7dd8f":[7,1,0,1,10,18], -"classflatbuffers_1_1vector__downward.html#a297ab537a68b0a02b4577cfc4b5269a9":[7,1,0,1,10,22], -"classflatbuffers_1_1vector__downward.html#a37856c0e5288338080818681b8aedb5d":[7,1,0,1,10,26], -"classflatbuffers_1_1vector__downward.html#a44f77c18fb0aed4b9c22020ea69ff8c9":[7,1,0,1,10,25], -"classflatbuffers_1_1vector__downward.html#a45866c629916716dd618c55a662b7d99":[7,1,0,1,10,13], -"classflatbuffers_1_1vector__downward.html#a45e25d90a4bd4e1f11ff0abb49015538":[7,1,0,1,10,1], -"classflatbuffers_1_1vector__downward.html#a46e8f7f5035f87fe202419d6c5446eb3":[7,1,0,1,10,10], -"classflatbuffers_1_1vector__downward.html#a4a0686bb0afe2feefec0502f527a11bf":[7,1,0,1,10,14], -"classflatbuffers_1_1vector__downward.html#a4a5203e2960492f54ac4428d4caee0fc":[7,1,0,1,10,21], -"classflatbuffers_1_1vector__downward.html#a692f950a105db47f983ff80d4e5c3772":[7,1,0,1,10,11] +"classflatbuffers_1_1_vector.html#a7703f4b1cbb1f99087b48cd58abb740e":[7,1,0,1,9,3], +"classflatbuffers_1_1_vector.html#a8342962f2f9d5e872c90abdeaea8d24e":[7,1,0,1,9,27], +"classflatbuffers_1_1_vector.html#a874b185e7dec18bb24b1f0ee42afb7cb":[7,1,0,1,9,16], +"classflatbuffers_1_1_vector.html#a87adb1d483cc7b57aa1a792271ecef6d":[7,1,0,1,9,30], +"classflatbuffers_1_1_vector.html#a921bd6ee4b999b1c9ec9abc339c377b2":[7,1,0,1,9,32], +"classflatbuffers_1_1_vector.html#a9fcfb2e218f49d6d66a8b4a22aa58755":[7,1,0,1,9,18], +"classflatbuffers_1_1_vector.html#aa690e1a3a5fb68942b508952801b6209":[7,1,0,1,9,9] }; diff --git a/navtreeindex1.js b/navtreeindex1.js index e387073e..bddb770e 100644 --- a/navtreeindex1.js +++ b/navtreeindex1.js @@ -1,5 +1,37 @@ var NAVTREEINDEX1 = { +"classflatbuffers_1_1_vector.html#aa754e17cb08c36fb8442784c6bc442da":[7,1,0,1,9,13], +"classflatbuffers_1_1_vector.html#ab51b30f24f9841203b4364af38d424b8":[7,1,0,1,9,6], +"classflatbuffers_1_1_vector.html#abf919e27aa3e9b60ac30386972c94e65":[7,1,0,1,9,26], +"classflatbuffers_1_1_vector.html#ac1ab40cdffad6cd50c222fe42c51437b":[7,1,0,1,9,7], +"classflatbuffers_1_1_vector.html#ac3ac8d3a0c31f1c822d8f2d37e8099cc":[7,1,0,1,9,29], +"classflatbuffers_1_1_vector.html#ac4633f563a5a52980ff0b56fa683a4de":[7,1,0,1,9,8], +"classflatbuffers_1_1_vector.html#ad806c60362e99576ec5706aef30c2a67":[7,1,0,1,9,24], +"classflatbuffers_1_1_vector.html#ae8e4163ff0781720c5ddb3a6f625d435":[7,1,0,1,9,15], +"classflatbuffers_1_1_vector.html#aebe9837cb57e88212975ec5187f37c55":[7,1,0,1,9,5], +"classflatbuffers_1_1_vector.html#af85a734b2feb15c6279784b5b81f009b":[7,1,0,1,9,10], +"classflatbuffers_1_1_vector.html#aff94a022cb6a11c6704e6a624f2c285a":[7,1,0,1,9,1], +"classflatbuffers_1_1_vector_of_any.html":[7,1,0,1,12], +"classflatbuffers_1_1_vector_of_any.html#a12e968418ca9e4e1d9136ee592ac87e0":[7,1,0,1,12,3], +"classflatbuffers_1_1_vector_of_any.html#a4ddb1c5d56cf35be5705a63c97b780ed":[7,1,0,1,12,2], +"classflatbuffers_1_1_vector_of_any.html#a6dd4c5eb58d26510c1e75b104428e078":[7,1,0,1,12,1], +"classflatbuffers_1_1_vector_of_any.html#a6fb11905e2ac4ad77193151bbe47030a":[7,1,0,1,12,0], +"classflatbuffers_1_1_vector_of_any.html#ab299b866b29e7010b4b0572daa38c95f":[7,1,0,1,12,4], +"classflatbuffers_1_1vector__downward.html":[7,1,0,1,10], +"classflatbuffers_1_1vector__downward.html#a0591728ad3c54a3a1cc3479765f1f271":[7,1,0,1,10,29], +"classflatbuffers_1_1vector__downward.html#a05dca3cd52b334b0643e2ae9e88b8b87":[7,1,0,1,10,7], +"classflatbuffers_1_1vector__downward.html#a0f613cf5b0523cc6bf5224e5f1c7411e":[7,1,0,1,10,28], +"classflatbuffers_1_1vector__downward.html#a23cd3d0692fe86eacc6324ea4b58a599":[7,1,0,1,10,16], +"classflatbuffers_1_1vector__downward.html#a23d309dc71c82cc13d1edefff0e7dd8f":[7,1,0,1,10,18], +"classflatbuffers_1_1vector__downward.html#a297ab537a68b0a02b4577cfc4b5269a9":[7,1,0,1,10,22], +"classflatbuffers_1_1vector__downward.html#a37856c0e5288338080818681b8aedb5d":[7,1,0,1,10,26], +"classflatbuffers_1_1vector__downward.html#a44f77c18fb0aed4b9c22020ea69ff8c9":[7,1,0,1,10,25], +"classflatbuffers_1_1vector__downward.html#a45866c629916716dd618c55a662b7d99":[7,1,0,1,10,13], +"classflatbuffers_1_1vector__downward.html#a46e8f7f5035f87fe202419d6c5446eb3":[7,1,0,1,10,10], +"classflatbuffers_1_1vector__downward.html#a4a0686bb0afe2feefec0502f527a11bf":[7,1,0,1,10,14], +"classflatbuffers_1_1vector__downward.html#a4a5203e2960492f54ac4428d4caee0fc":[7,1,0,1,10,21], +"classflatbuffers_1_1vector__downward.html#a5f8dff5b7288b40bdd193667f6246cad":[7,1,0,1,10,1], +"classflatbuffers_1_1vector__downward.html#a692f950a105db47f983ff80d4e5c3772":[7,1,0,1,10,11], "classflatbuffers_1_1vector__downward.html#a70c8de02d393caddcedde603a5a45ae7":[7,1,0,1,10,27], "classflatbuffers_1_1vector__downward.html#a784ae8d43071ce644df0c0e8d59772d3":[7,1,0,1,10,23], "classflatbuffers_1_1vector__downward.html#a7b5de3bbe8388a4130b843a5e94f65bb":[7,1,0,1,10,6], @@ -19,7 +51,7 @@ var NAVTREEINDEX1 = "contributing.html":[8], "flatbuffers_benchmarks.html":[3], "flatbuffers_grammar.html":[6], -"flatbuffers_grpc_guide_use_cpp.html":[1,16,0], +"flatbuffers_grpc_guide_use_cpp.html":[1,17,0], "flatbuffers_guide_building.html":[1,0], "flatbuffers_guide_tutorial.html":[1,1], "flatbuffers_guide_use_c.html":[1,5], @@ -32,13 +64,14 @@ var NAVTREEINDEX1 = "flatbuffers_guide_use_lua.html":[1,13], "flatbuffers_guide_use_php.html":[1,10], "flatbuffers_guide_use_python.html":[1,11], +"flatbuffers_guide_use_rust.html":[1,15], "flatbuffers_guide_use_typescript.html":[1,9], "flatbuffers_guide_using_schema_compiler.html":[1,2], "flatbuffers_guide_writing_schema.html":[1,3], "flatbuffers_internals.html":[5], "flatbuffers_support.html":[2], "flatbuffers_white_paper.html":[4], -"flexbuffers.html":[1,15], +"flexbuffers.html":[1,16], "functions.html":[7,1,3,0], "functions_func.html":[7,1,3,1], "functions_prop.html":[7,1,3,3], @@ -51,9 +84,6 @@ var NAVTREEINDEX1 = "hierarchy.html":[7,1,2], "index.html":[], "index.html#flatbuffers_overview":[0], -"interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html":[7,0,1,1,0], -"interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a":[7,0,1,1,0,0], -"interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f":[7,0,1,1,0,1], "modules.html":[7,0], "namespace_flat_buffers.html":[7,1,0,2], "pages.html":[], @@ -92,29 +122,34 @@ var NAVTREEINDEX1 = "structflatbuffers_1_1_string.html#afe0bd2ac1acd5616eda6d949e3c15e66":[7,1,0,1,8,3], "structflatbuffers_1_1_vector_iterator.html":[7,1,0,1,11], "structflatbuffers_1_1_vector_iterator.html#a02c756cdd5ec038a978066c5761dd429":[7,1,0,1,11,0], -"structflatbuffers_1_1_vector_iterator.html#a0b6a5544a9c48f2409690de7bfff6a63":[7,1,0,1,11,7], -"structflatbuffers_1_1_vector_iterator.html#a105a4e408b45c324f2ad445f5145bf51":[7,1,0,1,11,16], -"structflatbuffers_1_1_vector_iterator.html#a19fde04fa43b5967564883517ed10a82":[7,1,0,1,11,8], -"structflatbuffers_1_1_vector_iterator.html#a368b4ee9b89ab783045f96a2f69dec67":[7,1,0,1,11,12], -"structflatbuffers_1_1_vector_iterator.html#a3f537a771b03e39218f7c77df9a243c8":[7,1,0,1,11,19], +"structflatbuffers_1_1_vector_iterator.html#a0b6a5544a9c48f2409690de7bfff6a63":[7,1,0,1,11,8], +"structflatbuffers_1_1_vector_iterator.html#a105a4e408b45c324f2ad445f5145bf51":[7,1,0,1,11,17], +"structflatbuffers_1_1_vector_iterator.html#a19fde04fa43b5967564883517ed10a82":[7,1,0,1,11,9], +"structflatbuffers_1_1_vector_iterator.html#a223f3bc61bdcff57f900ea8be7a66ca3":[7,1,0,1,11,7], +"structflatbuffers_1_1_vector_iterator.html#a368b4ee9b89ab783045f96a2f69dec67":[7,1,0,1,11,13], +"structflatbuffers_1_1_vector_iterator.html#a3f537a771b03e39218f7c77df9a243c8":[7,1,0,1,11,20], "structflatbuffers_1_1_vector_iterator.html#a415a449a3d8a04271260ecb380c3fa49":[7,1,0,1,11,5], -"structflatbuffers_1_1_vector_iterator.html#a428a3df67f852563e25a040e41f3aef9":[7,1,0,1,11,11], -"structflatbuffers_1_1_vector_iterator.html#a4b0747db5a2080cf4bd8bdbdeb1ceda2":[7,1,0,1,11,20], -"structflatbuffers_1_1_vector_iterator.html#a5d2754d1859696e7a6d43e74d4f9ae29":[7,1,0,1,11,14], -"structflatbuffers_1_1_vector_iterator.html#a5fae31cf992a81412140a17dde196890":[7,1,0,1,11,10], +"structflatbuffers_1_1_vector_iterator.html#a428a3df67f852563e25a040e41f3aef9":[7,1,0,1,11,12], +"structflatbuffers_1_1_vector_iterator.html#a4b0747db5a2080cf4bd8bdbdeb1ceda2":[7,1,0,1,11,21], +"structflatbuffers_1_1_vector_iterator.html#a5fae31cf992a81412140a17dde196890":[7,1,0,1,11,11], "structflatbuffers_1_1_vector_iterator.html#a74d61458dfc1c25d94f80cae8cebaa2a":[7,1,0,1,11,2], -"structflatbuffers_1_1_vector_iterator.html#a78eb60f8754af75c1b2b5e0d8710ae6c":[7,1,0,1,11,18], +"structflatbuffers_1_1_vector_iterator.html#a78eb60f8754af75c1b2b5e0d8710ae6c":[7,1,0,1,11,19], "structflatbuffers_1_1_vector_iterator.html#a7e10ae7b14f5f79bf0da6bbed7c17b5d":[7,1,0,1,11,6], -"structflatbuffers_1_1_vector_iterator.html#a85a3748c7f97adba199d7421d9962941":[7,1,0,1,11,13], -"structflatbuffers_1_1_vector_iterator.html#aaf71b80a66b9d7f5220e1cd4d2b27b3c":[7,1,0,1,11,21], +"structflatbuffers_1_1_vector_iterator.html#a85a3748c7f97adba199d7421d9962941":[7,1,0,1,11,14], +"structflatbuffers_1_1_vector_iterator.html#aa286857279ca9662fed989c0c3efe0d3":[7,1,0,1,11,15], +"structflatbuffers_1_1_vector_iterator.html#aaf71b80a66b9d7f5220e1cd4d2b27b3c":[7,1,0,1,11,22], "structflatbuffers_1_1_vector_iterator.html#aaf980961b89f2b647a07135246b75088":[7,1,0,1,11,4], -"structflatbuffers_1_1_vector_iterator.html#ab8f96b2057c464d22dd03286ee8af5c0":[7,1,0,1,11,22], +"structflatbuffers_1_1_vector_iterator.html#ab8f96b2057c464d22dd03286ee8af5c0":[7,1,0,1,11,23], "structflatbuffers_1_1_vector_iterator.html#ac9e9c7cb6d2cc0a69c22b954bb73dc42":[7,1,0,1,11,1], "structflatbuffers_1_1_vector_iterator.html#acb8ab7ba9e8ce289a1c8234e872c708b":[7,1,0,1,11,3], -"structflatbuffers_1_1_vector_iterator.html#ae33269dea219a9a690f00c23d67c0208":[7,1,0,1,11,15], -"structflatbuffers_1_1_vector_iterator.html#af17653cb8a120a9bbd35dcb35a570729":[7,1,0,1,11,17], -"structflatbuffers_1_1_vector_iterator.html#aff7a7187d818290ee71274335f079191":[7,1,0,1,11,9], +"structflatbuffers_1_1_vector_iterator.html#ae33269dea219a9a690f00c23d67c0208":[7,1,0,1,11,16], +"structflatbuffers_1_1_vector_iterator.html#af17653cb8a120a9bbd35dcb35a570729":[7,1,0,1,11,18], +"structflatbuffers_1_1_vector_iterator.html#aff7a7187d818290ee71274335f079191":[7,1,0,1,11,10], +"structflatbuffers_1_1_vector_reverse_iterator.html":[7,1,0,1,13], +"structflatbuffers_1_1_vector_reverse_iterator.html#a205661c2212f77d6734bcaf4ee6a1223":[7,1,0,1,13,1], +"structflatbuffers_1_1_vector_reverse_iterator.html#a56a6c43372b85782f069c6c2b161d866":[7,1,0,1,13,0], +"structflatbuffers_1_1_vector_reverse_iterator.html#a5e520ed4596b76dfcc7864d219df754b":[7,1,0,1,13,2], "usergroup0.html":[1], -"usergroup1.html":[1,16], +"usergroup1.html":[1,17], "usergroup2.html":[7] }; diff --git a/search/all_10.js b/search/all_10.js index 4aac069c..f0c248ee 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -1,5 +1,6 @@ var searchData= [ + ['setdefault',['setDefault',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17',1,'com::google::flatbuffers::Utf8']]], ['sizedbytearray',['SizedByteArray',['../class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2',1,'FlatBuffers.FlatBufferBuilder.SizedByteArray()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078',1,'com.google.flatbuffers.FlatBufferBuilder.sizedByteArray(int start, int length)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672',1,'com.google.flatbuffers.FlatBufferBuilder.sizedByteArray()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a967e7dc8f051d4e73b3155e3b281d7b4',1,'Google\FlatBuffers\FlatbufferBuilder\sizedByteArray()']]], ['sizedinputstream',['sizedInputStream',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab8fc86fe501b182b4a1a50fcdbcb3e6b',1,'com::google::flatbuffers::FlatBufferBuilder']]], ['string',['String',['../structflatbuffers_1_1_string.html',1,'flatbuffers']]], diff --git a/search/all_12.js b/search/all_12.js index 86a89c93..a1ab8c58 100644 --- a/search/all_12.js +++ b/search/all_12.js @@ -13,5 +13,8 @@ var searchData= ['use_20in_20python',['Use in Python',['../flatbuffers_guide_use_python.html',1,'']]], ['use_20in_20rust',['Use in Rust',['../flatbuffers_guide_use_rust.html',1,'']]], ['use_20in_20typescript',['Use in TypeScript',['../flatbuffers_guide_use_typescript.html',1,'']]], - ['using_20the_20schema_20compiler',['Using the schema compiler',['../flatbuffers_guide_using_schema_compiler.html',1,'']]] + ['using_20the_20schema_20compiler',['Using the schema compiler',['../flatbuffers_guide_using_schema_compiler.html',1,'']]], + ['utf8',['Utf8',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html',1,'com::google::flatbuffers']]], + ['utf8old',['Utf8Old',['../classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html',1,'com::google::flatbuffers']]], + ['utf8safe',['Utf8Safe',['../classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html',1,'com::google::flatbuffers']]] ]; diff --git a/search/all_13.js b/search/all_13.js index dc590db5..4ec6bde0 100644 --- a/search/all_13.js +++ b/search/all_13.js @@ -4,5 +4,6 @@ var searchData= ['vector_3c_20char_20_3e',['Vector< char >',['../classflatbuffers_1_1_vector.html',1,'flatbuffers']]], ['vector_5fdownward',['vector_downward',['../classflatbuffers_1_1vector__downward.html',1,'flatbuffers']]], ['vectoriterator',['VectorIterator',['../structflatbuffers_1_1_vector_iterator.html',1,'flatbuffers']]], - ['vectorofany',['VectorOfAny',['../classflatbuffers_1_1_vector_of_any.html',1,'flatbuffers']]] + ['vectorofany',['VectorOfAny',['../classflatbuffers_1_1_vector_of_any.html',1,'flatbuffers']]], + ['vectorreverseiterator',['VectorReverseIterator',['../structflatbuffers_1_1_vector_reverse_iterator.html',1,'flatbuffers']]] ]; diff --git a/search/all_2.js b/search/all_2.js index 8be9a972..b3fc5c86 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,18 +1,18 @@ var searchData= [ ['add_3c_20t_20_3e',['Add< T >',['../class_flat_buffers_1_1_flat_buffer_builder.html#a4cfc5582e28916e2faecf3357a6a07fd',1,'FlatBuffers.FlatBufferBuilder.Add< T >(T[] x)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a6295f2b29654bc5c77b57839a5fb7fd6',1,'FlatBuffers.FlatBufferBuilder.Add< T >(Span< T > x)']]], - ['addbool',['addBool',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a723a1053d3a17d5433c37bdbd015844e',1,'Google\FlatBuffers\FlatbufferBuilder\addBool()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a6b66d785555d19cd0f141978eff78e2e',1,'FlatBuffers.FlatBufferBuilder.AddBool()']]], + ['addbool',['AddBool',['../class_flat_buffers_1_1_flat_buffer_builder.html#a6b66d785555d19cd0f141978eff78e2e',1,'FlatBuffers.FlatBufferBuilder.AddBool()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a723a1053d3a17d5433c37bdbd015844e',1,'Google\FlatBuffers\FlatbufferBuilder\addBool()']]], ['addboolean',['addBoolean',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a53e6356cfef3d6be298efb9a0d67be06',1,'com::google::flatbuffers::FlatBufferBuilder']]], - ['addbyte',['addByte',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae019d7ee089c95a37421365d5fb9533b',1,'com.google.flatbuffers.FlatBufferBuilder.addByte()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a7b78098530190cb90d315419fb1d21fc',1,'Google\FlatBuffers\FlatbufferBuilder\addByte()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ac11b10888152d4f687e8ce4d60022254',1,'FlatBuffers.FlatBufferBuilder.AddByte()']]], - ['adddouble',['addDouble',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac36c1fc72851b17129fc763da00cff32',1,'com.google.flatbuffers.FlatBufferBuilder.addDouble()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a23a5478774e8909117d31b62dde51e86',1,'Google\FlatBuffers\FlatbufferBuilder\addDouble()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#aef6feaf282148043e6a1c9c1ba9e2094',1,'FlatBuffers.FlatBufferBuilder.AddDouble()']]], - ['addfloat',['addFloat',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a55c20e99ba68be516dfbddfddb9efd4d',1,'com.google.flatbuffers.FlatBufferBuilder.addFloat()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a5ce6215b65e222b8ee22d3eb4436e404',1,'Google\FlatBuffers\FlatbufferBuilder\addFloat()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a41a1e6f7e7b9098a9d8c1af7157ef2bf',1,'FlatBuffers.FlatBufferBuilder.AddFloat()']]], - ['addint',['addInt',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a1c0ae381bf6adb84b18e613aadf8d4db',1,'com.google.flatbuffers.FlatBufferBuilder.addInt()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a63c9d66329dff15855d11c89134599e0',1,'Google\FlatBuffers\FlatbufferBuilder\addInt()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a7970bfc069caeee5dfd994e6c1106ab9',1,'FlatBuffers.FlatBufferBuilder.AddInt()']]], - ['addlong',['addLong',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e1215f334989ecc59b49a3239aed5b5',1,'com.google.flatbuffers.FlatBufferBuilder.addLong()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a8875bff7ef67af16938cabe719ceac70',1,'Google\FlatBuffers\FlatbufferBuilder\addLong()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a0d182e151b4f57d47069885cc1d05893',1,'FlatBuffers.FlatBufferBuilder.AddLong()']]], - ['addoffset',['addOffset',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae817751382089b603753452cc1e56790',1,'com.google.flatbuffers.FlatBufferBuilder.addOffset()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a127fe515651f4b4347ea8e01b3951934',1,'Google\FlatBuffers\FlatbufferBuilder\addOffset()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae1d6d927d400c330cae48951eae546e5',1,'FlatBuffers.FlatBufferBuilder.AddOffset()']]], - ['addsbyte',['addSbyte',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6add2b19644657fbe0925cb0238618c6',1,'Google\FlatBuffers\FlatbufferBuilder\addSbyte()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a0b2addc87bde29213424a187b7b08707',1,'FlatBuffers.FlatBufferBuilder.AddSbyte()']]], - ['addshort',['addShort',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a67a9f5dcd251735d6b96e1ad46de9d94',1,'com.google.flatbuffers.FlatBufferBuilder.addShort()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a1e11aa1f080749100de6e153e88f9dd5',1,'Google\FlatBuffers\FlatbufferBuilder\addShort()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a93b38c262a248e625ea3719dddf903eb',1,'FlatBuffers.FlatBufferBuilder.AddShort()']]], - ['adduint',['addUint',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6f4a37444fca01dcbd0922d18cf2be5c',1,'Google\FlatBuffers\FlatbufferBuilder\addUint()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#aef3581dee532ab763b99947ca43ddcfa',1,'FlatBuffers.FlatBufferBuilder.AddUint()']]], - ['addulong',['addUlong',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a01be3a805c221796997b023b64e90826',1,'Google\FlatBuffers\FlatbufferBuilder\addUlong()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#aa9cc4371456b85d6393958ab56cbc515',1,'FlatBuffers.FlatBufferBuilder.AddUlong()']]], - ['addushort',['addUshort',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a570a0024a8a54e2f73374c94b8fa6c42',1,'Google\FlatBuffers\FlatbufferBuilder\addUshort()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a52c19b3daa97b0272da0dd7121b2ff5f',1,'FlatBuffers.FlatBufferBuilder.AddUshort()']]], + ['addbyte',['AddByte',['../class_flat_buffers_1_1_flat_buffer_builder.html#ac11b10888152d4f687e8ce4d60022254',1,'FlatBuffers.FlatBufferBuilder.AddByte()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae019d7ee089c95a37421365d5fb9533b',1,'com.google.flatbuffers.FlatBufferBuilder.addByte()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a7b78098530190cb90d315419fb1d21fc',1,'Google\FlatBuffers\FlatbufferBuilder\addByte()']]], + ['adddouble',['AddDouble',['../class_flat_buffers_1_1_flat_buffer_builder.html#aef6feaf282148043e6a1c9c1ba9e2094',1,'FlatBuffers.FlatBufferBuilder.AddDouble()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac36c1fc72851b17129fc763da00cff32',1,'com.google.flatbuffers.FlatBufferBuilder.addDouble()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a23a5478774e8909117d31b62dde51e86',1,'Google\FlatBuffers\FlatbufferBuilder\addDouble()']]], + ['addfloat',['AddFloat',['../class_flat_buffers_1_1_flat_buffer_builder.html#a41a1e6f7e7b9098a9d8c1af7157ef2bf',1,'FlatBuffers.FlatBufferBuilder.AddFloat()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a55c20e99ba68be516dfbddfddb9efd4d',1,'com.google.flatbuffers.FlatBufferBuilder.addFloat()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a5ce6215b65e222b8ee22d3eb4436e404',1,'Google\FlatBuffers\FlatbufferBuilder\addFloat()']]], + ['addint',['AddInt',['../class_flat_buffers_1_1_flat_buffer_builder.html#a7970bfc069caeee5dfd994e6c1106ab9',1,'FlatBuffers.FlatBufferBuilder.AddInt()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a1c0ae381bf6adb84b18e613aadf8d4db',1,'com.google.flatbuffers.FlatBufferBuilder.addInt()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a63c9d66329dff15855d11c89134599e0',1,'Google\FlatBuffers\FlatbufferBuilder\addInt()']]], + ['addlong',['AddLong',['../class_flat_buffers_1_1_flat_buffer_builder.html#a0d182e151b4f57d47069885cc1d05893',1,'FlatBuffers.FlatBufferBuilder.AddLong()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e1215f334989ecc59b49a3239aed5b5',1,'com.google.flatbuffers.FlatBufferBuilder.addLong()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a8875bff7ef67af16938cabe719ceac70',1,'Google\FlatBuffers\FlatbufferBuilder\addLong()']]], + ['addoffset',['AddOffset',['../class_flat_buffers_1_1_flat_buffer_builder.html#ae1d6d927d400c330cae48951eae546e5',1,'FlatBuffers.FlatBufferBuilder.AddOffset()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae817751382089b603753452cc1e56790',1,'com.google.flatbuffers.FlatBufferBuilder.addOffset()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a127fe515651f4b4347ea8e01b3951934',1,'Google\FlatBuffers\FlatbufferBuilder\addOffset()']]], + ['addsbyte',['AddSbyte',['../class_flat_buffers_1_1_flat_buffer_builder.html#a0b2addc87bde29213424a187b7b08707',1,'FlatBuffers.FlatBufferBuilder.AddSbyte()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6add2b19644657fbe0925cb0238618c6',1,'Google\FlatBuffers\FlatbufferBuilder\addSbyte()']]], + ['addshort',['AddShort',['../class_flat_buffers_1_1_flat_buffer_builder.html#a93b38c262a248e625ea3719dddf903eb',1,'FlatBuffers.FlatBufferBuilder.AddShort()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a67a9f5dcd251735d6b96e1ad46de9d94',1,'com.google.flatbuffers.FlatBufferBuilder.addShort()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a1e11aa1f080749100de6e153e88f9dd5',1,'Google\FlatBuffers\FlatbufferBuilder\addShort()']]], + ['adduint',['AddUint',['../class_flat_buffers_1_1_flat_buffer_builder.html#aef3581dee532ab763b99947ca43ddcfa',1,'FlatBuffers.FlatBufferBuilder.AddUint()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6f4a37444fca01dcbd0922d18cf2be5c',1,'Google\FlatBuffers\FlatbufferBuilder\addUint()']]], + ['addulong',['AddUlong',['../class_flat_buffers_1_1_flat_buffer_builder.html#aa9cc4371456b85d6393958ab56cbc515',1,'FlatBuffers.FlatBufferBuilder.AddUlong()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a01be3a805c221796997b023b64e90826',1,'Google\FlatBuffers\FlatbufferBuilder\addUlong()']]], + ['addushort',['AddUshort',['../class_flat_buffers_1_1_flat_buffer_builder.html#a52c19b3daa97b0272da0dd7121b2ff5f',1,'FlatBuffers.FlatBufferBuilder.AddUshort()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a570a0024a8a54e2f73374c94b8fa6c42',1,'Google\FlatBuffers\FlatbufferBuilder\addUshort()']]], ['allocator',['Allocator',['../classflatbuffers_1_1_allocator.html',1,'flatbuffers']]] ]; diff --git a/search/all_3.js b/search/all_3.js index e5692dba..c86945e6 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['bytebufferfactory',['ByteBufferFactory',['../interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html',1,'com::google::flatbuffers::FlatBufferBuilder']]], + ['bytebufferfactory',['ByteBufferFactory',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html',1,'com::google::flatbuffers::FlatBufferBuilder']]], ['bytebufferutil',['ByteBufferUtil',['../classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html',1,'com::google::flatbuffers']]], ['bytebufferutil_2ejava',['ByteBufferUtil.java',['../_byte_buffer_util_8java.html',1,'']]], ['building',['Building',['../flatbuffers_guide_building.html',1,'']]] diff --git a/search/all_4.js b/search/all_4.js index 28b40b7f..6704aaaf 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,10 +1,10 @@ var searchData= [ - ['clear',['Clear',['../class_flat_buffers_1_1_flat_buffer_builder.html#a74ed0e43043c6e486dbe40b0d2ff63d6',1,'FlatBuffers.FlatBufferBuilder.Clear()'],['../classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412',1,'flatbuffers::FlatBufferBuilder::Clear()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3a5dd461dc86a2132eaa4f0348b4c001',1,'com.google.flatbuffers.FlatBufferBuilder.clear()']]], + ['clear',['clear',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3a5dd461dc86a2132eaa4f0348b4c001',1,'com.google.flatbuffers.FlatBufferBuilder.clear()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a74ed0e43043c6e486dbe40b0d2ff63d6',1,'FlatBuffers.FlatBufferBuilder.Clear()'],['../classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412',1,'flatbuffers::FlatBufferBuilder::Clear()']]], ['contributing',['Contributing',['../contributing.html',1,'']]], ['createbytevector',['createByteVector',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a37b5debda58afd1fcb71ec82efe663b9',1,'com::google::flatbuffers::FlatBufferBuilder']]], ['createsharedstring',['CreateSharedString',['../classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const char *str, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const std::string &str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const String *str)']]], - ['createstring',['createString',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abd3b2f9b239a702ffaa8a1e97894f09e',1,'com.google.flatbuffers.FlatBufferBuilder.createString(CharSequence s)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577',1,'com.google.flatbuffers.FlatBufferBuilder.createString(ByteBuffer s)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ac54a8acfac1dda020b610da53b2d9a0f',1,'Google\FlatBuffers\FlatbufferBuilder\createString()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070',1,'FlatBuffers.FlatBufferBuilder.CreateString()'],['../classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154',1,'flatbuffers::FlatBufferBuilder::CreateString(char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6',1,'flatbuffers::FlatBufferBuilder::CreateString(flatbuffers::string_view str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685',1,'flatbuffers::FlatBufferBuilder::CreateString(const T &str)']]], + ['createstring',['CreateString',['../class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070',1,'FlatBuffers.FlatBufferBuilder.CreateString()'],['../classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154',1,'flatbuffers::FlatBufferBuilder::CreateString(char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6',1,'flatbuffers::FlatBufferBuilder::CreateString(flatbuffers::string_view str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685',1,'flatbuffers::FlatBufferBuilder::CreateString(const T &str)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abd3b2f9b239a702ffaa8a1e97894f09e',1,'com.google.flatbuffers.FlatBufferBuilder.createString(CharSequence s)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577',1,'com.google.flatbuffers.FlatBufferBuilder.createString(ByteBuffer s)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ac54a8acfac1dda020b610da53b2d9a0f',1,'Google\FlatBuffers\FlatbufferBuilder\createString()']]], ['createstruct',['CreateStruct',['../classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8',1,'flatbuffers::FlatBufferBuilder']]], ['createuninitializedvector',['CreateUninitializedVector',['../classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c',1,'flatbuffers::FlatBufferBuilder::CreateUninitializedVector(size_t len, size_t elemsize, uint8_t **buf)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50',1,'flatbuffers::FlatBufferBuilder::CreateUninitializedVector(size_t len, T **buf)']]], ['createunintializedvector',['createUnintializedVector',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#acc889115f91460ca89ce981cb02c2039',1,'com::google::flatbuffers::FlatBufferBuilder']]], diff --git a/search/all_5.js b/search/all_5.js index 1ccee7b6..de15cc34 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,6 +1,7 @@ var searchData= [ - ['databuffer',['dataBuffer',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abf0fd34f0d93a9d89f595fddf752feb7',1,'com.google.flatbuffers.FlatBufferBuilder.dataBuffer()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ae7e97c2d21da04ef483e6940d442938f',1,'Google\FlatBuffers\FlatbufferBuilder\dataBuffer()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a6f0cbd075878e2c0f021c0947cc8a211',1,'FlatBuffers.FlatBufferBuilder.DataBuffer()']]], + ['databuffer',['DataBuffer',['../class_flat_buffers_1_1_flat_buffer_builder.html#a6f0cbd075878e2c0f021c0947cc8a211',1,'FlatBuffers.FlatBufferBuilder.DataBuffer()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abf0fd34f0d93a9d89f595fddf752feb7',1,'com.google.flatbuffers.FlatBufferBuilder.dataBuffer()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ae7e97c2d21da04ef483e6940d442938f',1,'Google\FlatBuffers\FlatbufferBuilder\dataBuffer()']]], + ['decodeutf8',['decodeUtf8',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8',1,'com.google.flatbuffers.Utf8.decodeUtf8()'],['../classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1',1,'com.google.flatbuffers.Utf8Safe.decodeUtf8()']]], ['dedupvtables',['DedupVtables',['../classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961',1,'flatbuffers::FlatBufferBuilder']]], ['defaultallocator',['DefaultAllocator',['../classflatbuffers_1_1_default_allocator.html',1,'flatbuffers']]], ['detachedbuffer',['DetachedBuffer',['../classflatbuffers_1_1_detached_buffer.html',1,'flatbuffers']]] diff --git a/search/all_6.js b/search/all_6.js index d6452ca4..5efd2ded 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,4 +1,6 @@ var searchData= [ + ['encodedlength',['encodedLength',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab',1,'com::google::flatbuffers::Utf8']]], + ['encodeutf8',['encodeUtf8',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb',1,'com.google.flatbuffers.Utf8.encodeUtf8()'],['../classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43',1,'com.google.flatbuffers.Utf8Safe.encodeUtf8()']]], ['endvector',['EndVector',['../class_flat_buffers_1_1_flat_buffer_builder.html#a7cacff748cbf996b52de2e31e731af41',1,'FlatBuffers::FlatBufferBuilder']]] ]; diff --git a/search/all_7.js b/search/all_7.js index 88443a48..b839583a 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,13 +1,14 @@ var searchData= [ ['fieldloc',['FieldLoc',['../structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html',1,'flatbuffers::FlatBufferBuilder']]], - ['finish',['finish',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#afc31aba1a9523fde4be3558f8f19f49b',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a189de474e0c39d663cc65fa21a63f071',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a799f0d1cf0fff359d6d04768108cb2a5',1,'Google\FlatBuffers\FlatbufferBuilder\finish()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a709d1ded4ffd922b61bc6f7f4a12fb97',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a703062d740b32a77d26c5f6d1928c75f',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912',1,'flatbuffers::FlatBufferBuilder::Finish()']]], - ['finishsizeprefixed',['finishSizePrefixed',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table, String file_identifier)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a425ab2bd13a0e4331a7190ec2d17c3b2',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a92de6a8a35e1ae5a07f5578bb0fda16c',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220',1,'flatbuffers::FlatBufferBuilder::FinishSizePrefixed()']]], - ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com.google.flatbuffers.FlatBufferBuilder'],['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google\FlatBuffers\FlatbufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(int initialSize)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a4c3de6ba2bdf4664678ab9666cce6ea1',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer buffer)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())'],['../classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(FlatBufferBuilder &&other)']]], + ['finish',['Finish',['../class_flat_buffers_1_1_flat_buffer_builder.html#a709d1ded4ffd922b61bc6f7f4a12fb97',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a703062d740b32a77d26c5f6d1928c75f',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912',1,'flatbuffers::FlatBufferBuilder::Finish()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#afc31aba1a9523fde4be3558f8f19f49b',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a189de474e0c39d663cc65fa21a63f071',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a799f0d1cf0fff359d6d04768108cb2a5',1,'Google\FlatBuffers\FlatbufferBuilder\finish()']]], + ['finishsizeprefixed',['FinishSizePrefixed',['../class_flat_buffers_1_1_flat_buffer_builder.html#a425ab2bd13a0e4331a7190ec2d17c3b2',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a92de6a8a35e1ae5a07f5578bb0fda16c',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220',1,'flatbuffers::FlatBufferBuilder::FinishSizePrefixed()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table, String file_identifier)']]], + ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com.google.flatbuffers.FlatBufferBuilder'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google\FlatBuffers\FlatbufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder'],['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size, ByteBufferFactory bb_factory, ByteBuffer existing_bb, Utf8 utf8)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(int initialSize)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a4c3de6ba2bdf4664678ab9666cce6ea1',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer buffer)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())'],['../classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(FlatBufferBuilder &&other) FlatBufferBuilder(FlatBufferBuilder &other)']]], ['flatbufferbuilder_2ecs',['FlatBufferBuilder.cs',['../_flat_buffer_builder_8cs.html',1,'']]], ['flatbufferbuilder_2ejava',['FlatBufferBuilder.java',['../_flat_buffer_builder_8java.html',1,'']]], ['flatbufferbuilder_2ephp',['FlatbufferBuilder.php',['../_flatbuffer_builder_8php.html',1,'']]], ['flatbuffers',['FlatBuffers',['../namespace_flat_buffers.html',1,'']]], + ['flatbuffers_5fattribute',['FLATBUFFERS_ATTRIBUTE',['../classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42',1,'flatbuffers::FlatBufferBuilder']]], ['flatbuffers_5fcpp_5fapi',['Flatbuffers_cpp_api',['../group__flatbuffers__cpp__api.html',1,'']]], ['flatbuffers_5fcsharp_5fapi',['Flatbuffers_csharp_api',['../group__flatbuffers__csharp__api.html',1,'']]], ['flatbuffers_5fgo_5fapi',['Flatbuffers_go_api',['../group__flatbuffers__go__api.html',1,'']]], diff --git a/search/all_8.js b/search/all_8.js index 25d2e946..5f9c9867 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -4,6 +4,7 @@ var searchData= ['getbufferminalignment',['GetBufferMinAlignment',['../classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b',1,'flatbuffers::FlatBufferBuilder']]], ['getbufferpointer',['GetBufferPointer',['../classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83',1,'flatbuffers::FlatBufferBuilder']]], ['getcurrentbufferpointer',['GetCurrentBufferPointer',['../classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41',1,'flatbuffers::FlatBufferBuilder']]], + ['getdefault',['getDefault',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858',1,'com::google::flatbuffers::Utf8']]], ['getsize',['GetSize',['../classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f',1,'flatbuffers::FlatBufferBuilder']]], ['getsizeprefix',['getSizePrefix',['../classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a4c87c63fa8d31e039b344bbaef00a3be',1,'com::google::flatbuffers::ByteBufferUtil']]], ['go_20api',['Go API',['../md__go_api.html',1,'']]] diff --git a/search/all_c.js b/search/all_c.js index 4da9cd30..8bd101ee 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['newbytebuffer',['newByteBuffer',['../interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a',1,'com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory.newByteBuffer()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644',1,'com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory.newByteBuffer()']]] + ['newbytebuffer',['newByteBuffer',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f',1,'com::google::flatbuffers::FlatBufferBuilder::ByteBufferFactory']]] ]; diff --git a/search/all_f.js b/search/all_f.js index 6ff59f22..d8051229 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -1,8 +1,7 @@ var searchData= [ ['release',['Release',['../classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45',1,'flatbuffers::FlatBufferBuilder']]], - ['releasebufferpointer',['ReleaseBufferPointer',['../classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8',1,'flatbuffers::FlatBufferBuilder']]], - ['releasebytebuffer',['releaseByteBuffer',['../interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f',1,'com::google::flatbuffers::FlatBufferBuilder::ByteBufferFactory']]], + ['releasebytebuffer',['releaseByteBuffer',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca',1,'com::google::flatbuffers::FlatBufferBuilder::ByteBufferFactory']]], ['releaseraw',['ReleaseRaw',['../classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416',1,'flatbuffers::FlatBufferBuilder']]], ['removesizeprefix',['removeSizePrefix',['../classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a58d6c39c53a0c981a2f72a5eca7d992c',1,'com::google::flatbuffers::ByteBufferUtil']]] ]; diff --git a/search/classes_1.js b/search/classes_1.js index f2393eaf..7c2275af 100644 --- a/search/classes_1.js +++ b/search/classes_1.js @@ -1,5 +1,5 @@ var searchData= [ - ['bytebufferfactory',['ByteBufferFactory',['../interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html',1,'com::google::flatbuffers::FlatBufferBuilder']]], + ['bytebufferfactory',['ByteBufferFactory',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html',1,'com::google::flatbuffers::FlatBufferBuilder']]], ['bytebufferutil',['ByteBufferUtil',['../classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html',1,'com::google::flatbuffers']]] ]; diff --git a/search/classes_3.js b/search/classes_3.js index f7e2f03e..2a8c1fd0 100644 --- a/search/classes_3.js +++ b/search/classes_3.js @@ -1,5 +1,5 @@ var searchData= [ ['fieldloc',['FieldLoc',['../structflatbuffers_1_1_flat_buffer_builder_1_1_field_loc.html',1,'flatbuffers::FlatBufferBuilder']]], - ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com.google.flatbuffers.FlatBufferBuilder'],['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google\FlatBuffers\FlatbufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder']]] + ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com.google.flatbuffers.FlatBufferBuilder'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google\FlatBuffers\FlatbufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder'],['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder']]] ]; diff --git a/search/classes_8.js b/search/classes_8.js index dc590db5..b05d66a1 100644 --- a/search/classes_8.js +++ b/search/classes_8.js @@ -1,8 +1,6 @@ var searchData= [ - ['vector',['Vector',['../classflatbuffers_1_1_vector.html',1,'flatbuffers']]], - ['vector_3c_20char_20_3e',['Vector< char >',['../classflatbuffers_1_1_vector.html',1,'flatbuffers']]], - ['vector_5fdownward',['vector_downward',['../classflatbuffers_1_1vector__downward.html',1,'flatbuffers']]], - ['vectoriterator',['VectorIterator',['../structflatbuffers_1_1_vector_iterator.html',1,'flatbuffers']]], - ['vectorofany',['VectorOfAny',['../classflatbuffers_1_1_vector_of_any.html',1,'flatbuffers']]] + ['utf8',['Utf8',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html',1,'com::google::flatbuffers']]], + ['utf8old',['Utf8Old',['../classcom_1_1google_1_1flatbuffers_1_1_utf8_old.html',1,'com::google::flatbuffers']]], + ['utf8safe',['Utf8Safe',['../classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html',1,'com::google::flatbuffers']]] ]; diff --git a/search/classes_9.html b/search/classes_9.html new file mode 100644 index 00000000..9cb55be4 --- /dev/null +++ b/search/classes_9.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="classes_9.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 00000000..4ec6bde0 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vector',['Vector',['../classflatbuffers_1_1_vector.html',1,'flatbuffers']]], + ['vector_3c_20char_20_3e',['Vector< char >',['../classflatbuffers_1_1_vector.html',1,'flatbuffers']]], + ['vector_5fdownward',['vector_downward',['../classflatbuffers_1_1vector__downward.html',1,'flatbuffers']]], + ['vectoriterator',['VectorIterator',['../structflatbuffers_1_1_vector_iterator.html',1,'flatbuffers']]], + ['vectorofany',['VectorOfAny',['../classflatbuffers_1_1_vector_of_any.html',1,'flatbuffers']]], + ['vectorreverseiterator',['VectorReverseIterator',['../structflatbuffers_1_1_vector_reverse_iterator.html',1,'flatbuffers']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js index 467dcddf..aefec87a 100644 --- a/search/functions_1.js +++ b/search/functions_1.js @@ -1,17 +1,17 @@ var searchData= [ ['add_3c_20t_20_3e',['Add< T >',['../class_flat_buffers_1_1_flat_buffer_builder.html#a4cfc5582e28916e2faecf3357a6a07fd',1,'FlatBuffers.FlatBufferBuilder.Add< T >(T[] x)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a6295f2b29654bc5c77b57839a5fb7fd6',1,'FlatBuffers.FlatBufferBuilder.Add< T >(Span< T > x)']]], - ['addbool',['addBool',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a723a1053d3a17d5433c37bdbd015844e',1,'Google\FlatBuffers\FlatbufferBuilder\addBool()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a6b66d785555d19cd0f141978eff78e2e',1,'FlatBuffers.FlatBufferBuilder.AddBool()']]], + ['addbool',['AddBool',['../class_flat_buffers_1_1_flat_buffer_builder.html#a6b66d785555d19cd0f141978eff78e2e',1,'FlatBuffers.FlatBufferBuilder.AddBool()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a723a1053d3a17d5433c37bdbd015844e',1,'Google\FlatBuffers\FlatbufferBuilder\addBool()']]], ['addboolean',['addBoolean',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a53e6356cfef3d6be298efb9a0d67be06',1,'com::google::flatbuffers::FlatBufferBuilder']]], - ['addbyte',['addByte',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae019d7ee089c95a37421365d5fb9533b',1,'com.google.flatbuffers.FlatBufferBuilder.addByte()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a7b78098530190cb90d315419fb1d21fc',1,'Google\FlatBuffers\FlatbufferBuilder\addByte()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ac11b10888152d4f687e8ce4d60022254',1,'FlatBuffers.FlatBufferBuilder.AddByte()']]], - ['adddouble',['addDouble',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac36c1fc72851b17129fc763da00cff32',1,'com.google.flatbuffers.FlatBufferBuilder.addDouble()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a23a5478774e8909117d31b62dde51e86',1,'Google\FlatBuffers\FlatbufferBuilder\addDouble()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#aef6feaf282148043e6a1c9c1ba9e2094',1,'FlatBuffers.FlatBufferBuilder.AddDouble()']]], - ['addfloat',['addFloat',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a55c20e99ba68be516dfbddfddb9efd4d',1,'com.google.flatbuffers.FlatBufferBuilder.addFloat()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a5ce6215b65e222b8ee22d3eb4436e404',1,'Google\FlatBuffers\FlatbufferBuilder\addFloat()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a41a1e6f7e7b9098a9d8c1af7157ef2bf',1,'FlatBuffers.FlatBufferBuilder.AddFloat()']]], - ['addint',['addInt',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a1c0ae381bf6adb84b18e613aadf8d4db',1,'com.google.flatbuffers.FlatBufferBuilder.addInt()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a63c9d66329dff15855d11c89134599e0',1,'Google\FlatBuffers\FlatbufferBuilder\addInt()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a7970bfc069caeee5dfd994e6c1106ab9',1,'FlatBuffers.FlatBufferBuilder.AddInt()']]], - ['addlong',['addLong',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e1215f334989ecc59b49a3239aed5b5',1,'com.google.flatbuffers.FlatBufferBuilder.addLong()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a8875bff7ef67af16938cabe719ceac70',1,'Google\FlatBuffers\FlatbufferBuilder\addLong()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a0d182e151b4f57d47069885cc1d05893',1,'FlatBuffers.FlatBufferBuilder.AddLong()']]], - ['addoffset',['addOffset',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae817751382089b603753452cc1e56790',1,'com.google.flatbuffers.FlatBufferBuilder.addOffset()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a127fe515651f4b4347ea8e01b3951934',1,'Google\FlatBuffers\FlatbufferBuilder\addOffset()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae1d6d927d400c330cae48951eae546e5',1,'FlatBuffers.FlatBufferBuilder.AddOffset()']]], - ['addsbyte',['addSbyte',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6add2b19644657fbe0925cb0238618c6',1,'Google\FlatBuffers\FlatbufferBuilder\addSbyte()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a0b2addc87bde29213424a187b7b08707',1,'FlatBuffers.FlatBufferBuilder.AddSbyte()']]], - ['addshort',['addShort',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a67a9f5dcd251735d6b96e1ad46de9d94',1,'com.google.flatbuffers.FlatBufferBuilder.addShort()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a1e11aa1f080749100de6e153e88f9dd5',1,'Google\FlatBuffers\FlatbufferBuilder\addShort()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a93b38c262a248e625ea3719dddf903eb',1,'FlatBuffers.FlatBufferBuilder.AddShort()']]], - ['adduint',['addUint',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6f4a37444fca01dcbd0922d18cf2be5c',1,'Google\FlatBuffers\FlatbufferBuilder\addUint()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#aef3581dee532ab763b99947ca43ddcfa',1,'FlatBuffers.FlatBufferBuilder.AddUint()']]], - ['addulong',['addUlong',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a01be3a805c221796997b023b64e90826',1,'Google\FlatBuffers\FlatbufferBuilder\addUlong()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#aa9cc4371456b85d6393958ab56cbc515',1,'FlatBuffers.FlatBufferBuilder.AddUlong()']]], - ['addushort',['addUshort',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a570a0024a8a54e2f73374c94b8fa6c42',1,'Google\FlatBuffers\FlatbufferBuilder\addUshort()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a52c19b3daa97b0272da0dd7121b2ff5f',1,'FlatBuffers.FlatBufferBuilder.AddUshort()']]] + ['addbyte',['AddByte',['../class_flat_buffers_1_1_flat_buffer_builder.html#ac11b10888152d4f687e8ce4d60022254',1,'FlatBuffers.FlatBufferBuilder.AddByte()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae019d7ee089c95a37421365d5fb9533b',1,'com.google.flatbuffers.FlatBufferBuilder.addByte()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a7b78098530190cb90d315419fb1d21fc',1,'Google\FlatBuffers\FlatbufferBuilder\addByte()']]], + ['adddouble',['AddDouble',['../class_flat_buffers_1_1_flat_buffer_builder.html#aef6feaf282148043e6a1c9c1ba9e2094',1,'FlatBuffers.FlatBufferBuilder.AddDouble()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac36c1fc72851b17129fc763da00cff32',1,'com.google.flatbuffers.FlatBufferBuilder.addDouble()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a23a5478774e8909117d31b62dde51e86',1,'Google\FlatBuffers\FlatbufferBuilder\addDouble()']]], + ['addfloat',['AddFloat',['../class_flat_buffers_1_1_flat_buffer_builder.html#a41a1e6f7e7b9098a9d8c1af7157ef2bf',1,'FlatBuffers.FlatBufferBuilder.AddFloat()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a55c20e99ba68be516dfbddfddb9efd4d',1,'com.google.flatbuffers.FlatBufferBuilder.addFloat()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a5ce6215b65e222b8ee22d3eb4436e404',1,'Google\FlatBuffers\FlatbufferBuilder\addFloat()']]], + ['addint',['AddInt',['../class_flat_buffers_1_1_flat_buffer_builder.html#a7970bfc069caeee5dfd994e6c1106ab9',1,'FlatBuffers.FlatBufferBuilder.AddInt()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a1c0ae381bf6adb84b18e613aadf8d4db',1,'com.google.flatbuffers.FlatBufferBuilder.addInt()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a63c9d66329dff15855d11c89134599e0',1,'Google\FlatBuffers\FlatbufferBuilder\addInt()']]], + ['addlong',['AddLong',['../class_flat_buffers_1_1_flat_buffer_builder.html#a0d182e151b4f57d47069885cc1d05893',1,'FlatBuffers.FlatBufferBuilder.AddLong()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a0e1215f334989ecc59b49a3239aed5b5',1,'com.google.flatbuffers.FlatBufferBuilder.addLong()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a8875bff7ef67af16938cabe719ceac70',1,'Google\FlatBuffers\FlatbufferBuilder\addLong()']]], + ['addoffset',['AddOffset',['../class_flat_buffers_1_1_flat_buffer_builder.html#ae1d6d927d400c330cae48951eae546e5',1,'FlatBuffers.FlatBufferBuilder.AddOffset()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ae817751382089b603753452cc1e56790',1,'com.google.flatbuffers.FlatBufferBuilder.addOffset()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a127fe515651f4b4347ea8e01b3951934',1,'Google\FlatBuffers\FlatbufferBuilder\addOffset()']]], + ['addsbyte',['AddSbyte',['../class_flat_buffers_1_1_flat_buffer_builder.html#a0b2addc87bde29213424a187b7b08707',1,'FlatBuffers.FlatBufferBuilder.AddSbyte()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6add2b19644657fbe0925cb0238618c6',1,'Google\FlatBuffers\FlatbufferBuilder\addSbyte()']]], + ['addshort',['AddShort',['../class_flat_buffers_1_1_flat_buffer_builder.html#a93b38c262a248e625ea3719dddf903eb',1,'FlatBuffers.FlatBufferBuilder.AddShort()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a67a9f5dcd251735d6b96e1ad46de9d94',1,'com.google.flatbuffers.FlatBufferBuilder.addShort()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a1e11aa1f080749100de6e153e88f9dd5',1,'Google\FlatBuffers\FlatbufferBuilder\addShort()']]], + ['adduint',['AddUint',['../class_flat_buffers_1_1_flat_buffer_builder.html#aef3581dee532ab763b99947ca43ddcfa',1,'FlatBuffers.FlatBufferBuilder.AddUint()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a6f4a37444fca01dcbd0922d18cf2be5c',1,'Google\FlatBuffers\FlatbufferBuilder\addUint()']]], + ['addulong',['AddUlong',['../class_flat_buffers_1_1_flat_buffer_builder.html#aa9cc4371456b85d6393958ab56cbc515',1,'FlatBuffers.FlatBufferBuilder.AddUlong()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a01be3a805c221796997b023b64e90826',1,'Google\FlatBuffers\FlatbufferBuilder\addUlong()']]], + ['addushort',['AddUshort',['../class_flat_buffers_1_1_flat_buffer_builder.html#a52c19b3daa97b0272da0dd7121b2ff5f',1,'FlatBuffers.FlatBufferBuilder.AddUshort()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a570a0024a8a54e2f73374c94b8fa6c42',1,'Google\FlatBuffers\FlatbufferBuilder\addUshort()']]] ]; diff --git a/search/functions_2.js b/search/functions_2.js index 31e6591f..9923f7e4 100644 --- a/search/functions_2.js +++ b/search/functions_2.js @@ -1,9 +1,9 @@ var searchData= [ - ['clear',['Clear',['../class_flat_buffers_1_1_flat_buffer_builder.html#a74ed0e43043c6e486dbe40b0d2ff63d6',1,'FlatBuffers.FlatBufferBuilder.Clear()'],['../classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412',1,'flatbuffers::FlatBufferBuilder::Clear()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3a5dd461dc86a2132eaa4f0348b4c001',1,'com.google.flatbuffers.FlatBufferBuilder.clear()']]], + ['clear',['clear',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3a5dd461dc86a2132eaa4f0348b4c001',1,'com.google.flatbuffers.FlatBufferBuilder.clear()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a74ed0e43043c6e486dbe40b0d2ff63d6',1,'FlatBuffers.FlatBufferBuilder.Clear()'],['../classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412',1,'flatbuffers::FlatBufferBuilder::Clear()']]], ['createbytevector',['createByteVector',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a37b5debda58afd1fcb71ec82efe663b9',1,'com::google::flatbuffers::FlatBufferBuilder']]], ['createsharedstring',['CreateSharedString',['../classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const char *str, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const std::string &str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const String *str)']]], - ['createstring',['createString',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abd3b2f9b239a702ffaa8a1e97894f09e',1,'com.google.flatbuffers.FlatBufferBuilder.createString(CharSequence s)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577',1,'com.google.flatbuffers.FlatBufferBuilder.createString(ByteBuffer s)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ac54a8acfac1dda020b610da53b2d9a0f',1,'Google\FlatBuffers\FlatbufferBuilder\createString()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070',1,'FlatBuffers.FlatBufferBuilder.CreateString()'],['../classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154',1,'flatbuffers::FlatBufferBuilder::CreateString(char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6',1,'flatbuffers::FlatBufferBuilder::CreateString(flatbuffers::string_view str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685',1,'flatbuffers::FlatBufferBuilder::CreateString(const T &str)']]], + ['createstring',['CreateString',['../class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070',1,'FlatBuffers.FlatBufferBuilder.CreateString()'],['../classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5',1,'flatbuffers::FlatBufferBuilder::CreateString(const char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac51db9083ac815eb81420b6d51f42154',1,'flatbuffers::FlatBufferBuilder::CreateString(char *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a9a3a955fbff1c69e944c3560460dd7a6',1,'flatbuffers::FlatBufferBuilder::CreateString(flatbuffers::string_view str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab77d800e77fa76bc758a6c399fd37685',1,'flatbuffers::FlatBufferBuilder::CreateString(const T &str)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abd3b2f9b239a702ffaa8a1e97894f09e',1,'com.google.flatbuffers.FlatBufferBuilder.createString(CharSequence s)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577',1,'com.google.flatbuffers.FlatBufferBuilder.createString(ByteBuffer s)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ac54a8acfac1dda020b610da53b2d9a0f',1,'Google\FlatBuffers\FlatbufferBuilder\createString()']]], ['createstruct',['CreateStruct',['../classflatbuffers_1_1_flat_buffer_builder.html#a43f51ba9c8f4f24ea2247a3979d095b8',1,'flatbuffers::FlatBufferBuilder']]], ['createuninitializedvector',['CreateUninitializedVector',['../classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c',1,'flatbuffers::FlatBufferBuilder::CreateUninitializedVector(size_t len, size_t elemsize, uint8_t **buf)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50',1,'flatbuffers::FlatBufferBuilder::CreateUninitializedVector(size_t len, T **buf)']]], ['createunintializedvector',['createUnintializedVector',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#acc889115f91460ca89ce981cb02c2039',1,'com::google::flatbuffers::FlatBufferBuilder']]], diff --git a/search/functions_3.js b/search/functions_3.js index a82b8a29..6e663edb 100644 --- a/search/functions_3.js +++ b/search/functions_3.js @@ -1,5 +1,6 @@ var searchData= [ ['databuffer',['dataBuffer',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#abf0fd34f0d93a9d89f595fddf752feb7',1,'com.google.flatbuffers.FlatBufferBuilder.dataBuffer()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#ae7e97c2d21da04ef483e6940d442938f',1,'Google\FlatBuffers\FlatbufferBuilder\dataBuffer()']]], + ['decodeutf8',['decodeUtf8',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a0d28f84afeb4c529deacf82691f004c8',1,'com.google.flatbuffers.Utf8.decodeUtf8()'],['../classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a5e80187012873ae088b8b6caf1edcbb1',1,'com.google.flatbuffers.Utf8Safe.decodeUtf8()']]], ['dedupvtables',['DedupVtables',['../classflatbuffers_1_1_flat_buffer_builder.html#aa905b29dce19a1795c7bce375cf29961',1,'flatbuffers::FlatBufferBuilder']]] ]; diff --git a/search/functions_4.js b/search/functions_4.js index d6452ca4..5efd2ded 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -1,4 +1,6 @@ var searchData= [ + ['encodedlength',['encodedLength',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a88db1f58c8651f849151d4563f86bcab',1,'com::google::flatbuffers::Utf8']]], + ['encodeutf8',['encodeUtf8',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a60b4b2e81aae13bd5a0d09b95a0be4bb',1,'com.google.flatbuffers.Utf8.encodeUtf8()'],['../classcom_1_1google_1_1flatbuffers_1_1_utf8_safe.html#a7151137667cc19c5b510f43927fecc43',1,'com.google.flatbuffers.Utf8Safe.encodeUtf8()']]], ['endvector',['EndVector',['../class_flat_buffers_1_1_flat_buffer_builder.html#a7cacff748cbf996b52de2e31e731af41',1,'FlatBuffers::FlatBufferBuilder']]] ]; diff --git a/search/functions_5.js b/search/functions_5.js index d9bc6cd4..8e930cf6 100644 --- a/search/functions_5.js +++ b/search/functions_5.js @@ -1,7 +1,8 @@ var searchData= [ - ['finish',['finish',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#afc31aba1a9523fde4be3558f8f19f49b',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a189de474e0c39d663cc65fa21a63f071',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a799f0d1cf0fff359d6d04768108cb2a5',1,'Google\FlatBuffers\FlatbufferBuilder\finish()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a709d1ded4ffd922b61bc6f7f4a12fb97',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a703062d740b32a77d26c5f6d1928c75f',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912',1,'flatbuffers::FlatBufferBuilder::Finish()']]], - ['finishsizeprefixed',['finishSizePrefixed',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table, String file_identifier)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a425ab2bd13a0e4331a7190ec2d17c3b2',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a92de6a8a35e1ae5a07f5578bb0fda16c',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220',1,'flatbuffers::FlatBufferBuilder::FinishSizePrefixed()']]], - ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(int initialSize)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a4c3de6ba2bdf4664678ab9666cce6ea1',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer buffer)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())'],['../classflatbuffers_1_1_flat_buffer_builder.html#a86e1a348b7474fd5d239016ae97afc56',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(FlatBufferBuilder &&other)']]], + ['finish',['Finish',['../class_flat_buffers_1_1_flat_buffer_builder.html#a709d1ded4ffd922b61bc6f7f4a12fb97',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a703062d740b32a77d26c5f6d1928c75f',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier, bool sizePrefix)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912',1,'flatbuffers::FlatBufferBuilder::Finish()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af344604d66e9e8524fef826fc516d5b2',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#afc31aba1a9523fde4be3558f8f19f49b',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier, boolean size_prefix)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a189de474e0c39d663cc65fa21a63f071',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table, String file_identifier)'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a799f0d1cf0fff359d6d04768108cb2a5',1,'Google\FlatBuffers\FlatbufferBuilder\finish()']]], + ['finishsizeprefixed',['FinishSizePrefixed',['../class_flat_buffers_1_1_flat_buffer_builder.html#a425ab2bd13a0e4331a7190ec2d17c3b2',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a92de6a8a35e1ae5a07f5578bb0fda16c',1,'FlatBuffers.FlatBufferBuilder.FinishSizePrefixed(int rootTable, string fileIdentifier)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a7ba8462e408431054c99d25120326220',1,'flatbuffers::FlatBufferBuilder::FinishSizePrefixed()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa00c035b0f60abe32a5f1467ebd4ec54',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab179d8aa4c4b782d83b3817a6b08ee35',1,'com.google.flatbuffers.FlatBufferBuilder.finishSizePrefixed(int root_table, String file_identifier)']]], + ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aed1e475e75409625c8df85dc3d396e4c',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a9a48a278d32fd3d4b7075e6a03f27ddf',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size, ByteBufferFactory bb_factory, ByteBuffer existing_bb, Utf8 utf8)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(int initial_size)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ac8a8a558ce1d2531447a765636db2387',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a3388cd4dc6e5233283fb4927b71a1c39',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb, ByteBufferFactory bb_factory)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a61ad1938219bcdbe99cc4b668f4c0f99',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(int initialSize)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a4c3de6ba2bdf4664678ab9666cce6ea1',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer buffer)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ab0173786ea4ec3e4ae10555639b2996c',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(size_t initial_size=1024, Allocator *allocator=nullptr, bool own_allocator=false, size_t buffer_minalign=AlignOf< largest_scalar_t >())'],['../classflatbuffers_1_1_flat_buffer_builder.html#ae91e78212d88465e992d750ea215d091',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder(FlatBufferBuilder &&other) FlatBufferBuilder(FlatBufferBuilder &other)']]], + ['flatbuffers_5fattribute',['FLATBUFFERS_ATTRIBUTE',['../classflatbuffers_1_1_flat_buffer_builder.html#a5fcede355ddb6a347edf8b189ada2e42',1,'flatbuffers::FlatBufferBuilder']]], ['forcedefaults',['forceDefaults',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69',1,'com.google.flatbuffers.FlatBufferBuilder.forceDefaults()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a5d75bca1a17d58bb6e383a73761ba45f',1,'Google\FlatBuffers\FlatbufferBuilder\forceDefaults()'],['../classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a',1,'flatbuffers::FlatBufferBuilder::ForceDefaults()']]] ]; diff --git a/search/functions_6.js b/search/functions_6.js index 01b1d6f3..8e0ba950 100644 --- a/search/functions_6.js +++ b/search/functions_6.js @@ -3,6 +3,7 @@ var searchData= ['getbufferminalignment',['GetBufferMinAlignment',['../classflatbuffers_1_1_flat_buffer_builder.html#aa1ebce1f3f46832946a95952af1e9c2b',1,'flatbuffers::FlatBufferBuilder']]], ['getbufferpointer',['GetBufferPointer',['../classflatbuffers_1_1_flat_buffer_builder.html#ab81ab8aa273c270b0942fd81489cad83',1,'flatbuffers::FlatBufferBuilder']]], ['getcurrentbufferpointer',['GetCurrentBufferPointer',['../classflatbuffers_1_1_flat_buffer_builder.html#a099810f03046139d1854d20a1c2a2e41',1,'flatbuffers::FlatBufferBuilder']]], + ['getdefault',['getDefault',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a291c293832c8f646817afefad4c24858',1,'com::google::flatbuffers::Utf8']]], ['getsize',['GetSize',['../classflatbuffers_1_1_flat_buffer_builder.html#a66c8fd33ab9b3b237954c9ea38648f7f',1,'flatbuffers::FlatBufferBuilder']]], ['getsizeprefix',['getSizePrefix',['../classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a4c87c63fa8d31e039b344bbaef00a3be',1,'com::google::flatbuffers::ByteBufferUtil']]] ]; diff --git a/search/functions_8.js b/search/functions_8.js index 4da9cd30..8bd101ee 100644 --- a/search/functions_8.js +++ b/search/functions_8.js @@ -1,4 +1,4 @@ var searchData= [ - ['newbytebuffer',['newByteBuffer',['../interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a0db9a9033d232d584443a433d7576f4a',1,'com.google.flatbuffers.FlatBufferBuilder.ByteBufferFactory.newByteBuffer()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_heap_byte_buffer_factory.html#aac26ff51a8162b37a072792ec9068644',1,'com.google.flatbuffers.FlatBufferBuilder.HeapByteBufferFactory.newByteBuffer()']]] + ['newbytebuffer',['newByteBuffer',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ad881983a2e1d78c7625c3628116c587f',1,'com::google::flatbuffers::FlatBufferBuilder::ByteBufferFactory']]] ]; diff --git a/search/functions_b.js b/search/functions_b.js index 6ff59f22..d8051229 100644 --- a/search/functions_b.js +++ b/search/functions_b.js @@ -1,8 +1,7 @@ var searchData= [ ['release',['Release',['../classflatbuffers_1_1_flat_buffer_builder.html#a5e2c3a1e47f0ab4a3a3f07a07a52fb45',1,'flatbuffers::FlatBufferBuilder']]], - ['releasebufferpointer',['ReleaseBufferPointer',['../classflatbuffers_1_1_flat_buffer_builder.html#a0e715d9019060b4b753c4e5228be56e8',1,'flatbuffers::FlatBufferBuilder']]], - ['releasebytebuffer',['releaseByteBuffer',['../interfacecom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#a6cc2f5b5077273da8180b63a5db24b8f',1,'com::google::flatbuffers::FlatBufferBuilder::ByteBufferFactory']]], + ['releasebytebuffer',['releaseByteBuffer',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder_1_1_byte_buffer_factory.html#ab732dc8eba204b490118c322873c2bca',1,'com::google::flatbuffers::FlatBufferBuilder::ByteBufferFactory']]], ['releaseraw',['ReleaseRaw',['../classflatbuffers_1_1_flat_buffer_builder.html#aa090a68856f7b554cc7cac3c279fb416',1,'flatbuffers::FlatBufferBuilder']]], ['removesizeprefix',['removeSizePrefix',['../classcom_1_1google_1_1flatbuffers_1_1_byte_buffer_util.html#a58d6c39c53a0c981a2f72a5eca7d992c',1,'com::google::flatbuffers::ByteBufferUtil']]] ]; diff --git a/search/functions_c.js b/search/functions_c.js index caa92122..1af63a70 100644 --- a/search/functions_c.js +++ b/search/functions_c.js @@ -1,5 +1,6 @@ var searchData= [ + ['setdefault',['setDefault',['../classcom_1_1google_1_1flatbuffers_1_1_utf8.html#a59a8ffdd2205343d3c64d0b764eeab17',1,'com::google::flatbuffers::Utf8']]], ['sizedbytearray',['SizedByteArray',['../class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2',1,'FlatBuffers.FlatBufferBuilder.SizedByteArray()'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a81a5c2d7ab36e913cc16d9499aabe078',1,'com.google.flatbuffers.FlatBufferBuilder.sizedByteArray(int start, int length)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aa636cf5190524c43212b6d96239d7672',1,'com.google.flatbuffers.FlatBufferBuilder.sizedByteArray()'],['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a967e7dc8f051d4e73b3155e3b281d7b4',1,'Google\FlatBuffers\FlatbufferBuilder\sizedByteArray()']]], ['sizedinputstream',['sizedInputStream',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab8fc86fe501b182b4a1a50fcdbcb3e6b',1,'com::google::flatbuffers::FlatBufferBuilder']]] ]; diff --git a/search/searchdata.js b/search/searchdata.js index 19b7d817..cbe8c1aa 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,7 +1,7 @@ var indexSectionsWithContent = { 0: "$_abcdefghiknoprstuvw", - 1: "abdfhiosv", + 1: "abdfhiosuv", 2: "f", 3: "bf", 4: "_acdefginoprs", diff --git a/structflatbuffers_1_1_string-members.html b/structflatbuffers_1_1_string-members.html index f286c404..9f5da1b6 100644 --- a/structflatbuffers_1_1_string-members.html +++ b/structflatbuffers_1_1_string-members.html @@ -97,13 +97,19 @@ $(document).ready(function(){initNavTree('structflatbuffers_1_1_string.html','') <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>begin</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>begin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>c_str</b>() const (defined in <a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>cbegin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cend</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>const_iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>Data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>const_reverse_iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>crbegin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>crend</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>Data</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Data</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>end</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>end</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>FLATBUFFERS_ATTRIBUTE</b>(deprecated("use size() instead")) uoffset_t Length() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Get</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>GetAs</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetAsString</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> @@ -111,15 +117,19 @@ $(document).ready(function(){initNavTree('structflatbuffers_1_1_string.html','') <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetMutableObject</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>GetStructFromOffset</b>(size_t o) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>Length</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>length_</b> (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>LookupByKey</b>(K key) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>mutable_return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>Mutate</b>(uoffset_t i, const char &val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MutateOffset</b>(uoffset_t i, const uint8_t *val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>operator<</b>(const String &o) const (defined in <a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator[]</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>length_</b> (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">protected</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>LookupByKey</b>(K key) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>mutable_return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Mutate</b>(uoffset_t i, const char &val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>MutateOffset</b>(uoffset_t i, const uint8_t *val) (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator<</b>(const String &o) const (defined in <a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>operator[]</b>(uoffset_t i) const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rbegin</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>rbegin</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>rend</b>() (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>rend</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>return_type</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>reverse_iterator</b> typedef (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>size</b>() const (defined in <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a>)</td><td class="entry"><a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>str</b>() const (defined in <a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>string_view</b>() const (defined in <a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_string.html">flatbuffers::String</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> diff --git a/structflatbuffers_1_1_string.html b/structflatbuffers_1_1_string.html index 3bce5126..ce83cf67 100644 --- a/structflatbuffers_1_1_string.html +++ b/structflatbuffers_1_1_string.html @@ -125,6 +125,18 @@ flatbuffers::string_view </td><td class="memItemRight" valign="bottom"><b>s <tr class="memitem:ac4633f563a5a52980ff0b56fa683a4de inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="ac4633f563a5a52980ff0b56fa683a4de"></a> <a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>begin</b> () const</td></tr> <tr class="separator:ac4633f563a5a52980ff0b56fa683a4de inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aa690e1a3a5fb68942b508952801b6209 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="aa690e1a3a5fb68942b508952801b6209"></a> +<a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>cbegin</b> () const</td></tr> +<tr class="separator:aa690e1a3a5fb68942b508952801b6209 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:af85a734b2feb15c6279784b5b81f009b inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="af85a734b2feb15c6279784b5b81f009b"></a> +<a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>cend</b> () const</td></tr> +<tr class="separator:af85a734b2feb15c6279784b5b81f009b inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a422c0671cb2c884865cb09f09141fc1f inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a422c0671cb2c884865cb09f09141fc1f"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>crbegin</b> () const</td></tr> +<tr class="separator:a422c0671cb2c884865cb09f09141fc1f inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a0f25c70b8f279c53a93141a91dff5d1e inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a0f25c70b8f279c53a93141a91dff5d1e"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>crend</b> () const</td></tr> +<tr class="separator:a0f25c70b8f279c53a93141a91dff5d1e inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa754e17cb08c36fb8442784c6bc442da inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="aa754e17cb08c36fb8442784c6bc442da"></a> const uint8_t * </td><td class="memItemRight" valign="bottom"><b>Data</b> () const</td></tr> <tr class="separator:aa754e17cb08c36fb8442784c6bc442da inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> @@ -143,6 +155,9 @@ char * </td><td class="memItemRight" valign="bottom"><b>data</b> ()</td></t <tr class="memitem:a9fcfb2e218f49d6d66a8b4a22aa58755 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a9fcfb2e218f49d6d66a8b4a22aa58755"></a> <a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> </td><td class="memItemRight" valign="bottom"><b>end</b> () const</td></tr> <tr class="separator:a9fcfb2e218f49d6d66a8b4a22aa58755 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a1761e25f7960e8b71a9a393b5d538d57 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a1761e25f7960e8b71a9a393b5d538d57"></a> + </td><td class="memItemRight" valign="bottom"><b>FLATBUFFERS_ATTRIBUTE</b> (deprecated("use size() instead")) uoffset_t Length() const</td></tr> +<tr class="separator:a1761e25f7960e8b71a9a393b5d538d57 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0c322798bd0cebd2d20b0b0f92de2f9b inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a0c322798bd0cebd2d20b0b0f92de2f9b"></a> return_type </td><td class="memItemRight" valign="bottom"><b>Get</b> (uoffset_t i) const</td></tr> <tr class="separator:a0c322798bd0cebd2d20b0b0f92de2f9b inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> @@ -161,9 +176,6 @@ mutable_return_type </td><td class="memItemRight" valign="bottom"><b>GetMut <tr class="memitem:a1dc52eb3974e0484a5421752589d436b inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a1dc52eb3974e0484a5421752589d436b"></a> const void * </td><td class="memItemRight" valign="bottom"><b>GetStructFromOffset</b> (size_t o) const</td></tr> <tr class="separator:a1dc52eb3974e0484a5421752589d436b inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a7ad86e7c749fd750a4e506439a358b06 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a7ad86e7c749fd750a4e506439a358b06"></a> -uoffset_t </td><td class="memItemRight" valign="bottom"><b>Length</b> () const</td></tr> -<tr class="separator:a7ad86e7c749fd750a4e506439a358b06 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:abf919e27aa3e9b60ac30386972c94e65 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="abf919e27aa3e9b60ac30386972c94e65"></a> return_type </td><td class="memItemRight" valign="bottom"><b>LookupByKey</b> (K key) const</td></tr> <tr class="separator:abf919e27aa3e9b60ac30386972c94e65 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> @@ -176,6 +188,18 @@ void </td><td class="memItemRight" valign="bottom"><b>MutateOffset</b> (uof <tr class="memitem:ac3ac8d3a0c31f1c822d8f2d37e8099cc inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="ac3ac8d3a0c31f1c822d8f2d37e8099cc"></a> return_type </td><td class="memItemRight" valign="bottom"><b>operator[]</b> (uoffset_t i) const</td></tr> <tr class="separator:ac3ac8d3a0c31f1c822d8f2d37e8099cc inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a87adb1d483cc7b57aa1a792271ecef6d inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a87adb1d483cc7b57aa1a792271ecef6d"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rbegin</b> ()</td></tr> +<tr class="separator:a87adb1d483cc7b57aa1a792271ecef6d inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a1e75de0fd258865cf18c504fc8ed1a86 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a1e75de0fd258865cf18c504fc8ed1a86"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rbegin</b> () const</td></tr> +<tr class="separator:a1e75de0fd258865cf18c504fc8ed1a86 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a921bd6ee4b999b1c9ec9abc339c377b2 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a921bd6ee4b999b1c9ec9abc339c377b2"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rend</b> ()</td></tr> +<tr class="separator:a921bd6ee4b999b1c9ec9abc339c377b2 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5d61bd0fd7d9017b1d62c45416666669 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a5d61bd0fd7d9017b1d62c45416666669"></a> +<a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">const_reverse_iterator</a> </td><td class="memItemRight" valign="bottom"><b>rend</b> () const</td></tr> +<tr class="separator:a5d61bd0fd7d9017b1d62c45416666669 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a602e093850b2984a95581edc0b47b2f3 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a602e093850b2984a95581edc0b47b2f3"></a> uoffset_t </td><td class="memItemRight" valign="bottom"><b>size</b> () const</td></tr> <tr class="separator:a602e093850b2984a95581edc0b47b2f3 inherit pub_methods_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> @@ -186,6 +210,9 @@ Additional Inherited Members</h2></td></tr> <tr class="memitem:a66212ee5146550ed418a358a8b756dc6 inherit pub_types_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a66212ee5146550ed418a358a8b756dc6"></a> typedef <a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>< char, typename <a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a>< char >::return_type > </td><td class="memItemRight" valign="bottom"><b>const_iterator</b></td></tr> <tr class="separator:a66212ee5146550ed418a358a8b756dc6 inherit pub_types_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aff94a022cb6a11c6704e6a624f2c285a inherit pub_types_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="aff94a022cb6a11c6704e6a624f2c285a"></a> +typedef <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a>< <a class="el" href="structflatbuffers_1_1_vector_iterator.html">const_iterator</a> > </td><td class="memItemRight" valign="bottom"><b>const_reverse_iterator</b></td></tr> +<tr class="separator:aff94a022cb6a11c6704e6a624f2c285a inherit pub_types_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0eeca1798d12e29e1003e6f831668986 inherit pub_types_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a0eeca1798d12e29e1003e6f831668986"></a> typedef <a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a>< char, typename <a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a>< char >::mutable_return_type > </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr> <tr class="separator:a0eeca1798d12e29e1003e6f831668986 inherit pub_types_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> @@ -195,6 +222,9 @@ typedef <a class="el" href="structflatbuffers_1_1_indirect_helper.html">Indirect <tr class="memitem:a28dab085738663f5c866cf6570bb6289 inherit pub_types_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a28dab085738663f5c866cf6570bb6289"></a> typedef <a class="el" href="structflatbuffers_1_1_indirect_helper.html">IndirectHelper</a>< char >::return_type </td><td class="memItemRight" valign="bottom"><b>return_type</b></td></tr> <tr class="separator:a28dab085738663f5c866cf6570bb6289 inherit pub_types_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aebe9837cb57e88212975ec5187f37c55 inherit pub_types_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="aebe9837cb57e88212975ec5187f37c55"></a> +typedef <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">VectorReverseIterator</a>< <a class="el" href="structflatbuffers_1_1_vector_iterator.html">iterator</a> > </td><td class="memItemRight" valign="bottom"><b>reverse_iterator</b></td></tr> +<tr class="separator:aebe9837cb57e88212975ec5187f37c55 inherit pub_types_classflatbuffers_1_1_vector"><td class="memSeparator" colspan="2"> </td></tr> <tr class="inherit_header pro_attribs_classflatbuffers_1_1_vector"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classflatbuffers_1_1_vector')"><img src="closed.png" alt="-"/> Protected Attributes inherited from <a class="el" href="classflatbuffers_1_1_vector.html">flatbuffers::Vector< char ></a></td></tr> <tr class="memitem:a62170e531ab5fcef8b4c717c0e84553d inherit pro_attribs_classflatbuffers_1_1_vector"><td class="memItemLeft" align="right" valign="top"><a id="a62170e531ab5fcef8b4c717c0e84553d"></a> uoffset_t </td><td class="memItemRight" valign="bottom"><b>length_</b></td></tr> diff --git a/structflatbuffers_1_1_vector_iterator-members.html b/structflatbuffers_1_1_vector_iterator-members.html index 80b89c60..129020a2 100644 --- a/structflatbuffers_1_1_vector_iterator-members.html +++ b/structflatbuffers_1_1_vector_iterator-members.html @@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('structflatbuffers_1_1_vector_iterator. <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator++</b>(int) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>operator+=</b>(const uoffset_t &offset) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator-</b>(const VectorIterator &other) const (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> - <tr bgcolor="#f0f0f0"><td class="entry"><b>operator-</b>(const uoffset_t &offset) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>operator-</b>(const uoffset_t &offset) const (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator--</b>() (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>operator--</b>(int) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator-=</b>(const uoffset_t &offset) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> @@ -117,6 +117,7 @@ $(document).ready(function(){initNavTree('structflatbuffers_1_1_vector_iterator. <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>value_type</b> typedef (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"></td></tr> <tr bgcolor="#f0f0f0"><td class="entry"><b>VectorIterator</b>(const uint8_t *data, uoffset_t i) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>VectorIterator</b>(const VectorIterator &other) (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>VectorIterator</b>() (defined in <a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_iterator.html">flatbuffers::VectorIterator< T, IT ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> </table></div><!-- contents --> </div><!-- doc-content --> <!-- Google Analytics --> diff --git a/structflatbuffers_1_1_vector_iterator.html b/structflatbuffers_1_1_vector_iterator.html index 5b36c2db..55df5d5e 100644 --- a/structflatbuffers_1_1_vector_iterator.html +++ b/structflatbuffers_1_1_vector_iterator.html @@ -137,9 +137,9 @@ IT </td><td class="memItemRight" valign="bottom"><b>operator*</b> () const< <tr class="memitem:a85a3748c7f97adba199d7421d9962941"><td class="memItemLeft" align="right" valign="top"><a id="a85a3748c7f97adba199d7421d9962941"></a> difference_type </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const <a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> &other) const</td></tr> <tr class="separator:a85a3748c7f97adba199d7421d9962941"><td class="memSeparator" colspan="2"> </td></tr> -<tr class="memitem:a5d2754d1859696e7a6d43e74d4f9ae29"><td class="memItemLeft" align="right" valign="top"><a id="a5d2754d1859696e7a6d43e74d4f9ae29"></a> -<a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const uoffset_t &offset)</td></tr> -<tr class="separator:a5d2754d1859696e7a6d43e74d4f9ae29"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:aa286857279ca9662fed989c0c3efe0d3"><td class="memItemLeft" align="right" valign="top"><a id="aa286857279ca9662fed989c0c3efe0d3"></a> +<a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> </td><td class="memItemRight" valign="bottom"><b>operator-</b> (const uoffset_t &offset) const</td></tr> +<tr class="separator:aa286857279ca9662fed989c0c3efe0d3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae33269dea219a9a690f00c23d67c0208"><td class="memItemLeft" align="right" valign="top"><a id="ae33269dea219a9a690f00c23d67c0208"></a> <a class="el" href="structflatbuffers_1_1_vector_iterator.html">VectorIterator</a> & </td><td class="memItemRight" valign="bottom"><b>operator--</b> ()</td></tr> <tr class="separator:ae33269dea219a9a690f00c23d67c0208"><td class="memSeparator" colspan="2"> </td></tr> diff --git a/structflatbuffers_1_1_vector_iterator.js b/structflatbuffers_1_1_vector_iterator.js index 54e7f28e..8dd39e2e 100644 --- a/structflatbuffers_1_1_vector_iterator.js +++ b/structflatbuffers_1_1_vector_iterator.js @@ -7,6 +7,7 @@ var structflatbuffers_1_1_vector_iterator = [ "value_type", "structflatbuffers_1_1_vector_iterator.html#aaf980961b89f2b647a07135246b75088", null ], [ "VectorIterator", "structflatbuffers_1_1_vector_iterator.html#a415a449a3d8a04271260ecb380c3fa49", null ], [ "VectorIterator", "structflatbuffers_1_1_vector_iterator.html#a7e10ae7b14f5f79bf0da6bbed7c17b5d", null ], + [ "VectorIterator", "structflatbuffers_1_1_vector_iterator.html#a223f3bc61bdcff57f900ea8be7a66ca3", null ], [ "operator!=", "structflatbuffers_1_1_vector_iterator.html#a0b6a5544a9c48f2409690de7bfff6a63", null ], [ "operator*", "structflatbuffers_1_1_vector_iterator.html#a19fde04fa43b5967564883517ed10a82", null ], [ "operator+", "structflatbuffers_1_1_vector_iterator.html#aff7a7187d818290ee71274335f079191", null ], @@ -14,7 +15,7 @@ var structflatbuffers_1_1_vector_iterator = [ "operator++", "structflatbuffers_1_1_vector_iterator.html#a428a3df67f852563e25a040e41f3aef9", null ], [ "operator+=", "structflatbuffers_1_1_vector_iterator.html#a368b4ee9b89ab783045f96a2f69dec67", null ], [ "operator-", "structflatbuffers_1_1_vector_iterator.html#a85a3748c7f97adba199d7421d9962941", null ], - [ "operator-", "structflatbuffers_1_1_vector_iterator.html#a5d2754d1859696e7a6d43e74d4f9ae29", null ], + [ "operator-", "structflatbuffers_1_1_vector_iterator.html#aa286857279ca9662fed989c0c3efe0d3", null ], [ "operator--", "structflatbuffers_1_1_vector_iterator.html#ae33269dea219a9a690f00c23d67c0208", null ], [ "operator--", "structflatbuffers_1_1_vector_iterator.html#a105a4e408b45c324f2ad445f5145bf51", null ], [ "operator-=", "structflatbuffers_1_1_vector_iterator.html#af17653cb8a120a9bbd35dcb35a570729", null ], diff --git a/structflatbuffers_1_1_vector_reverse_iterator-members.html b/structflatbuffers_1_1_vector_reverse_iterator-members.html new file mode 100644 index 00000000..6a5de634 --- /dev/null +++ b/structflatbuffers_1_1_vector_reverse_iterator-members.html @@ -0,0 +1,112 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: Member List</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('structflatbuffers_1_1_vector_reverse_iterator.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">flatbuffers::VectorReverseIterator< Iterator > Member List</div> </div> +</div><!--header--> +<div class="contents"> + +<p>This is the complete list of members for <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a>, including all inherited members.</p> +<table class="directory"> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator*</b>() const (defined in <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0"><td class="entry"><b>operator-></b>() const (defined in <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a></td><td class="entry"><span class="mlabel">inline</span></td></tr> + <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>VectorReverseIterator</b>(Iterator iter) (defined in <a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a>)</td><td class="entry"><a class="el" href="structflatbuffers_1_1_vector_reverse_iterator.html">flatbuffers::VectorReverseIterator< Iterator ></a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr> +</table></div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/structflatbuffers_1_1_vector_reverse_iterator.html b/structflatbuffers_1_1_vector_reverse_iterator.html new file mode 100644 index 00000000..38d446b4 --- /dev/null +++ b/structflatbuffers_1_1_vector_reverse_iterator.html @@ -0,0 +1,133 @@ +<!-- HTML header for doxygen 1.8.6--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.13"/> +<title>FlatBuffers: flatbuffers::VectorReverseIterator< Iterator > Struct Template Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> + $(document).ready(initResizable); +</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet"> +<link href="style.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea" style="height: 110px;"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="commonprojectlogo"> + <img alt="Logo" src="fpl_logo_small.png"/> + </td> + <td style="padding-left: 0.5em;"> + <div id="projectname">FlatBuffers + </div> + <div style="font-size:12px;"> + An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>. + </div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.13 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> +<script type="text/javascript" src="menudata.js"></script> +<script type="text/javascript" src="menu.js"></script> +<script type="text/javascript"> +$(function() { + initMenu('',true,false,'search.php','Search'); + $(document).ready(function() { init_search(); }); +}); +</script> +<div id="main-nav"></div> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +$(document).ready(function(){initNavTree('structflatbuffers_1_1_vector_reverse_iterator.html','');}); +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="summary"> +<a href="#pub-methods">Public Member Functions</a> | +<a href="structflatbuffers_1_1_vector_reverse_iterator-members.html">List of all members</a> </div> + <div class="headertitle"> +<div class="title">flatbuffers::VectorReverseIterator< Iterator > Struct Template Reference</div> </div> +</div><!--header--> +<div class="contents"> +<div class="dynheader"> +Inheritance diagram for flatbuffers::VectorReverseIterator< Iterator >:</div> +<div class="dyncontent"> + <div class="center"> + <img src="structflatbuffers_1_1_vector_reverse_iterator.png" usemap="#flatbuffers::VectorReverseIterator_3C_20Iterator_20_3E_map" alt=""/> + <map id="flatbuffers::VectorReverseIterator_3C_20Iterator_20_3E_map" name="flatbuffers::VectorReverseIterator_3C_20Iterator_20_3E_map"> +</map> + </div></div> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> +Public Member Functions</h2></td></tr> +<tr class="memitem:a205661c2212f77d6734bcaf4ee6a1223"><td class="memItemLeft" align="right" valign="top"><a id="a205661c2212f77d6734bcaf4ee6a1223"></a> +Iterator::value_type </td><td class="memItemRight" valign="bottom"><b>operator*</b> () const</td></tr> +<tr class="separator:a205661c2212f77d6734bcaf4ee6a1223"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a5e520ed4596b76dfcc7864d219df754b"><td class="memItemLeft" align="right" valign="top"><a id="a5e520ed4596b76dfcc7864d219df754b"></a> +Iterator::value_type </td><td class="memItemRight" valign="bottom"><b>operator-></b> () const</td></tr> +<tr class="separator:a5e520ed4596b76dfcc7864d219df754b"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a56a6c43372b85782f069c6c2b161d866"><td class="memItemLeft" align="right" valign="top"><a id="a56a6c43372b85782f069c6c2b161d866"></a> + </td><td class="memItemRight" valign="bottom"><b>VectorReverseIterator</b> (Iterator iter)</td></tr> +<tr class="separator:a56a6c43372b85782f069c6c2b161d866"><td class="memSeparator" colspan="2"> </td></tr> +</table> +<hr/>The documentation for this struct was generated from the following file:<ul> +<li><a class="el" href="flatbuffers_8h_source.html">flatbuffers.h</a></li> +</ul> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- Google Analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-49880327-7', 'auto'); + ga('send', 'pageview'); +</script> +</body> +</html> diff --git a/structflatbuffers_1_1_vector_reverse_iterator.js b/structflatbuffers_1_1_vector_reverse_iterator.js new file mode 100644 index 00000000..6259a5af --- /dev/null +++ b/structflatbuffers_1_1_vector_reverse_iterator.js @@ -0,0 +1,6 @@ +var structflatbuffers_1_1_vector_reverse_iterator = +[ + [ "VectorReverseIterator", "structflatbuffers_1_1_vector_reverse_iterator.html#a56a6c43372b85782f069c6c2b161d866", null ], + [ "operator*", "structflatbuffers_1_1_vector_reverse_iterator.html#a205661c2212f77d6734bcaf4ee6a1223", null ], + [ "operator->", "structflatbuffers_1_1_vector_reverse_iterator.html#a5e520ed4596b76dfcc7864d219df754b", null ] +]; \ No newline at end of file diff --git a/structflatbuffers_1_1_vector_reverse_iterator.png b/structflatbuffers_1_1_vector_reverse_iterator.png new file mode 100644 index 0000000000000000000000000000000000000000..718fca0a15a19469277af3aeb865d261716bf563 GIT binary patch literal 834 zcmeAS@N?(olHy`uVBq!ia0y~yVB`R@12~w0<fSI*$3RLVz$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op<DcT#k|;zhDNSA`rNGD#VC^f$5^Bi(^Oy<J-A6%RVdcw78qk{a*iA zEn#+Iv4U;x|J14_H>TNY)o>JccW_j*G^xC0OB7H!%5zA;qiZkoqkx*$2hP^h?yJ<g zJ5S2~=dG~p(|%SL8~4fePyR3eE#i0Z$;+2Dlb3#)FZWS<>Z{!uruS=kJ=gt|>rm*9 zEr0&@>k1o}z=hH^rXABxPjk!jC_1{`@rtnSLrxCSvyNvL8!b#d8?ABghLo_t`TeUc zPG45FQo8!#_4+Nx`tnN(x@VaO=9r)MTzHzx^tI`mVpZ?>!1daXTA#6NDV<0<yjIcv z@xpUlRaPq_`**N^JZt-C&8N>-E^yA9TEER=p^=s8DMpoF&kqK;&kntDb;6Tb`T4w) z{)qo=cU%&-J$9SQ&%5us3^*nwA-rqr;No(FnW65kJ;Q-K0r7VJ$p#&>nmr|08j_AB z2rwK0h6zK5WQ!w%fH6ligF>1B8>7P+1s<k`8IBSx42I1H91I}Suqdn->Hq~U6T=&X zyr@9v{hB+b4RY%zGaoqcdG@>7=}&IXV@x>tJFw?+U1)G)MO>c4mGz7ZzPSo;EB{Ir z$Xt3U=kq1|$C)2DEqACp=RK=r*DmpupPP;Qwe$qs*S+#Ap7;JX%i}F)Teg`l?$Vgv z>?1pUBeUYQT~AhuHZM6mheKqw(3guvH!p=~Ti%jVW@1cu66<>6JM+_v%I}KLJM=8S z<(m<BdBF>ZCkyYbiJIwk*XI18{X#tsC6UK0y(h(-|FuglZntx|schHmwT7{#nYN*m zFN9gJFMRuk;o{RbUYl3$T-sH!urg3^v7DlG?k470&B=QVr3F}{=NIoXT{d~v*N$p| za@$8%27STG_rJ9}X+D1T=1Q=#u};^sD?6s-o-0~q!uiDJa>i!UGSkhISs4CVo1+J_ fh=8Erw;wF&40C$8RJL3KCU^!<S3j3^P6<r_Nakv; literal 0 HcmV?d00001 diff --git a/usergroup0.html b/usergroup0.html index 0a934c4b..761e20b2 100644 --- a/usergroup0.html +++ b/usergroup0.html @@ -107,6 +107,7 @@ $(document).ready(function(){initNavTree('usergroup0.html','');}); <li><a href="flatbuffers_guide_use_dart.html"><span>Use in Dart</span></a></li> <li><a href="flatbuffers_guide_use_lua.html"><span>Use in Lua</span></a></li> <li><a href="flatbuffers_guide_use_lobster.html"><span>Use in Lobster</span></a></li> +<li><a href="flatbuffers_guide_use_rust.html"><span>Use in Rust</span></a></li> <li><a href="flexbuffers.html"><span>Schema-less version</span></a></li> <li><a href="usergroup1.html"><span>gRPC</span></a></li> </ul> -- GitLab