From b8d0227442085a722255e92ed5aa1914a525fde0 Mon Sep 17 00:00:00 2001
From: Wouter van Oortmerssen <wvo@google.com>
Date: Wed, 6 Apr 2016 17:50:32 -0700
Subject: [PATCH] updated docs.

---
 _flat_buffer_builder_8cs.html                 |    2 +-
 _flat_buffer_builder_8java.html               |    2 +-
 _flatbuffer_builder_8php.html                 |    2 +-
 annotated.html                                |    2 +-
 ...ffers_1_1_flat_buffer_builder-members.html |    5 +-
 ..._flat_buffers_1_1_flat_buffer_builder.html |   28 +-
 class_flat_buffers_1_1_flat_buffer_builder.js |    3 +-
 ...uffers_1_1_flatbuffer_builder-members.html |    2 +-
 ...1_flat_buffers_1_1_flatbuffer_builder.html |    2 +-
 ...ffers_1_1_flat_buffer_builder-members.html |    2 +-
 ..._1flatbuffers_1_1_flat_buffer_builder.html |    2 +-
 classes.html                                  |    8 +-
 ...ffers_1_1_flat_buffer_builder-members.html |    7 +-
 classflatbuffers_1_1_flat_buffer_builder.html |  161 +-
 classflatbuffers_1_1_flat_buffer_builder.js   |    5 +
 contributing.html                             |    2 +-
 dir_05194b7bb14e4bdbd759acf3e4294839.html     |    2 +-
 dir_0e37bed226164927aa2c526e48e3c9af.html     |    2 +-
 dir_1036070c9379c90b9865e1585bb57938.html     |    2 +-
 dir_2867b8401105090ba43035c8b1fd9c0c.html     |    2 +-
 dir_427baa8a9a5be237f298d4545d0d1ce2.html     |    2 +-
 dir_4d44a7834a0220e3079d88886922def6.html     |    2 +-
 dir_6f01889fa69585f5458dd2f93b8129fa.html     |    2 +-
 dir_7837fde3ab9c1fb2fc5be7b717af8d79.html     |    2 +-
 dir_8a22873406ddef3ffbbc0bacea2033ba.html     |    2 +-
 dir_93c6ba7fb77bae0709fae89c9c13b44a.html     |    2 +-
 dir_aa1ba5078724e0ea09d9b49b3a016128.html     |    2 +-
 dir_bebd57e0257eca849e35e7c4620d27be.html     |    2 +-
 dir_d44c64559bbebec7f509842c48db8b23.html     |    2 +-
 flatbuffers_8h.html                           |    2 +-
 flatbuffers_8h_source.html                    | 2794 +++++++++--------
 flatbuffers_8js.html                          |    5 +-
 flatbuffers_benchmarks.html                   |    2 +-
 flatbuffers_grammar.html                      |    2 +-
 flatbuffers_guide_building.html               |    2 +-
 flatbuffers_guide_tutorial.html               |    8 +-
 flatbuffers_guide_use_cpp.html                |    2 +-
 flatbuffers_guide_use_go.html                 |    2 +-
 flatbuffers_guide_use_java_c-sharp.html       |    2 +-
 flatbuffers_guide_use_javascript.html         |    2 +-
 flatbuffers_guide_use_php.html                |    2 +-
 flatbuffers_guide_use_python.html             |    2 +-
 flatbuffers_guide_using_schema_compiler.html  |    2 +-
 flatbuffers_guide_writing_schema.html         |   21 +-
 flatbuffers_internals.html                    |    2 +-
 flatbuffers_support.html                      |    2 +-
 flatbuffers_white_paper.html                  |    2 +-
 functions.html                                |   18 +-
 functions_func.html                           |   13 +-
 functions_prop.html                           |    5 +-
 functions_vars.html                           |    2 +-
 group__flatbuffers__cpp__api.html             |    2 +-
 group__flatbuffers__cpp__api.js               |    5 +
 group__flatbuffers__csharp__api.html          |    2 +-
 group__flatbuffers__go__api.html              |    2 +-
 group__flatbuffers__java__api.html            |    2 +-
 group__flatbuffers__javascript__api.html      |   34 +-
 group__flatbuffers__javascript__api.js        |    1 +
 group__flatbuffers__php__api.html             |    2 +-
 group__flatbuffers__python__api.html          |    2 +-
 index.html                                    |    2 +-
 md__go_api.html                               |    2 +-
 modules.html                                  |    2 +-
 namespace_flat_buffers.html                   |    2 +-
 navtree.js                                    |    2 +-
 navtreeindex0.js                              |   55 +-
 search/all_2.js                               |    6 +-
 search/all_4.js                               |    4 +-
 search/all_7.js                               |    8 +-
 search/all_e.js                               |    2 +-
 search/classes_0.js                           |    4 +-
 search/functions_1.js                         |    6 +-
 search/functions_2.js                         |    3 +-
 search/functions_5.js                         |    4 +-
 search/functions_9.js                         |    2 +-
 search/properties_1.html                      |   26 +
 search/properties_1.js                        |    4 +
 search/search.js                              |    2 +-
 search/variables_3.js                         |    1 +
 usergroup0.html                               |    2 +-
 usergroup1.html                               |    2 +-
 81 files changed, 1869 insertions(+), 1479 deletions(-)
 create mode 100644 search/properties_1.html
 create mode 100644 search/properties_1.js

diff --git a/_flat_buffer_builder_8cs.html b/_flat_buffer_builder_8cs.html
index 3dd9c1d0..3469a177 100644
--- a/_flat_buffer_builder_8cs.html
+++ b/_flat_buffer_builder_8cs.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/_flat_buffer_builder_8java.html b/_flat_buffer_builder_8java.html
index cd902a4c..d796c656 100644
--- a/_flat_buffer_builder_8java.html
+++ b/_flat_buffer_builder_8java.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/_flatbuffer_builder_8php.html b/_flatbuffer_builder_8php.html
index 2ac10289..1168af88 100644
--- a/_flatbuffer_builder_8php.html
+++ b/_flatbuffer_builder_8php.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/annotated.html b/annotated.html
index ac3e22cf..52ce6566 100644
--- a/annotated.html
+++ b/annotated.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/class_flat_buffers_1_1_flat_buffer_builder-members.html b/class_flat_buffers_1_1_flat_buffer_builder-members.html
index ac259e3e..f9c66e4c 100644
--- a/class_flat_buffers_1_1_flat_buffer_builder-members.html
+++ b/class_flat_buffers_1_1_flat_buffer_builder-members.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -148,7 +148,8 @@ $(document).ready(function(){initNavTree('class_flat_buffers_1_1_flat_buffer_bui
   <tr class="even"><td class="entry"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b">Finish</a>(int rootTable)</td><td class="entry"><a class="el" href="class_flat_buffers_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="class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73">Finish</a>(int rootTable, string fileIdentifier)</td><td class="entry"><a class="el" href="class_flat_buffers_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="class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d">FlatBufferBuilder</a>(int initialSize)</td><td class="entry"><a class="el" href="class_flat_buffers_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="class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2">SizedByteArray</a>()</td><td class="entry"><a class="el" href="class_flat_buffers_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="class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13">ForceDefaults</a></td><td class="entry"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html">FlatBuffers.FlatBufferBuilder</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2">SizedByteArray</a>()</td><td class="entry"><a class="el" href="class_flat_buffers_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 -->
 <!-- Google Analytics -->
diff --git a/class_flat_buffers_1_1_flat_buffer_builder.html b/class_flat_buffers_1_1_flat_buffer_builder.html
index 96a20e89..9f691709 100644
--- a/class_flat_buffers_1_1_flat_buffer_builder.html
+++ b/class_flat_buffers_1_1_flat_buffer_builder.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -201,6 +201,9 @@ Properties</h2></td></tr>
 <tr class="memitem:a6f0cbd075878e2c0f021c0947cc8a211"><td class="memItemLeft" align="right" valign="top">ByteBuffer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a6f0cbd075878e2c0f021c0947cc8a211">DataBuffer</a><code> [get]</code></td></tr>
 <tr class="memdesc:a6f0cbd075878e2c0f021c0947cc8a211"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the ByteBuffer representing the FlatBuffer.  <a href="#a6f0cbd075878e2c0f021c0947cc8a211">More...</a><br /></td></tr>
 <tr class="separator:a6f0cbd075878e2c0f021c0947cc8a211"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a40d549b2db96b91b2345d1a44ff3fe13"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13">ForceDefaults</a><code> [get, set]</code></td></tr>
+<tr class="memdesc:a40d549b2db96b91b2345d1a44ff3fe13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets and sets a Boolean to disable the optimization when serializing default values to a Table.  <a href="#a40d549b2db96b91b2345d1a44ff3fe13">More...</a><br /></td></tr>
+<tr class="separator:a40d549b2db96b91b2345d1a44ff3fe13"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
 <a class="anchor" id="ae24f93e3f9672846dd241d585d62c63d"></a>
@@ -827,6 +830,29 @@ Properties</h2></td></tr>
 <p>This is typically only called after you call <code>Finish()</code>. </p>
 <dl class="section return"><dt>Returns</dt><dd>Returns the ByteBuffer for this FlatBuffer. </dd></dl>
 
+</div>
+</div>
+<a class="anchor" id="a40d549b2db96b91b2345d1a44ff3fe13"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool FlatBuffers.FlatBufferBuilder.ForceDefaults</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">get</span><span class="mlabel">set</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Gets and sets a Boolean to disable the optimization when serializing default values to a Table. </p>
+<p>In order to save space, fields that are set to their default value don't get serialized into the buffer. </p>
+
 </div>
 </div>
 <hr/>The documentation for this class was generated from the following file:<ul>
diff --git a/class_flat_buffers_1_1_flat_buffer_builder.js b/class_flat_buffers_1_1_flat_buffer_builder.js
index 816b583f..7e75c216 100644
--- a/class_flat_buffers_1_1_flat_buffer_builder.js
+++ b/class_flat_buffers_1_1_flat_buffer_builder.js
@@ -19,5 +19,6 @@ var class_flat_buffers_1_1_flat_buffer_builder =
     [ "Finish", "class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b", null ],
     [ "Finish", "class_flat_buffers_1_1_flat_buffer_builder.html#ac7a48fd125d3f65f1bc1bc67d74eae73", null ],
     [ "SizedByteArray", "class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2", null ],
-    [ "DataBuffer", "class_flat_buffers_1_1_flat_buffer_builder.html#a6f0cbd075878e2c0f021c0947cc8a211", null ]
+    [ "DataBuffer", "class_flat_buffers_1_1_flat_buffer_builder.html#a6f0cbd075878e2c0f021c0947cc8a211", null ],
+    [ "ForceDefaults", "class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13", null ]
 ];
\ No newline at end of file
diff --git a/class_google_1_1_flat_buffers_1_1_flatbuffer_builder-members.html b/class_google_1_1_flat_buffers_1_1_flatbuffer_builder-members.html
index fdb1f999..6b4b639a 100644
--- a/class_google_1_1_flat_buffers_1_1_flatbuffer_builder-members.html
+++ b/class_google_1_1_flat_buffers_1_1_flatbuffer_builder-members.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html b/class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html
index bb1b950b..25352492 100644
--- a/class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html
+++ b/class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
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 011823e7..1b244567 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
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
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 a1d3bec2..e21fbde0 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
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/classes.html b/classes.html
index 526638ee..2ad5a490 100644
--- a/classes.html
+++ b/classes.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -129,9 +129,9 @@ $(document).ready(function(){initNavTree('classes.html','');});
 <div class="qindex"><a class="qindex" href="#letter_F">F</a></div>
 <table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
 <tr><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (flatbuffers)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (com.google.flatbuffers)&#160;&#160;&#160;</td></tr>
-<tr><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>)&#160;&#160;&#160;</td><td></td></tr>
-<tr><td valign="top"><a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html">FlatbufferBuilder</a> (Google\FlatBuffers)&#160;&#160;&#160;</td><td></td><td></td></tr>
+</td><td valign="top"><a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html">FlatbufferBuilder</a> (Google\FlatBuffers)&#160;&#160;&#160;</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>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> (flatbuffers)&#160;&#160;&#160;</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)&#160;&#160;&#160;</td><td></td><td></td></tr>
 <tr><td></td><td></td><td></td></tr>
 </table>
 <div class="qindex"><a class="qindex" href="#letter_F">F</a></div>
diff --git a/classflatbuffers_1_1_flat_buffer_builder-members.html b/classflatbuffers_1_1_flat_buffer_builder-members.html
index 475bcc94..d47944da 100644
--- a/classflatbuffers_1_1_flat_buffer_builder-members.html
+++ b/classflatbuffers_1_1_flat_buffer_builder-members.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -130,6 +130,10 @@ $(document).ready(function(){initNavTree('classflatbuffers_1_1_flat_buffer_build
 <p>This is the complete list of members for <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html">flatbuffers::FlatBufferBuilder</a>, including all inherited members.</p>
 <table class="directory">
   <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">Clear</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#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a>(const char *str, size_t len)</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#a3eb68613e5883dc4b8fff6cf7d1223d7">CreateSharedString</a>(const char *str)</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#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">CreateSharedString</a>(const std::string &amp;str)</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#a840b769fbb4148f97d3eed266e4690c3">CreateSharedString</a>(const String *str)</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#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(const char *str, size_t len)</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#aad93d113ac24e86ed04b5236b3f4c0c5">CreateString</a>(const char *str)</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#a8c3af55e64f5cda9aefa38ac5287ef9f">CreateString</a>(const std::string &amp;str)</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>
@@ -150,6 +154,7 @@ $(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#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() const </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#af8c7583c92e1d1d6f438977da5158d19">kFileIdentifierLength</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">static</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">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 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 -->
 <!-- Google Analytics -->
diff --git a/classflatbuffers_1_1_flat_buffer_builder.html b/classflatbuffers_1_1_flat_buffer_builder.html
index 30f812ba..e312a067 100644
--- a/classflatbuffers_1_1_flat_buffer_builder.html
+++ b/classflatbuffers_1_1_flat_buffer_builder.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -145,11 +145,23 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ae94b94ba71ea0aeb2d9a98c43b713412"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">Clear</a> ()</td></tr>
 <tr class="memdesc:ae94b94ba71ea0aeb2d9a98c43b713412"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset all the state in this FlatBufferBuilder so it can be reused to construct another buffer.  <a href="#ae94b94ba71ea0aeb2d9a98c43b713412">More...</a><br /></td></tr>
 <tr class="separator:ae94b94ba71ea0aeb2d9a98c43b713412"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab478a645216d2d613fc7b7c29b0ff9d1"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a> (const char *str, size_t len)</td></tr>
+<tr class="memdesc:ab478a645216d2d613fc7b7c29b0ff9d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which can contain any binary data.  <a href="#ab478a645216d2d613fc7b7c29b0ff9d1">More...</a><br /></td></tr>
+<tr class="separator:ab478a645216d2d613fc7b7c29b0ff9d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3eb68613e5883dc4b8fff6cf7d1223d7"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">CreateSharedString</a> (const char *str)</td></tr>
+<tr class="memdesc:a3eb68613e5883dc4b8fff6cf7d1223d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which null-terminated.  <a href="#a3eb68613e5883dc4b8fff6cf7d1223d7">More...</a><br /></td></tr>
+<tr class="separator:a3eb68613e5883dc4b8fff6cf7d1223d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10e8ec7d1c8fbdc21b1c7047bbbe38d9"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">CreateSharedString</a> (const std::string &amp;str)</td></tr>
+<tr class="memdesc:a10e8ec7d1c8fbdc21b1c7047bbbe38d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which can contain any binary data.  <a href="#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">More...</a><br /></td></tr>
+<tr class="separator:a10e8ec7d1c8fbdc21b1c7047bbbe38d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a840b769fbb4148f97d3eed266e4690c3"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">CreateSharedString</a> (const String *str)</td></tr>
+<tr class="memdesc:a840b769fbb4148f97d3eed266e4690c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which can contain any binary data.  <a href="#a840b769fbb4148f97d3eed266e4690c3">More...</a><br /></td></tr>
+<tr class="separator:a840b769fbb4148f97d3eed266e4690c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aec6f9df2a0366b540b24822414d92cbe"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a> (const char *str, size_t len)</td></tr>
 <tr class="memdesc:aec6f9df2a0366b540b24822414d92cbe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which can contain any binary data.  <a href="#aec6f9df2a0366b540b24822414d92cbe">More...</a><br /></td></tr>
 <tr class="separator:aec6f9df2a0366b540b24822414d92cbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aad93d113ac24e86ed04b5236b3f4c0c5"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">CreateString</a> (const char *str)</td></tr>
-<tr class="memdesc:aad93d113ac24e86ed04b5236b3f4c0c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which can contain any binary data.  <a href="#aad93d113ac24e86ed04b5236b3f4c0c5">More...</a><br /></td></tr>
+<tr class="memdesc:aad93d113ac24e86ed04b5236b3f4c0c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which is null-terminated.  <a href="#aad93d113ac24e86ed04b5236b3f4c0c5">More...</a><br /></td></tr>
 <tr class="separator:aad93d113ac24e86ed04b5236b3f4c0c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a8c3af55e64f5cda9aefa38ac5287ef9f"><td class="memItemLeft" align="right" valign="top">Offset&lt; String &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">CreateString</a> (const std::string &amp;str)</td></tr>
 <tr class="memdesc:a8c3af55e64f5cda9aefa38ac5287ef9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store a string in the buffer, which can contain any binary data.  <a href="#a8c3af55e64f5cda9aefa38ac5287ef9f">More...</a><br /></td></tr>
@@ -286,6 +298,149 @@ static const size_t&#160;</td><td class="memItemRight" valign="bottom"><a class=
 
 <p>Reset all the state in this FlatBufferBuilder so it can be reused to construct another buffer. </p>
 
+</div>
+</div>
+<a class="anchor" id="ab478a645216d2d613fc7b7c29b0ff9d1"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Offset&lt;String&gt; flatbuffers::FlatBufferBuilder::CreateSharedString </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>str</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</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>Store a string in the buffer, which can contain any binary data. </p>
+<p>If a string with this exact contents has already been serialized before, instead simply returns the offset of the existing string. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>A const char pointer to the data to be stored as a string. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>The number of bytes that should be stored from <code>str</code>. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns the offset in the buffer where the string starts. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3eb68613e5883dc4b8fff6cf7d1223d7"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Offset&lt;String&gt; flatbuffers::FlatBufferBuilder::CreateSharedString </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>str</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>Store a string in the buffer, which null-terminated. </p>
+<p>If a string with this exact contents has already been serialized before, instead simply returns the offset of the existing string. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>A const char pointer to a C-string to add to the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns the offset in the buffer where the string starts. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a10e8ec7d1c8fbdc21b1c7047bbbe38d9"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Offset&lt;String&gt; flatbuffers::FlatBufferBuilder::CreateSharedString </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>str</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>Store a string in the buffer, which can contain any binary data. </p>
+<p>If a string with this exact contents has already been serialized before, instead simply returns the offset of the existing string. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>A const reference to a std::string to store in the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns the offset in the buffer where the string starts. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a840b769fbb4148f97d3eed266e4690c3"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Offset&lt;String&gt; flatbuffers::FlatBufferBuilder::CreateSharedString </td>
+          <td>(</td>
+          <td class="paramtype">const String *&#160;</td>
+          <td class="paramname"><em>str</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>Store a string in the buffer, which can contain any binary data. </p>
+<p>If a string with this exact contents has already been serialized before, instead simply returns the offset of the existing string. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>A const pointer to a <code>String</code> struct to add to the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns the offset in the buffer where the string starts </dd></dl>
+
 </div>
 </div>
 <a class="anchor" id="aec6f9df2a0366b540b24822414d92cbe"></a>
@@ -354,7 +509,7 @@ static const size_t&#160;</td><td class="memItemRight" valign="bottom"><a class=
 </table>
 </div><div class="memdoc">
 
-<p>Store a string in the buffer, which can contain any binary data. </p>
+<p>Store a string in the buffer, which is null-terminated. </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">str</td><td>A const char pointer to a C-string to add to the buffer. </td></tr>
diff --git a/classflatbuffers_1_1_flat_buffer_builder.js b/classflatbuffers_1_1_flat_buffer_builder.js
index defcc88b..7b36ed83 100644
--- a/classflatbuffers_1_1_flat_buffer_builder.js
+++ b/classflatbuffers_1_1_flat_buffer_builder.js
@@ -1,7 +1,12 @@
 var classflatbuffers_1_1_flat_buffer_builder =
 [
     [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256", null ],
+    [ "~FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#a01dabf5cdd6b1b2881337e1e84aa1683", null ],
     [ "Clear", "classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412", null ],
+    [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1", null ],
+    [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7", null ],
+    [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9", null ],
+    [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3", null ],
     [ "CreateString", "classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe", null ],
     [ "CreateString", "classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5", null ],
     [ "CreateString", "classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f", null ],
diff --git a/contributing.html b/contributing.html
index cb4e0be8..aae0b28b 100644
--- a/contributing.html
+++ b/contributing.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_05194b7bb14e4bdbd759acf3e4294839.html b/dir_05194b7bb14e4bdbd759acf3e4294839.html
index f23a11da..d7923310 100644
--- a/dir_05194b7bb14e4bdbd759acf3e4294839.html
+++ b/dir_05194b7bb14e4bdbd759acf3e4294839.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_0e37bed226164927aa2c526e48e3c9af.html b/dir_0e37bed226164927aa2c526e48e3c9af.html
index 2cede6df..ab69c397 100644
--- a/dir_0e37bed226164927aa2c526e48e3c9af.html
+++ b/dir_0e37bed226164927aa2c526e48e3c9af.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_1036070c9379c90b9865e1585bb57938.html b/dir_1036070c9379c90b9865e1585bb57938.html
index 0a9c8b6d..d68f2fd0 100644
--- a/dir_1036070c9379c90b9865e1585bb57938.html
+++ b/dir_1036070c9379c90b9865e1585bb57938.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_2867b8401105090ba43035c8b1fd9c0c.html b/dir_2867b8401105090ba43035c8b1fd9c0c.html
index 4d6e48b9..e7150008 100644
--- a/dir_2867b8401105090ba43035c8b1fd9c0c.html
+++ b/dir_2867b8401105090ba43035c8b1fd9c0c.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_427baa8a9a5be237f298d4545d0d1ce2.html b/dir_427baa8a9a5be237f298d4545d0d1ce2.html
index 5892454e..4362b348 100644
--- a/dir_427baa8a9a5be237f298d4545d0d1ce2.html
+++ b/dir_427baa8a9a5be237f298d4545d0d1ce2.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_4d44a7834a0220e3079d88886922def6.html b/dir_4d44a7834a0220e3079d88886922def6.html
index 1fa25797..877ac1a5 100644
--- a/dir_4d44a7834a0220e3079d88886922def6.html
+++ b/dir_4d44a7834a0220e3079d88886922def6.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_6f01889fa69585f5458dd2f93b8129fa.html b/dir_6f01889fa69585f5458dd2f93b8129fa.html
index 361ddb3f..89ec6944 100644
--- a/dir_6f01889fa69585f5458dd2f93b8129fa.html
+++ b/dir_6f01889fa69585f5458dd2f93b8129fa.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html b/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html
index 1e7a0f17..bff9f1b0 100644
--- a/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html
+++ b/dir_7837fde3ab9c1fb2fc5be7b717af8d79.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_8a22873406ddef3ffbbc0bacea2033ba.html b/dir_8a22873406ddef3ffbbc0bacea2033ba.html
index dce03e9a..7142b12d 100644
--- a/dir_8a22873406ddef3ffbbc0bacea2033ba.html
+++ b/dir_8a22873406ddef3ffbbc0bacea2033ba.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_93c6ba7fb77bae0709fae89c9c13b44a.html b/dir_93c6ba7fb77bae0709fae89c9c13b44a.html
index 06498560..9b83b4da 100644
--- a/dir_93c6ba7fb77bae0709fae89c9c13b44a.html
+++ b/dir_93c6ba7fb77bae0709fae89c9c13b44a.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_aa1ba5078724e0ea09d9b49b3a016128.html b/dir_aa1ba5078724e0ea09d9b49b3a016128.html
index 559f9fa6..b85ed1a4 100644
--- a/dir_aa1ba5078724e0ea09d9b49b3a016128.html
+++ b/dir_aa1ba5078724e0ea09d9b49b3a016128.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_bebd57e0257eca849e35e7c4620d27be.html b/dir_bebd57e0257eca849e35e7c4620d27be.html
index 92e46f61..289279a8 100644
--- a/dir_bebd57e0257eca849e35e7c4620d27be.html
+++ b/dir_bebd57e0257eca849e35e7c4620d27be.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html
index 0453b164..9f0072de 100644
--- a/dir_d44c64559bbebec7f509842c48db8b23.html
+++ b/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_8h.html b/flatbuffers_8h.html
index 475c2b30..0bfb837c 100644
--- a/flatbuffers_8h.html
+++ b/flatbuffers_8h.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_8h_source.html b/flatbuffers_8h_source.html
index 90ab6b37..17d240b3 100644
--- a/flatbuffers_8h_source.html
+++ b/flatbuffers_8h_source.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -141,1394 +141,1490 @@ $(document).ready(function(){initNavTree('flatbuffers_8h_source.html','');});
 <div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
 <div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
 <div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
-<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
-<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
-<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"></span><span class="preprocessor">#if __cplusplus &lt;= 199711L &amp;&amp; \</span></div>
-<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">    (!defined(_MSC_VER) || _MSC_VER &lt; 1600) &amp;&amp; \</span></div>
-<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">    (!defined(__GNUC__) || \</span></div>
-<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">      (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ &lt; 40400))</span></div>
-<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">  #error A C++11 compatible compiler with support for the auto typing is required for FlatBuffers.</span></div>
-<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">  #error __cplusplus _MSC_VER __GNUC__  __GNUC_MINOR__  __GNUC_PATCHLEVEL__</span></div>
-<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div>
-<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#if !defined(__clang__) &amp;&amp; \</span></div>
-<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">    defined(__GNUC__) &amp;&amp; \</span></div>
-<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">    (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ &lt; 40600)</span></div>
-<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <span class="comment">// Backwards compatability for g++ 4.4, and 4.5 which don&#39;t have the nullptr and constexpr</span></div>
-<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  <span class="comment">// keywords. Note the __clang__ check is needed, because clang presents itself as an older GNUC</span></div>
-<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  <span class="comment">// compiler.</span></div>
-<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">  #ifndef nullptr_t</span></div>
-<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">const</span> <span class="keyword">class </span>nullptr_t {</div>
-<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="keyword">public</span>:</div>
-<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;      <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span> <span class="keyword">operator</span> T*() <span class="keyword">const</span> { <span class="keywordflow">return</span> 0; }</div>
-<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">private</span>:</div>
-<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;      <span class="keywordtype">void</span> operator&amp;() <span class="keyword">const</span>;</div>
-<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    } <span class="keyword">nullptr</span> = {};</div>
-<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">  #endif</span></div>
-<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">  #ifndef constexpr</span></div>
-<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">    #define constexpr const</span></div>
-<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">  #endif</span></div>
-<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div>
-<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">// The wire format uses a little endian encoding (since that&#39;s efficient for</span></div>
-<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">// the common platforms).</span></div>
-<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#if !defined(FLATBUFFERS_LITTLEENDIAN)</span></div>
-<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">  #if defined(__GNUC__) || defined(__clang__)</span></div>
-<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">    #ifdef __BIG_ENDIAN__</span></div>
-<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 0</span></div>
-<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 1</span></div>
-<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">    #endif // __BIG_ENDIAN__</span></div>
-<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor">  #elif defined(_MSC_VER)</span></div>
-<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">    #if defined(_M_PPC)</span></div>
-<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 0</span></div>
-<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 1</span></div>
-<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor">  #else</span></div>
-<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">    #error Unable to determine endianness, define FLATBUFFERS_LITTLEENDIAN.</span></div>
-<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="preprocessor">  #endif</span></div>
-<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor">#endif // !defined(FLATBUFFERS_LITTLEENDIAN)</span></div>
-<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div>
-<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="preprocessor">#define FLATBUFFERS_VERSION_MAJOR 1</span></div>
-<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#define FLATBUFFERS_VERSION_MINOR 0</span></div>
-<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor">#define FLATBUFFERS_VERSION_REVISION 0</span></div>
-<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#define FLATBUFFERS_STRING_EXPAND(X) #X</span></div>
-<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">#define FLATBUFFERS_STRING(X) FLATBUFFERS_STRING_EXPAND(X)</span></div>
-<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div>
-<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="preprocessor">#if (!defined(_MSC_VER) || _MSC_VER &gt; 1600) &amp;&amp; \</span></div>
-<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="preprocessor">    (!defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ &gt;= 407))</span></div>
-<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="preprocessor">  #define FLATBUFFERS_FINAL_CLASS final</span></div>
-<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="preprocessor">  #define FLATBUFFERS_FINAL_CLASS</span></div>
-<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment">/// @endcond</span></div>
-<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment">/// @file</span></div>
-<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment"></span><span class="keyword">namespace </span>flatbuffers {</div>
-<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="comment"></span><span class="comment">// Our default offset / size type, 32bit on purpose on 64bit systems.</span></div>
-<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="comment">// Also, using a consistent offset type maintains compatibility of serialized</span></div>
-<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="comment">// offset values between 32bit and 64bit systems.</span></div>
-<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="keyword">typedef</span> uint32_t uoffset_t;</div>
-<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div>
-<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment">// Signed offsets for references that can go in both directions.</span></div>
-<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="keyword">typedef</span> int32_t soffset_t;</div>
-<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div>
-<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">// Offset/index used in v-tables, can be changed to uint8_t in</span></div>
-<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment">// format forks to save a bit of space if desired.</span></div>
-<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="keyword">typedef</span> uint16_t voffset_t;</div>
-<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div>
-<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">typedef</span> uintmax_t largest_scalar_t;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"></span><span class="preprocessor">#if __cplusplus &lt;= 199711L &amp;&amp; \</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">    (!defined(_MSC_VER) || _MSC_VER &lt; 1600) &amp;&amp; \</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">    (!defined(__GNUC__) || \</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">      (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ &lt; 40400))</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">  #error A C++11 compatible compiler with support for the auto typing is required for FlatBuffers.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">  #error __cplusplus _MSC_VER __GNUC__  __GNUC_MINOR__  __GNUC_PATCHLEVEL__</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#if !defined(__clang__) &amp;&amp; \</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">    defined(__GNUC__) &amp;&amp; \</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">    (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ &lt; 40600)</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  <span class="comment">// Backwards compatability for g++ 4.4, and 4.5 which don&#39;t have the nullptr and constexpr</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  <span class="comment">// keywords. Note the __clang__ check is needed, because clang presents itself as an older GNUC</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  <span class="comment">// compiler.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">  #ifndef nullptr_t</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="keyword">const</span> <span class="keyword">class </span>nullptr_t {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;      <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">inline</span> <span class="keyword">operator</span> T*() <span class="keyword">const</span> { <span class="keywordflow">return</span> 0; }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;      <span class="keywordtype">void</span> operator&amp;() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    } <span class="keyword">nullptr</span> = {};</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">  #ifndef constexpr</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">    #define constexpr const</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">// The wire format uses a little endian encoding (since that&#39;s efficient for</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">// the common platforms).</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#if !defined(FLATBUFFERS_LITTLEENDIAN)</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">  #if defined(__GNUC__) || defined(__clang__)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">    #ifdef __BIG_ENDIAN__</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 0</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 1</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor">    #endif // __BIG_ENDIAN__</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">  #elif defined(_MSC_VER)</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="preprocessor">    #if defined(_M_PPC)</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 0</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor">      #define FLATBUFFERS_LITTLEENDIAN 1</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">  #else</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="preprocessor">    #error Unable to determine endianness, define FLATBUFFERS_LITTLEENDIAN.</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">#endif // !defined(FLATBUFFERS_LITTLEENDIAN)</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#define FLATBUFFERS_VERSION_MAJOR 1</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor">#define FLATBUFFERS_VERSION_MINOR 0</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#define FLATBUFFERS_VERSION_REVISION 0</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">#define FLATBUFFERS_STRING_EXPAND(X) #X</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="preprocessor">#define FLATBUFFERS_STRING(X) FLATBUFFERS_STRING_EXPAND(X)</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="preprocessor">#if (!defined(_MSC_VER) || _MSC_VER &gt; 1600) &amp;&amp; \</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="preprocessor">    (!defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ &gt;= 407))</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">  #define FLATBUFFERS_FINAL_CLASS final</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">  #define FLATBUFFERS_FINAL_CLASS</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor">#if (!defined(_MSC_VER) || _MSC_VER &gt;= 1900) &amp;&amp; \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">    (!defined(__GNUC__) || (__GNUC__ * 100 + __GNUC_MINOR__ &gt;= 406))</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">  #define FLATBUFFERS_CONSTEXPR constexpr</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="preprocessor">  #define FLATBUFFERS_CONSTEXPR</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="comment">/// @endcond</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment">/// @file</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment"></span><span class="keyword">namespace </span>flatbuffers {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment"></span><span class="comment">// Our default offset / size type, 32bit on purpose on 64bit systems.</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">// Also, using a consistent offset type maintains compatibility of serialized</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="comment">// offset values between 32bit and 64bit systems.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">typedef</span> uint32_t uoffset_t;</div>
 <div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div>
-<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment">// Pointer to relinquished memory.</span></div>
-<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="keyword">typedef</span> std::unique_ptr&lt;uint8_t, std::function&lt;void(uint8_t * <span class="comment">/* unused */</span>)&gt;&gt;</div>
-<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;          unique_ptr_t;</div>
-<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div>
-<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment">// Wrapper for uoffset_t to allow safe template specialization.</span></div>
-<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>Offset {</div>
-<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  uoffset_t o;</div>
-<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  Offset() : o(0) {}</div>
-<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  Offset(uoffset_t _o) : o(_o) {}</div>
-<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  Offset&lt;void&gt; Union()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Offset&lt;void&gt;(o); }</div>
-<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;};</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment">// Signed offsets for references that can go in both directions.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="keyword">typedef</span> int32_t soffset_t;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment">// Offset/index used in v-tables, can be changed to uint8_t in</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment">// format forks to save a bit of space if desired.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="keyword">typedef</span> uint16_t voffset_t;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="keyword">typedef</span> uintmax_t largest_scalar_t;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment">// In 32bits, this evaluates to 2GB - 1</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="preprocessor">#define FLATBUFFERS_MAX_BUFFER_SIZE ((1ULL &lt;&lt; (sizeof(soffset_t) * 8 - 1)) - 1)</span></div>
 <div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div>
-<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> EndianCheck() {</div>
-<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordtype">int</span> endiantest = 1;</div>
-<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="comment">// If this fails, see FLATBUFFERS_LITTLEENDIAN above.</span></div>
-<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  assert(*reinterpret_cast&lt;char *&gt;(&amp;endiantest) == FLATBUFFERS_LITTLEENDIAN);</div>
-<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  (void)endiantest;</div>
-<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;}</div>
-<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div>
-<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T EndianScalar(T t) {</div>
-<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="preprocessor">  #if FLATBUFFERS_LITTLEENDIAN</span></div>
-<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">  #else</span></div>
-<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="preprocessor">    #if defined(_MSC_VER)</span></div>
-<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="preprocessor">      #pragma push_macro(&quot;__builtin_bswap16&quot;)</span></div>
-<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="preprocessor">      #pragma push_macro(&quot;__builtin_bswap32&quot;)</span></div>
-<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="preprocessor">      #pragma push_macro(&quot;__builtin_bswap64&quot;)</span></div>
-<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor">      #define __builtin_bswap16 _byteswap_ushort</span></div>
-<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="preprocessor">      #define __builtin_bswap32 _byteswap_ulong</span></div>
-<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="preprocessor">      #define __builtin_bswap64 _byteswap_uint64</span></div>
-<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="comment">// If you&#39;re on the few remaining big endian platforms, we make the bold</span></div>
-<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="comment">// assumption you&#39;re also on gcc/clang, and thus have bswap intrinsics:</span></div>
-<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 1) {   <span class="comment">// Compile-time if-then&#39;s.</span></div>
-<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;      <span class="keywordflow">return</span> t;</div>
-<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 2) {</div>
-<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;      <span class="keyword">auto</span> r = __builtin_bswap16(*reinterpret_cast&lt;uint16_t *&gt;(&amp;t));</div>
-<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;      <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);</div>
-<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 4) {</div>
-<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      <span class="keyword">auto</span> r = __builtin_bswap32(*reinterpret_cast&lt;uint32_t *&gt;(&amp;t));</div>
-<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;      <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);</div>
-<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 8) {</div>
-<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      <span class="keyword">auto</span> r = __builtin_bswap64(*reinterpret_cast&lt;uint64_t *&gt;(&amp;t));</div>
-<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);</div>
-<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    } <span class="keywordflow">else</span> {</div>
-<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      assert(0);</div>
-<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    }</div>
-<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor">    #if defined(_MSC_VER)</span></div>
-<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="preprocessor">      #pragma pop_macro(&quot;__builtin_bswap16&quot;)</span></div>
-<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor">      #pragma pop_macro(&quot;__builtin_bswap32&quot;)</span></div>
-<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor">      #pragma pop_macro(&quot;__builtin_bswap64&quot;)</span></div>
-<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="preprocessor">  #endif</span></div>
-<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;}</div>
-<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div>
-<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T ReadScalar(<span class="keyword">const</span> <span class="keywordtype">void</span> *p) {</div>
-<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="keywordflow">return</span> EndianScalar(*reinterpret_cast&lt;const T *&gt;(p));</div>
-<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;}</div>
-<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;</div>
-<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> WriteScalar(<span class="keywordtype">void</span> *p, T t) {</div>
-<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(p) = EndianScalar(t);</div>
-<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;}</div>
-<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;</div>
-<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">size_t</span> AlignOf() {</div>
-<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor">  #ifdef _MSC_VER</span></div>
-<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="keywordflow">return</span> __alignof(T);</div>
-<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="preprocessor">  #else</span></div>
-<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="preprocessor">    #ifndef alignof</span></div>
-<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      <span class="keywordflow">return</span> __alignof__(T);</div>
-<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">alignof</span>(T);</div>
-<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment">// Pointer to relinquished memory.</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="keyword">typedef</span> std::unique_ptr&lt;uint8_t, std::function&lt;void(uint8_t * <span class="comment">/* unused */</span>)&gt;&gt;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;          unique_ptr_t;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="comment">// Wrapper for uoffset_t to allow safe template specialization.</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>Offset {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  uoffset_t o;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  Offset() : o(0) {}</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  Offset(uoffset_t _o) : o(_o) {}</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  Offset&lt;void&gt; Union()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Offset&lt;void&gt;(o); }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;};</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> EndianCheck() {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordtype">int</span> endiantest = 1;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  <span class="comment">// If this fails, see FLATBUFFERS_LITTLEENDIAN above.</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  assert(*reinterpret_cast&lt;char *&gt;(&amp;endiantest) == FLATBUFFERS_LITTLEENDIAN);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  (void)endiantest;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;}</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T EndianScalar(T t) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="preprocessor">  #if FLATBUFFERS_LITTLEENDIAN</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="preprocessor">  #else</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="preprocessor">    #if defined(_MSC_VER)</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="preprocessor">      #pragma push_macro(&quot;__builtin_bswap16&quot;)</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="preprocessor">      #pragma push_macro(&quot;__builtin_bswap32&quot;)</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="preprocessor">      #pragma push_macro(&quot;__builtin_bswap64&quot;)</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">      #define __builtin_bswap16 _byteswap_ushort</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor">      #define __builtin_bswap32 _byteswap_ulong</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="preprocessor">      #define __builtin_bswap64 _byteswap_uint64</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="comment">// If you&#39;re on the few remaining big endian platforms, we make the bold</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="comment">// assumption you&#39;re also on gcc/clang, and thus have bswap intrinsics:</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 1) {   <span class="comment">// Compile-time if-then&#39;s.</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      <span class="keywordflow">return</span> t;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 2) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      <span class="keyword">auto</span> r = __builtin_bswap16(*reinterpret_cast&lt;uint16_t *&gt;(&amp;t));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 4) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      <span class="keyword">auto</span> r = __builtin_bswap32(*reinterpret_cast&lt;uint32_t *&gt;(&amp;t));</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;      <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(T) == 8) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      <span class="keyword">auto</span> r = __builtin_bswap64(*reinterpret_cast&lt;uint64_t *&gt;(&amp;t));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;      <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(&amp;r);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      assert(0);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor">    #if defined(_MSC_VER)</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="preprocessor">      #pragma pop_macro(&quot;__builtin_bswap16&quot;)</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="preprocessor">      #pragma pop_macro(&quot;__builtin_bswap32&quot;)</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="preprocessor">      #pragma pop_macro(&quot;__builtin_bswap64&quot;)</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;}</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T ReadScalar(<span class="keyword">const</span> <span class="keywordtype">void</span> *p) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  <span class="keywordflow">return</span> EndianScalar(*reinterpret_cast&lt;const T *&gt;(p));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;}</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> WriteScalar(<span class="keywordtype">void</span> *p, T t) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  *<span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(p) = EndianScalar(t);</div>
 <div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;}</div>
 <div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;</div>
-<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="comment">// When we read serialized data from memory, in the case of most scalars,</span></div>
-<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<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="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment">// perform the indirection and return a pointer.</span></div>
-<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="comment">// The template specialization below does just that.</span></div>
-<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="comment">// It is wrapped in a struct since function templates can&#39;t overload on the</span></div>
-<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="comment">// return type like this.</span></div>
-<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="comment">// The typedef is for the convenience of callers of this function</span></div>
-<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="comment">// (avoiding the need for a trailing return decltype)</span></div>
-<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IndirectHelper {</div>
-<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keyword">typedef</span> T return_type;</div>
-<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <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="l00199"></a><span class="lineno">  199</span>&#160;  <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="l00200"></a><span class="lineno">  200</span>&#160;    <span class="keywordflow">return</span> EndianScalar((reinterpret_cast&lt;const T *&gt;(p))[i]);</div>
-<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  }</div>
-<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;};</div>
-<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IndirectHelper&lt;Offset&lt;T&gt;&gt; {</div>
-<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div>
-<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  <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="l00206"></a><span class="lineno">  206</span>&#160;  <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="l00207"></a><span class="lineno">  207</span>&#160;    p += i * <span class="keyword">sizeof</span>(uoffset_t);</div>
-<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>return_type<span class="keyword">&gt;</span>(p + ReadScalar&lt;uoffset_t&gt;(p));</div>
-<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  }</div>
-<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;};</div>
-<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IndirectHelper&lt;const T *&gt; {</div>
-<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div>
-<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <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="l00214"></a><span class="lineno">  214</span>&#160;  <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="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T *<span class="keyword">&gt;</span>(p + i * <span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  }</div>
-<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;};</div>
-<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div>
-<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="comment">// An STL compatible iterator implementation for Vector below, effectively</span></div>
-<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="comment">// calling Get() for every element.</span></div>
-<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keywordtype">bool</span> bConst&gt;</div>
-<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="keyword">struct </span>VectorIterator : <span class="keyword">public</span></div>
-<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  std::iterator &lt; std::input_iterator_tag,</div>
-<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  typename std::conditional &lt; bConst,</div>
-<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  const typename IndirectHelper&lt;T&gt;::return_type,</div>
-<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  typename IndirectHelper&lt;T&gt;::return_type &gt; ::type, uoffset_t &gt; {</div>
-<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div>
-<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  <span class="keyword">typedef</span> std::iterator&lt;std::input_iterator_tag,</div>
-<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="keyword">typename</span> std::conditional&lt;bConst,</div>
-<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keyword">const</span> <span class="keyword">typename</span> IndirectHelper&lt;T&gt;::return_type,</div>
-<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    <span class="keyword">typename</span> IndirectHelper&lt;T&gt;::return_type&gt;::type, uoffset_t&gt; super_type;</div>
-<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div>
-<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  VectorIterator(<span class="keyword">const</span> uint8_t *data, uoffset_t i) :</div>
-<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;      data_(data + IndirectHelper&lt;T&gt;::element_stride * i) {};</div>
-<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  VectorIterator(<span class="keyword">const</span> VectorIterator &amp;other) : data_(other.data_) {}</div>
-<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  VectorIterator(VectorIterator &amp;&amp;other) : data_(std::move(other.data_)) {}</div>
-<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div>
-<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  VectorIterator &amp;operator=(<span class="keyword">const</span> VectorIterator &amp;other) {</div>
-<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    data_ = other.data_;</div>
-<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  }</div>
-<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;</div>
-<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  VectorIterator &amp;operator=(VectorIterator &amp;&amp;other) {</div>
-<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    data_ = other.data_;</div>
-<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  }</div>
-<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div>
-<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> VectorIterator&amp; other)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keywordflow">return</span> data_ == other.data_;</div>
-<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  }</div>
-<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div>
-<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> VectorIterator&amp; other)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">return</span> data_ != other.data_;</div>
-<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  }</div>
-<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;</div>
-<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  ptrdiff_t operator-(<span class="keyword">const</span> VectorIterator&amp; other)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">return</span> (data_ - other.data_) / IndirectHelper&lt;T&gt;::element_stride;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">size_t</span> AlignOf() {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="preprocessor">  #ifdef _MSC_VER</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keywordflow">return</span> __alignof(T);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="preprocessor">  #else</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="preprocessor">    #ifndef alignof</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;      <span class="keywordflow">return</span> __alignof__(T);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">alignof</span>(T);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="preprocessor">  #endif</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;}</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="comment">// When we read serialized data from memory, in the case of most scalars,</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<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="l00202"></a><span class="lineno">  202</span>&#160;<span class="comment">// perform the indirection and return a pointer.</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="comment">// The template specialization below does just that.</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="comment">// It is wrapped in a struct since function templates can&#39;t overload on the</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="comment">// return type like this.</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment">// The typedef is for the convenience of callers of this function</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment">// (avoiding the need for a trailing return decltype)</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IndirectHelper {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  <span class="keyword">typedef</span> T return_type;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  <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="l00211"></a><span class="lineno">  211</span>&#160;  <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="l00212"></a><span class="lineno">  212</span>&#160;    <span class="keywordflow">return</span> EndianScalar((reinterpret_cast&lt;const T *&gt;(p))[i]);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;};</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IndirectHelper&lt;Offset&lt;T&gt;&gt; {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  <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="l00218"></a><span class="lineno">  218</span>&#160;  <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="l00219"></a><span class="lineno">  219</span>&#160;    p += i * <span class="keyword">sizeof</span>(uoffset_t);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>return_type<span class="keyword">&gt;</span>(p + ReadScalar&lt;uoffset_t&gt;(p));</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;};</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IndirectHelper&lt;const T *&gt; {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">const</span> T *return_type;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  <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="l00226"></a><span class="lineno">  226</span>&#160;  <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="l00227"></a><span class="lineno">  227</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T *<span class="keyword">&gt;</span>(p + i * <span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;};</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="comment">// An STL compatible iterator implementation for Vector below, effectively</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="comment">// calling Get() for every element.</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keywordtype">bool</span> bConst&gt;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="keyword">struct </span>VectorIterator : <span class="keyword">public</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  std::iterator &lt; std::input_iterator_tag,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  typename std::conditional &lt; bConst,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  const typename IndirectHelper&lt;T&gt;::return_type,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  typename IndirectHelper&lt;T&gt;::return_type &gt; ::type, uoffset_t &gt; {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="keyword">typedef</span> std::iterator&lt;std::input_iterator_tag,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    <span class="keyword">typename</span> std::conditional&lt;bConst,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keyword">const</span> <span class="keyword">typename</span> IndirectHelper&lt;T&gt;::return_type,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="keyword">typename</span> IndirectHelper&lt;T&gt;::return_type&gt;::type, uoffset_t&gt; super_type;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  VectorIterator(<span class="keyword">const</span> uint8_t *data, uoffset_t i) :</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      data_(data + IndirectHelper&lt;T&gt;::element_stride * i) {};</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  VectorIterator(<span class="keyword">const</span> VectorIterator &amp;other) : data_(other.data_) {}</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  VectorIterator(VectorIterator &amp;&amp;other) : data_(std::move(other.data_)) {}</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  VectorIterator &amp;operator=(<span class="keyword">const</span> VectorIterator &amp;other) {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    data_ = other.data_;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  VectorIterator &amp;operator=(VectorIterator &amp;&amp;other) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    data_ = other.data_;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
 <div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  }</div>
 <div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;</div>
-<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  <span class="keyword">typename</span> super_type::value_type operator *()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(data_, 0);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> VectorIterator&amp; other)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="keywordflow">return</span> data_ == other.data_;</div>
 <div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  }</div>
 <div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div>
-<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  <span class="keyword">typename</span> super_type::value_type operator-&gt;()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(data_, 0);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> VectorIterator&amp; other)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">return</span> data_ != other.data_;</div>
 <div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  }</div>
 <div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div>
-<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  VectorIterator &amp;operator++() {</div>
-<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    data_ += IndirectHelper&lt;T&gt;::element_stride;</div>
-<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  }</div>
-<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;</div>
-<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  VectorIterator operator++(<span class="keywordtype">int</span>) {</div>
-<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    VectorIterator temp(data_);</div>
-<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    data_ += IndirectHelper&lt;T&gt;::element_stride;</div>
-<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <span class="keywordflow">return</span> temp;</div>
-<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  }</div>
-<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div>
-<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="keyword">private</span>:</div>
-<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  <span class="keyword">const</span> uint8_t *data_;</div>
-<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;};</div>
-<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div>
-<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;<span class="comment">// This is used as a helper type for accessing vectors.</span></div>
-<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="comment">// Vector::data() assumes the vector elements start after the length field.</span></div>
-<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>Vector {</div>
-<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  <span class="keyword">typedef</span> VectorIterator&lt;T, false&gt; iterator;</div>
-<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  <span class="keyword">typedef</span> VectorIterator&lt;T, true&gt; const_iterator;</div>
-<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div>
-<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div>
-<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div>
-<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  <span class="comment">// Deprecated: use size(). Here for backwards compatibility.</span></div>
-<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;  uoffset_t Length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size(); }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  ptrdiff_t operator-(<span class="keyword">const</span> VectorIterator&amp; other)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    <span class="keywordflow">return</span> (data_ - other.data_) / IndirectHelper&lt;T&gt;::element_stride;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  <span class="keyword">typename</span> super_type::value_type operator *()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(data_, 0);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  <span class="keyword">typename</span> super_type::value_type operator-&gt;()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(data_, 0);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  VectorIterator &amp;operator++() {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    data_ += IndirectHelper&lt;T&gt;::element_stride;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;  VectorIterator operator++(<span class="keywordtype">int</span>) {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    VectorIterator temp(data_);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    data_ += IndirectHelper&lt;T&gt;::element_stride;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">return</span> temp;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  <span class="keyword">const</span> uint8_t *data_;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;};</div>
 <div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;</div>
-<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> IndirectHelper&lt;T&gt;::return_type return_type;</div>
-<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div>
-<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  return_type Get(uoffset_t i)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    assert(i &lt; size());</div>
-<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(Data(), i);</div>
-<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="comment">// This is used as a helper type for accessing vectors.</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment">// Vector::data() assumes the vector elements start after the length field.</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">class </span>Vector {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  <span class="keyword">typedef</span> VectorIterator&lt;T, false&gt; iterator;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  <span class="keyword">typedef</span> VectorIterator&lt;T, true&gt; const_iterator;</div>
 <div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div>
-<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  return_type operator[](uoffset_t i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Get(i); }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div>
 <div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div>
-<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <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="l00306"></a><span class="lineno">  306</span>&#160;  <span class="comment">// type. This function makes it convenient to retrieve value with enum</span></div>
-<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  <span class="comment">// type E.</span></div>
-<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E&gt; E GetEnum(uoffset_t i)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>E<span class="keyword">&gt;</span>(Get(i));</div>
-<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  }</div>
-<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div>
-<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  <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="l00313"></a><span class="lineno">  313</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span> *<span class="keyword">&gt;</span>(Data() + o);</div>
-<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  }</div>
-<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div>
-<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  iterator begin() { <span class="keywordflow">return</span> iterator(Data(), 0); }</div>
-<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), 0); }</div>
-<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div>
-<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  iterator end() { <span class="keywordflow">return</span> iterator(Data(), size()); }</div>
-<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), size()); }</div>
-<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div>
-<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  <span class="comment">// Change elements if you have a non-const pointer to this object.</span></div>
-<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  <span class="comment">// Scalars only. See reflection.h, and the documentation.</span></div>
-<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  <span class="keywordtype">void</span> Mutate(uoffset_t i, T val) {</div>
-<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    assert(i &lt; size());</div>
-<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    WriteScalar(data() + i, val);</div>
-<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  }</div>
-<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div>
-<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  <span class="comment">// Change an element of a vector of tables (or strings).</span></div>
-<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;  <span class="comment">// &quot;val&quot; points to the new table/string, as you can obtain from</span></div>
-<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  <span class="comment">// e.g. reflection::AddFlatBuffer().</span></div>
-<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  <span class="keywordtype">void</span> MutateOffset(uoffset_t i, <span class="keyword">const</span> uint8_t *val) {</div>
-<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    assert(i &lt; size());</div>
-<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    assert(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(uoffset_t));</div>
-<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    WriteScalar(data() + i, val - (Data() + i * <span class="keyword">sizeof</span>(uoffset_t)));</div>
-<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  }</div>
-<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div>
-<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;  <span class="comment">// The raw data in little endian format. Use with care.</span></div>
-<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
-<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  }</div>
-<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;</div>
-<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  uint8_t *Data() {</div>
-<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
-<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  }</div>
-<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div>
-<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  <span class="comment">// Similarly, but typed, much like std::vector::data</span></div>
-<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  <span class="keyword">const</span> T *data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T *<span class="keyword">&gt;</span>(Data()); }</div>
-<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  T *data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(Data()); }</div>
-<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;</div>
-<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> K&gt; return_type LookupByKey(K key)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keywordtype">void</span> *search_result = std::bsearch(&amp;key, Data(), size(),</div>
-<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        IndirectHelper&lt;T&gt;::element_stride, KeyCompare&lt;K&gt;);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="comment">// Deprecated: use size(). Here for backwards compatibility.</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  uoffset_t Length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size(); }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  <span class="keyword">typedef</span> <span class="keyword">typename</span> IndirectHelper&lt;T&gt;::return_type return_type;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  return_type Get(uoffset_t i)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    assert(i &lt; size());</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(Data(), i);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;  }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  return_type operator[](uoffset_t i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Get(i); }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  <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="l00318"></a><span class="lineno">  318</span>&#160;  <span class="comment">// type. This function makes it convenient to retrieve value with enum</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  <span class="comment">// type E.</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E&gt; E GetEnum(uoffset_t i)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>E<span class="keyword">&gt;</span>(Get(i));</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  <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="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span> *<span class="keyword">&gt;</span>(Data() + o);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;  }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  iterator begin() { <span class="keywordflow">return</span> iterator(Data(), 0); }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  const_iterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), 0); }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  iterator end() { <span class="keywordflow">return</span> iterator(Data(), size()); }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  const_iterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> const_iterator(Data(), size()); }</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  <span class="comment">// Change elements if you have a non-const pointer to this object.</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  <span class="comment">// Scalars only. See reflection.h, and the documentation.</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  <span class="keywordtype">void</span> Mutate(uoffset_t i, T val) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    assert(i &lt; size());</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    WriteScalar(data() + i, val);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;  }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  <span class="comment">// Change an element of a vector of tables (or strings).</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  <span class="comment">// &quot;val&quot; points to the new table/string, as you can obtain from</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  <span class="comment">// e.g. reflection::AddFlatBuffer().</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  <span class="keywordtype">void</span> MutateOffset(uoffset_t i, <span class="keyword">const</span> uint8_t *val) {</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    assert(i &lt; size());</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    assert(<span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(uoffset_t));</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    WriteScalar(data() + i, val - (Data() + i * <span class="keyword">sizeof</span>(uoffset_t)));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  <span class="comment">// The raw data in little endian format. Use with care.</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  }</div>
 <div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div>
-<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="keywordflow">if</span> (!search_result) {</div>
-<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;  <span class="comment">// Key not found.</span></div>
-<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;  uint8_t *Data() {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  }</div>
 <div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;</div>
-<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    <span class="keyword">const</span> uint8_t *element = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(search_result);</div>
-<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;</div>
-<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(element, 0);</div>
-<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;  }</div>
-<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;</div>
-<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;<span class="keyword">protected</span>:</div>
-<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;  <span class="comment">// This class is only used to access pre-existing data. Don&#39;t ever</span></div>
-<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;  <span class="comment">// try to construct these manually.</span></div>
-<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;  Vector();</div>
-<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;</div>
-<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;  uoffset_t length_;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  <span class="comment">// Similarly, but typed, much like std::vector::data</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  <span class="keyword">const</span> T *data()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T *<span class="keyword">&gt;</span>(Data()); }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;  T *data() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(Data()); }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> K&gt; return_type LookupByKey(K key)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="keywordtype">void</span> *search_result = std::bsearch(&amp;key, Data(), size(),</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        IndirectHelper&lt;T&gt;::element_stride, KeyCompare&lt;K&gt;);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    <span class="keywordflow">if</span> (!search_result) {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;  <span class="comment">// Key not found.</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    }</div>
 <div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div>
-<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="keyword">private</span>:</div>
-<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> K&gt; <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="l00373"></a><span class="lineno">  373</span>&#160;    <span class="keyword">const</span> K *key = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>K *<span class="keyword">&gt;</span>(ap);</div>
-<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="keyword">const</span> uint8_t *data = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(bp);</div>
-<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="keyword">auto</span> table = IndirectHelper&lt;T&gt;::Read(data, 0);</div>
-<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div>
-<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="comment">// std::bsearch compares with the operands transposed, so we negate the</span></div>
-<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="comment">// result here.</span></div>
-<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    <span class="keywordflow">return</span> -table-&gt;KeyCompareWithValue(*key);</div>
-<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;  }</div>
-<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;};</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <span class="keyword">const</span> uint8_t *element = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(search_result);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="keywordflow">return</span> IndirectHelper&lt;T&gt;::Read(element, 0);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;  }</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;  <span class="comment">// This class is only used to access pre-existing data. Don&#39;t ever</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  <span class="comment">// try to construct these manually.</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;  Vector();</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;  uoffset_t length_;</div>
 <div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;</div>
-<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="comment">// Represent a vector much like the template above, but in this case we</span></div>
-<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="comment">// don&#39;t know what the element types are (used with reflection.h).</span></div>
-<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="keyword">class </span>VectorOfAny {</div>
-<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> K&gt; <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="l00385"></a><span class="lineno">  385</span>&#160;    <span class="keyword">const</span> K *key = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>K *<span class="keyword">&gt;</span>(ap);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    <span class="keyword">const</span> uint8_t *data = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(bp);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="keyword">auto</span> table = IndirectHelper&lt;T&gt;::Read(data, 0);</div>
 <div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div>
-<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
-<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;  }</div>
-<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  uint8_t *Data() {</div>
-<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
-<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;  }</div>
-<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="keyword">protected</span>:</div>
-<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;  VectorOfAny();</div>
-<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;</div>
-<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;  uoffset_t length_;</div>
-<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;};</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="comment">// std::bsearch compares with the operands transposed, so we negate the</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="comment">// result here.</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <span class="keywordflow">return</span> -table-&gt;KeyCompareWithValue(*key);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;};</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="comment">// Represent a vector much like the template above, but in this case we</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="comment">// don&#39;t know what the element types are (used with reflection.h).</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="keyword">class </span>VectorOfAny {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;  uoffset_t size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EndianScalar(length_); }</div>
 <div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;</div>
-<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;<span class="comment">// Convenient helper function to get the length of any vector, regardless</span></div>
-<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="comment">// of wether it is null or not (the field is not set).</span></div>
-<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> VectorLength(<span class="keyword">const</span> Vector&lt;T&gt; *v) {</div>
-<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  <span class="keywordflow">return</span> v ? v-&gt;Length() : 0;</div>
-<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;}</div>
-<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div>
-<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;<span class="keyword">struct </span>String : <span class="keyword">public</span> Vector&lt;char&gt; {</div>
-<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;  <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&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(Data()); }</div>
-<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  std::string str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::string(c_str(), Length()); }</div>
-<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div>
-<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keywordtype">bool</span> operator &lt;(<span class="keyword">const</span> String &amp;o)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    <span class="keywordflow">return</span> strcmp(c_str(), o.c_str()) &lt; 0;</div>
-<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;  }</div>
-<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;};</div>
-<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;</div>
-<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="comment">// Simple indirection for buffer allocation, to allow this to be overridden</span></div>
-<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<span class="comment">// with custom allocation (see the FlatBufferBuilder constructor).</span></div>
-<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;<span class="keyword">class </span>simple_allocator {</div>
-<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160; <span class="keyword">public</span>:</div>
-<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  <span class="keyword">virtual</span> ~simple_allocator() {}</div>
-<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  <span class="keyword">virtual</span> uint8_t *allocate(<span class="keywordtype">size_t</span> size)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">new</span> uint8_t[size]; }</div>
-<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate(uint8_t *p)<span class="keyword"> const </span>{ <span class="keyword">delete</span>[] p; }</div>
-<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;};</div>
-<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;</div>
-<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="comment">// This is a minimal replication of std::vector&lt;uint8_t&gt; functionality,</span></div>
-<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="comment">// except growing from higher to lower addresses. i.e push_back() inserts data</span></div>
-<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<span class="comment">// in the lowest address in the vector.</span></div>
-<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;<span class="keyword">class </span>vector_downward {</div>
-<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160; <span class="keyword">public</span>:</div>
-<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;  <span class="keyword">explicit</span> vector_downward(<span class="keywordtype">size_t</span> initial_size,</div>
-<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                           <span class="keyword">const</span> simple_allocator &amp;allocator)</div>
-<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    : reserved_(initial_size),</div>
-<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;      buf_(allocator.allocate(reserved_)),</div>
-<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;      cur_(buf_ + reserved_),</div>
-<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;      allocator_(allocator) {</div>
-<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    assert((initial_size &amp; (<span class="keyword">sizeof</span>(largest_scalar_t) - 1)) == 0);</div>
-<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;  }</div>
-<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;</div>
-<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;  ~vector_downward() {</div>
-<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="keywordflow">if</span> (buf_)</div>
-<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;      allocator_.deallocate(buf_);</div>
-<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;  }</div>
-<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div>
-<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  <span class="keywordtype">void</span> clear() {</div>
-<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="keywordflow">if</span> (buf_ == <span class="keyword">nullptr</span>)</div>
-<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;      buf_ = allocator_.allocate(reserved_);</div>
-<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;</div>
-<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    cur_ = buf_ + reserved_;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;  <span class="keyword">const</span> uint8_t *Data()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  uint8_t *Data() {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(&amp;length_ + 1);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;  VectorOfAny();</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;  uoffset_t length_;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;};</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;<span class="comment">// Convenient helper function to get the length of any vector, regardless</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;<span class="comment">// of wether it is null or not (the field is not set).</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> VectorLength(<span class="keyword">const</span> Vector&lt;T&gt; *v) {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  <span class="keywordflow">return</span> v ? v-&gt;Length() : 0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;}</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="keyword">struct </span>String : <span class="keyword">public</span> Vector&lt;char&gt; {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  <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&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span> *<span class="keyword">&gt;</span>(Data()); }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  std::string str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::string(c_str(), Length()); }</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  <span class="keywordtype">bool</span> operator &lt;(<span class="keyword">const</span> String &amp;o)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keywordflow">return</span> strcmp(c_str(), o.c_str()) &lt; 0;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;};</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;<span class="comment">// Simple indirection for buffer allocation, to allow this to be overridden</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;<span class="comment">// with custom allocation (see the FlatBufferBuilder constructor).</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;<span class="keyword">class </span>simple_allocator {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;  <span class="keyword">virtual</span> ~simple_allocator() {}</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;  <span class="keyword">virtual</span> uint8_t *allocate(<span class="keywordtype">size_t</span> size)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">new</span> uint8_t[size]; }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> deallocate(uint8_t *p)<span class="keyword"> const </span>{ <span class="keyword">delete</span>[] p; }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;};</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="comment">// This is a minimal replication of std::vector&lt;uint8_t&gt; functionality,</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="comment">// except growing from higher to lower addresses. i.e push_back() inserts data</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="comment">// in the lowest address in the vector.</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="keyword">class </span>vector_downward {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;  <span class="keyword">explicit</span> vector_downward(<span class="keywordtype">size_t</span> initial_size,</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;                           <span class="keyword">const</span> simple_allocator &amp;allocator)</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    : reserved_(initial_size),</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;      buf_(allocator.allocate(reserved_)),</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;      cur_(buf_ + reserved_),</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;      allocator_(allocator) {</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    assert((initial_size &amp; (<span class="keyword">sizeof</span>(largest_scalar_t) - 1)) == 0);</div>
 <div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;  }</div>
 <div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;</div>
-<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  <span class="comment">// Relinquish the pointer to the caller.</span></div>
-<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  unique_ptr_t release() {</div>
-<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    <span class="comment">// Actually deallocate from the start of the allocated memory.</span></div>
-<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    std::function&lt;void(uint8_t *)&gt; deleter(</div>
-<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;      std::bind(&amp;simple_allocator::deallocate, allocator_, buf_));</div>
-<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div>
-<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="comment">// Point to the desired offset.</span></div>
-<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    unique_ptr_t retval(data(), deleter);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  ~vector_downward() {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    <span class="keywordflow">if</span> (buf_)</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;      allocator_.deallocate(buf_);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;  }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;  <span class="keywordtype">void</span> clear() {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keywordflow">if</span> (buf_ == <span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;      buf_ = allocator_.allocate(reserved_);</div>
 <div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;</div>
-<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    <span class="comment">// Don&#39;t deallocate when this instance is destroyed.</span></div>
-<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    buf_ = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    cur_ = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;</div>
-<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    <span class="keywordflow">return</span> retval;</div>
-<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  }</div>
-<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div>
-<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;  <span class="keywordtype">size_t</span> growth_policy(<span class="keywordtype">size_t</span> bytes) {</div>
-<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="keywordflow">return</span> (bytes / 2) &amp; ~(<span class="keyword">sizeof</span>(largest_scalar_t) - 1);</div>
-<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;  }</div>
-<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;</div>
-<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;  uint8_t *make_space(<span class="keywordtype">size_t</span> len) {</div>
-<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    <span class="keywordflow">if</span> (len &gt; static_cast&lt;size_t&gt;(cur_ - buf_)) {</div>
-<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;      <span class="keyword">auto</span> old_size = size();</div>
-<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;      <span class="keyword">auto</span> largest_align = AlignOf&lt;largest_scalar_t&gt;();</div>
-<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;      reserved_ += (std::max)(len, growth_policy(reserved_));</div>
-<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;      <span class="comment">// Round up to avoid undefined behavior from unaligned loads and stores.</span></div>
-<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;      reserved_ = (reserved_ + (largest_align - 1)) &amp; ~(largest_align - 1);</div>
-<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;      <span class="keyword">auto</span> new_buf = allocator_.allocate(reserved_);</div>
-<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;      <span class="keyword">auto</span> new_cur = new_buf + reserved_ - old_size;</div>
-<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;      memcpy(new_cur, cur_, old_size);</div>
-<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;      cur_ = new_cur;</div>
-<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;      allocator_.deallocate(buf_);</div>
-<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;      buf_ = new_buf;</div>
-<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    }</div>
-<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    cur_ -= len;</div>
-<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    <span class="comment">// Beyond this, signed offsets may not have enough range:</span></div>
-<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    <span class="comment">// (FlatBuffers &gt; 2GB not supported).</span></div>
-<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    assert(size() &lt; (1UL &lt;&lt; (<span class="keyword">sizeof</span>(soffset_t) * 8 - 1)) - 1);</div>
-<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    <span class="keywordflow">return</span> cur_;</div>
-<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  }</div>
-<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;</div>
-<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  uoffset_t size()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    assert(cur_ != <span class="keyword">nullptr</span> &amp;&amp; buf_ != <span class="keyword">nullptr</span>);</div>
-<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>uoffset_t<span class="keyword">&gt;</span>(reserved_ - (cur_ - buf_));</div>
-<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  }</div>
-<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;</div>
-<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  uint8_t *data()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    assert(cur_ != <span class="keyword">nullptr</span>);</div>
-<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="keywordflow">return</span> cur_;</div>
-<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  }</div>
-<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;</div>
-<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  uint8_t *data_at(<span class="keywordtype">size_t</span> offset) { <span class="keywordflow">return</span> buf_ + reserved_ - offset; }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    cur_ = buf_ + reserved_;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;  }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;  <span class="comment">// Relinquish the pointer to the caller.</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  unique_ptr_t release() {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="comment">// Actually deallocate from the start of the allocated memory.</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    std::function&lt;void(uint8_t *)&gt; deleter(</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;      std::bind(&amp;simple_allocator::deallocate, allocator_, buf_));</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    <span class="comment">// Point to the desired offset.</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    unique_ptr_t retval(data(), deleter);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    <span class="comment">// Don&#39;t deallocate when this instance is destroyed.</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    buf_ = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    cur_ = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;  }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  <span class="keywordtype">size_t</span> growth_policy(<span class="keywordtype">size_t</span> bytes) {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <span class="keywordflow">return</span> (bytes / 2) &amp; ~(<span class="keyword">sizeof</span>(largest_scalar_t) - 1);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;  }</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  uint8_t *make_space(<span class="keywordtype">size_t</span> len) {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    <span class="keywordflow">if</span> (len &gt; static_cast&lt;size_t&gt;(cur_ - buf_)) {</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;      <span class="keyword">auto</span> old_size = size();</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;      <span class="keyword">auto</span> largest_align = AlignOf&lt;largest_scalar_t&gt;();</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;      reserved_ += (std::max)(len, growth_policy(reserved_));</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;      <span class="comment">// Round up to avoid undefined behavior from unaligned loads and stores.</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;      reserved_ = (reserved_ + (largest_align - 1)) &amp; ~(largest_align - 1);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;      <span class="keyword">auto</span> new_buf = allocator_.allocate(reserved_);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;      <span class="keyword">auto</span> new_cur = new_buf + reserved_ - old_size;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;      memcpy(new_cur, cur_, old_size);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;      cur_ = new_cur;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;      allocator_.deallocate(buf_);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;      buf_ = new_buf;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    cur_ -= len;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    <span class="comment">// Beyond this, signed offsets may not have enough range:</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="comment">// (FlatBuffers &gt; 2GB not supported).</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    assert(size() &lt; FLATBUFFERS_MAX_BUFFER_SIZE);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="keywordflow">return</span> cur_;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  }</div>
 <div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div>
-<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  <span class="comment">// push() &amp; fill() are most frequently called with small byte counts (&lt;= 4),</span></div>
-<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  <span class="comment">// which is why we&#39;re using loops rather than calling memcpy/memset.</span></div>
-<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  <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="l00507"></a><span class="lineno">  507</span>&#160;    <span class="keyword">auto</span> dest = make_space(num);</div>
-<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num; i++) dest[i] = bytes[i];</div>
-<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  }</div>
-<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;</div>
-<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;  <span class="keywordtype">void</span> fill(<span class="keywordtype">size_t</span> zero_pad_bytes) {</div>
-<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <span class="keyword">auto</span> dest = make_space(zero_pad_bytes);</div>
-<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; zero_pad_bytes; i++) dest[i] = 0;</div>
-<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  uoffset_t size()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    assert(cur_ != <span class="keyword">nullptr</span> &amp;&amp; buf_ != <span class="keyword">nullptr</span>);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>uoffset_t<span class="keyword">&gt;</span>(reserved_ - (cur_ - buf_));</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;  }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  uint8_t *data()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    assert(cur_ != <span class="keyword">nullptr</span>);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    <span class="keywordflow">return</span> cur_;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  }</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  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="l00515"></a><span class="lineno">  515</span>&#160;</div>
-<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;  <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="l00517"></a><span class="lineno">  517</span>&#160;</div>
-<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160; <span class="keyword">private</span>:</div>
-<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;  <span class="comment">// You shouldn&#39;t really be copying instances of this class.</span></div>
-<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;  vector_downward(<span class="keyword">const</span> vector_downward &amp;);</div>
-<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  vector_downward &amp;operator=(<span class="keyword">const</span> vector_downward &amp;);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;  <span class="comment">// push() &amp; fill() are most frequently called with small byte counts (&lt;= 4),</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  <span class="comment">// which is why we&#39;re using loops rather than calling memcpy/memset.</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  <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="l00519"></a><span class="lineno">  519</span>&#160;    <span class="keyword">auto</span> dest = make_space(num);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; num; i++) dest[i] = bytes[i];</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  }</div>
 <div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div>
-<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  <span class="keywordtype">size_t</span> reserved_;</div>
-<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  uint8_t *buf_;</div>
-<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;  uint8_t *cur_;  <span class="comment">// Points at location between empty (below) and used (above).</span></div>
-<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  <span class="keyword">const</span> simple_allocator &amp;allocator_;</div>
-<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;};</div>
-<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div>
-<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;<span class="comment">// Converts a Field ID to a virtual table offset.</span></div>
-<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<span class="keyword">inline</span> voffset_t FieldIndexToOffset(voffset_t field_id) {</div>
-<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;  <span class="comment">// Should correspond to what EndTable() below builds up.</span></div>
-<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;  <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="l00533"></a><span class="lineno">  533</span>&#160;  <span class="keywordflow">return</span> (field_id + fixed_fields) * <span class="keyword">sizeof</span>(voffset_t);</div>
-<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;}</div>
-<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;</div>
-<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;<span class="comment">// Computes how many bytes you&#39;d have to pad to be able to write an</span></div>
-<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="comment">// &quot;scalar_size&quot; scalar if the buffer had grown to &quot;buf_size&quot; (downwards in</span></div>
-<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;<span class="comment">// memory).</span></div>
-<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">size_t</span> PaddingBytes(<span class="keywordtype">size_t</span> buf_size, <span class="keywordtype">size_t</span> scalar_size) {</div>
-<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;  <span class="keywordflow">return</span> ((~buf_size) + 1) &amp; (scalar_size - 1);</div>
-<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;}<span class="comment"></span></div>
-<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="comment">/// @endcond</span></div>
-<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="comment">/// @addtogroup flatbuffers_cpp_api</span></div>
-<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;<span class="comment">/// @{</span></div>
-<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="comment">/// @class FlatBufferBuilder</span></div>
-<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment">/// @brief Helper class to hold data needed in creation of a FlatBuffer.</span></div>
-<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment">/// To serialize data, you typically call one of the `Create*()` functions in</span></div>
-<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="comment">/// the generated code, which in turn call a sequence of `StartTable`/</span></div>
-<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment">/// `PushElement`/`AddElement`/`EndTable`, or the builtin `CreateString`/</span></div>
-<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="comment">/// `CreateVector` functions. Do this is depth-first order to build up a tree to</span></div>
-<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="comment">/// the root. `Finish()` wraps up the buffer ready for transport.</span></div>
-<div class="line"><a name="l00553"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html">  553</a></span>&#160;<span class="comment"></span><span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a><span class="comment"></span></div>
-<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;<span class="comment"></span>FLATBUFFERS_FINAL_CLASS<span class="comment"></span></div>
-<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<span class="comment">/// @endcond</span></div>
-<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment"></span>{</div>
-<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160; <span class="keyword">public</span>:<span class="comment"></span></div>
-<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;<span class="comment">  /// @brief Default constructor for FlatBufferBuilder.</span></div>
-<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;<span class="comment">  /// @param[in] initial_size The initial size of the buffer, in bytes. Defaults</span></div>
-<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;<span class="comment">  /// to`1024`.</span></div>
-<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;<span class="comment">  /// @param[in] allocator A pointer to the `simple_allocator` that should be</span></div>
-<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="comment">  /// used. Defaults to `nullptr`, which means the `default_allocator` will be</span></div>
-<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;<span class="comment">  /// be used.</span></div>
-<div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">  565</a></span>&#160;<span class="comment"></span>  <span class="keyword">explicit</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">FlatBufferBuilder</a>(uoffset_t initial_size = 1024,</div>
-<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;                             <span class="keyword">const</span> simple_allocator *allocator = <span class="keyword">nullptr</span>)</div>
-<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;      : buf_(initial_size, allocator ? *allocator : default_allocator),</div>
-<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        nested(false), finished(false), minalign_(1), force_defaults_(false) {</div>
-<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    offsetbuf_.reserve(16);  <span class="comment">// Avoid first few reallocs.</span></div>
-<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    vtables_.reserve(16);</div>
-<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    EndianCheck();</div>
-<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;  }</div>
-<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;<span class="comment">  /// @brief Reset all the state in this FlatBufferBuilder so it can be reused</span></div>
-<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;<span class="comment">  /// to construct another buffer.</span></div>
-<div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">  576</a></span>&#160;<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="l00577"></a><span class="lineno">  577</span>&#160;    buf_.clear();</div>
-<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    offsetbuf_.clear();</div>
-<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    nested = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    finished = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    vtables_.clear();</div>
-<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    minalign_ = 1;</div>
-<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;  }</div>
-<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;<span class="comment">  /// @brief The current size of the serialized buffer, counting from the end.</span></div>
-<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;<span class="comment">  /// @return Returns an `uoffset_t` with the current size of the buffer.</span></div>
-<div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">  587</a></span>&#160;<span class="comment"></span>  uoffset_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.size(); }</div>
-<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;<span class="comment">  /// @brief Get the serialized buffer (after you call `Finish()`).</span></div>
-<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;<span class="comment">  /// @return Returns an `uint8_t` pointer to the FlatBuffer data inside the</span></div>
-<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="comment">  /// buffer.</span></div>
-<div class="line"><a name="l00592"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8">  592</a></span>&#160;<span class="comment"></span>  uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8">GetBufferPointer</a>()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    Finished();</div>
-<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <span class="keywordflow">return</span> buf_.data();</div>
-<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;  }</div>
-<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;<span class="comment">  /// @brief Get a pointer to an unfinished buffer.</span></div>
-<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;<span class="comment">  /// @return Returns a `uint8_t` pointer to the unfinished buffer.</span></div>
-<div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9">  599</a></span>&#160;<span class="comment"></span>  uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9">GetCurrentBufferPointer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.data(); }</div>
-<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="comment">  /// @brief Get the released pointer to the serialized buffer.</span></div>
-<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment">  /// @warning Do NOT attempt to use this FlatBufferBuilder afterwards!</span></div>
-<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="comment">  /// @return The `unique_ptr` returned has a special allocator that knows how</span></div>
-<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment">  /// to deallocate this pointer (since it points to the middle of an</span></div>
-<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="comment">  /// allocation). Thus, do not mix this pointer with other `unique_ptr`&#39;s, or</span></div>
-<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="comment">  /// call `release()`/`reset()` on it.</span></div>
-<div class="line"><a name="l00607"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">  607</a></span>&#160;<span class="comment"></span>  unique_ptr_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">ReleaseBufferPointer</a>() {</div>
-<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    Finished();</div>
-<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keywordflow">return</span> buf_.release();</div>
-<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;  }</div>
-<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;<span class="comment"></span>  <span class="keywordtype">void</span> Finished()<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="comment">// If you get this assert, you&#39;re attempting to get access a buffer</span></div>
-<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="comment">// which hasn&#39;t been finished yet. Be sure to call</span></div>
-<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    <span class="comment">// FlatBufferBuilder::Finish with your root table.</span></div>
-<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="comment">// If you really need to access an unfinished buffer, call</span></div>
-<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    <span class="comment">// GetCurrentBufferPointer instead.</span></div>
-<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    assert(finished);</div>
-<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  }<span class="comment"></span></div>
-<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="comment">  /// @endcond</span></div>
-<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="comment">  /// @brief In order to save space, fields that are set to their default value</span></div>
-<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;<span class="comment">  /// don&#39;t get serialized into the buffer.</span></div>
-<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;<span class="comment">  /// @param[in] bool fd When set to `true`, always serializes default values.</span></div>
-<div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">  626</a></span>&#160;<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="l00627"></a><span class="lineno">  627</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;<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="l00630"></a><span class="lineno">  630</span>&#160;</div>
-<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;  <span class="keywordtype">void</span> Align(<span class="keywordtype">size_t</span> elem_size) {</div>
-<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    <span class="keywordflow">if</span> (elem_size &gt; minalign_) minalign_ = elem_size;</div>
-<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    buf_.fill(PaddingBytes(buf_.size(), elem_size));</div>
-<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;  }</div>
-<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div>
-<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  <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="l00637"></a><span class="lineno">  637</span>&#160;    PushBytes(bytes, size);</div>
-<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    finished = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;  }</div>
-<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;</div>
-<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;  <span class="keywordtype">void</span> PushBytes(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> size) {</div>
-<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    buf_.push(bytes, size);</div>
-<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;  }</div>
-<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;</div>
-<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;  <span class="keywordtype">void</span> PopBytes(<span class="keywordtype">size_t</span> amount) { buf_.pop(amount); }</div>
-<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;</div>
-<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AssertScalarT() {</div>
-<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <span class="comment">// The code assumes power of 2 sizes and endian-swap-ability.</span></div>
-<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    static_assert(std::is_scalar&lt;T&gt;::value</div>
-<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;        <span class="comment">// The Offset&lt;T&gt; type is essentially a scalar but fails is_scalar.</span></div>
-<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        || <span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(Offset&lt;void&gt;),</div>
-<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;           <span class="stringliteral">&quot;T must be a scalar type&quot;</span>);</div>
-<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;  }</div>
-<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;</div>
-<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;  <span class="comment">// Write a single aligned scalar to the buffer</span></div>
-<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; uoffset_t PushElement(T element) {</div>
-<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    AssertScalarT&lt;T&gt;();</div>
-<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    T litle_endian_element = EndianScalar(element);</div>
-<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    Align(<span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    PushBytes(reinterpret_cast&lt;uint8_t *&gt;(&amp;litle_endian_element), <span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
-<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;  }</div>
-<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div>
-<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; uoffset_t PushElement(Offset&lt;T&gt; off) {</div>
-<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    <span class="comment">// Special case for offsets: see ReferTo below.</span></div>
-<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    <span class="keywordflow">return</span> PushElement(ReferTo(off.o));</div>
-<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  }</div>
-<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;</div>
-<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;  <span class="comment">// When writing fields, we track where they are, so we can create correct</span></div>
-<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;  <span class="comment">// vtables later.</span></div>
-<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  <span class="keywordtype">void</span> TrackField(voffset_t field, uoffset_t off) {</div>
-<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    FieldLoc fl = { off, field };</div>
-<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    offsetbuf_.push_back(fl);</div>
-<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;  }</div>
-<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;</div>
-<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;  <span class="comment">// Like PushElement, but additionally tracks the field this represents.</span></div>
-<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AddElement(voffset_t field, T e, T def) {</div>
-<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    <span class="comment">// We don&#39;t serialize values equal to the default.</span></div>
-<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    <span class="keywordflow">if</span> (e == def &amp;&amp; !force_defaults_) <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    <span class="keyword">auto</span> off = PushElement(e);</div>
-<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    TrackField(field, off);</div>
-<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;  }</div>
-<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;</div>
-<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AddOffset(voffset_t field, Offset&lt;T&gt; off) {</div>
-<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="keywordflow">if</span> (!off.o) <span class="keywordflow">return</span>;  <span class="comment">// An offset of 0 means NULL, don&#39;t store.</span></div>
-<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    AddElement(field, ReferTo(off.o), static_cast&lt;uoffset_t&gt;(0));</div>
-<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;  }</div>
-<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;</div>
-<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AddStruct(voffset_t field, <span class="keyword">const</span> T *structptr) {</div>
-<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keywordflow">if</span> (!structptr) <span class="keywordflow">return</span>;  <span class="comment">// Default, don&#39;t store.</span></div>
-<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    Align(AlignOf&lt;T&gt;());</div>
-<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    PushBytes(reinterpret_cast&lt;const uint8_t *&gt;(structptr), <span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    TrackField(field, <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>());</div>
-<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;  }</div>
-<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;</div>
-<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;  <span class="keywordtype">void</span> AddStructOffset(voffset_t field, uoffset_t off) {</div>
-<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    TrackField(field, off);</div>
-<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;  }</div>
-<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;</div>
-<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;  <span class="comment">// Offsets initially are relative to the end of the buffer (downwards).</span></div>
-<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;  <span class="comment">// This function converts them to be relative to the current location</span></div>
-<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;  <span class="comment">// in the buffer (when stored here), pointing upwards.</span></div>
-<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;  uoffset_t ReferTo(uoffset_t off) {</div>
-<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    <span class="comment">// Align to ensure GetSize() below is correct.</span></div>
-<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    Align(<span class="keyword">sizeof</span>(uoffset_t));</div>
-<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="comment">// Offset must refer to something already in buffer.</span></div>
-<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    assert(off &amp;&amp; off &lt;= <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>());</div>
-<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() - off + <span class="keyword">sizeof</span>(uoffset_t);</div>
-<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;  }</div>
-<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;</div>
-<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  <span class="keywordtype">void</span> NotNested() {</div>
-<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <span class="comment">// If you hit this, you&#39;re trying to construct a Table/Vector/String</span></div>
-<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    <span class="comment">// during the construction of its parent table (between the MyTableBuilder</span></div>
-<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="comment">// and table.Finish().</span></div>
-<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    <span class="comment">// Move the creation of these sub-objects to above the MyTableBuilder to</span></div>
-<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="comment">// not get this assert.</span></div>
-<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="comment">// Ignoring this assert may appear to work in simple cases, but the reason</span></div>
-<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="comment">// it is here is that storing objects in-line may cause vtable offsets</span></div>
-<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="comment">// to not fit anymore. It also leads to vtable duplication.</span></div>
-<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    assert(!nested);</div>
-<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;  }</div>
-<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;</div>
-<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;  <span class="comment">// From generated code (or from the parser), we call StartTable/EndTable</span></div>
-<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;  <span class="comment">// with a sequence of AddElement calls in between.</span></div>
-<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;  uoffset_t StartTable() {</div>
-<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    NotNested();</div>
-<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    nested = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
-<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;  }</div>
-<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;</div>
-<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;  <span class="comment">// This finishes one serialized object by generating the vtable if it&#39;s a</span></div>
-<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;  <span class="comment">// table, comparing it against existing vtables, and writing the</span></div>
-<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;  <span class="comment">// resulting vtable offset.</span></div>
-<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;  uoffset_t EndTable(uoffset_t start, voffset_t numfields) {</div>
-<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="comment">// If you get this assert, a corresponding StartTable wasn&#39;t called.</span></div>
-<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    assert(nested);</div>
-<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <span class="comment">// Write the vtable offset, which is the start of any Table.</span></div>
-<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="comment">// We fill it&#39;s value later.</span></div>
-<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <span class="keyword">auto</span> vtableoffsetloc = PushElement&lt;soffset_t&gt;(0);</div>
-<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    <span class="comment">// Write a vtable, which consists entirely of voffset_t elements.</span></div>
-<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="comment">// It starts with the number of offsets, followed by a type id, followed</span></div>
-<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <span class="comment">// by the offsets themselves. In reverse:</span></div>
-<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    buf_.fill(numfields * <span class="keyword">sizeof</span>(voffset_t));</div>
-<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    <span class="keyword">auto</span> table_object_size = vtableoffsetloc - start;</div>
-<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    assert(table_object_size &lt; 0x10000);  <span class="comment">// Vtable use 16bit offsets.</span></div>
-<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    PushElement&lt;voffset_t&gt;(<span class="keyword">static_cast&lt;</span>voffset_t<span class="keyword">&gt;</span>(table_object_size));</div>
-<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    PushElement&lt;voffset_t&gt;(FieldIndexToOffset(numfields));</div>
-<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <span class="comment">// Write the offsets into the table</span></div>
-<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> field_location = offsetbuf_.begin();</div>
-<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;              field_location != offsetbuf_.end();</div>
-<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;            ++field_location) {</div>
-<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;      <span class="keyword">auto</span> pos = <span class="keyword">static_cast&lt;</span>voffset_t<span class="keyword">&gt;</span>(vtableoffsetloc - field_location-&gt;off);</div>
-<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;      <span class="comment">// If this asserts, it means you&#39;ve set a field twice.</span></div>
-<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;      assert(!ReadScalar&lt;voffset_t&gt;(buf_.data() + field_location-&gt;id));</div>
-<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;      WriteScalar&lt;voffset_t&gt;(buf_.data() + field_location-&gt;id, pos);</div>
-<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    }</div>
-<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    offsetbuf_.clear();</div>
-<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    <span class="keyword">auto</span> vt1 = <span class="keyword">reinterpret_cast&lt;</span>voffset_t *<span class="keyword">&gt;</span>(buf_.data());</div>
-<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    <span class="keyword">auto</span> vt1_size = ReadScalar&lt;voffset_t&gt;(vt1);</div>
-<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    <span class="keyword">auto</span> vt_use = <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
-<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    <span class="comment">// See if we already have generated a vtable with this exact same</span></div>
-<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    <span class="comment">// layout before. If so, make it point to the old one, remove this one.</span></div>
-<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = vtables_.begin(); it != vtables_.end(); ++it) {</div>
-<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;      <span class="keyword">auto</span> vt2 = <span class="keyword">reinterpret_cast&lt;</span>voffset_t *<span class="keyword">&gt;</span>(buf_.data_at(*it));</div>
-<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;      <span class="keyword">auto</span> vt2_size = *vt2;</div>
-<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;      <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="l00767"></a><span class="lineno">  767</span>&#160;      vt_use = *it;</div>
-<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;      buf_.pop(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() - vtableoffsetloc);</div>
-<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;      <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    }</div>
-<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    <span class="comment">// If this is a new vtable, remember it.</span></div>
-<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    <span class="keywordflow">if</span> (vt_use == <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>()) {</div>
-<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;      vtables_.push_back(vt_use);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  <span class="keywordtype">void</span> fill(<span class="keywordtype">size_t</span> zero_pad_bytes) {</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="keyword">auto</span> dest = make_space(zero_pad_bytes);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; zero_pad_bytes; i++) dest[i] = 0;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;  <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="l00529"></a><span class="lineno">  529</span>&#160;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160; <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;  <span class="comment">// You shouldn&#39;t really be copying instances of this class.</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;  vector_downward(<span class="keyword">const</span> vector_downward &amp;);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  vector_downward &amp;operator=(<span class="keyword">const</span> vector_downward &amp;);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  <span class="keywordtype">size_t</span> reserved_;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;  uint8_t *buf_;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  uint8_t *cur_;  <span class="comment">// Points at location between empty (below) and used (above).</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;  <span class="keyword">const</span> simple_allocator &amp;allocator_;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;};</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="comment">// Converts a Field ID to a virtual table offset.</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="keyword">inline</span> voffset_t FieldIndexToOffset(voffset_t field_id) {</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;  <span class="comment">// Should correspond to what EndTable() below builds up.</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  <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="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>voffset_t<span class="keyword">&gt;</span>((field_id + fixed_fields) * <span class="keyword">sizeof</span>(voffset_t));</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;}</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment">// Computes how many bytes you&#39;d have to pad to be able to write an</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="comment">// &quot;scalar_size&quot; scalar if the buffer had grown to &quot;buf_size&quot; (downwards in</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment">// memory).</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">size_t</span> PaddingBytes(<span class="keywordtype">size_t</span> buf_size, <span class="keywordtype">size_t</span> scalar_size) {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;  <span class="keywordflow">return</span> ((~buf_size) + 1) &amp; (scalar_size - 1);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;}<span class="comment"></span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;<span class="comment">/// @endcond</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<span class="comment">/// @addtogroup flatbuffers_cpp_api</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment">/// @{</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;<span class="comment">/// @class FlatBufferBuilder</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;<span class="comment">/// @brief Helper class to hold data needed in creation of a FlatBuffer.</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;<span class="comment">/// To serialize data, you typically call one of the `Create*()` functions in</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;<span class="comment">/// the generated code, which in turn call a sequence of `StartTable`/</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;<span class="comment">/// `PushElement`/`AddElement`/`EndTable`, or the builtin `CreateString`/</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="comment">/// `CreateVector` functions. Do this is depth-first order to build up a tree to</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;<span class="comment">/// the root. `Finish()` wraps up the buffer ready for transport.</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html">  565</a></span>&#160;<span class="comment"></span><span class="keyword">class </span><a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a><span class="comment"></span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;<span class="comment"></span>FLATBUFFERS_FINAL_CLASS<span class="comment"></span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;<span class="comment">/// @endcond</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="comment"></span>{</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160; <span class="keyword">public</span>:<span class="comment"></span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;<span class="comment">  /// @brief Default constructor for FlatBufferBuilder.</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;<span class="comment">  /// @param[in] initial_size The initial size of the buffer, in bytes. Defaults</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="comment">  /// to`1024`.</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;<span class="comment">  /// @param[in] allocator A pointer to the `simple_allocator` that should be</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;<span class="comment">  /// used. Defaults to `nullptr`, which means the `default_allocator` will be</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;<span class="comment">  /// be used.</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">  577</a></span>&#160;<span class="comment"></span>  <span class="keyword">explicit</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">FlatBufferBuilder</a>(uoffset_t initial_size = 1024,</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;                             <span class="keyword">const</span> simple_allocator *allocator = <span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;      : buf_(initial_size, allocator ? *allocator : default_allocator),</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;        nested(false), finished(false), minalign_(1), force_defaults_(false),</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;        string_pool(nullptr) {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    offsetbuf_.reserve(16);  <span class="comment">// Avoid first few reallocs.</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    vtables_.reserve(16);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    EndianCheck();</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;  }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  ~<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a>() {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    <span class="keywordflow">if</span> (string_pool) <span class="keyword">delete</span> string_pool;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="comment">  /// @brief Reset all the state in this FlatBufferBuilder so it can be reused</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="comment">  /// to construct another buffer.</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">  593</a></span>&#160;<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="l00594"></a><span class="lineno">  594</span>&#160;    buf_.clear();</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    offsetbuf_.clear();</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    nested = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    finished = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    vtables_.clear();</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    minalign_ = 1;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    <span class="keywordflow">if</span> (string_pool) string_pool-&gt;clear();</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  }</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="comment">  /// @brief The current size of the serialized buffer, counting from the end.</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment">  /// @return Returns an `uoffset_t` with the current size of the buffer.</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">  605</a></span>&#160;<span class="comment"></span>  uoffset_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.size(); }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="comment">  /// @brief Get the serialized buffer (after you call `Finish()`).</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;<span class="comment">  /// @return Returns an `uint8_t` pointer to the FlatBuffer data inside the</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;<span class="comment">  /// buffer.</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8">  610</a></span>&#160;<span class="comment"></span>  uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8">GetBufferPointer</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    Finished();</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="keywordflow">return</span> buf_.data();</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  }</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="comment">  /// @brief Get a pointer to an unfinished buffer.</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="comment">  /// @return Returns a `uint8_t` pointer to the unfinished buffer.</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9">  617</a></span>&#160;<span class="comment"></span>  uint8_t *<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9">GetCurrentBufferPointer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> buf_.data(); }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;<span class="comment">  /// @brief Get the released pointer to the serialized buffer.</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;<span class="comment">  /// @warning Do NOT attempt to use this FlatBufferBuilder afterwards!</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="comment">  /// @return The `unique_ptr` returned has a special allocator that knows how</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;<span class="comment">  /// to deallocate this pointer (since it points to the middle of an</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="comment">  /// allocation). Thus, do not mix this pointer with other `unique_ptr`&#39;s, or</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;<span class="comment">  /// call `release()`/`reset()` on it.</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">  625</a></span>&#160;<span class="comment"></span>  unique_ptr_t <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">ReleaseBufferPointer</a>() {</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    Finished();</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    <span class="keywordflow">return</span> buf_.release();</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;  }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<span class="comment"></span>  <span class="keywordtype">void</span> Finished()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    <span class="comment">// If you get this assert, you&#39;re attempting to get access a buffer</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    <span class="comment">// which hasn&#39;t been finished yet. Be sure to call</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <span class="comment">// FlatBufferBuilder::Finish with your root table.</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    <span class="comment">// If you really need to access an unfinished buffer, call</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="comment">// GetCurrentBufferPointer instead.</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    assert(finished);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  }<span class="comment"></span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="comment">  /// @endcond</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;<span class="comment">  /// @brief In order to save space, fields that are set to their default value</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;<span class="comment">  /// don&#39;t get serialized into the buffer.</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;<span class="comment">  /// @param[in] bool fd When set to `true`, always serializes default values.</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">  644</a></span>&#160;<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="l00645"></a><span class="lineno">  645</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;<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="l00648"></a><span class="lineno">  648</span>&#160;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;  <span class="keywordtype">void</span> Align(<span class="keywordtype">size_t</span> elem_size) {</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keywordflow">if</span> (elem_size &gt; minalign_) minalign_ = elem_size;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    buf_.fill(PaddingBytes(buf_.size(), elem_size));</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;  }</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;  <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="l00655"></a><span class="lineno">  655</span>&#160;    PushBytes(bytes, size);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;    finished = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  <span class="keywordtype">void</span> PushBytes(<span class="keyword">const</span> uint8_t *bytes, <span class="keywordtype">size_t</span> size) {</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    buf_.push(bytes, size);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;  }</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  <span class="keywordtype">void</span> PopBytes(<span class="keywordtype">size_t</span> amount) { buf_.pop(amount); }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AssertScalarT() {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    <span class="comment">// The code assumes power of 2 sizes and endian-swap-ability.</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    static_assert(std::is_scalar&lt;T&gt;::value</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        <span class="comment">// The Offset&lt;T&gt; type is essentially a scalar but fails is_scalar.</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;        || <span class="keyword">sizeof</span>(T) == <span class="keyword">sizeof</span>(Offset&lt;void&gt;),</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;           <span class="stringliteral">&quot;T must be a scalar type&quot;</span>);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;  <span class="comment">// Write a single aligned scalar to the buffer</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; uoffset_t PushElement(T element) {</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    AssertScalarT&lt;T&gt;();</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;    T litle_endian_element = EndianScalar(element);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    Align(<span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    PushBytes(reinterpret_cast&lt;uint8_t *&gt;(&amp;litle_endian_element), <span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;  }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; uoffset_t PushElement(Offset&lt;T&gt; off) {</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <span class="comment">// Special case for offsets: see ReferTo below.</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    <span class="keywordflow">return</span> PushElement(ReferTo(off.o));</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;  }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;  <span class="comment">// When writing fields, we track where they are, so we can create correct</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;  <span class="comment">// vtables later.</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;  <span class="keywordtype">void</span> TrackField(voffset_t field, uoffset_t off) {</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    FieldLoc fl = { off, field };</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    offsetbuf_.push_back(fl);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;  }</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;  <span class="comment">// Like PushElement, but additionally tracks the field this represents.</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AddElement(voffset_t field, T e, T def) {</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="comment">// We don&#39;t serialize values equal to the default.</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    <span class="keywordflow">if</span> (e == def &amp;&amp; !force_defaults_) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    <span class="keyword">auto</span> off = PushElement(e);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    TrackField(field, off);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;  }</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AddOffset(voffset_t field, Offset&lt;T&gt; off) {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    <span class="keywordflow">if</span> (!off.o) <span class="keywordflow">return</span>;  <span class="comment">// An offset of 0 means NULL, don&#39;t store.</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;    AddElement(field, ReferTo(off.o), static_cast&lt;uoffset_t&gt;(0));</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;  }</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> AddStruct(voffset_t field, <span class="keyword">const</span> T *structptr) {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="keywordflow">if</span> (!structptr) <span class="keywordflow">return</span>;  <span class="comment">// Default, don&#39;t store.</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    Align(AlignOf&lt;T&gt;());</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;    PushBytes(reinterpret_cast&lt;const uint8_t *&gt;(structptr), <span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    TrackField(field, <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>());</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;  }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;  <span class="keywordtype">void</span> AddStructOffset(voffset_t field, uoffset_t off) {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    TrackField(field, off);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  }</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;  <span class="comment">// Offsets initially are relative to the end of the buffer (downwards).</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;  <span class="comment">// This function converts them to be relative to the current location</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;  <span class="comment">// in the buffer (when stored here), pointing upwards.</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;  uoffset_t ReferTo(uoffset_t off) {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    <span class="comment">// Align to ensure GetSize() below is correct.</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;    Align(<span class="keyword">sizeof</span>(uoffset_t));</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;    <span class="comment">// Offset must refer to something already in buffer.</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    assert(off &amp;&amp; off &lt;= <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>());</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() - off + <span class="keyword">static_cast&lt;</span>uoffset_t<span class="keyword">&gt;</span>(<span class="keyword">sizeof</span>(uoffset_t));</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;  }</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;  <span class="keywordtype">void</span> NotNested() {</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    <span class="comment">// If you hit this, you&#39;re trying to construct a Table/Vector/String</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    <span class="comment">// during the construction of its parent table (between the MyTableBuilder</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <span class="comment">// and table.Finish().</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <span class="comment">// Move the creation of these sub-objects to above the MyTableBuilder to</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    <span class="comment">// not get this assert.</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="comment">// Ignoring this assert may appear to work in simple cases, but the reason</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="comment">// it is here is that storing objects in-line may cause vtable offsets</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <span class="comment">// to not fit anymore. It also leads to vtable duplication.</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    assert(!nested);</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;  }</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;  <span class="comment">// From generated code (or from the parser), we call StartTable/EndTable</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;  <span class="comment">// with a sequence of AddElement calls in between.</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;  uoffset_t StartTable() {</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    NotNested();</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    nested = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;  }</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;  <span class="comment">// This finishes one serialized object by generating the vtable if it&#39;s a</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;  <span class="comment">// table, comparing it against existing vtables, and writing the</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;  <span class="comment">// resulting vtable offset.</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;  uoffset_t EndTable(uoffset_t start, voffset_t numfields) {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    <span class="comment">// If you get this assert, a corresponding StartTable wasn&#39;t called.</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    assert(nested);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    <span class="comment">// Write the vtable offset, which is the start of any Table.</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <span class="comment">// We fill it&#39;s value later.</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    <span class="keyword">auto</span> vtableoffsetloc = PushElement&lt;soffset_t&gt;(0);</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    <span class="comment">// Write a vtable, which consists entirely of voffset_t elements.</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    <span class="comment">// It starts with the number of offsets, followed by a type id, followed</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    <span class="comment">// by the offsets themselves. In reverse:</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    buf_.fill(numfields * <span class="keyword">sizeof</span>(voffset_t));</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    <span class="keyword">auto</span> table_object_size = vtableoffsetloc - start;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    assert(table_object_size &lt; 0x10000);  <span class="comment">// Vtable use 16bit offsets.</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    PushElement&lt;voffset_t&gt;(<span class="keyword">static_cast&lt;</span>voffset_t<span class="keyword">&gt;</span>(table_object_size));</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    PushElement&lt;voffset_t&gt;(FieldIndexToOffset(numfields));</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <span class="comment">// Write the offsets into the table</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> field_location = offsetbuf_.begin();</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;              field_location != offsetbuf_.end();</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;            ++field_location) {</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;      <span class="keyword">auto</span> pos = <span class="keyword">static_cast&lt;</span>voffset_t<span class="keyword">&gt;</span>(vtableoffsetloc - field_location-&gt;off);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;      <span class="comment">// If this asserts, it means you&#39;ve set a field twice.</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;      assert(!ReadScalar&lt;voffset_t&gt;(buf_.data() + field_location-&gt;id));</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;      WriteScalar&lt;voffset_t&gt;(buf_.data() + field_location-&gt;id, pos);</div>
 <div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    }</div>
-<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <span class="comment">// Fill the vtable offset we created above.</span></div>
-<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    <span class="comment">// The offset points from the beginning of the object to where the</span></div>
-<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <span class="comment">// vtable is stored.</span></div>
-<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="comment">// Offsets default direction is downward in memory for future format</span></div>
-<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    <span class="comment">// flexibility (storing all vtables at the start of the file).</span></div>
-<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    WriteScalar(buf_.data_at(vtableoffsetloc),</div>
-<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;                <span class="keyword">static_cast&lt;</span>soffset_t<span class="keyword">&gt;</span>(vt_use) -</div>
-<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;                  static_cast&lt;soffset_t&gt;(vtableoffsetloc));</div>
-<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;</div>
-<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;    nested = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;    <span class="keywordflow">return</span> vtableoffsetloc;</div>
-<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;  }</div>
-<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;</div>
-<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;  <span class="comment">// This checks a required field has been set in a given table that has</span></div>
-<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;  <span class="comment">// just been constructed.</span></div>
-<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> Required(Offset&lt;T&gt; table, voffset_t field) {</div>
-<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    <span class="keyword">auto</span> table_ptr = buf_.data_at(table.o);</div>
-<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    <span class="keyword">auto</span> vtable_ptr = table_ptr - ReadScalar&lt;soffset_t&gt;(table_ptr);</div>
-<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="keywordtype">bool</span> ok = ReadScalar&lt;voffset_t&gt;(vtable_ptr + field) != 0;</div>
-<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <span class="comment">// If this fails, the caller will show what field needs to be set.</span></div>
-<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    assert(ok);</div>
-<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    (void)ok;</div>
-<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;  }</div>
-<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;</div>
-<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;  uoffset_t StartStruct(<span class="keywordtype">size_t</span> alignment) {</div>
-<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    Align(alignment);</div>
-<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
-<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;  }</div>
-<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;</div>
-<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;  uoffset_t EndStruct() { <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>(); }</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    offsetbuf_.clear();</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    <span class="keyword">auto</span> vt1 = <span class="keyword">reinterpret_cast&lt;</span>voffset_t *<span class="keyword">&gt;</span>(buf_.data());</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <span class="keyword">auto</span> vt1_size = ReadScalar&lt;voffset_t&gt;(vt1);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="keyword">auto</span> vt_use = <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    <span class="comment">// See if we already have generated a vtable with this exact same</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    <span class="comment">// layout before. If so, make it point to the old one, remove this one.</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = vtables_.begin(); it != vtables_.end(); ++it) {</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;      <span class="keyword">auto</span> vt2 = <span class="keyword">reinterpret_cast&lt;</span>voffset_t *<span class="keyword">&gt;</span>(buf_.data_at(*it));</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;      <span class="keyword">auto</span> vt2_size = *vt2;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;      <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="l00785"></a><span class="lineno">  785</span>&#160;      vt_use = *it;</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;      buf_.pop(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() - vtableoffsetloc);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    }</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="comment">// If this is a new vtable, remember it.</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    <span class="keywordflow">if</span> (vt_use == <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>()) {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;      vtables_.push_back(vt_use);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    }</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="comment">// Fill the vtable offset we created above.</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <span class="comment">// The offset points from the beginning of the object to where the</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    <span class="comment">// vtable is stored.</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <span class="comment">// Offsets default direction is downward in memory for future format</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    <span class="comment">// flexibility (storing all vtables at the start of the file).</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    WriteScalar(buf_.data_at(vtableoffsetloc),</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;                <span class="keyword">static_cast&lt;</span>soffset_t<span class="keyword">&gt;</span>(vt_use) -</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;                  static_cast&lt;soffset_t&gt;(vtableoffsetloc));</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    nested = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="keywordflow">return</span> vtableoffsetloc;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;  }</div>
 <div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;</div>
-<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;  <span class="keywordtype">void</span> ClearOffsets() { offsetbuf_.clear(); }</div>
-<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;</div>
-<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;  <span class="comment">// Aligns such that when &quot;len&quot; bytes are written, an object can be written</span></div>
-<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;  <span class="comment">// after it with &quot;alignment&quot; without padding.</span></div>
-<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;  <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="l00811"></a><span class="lineno">  811</span>&#160;    buf_.fill(PaddingBytes(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() + len, alignment));</div>
-<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;  }</div>
-<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> PreAlign(<span class="keywordtype">size_t</span> len) {</div>
-<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    AssertScalarT&lt;T&gt;();</div>
-<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    PreAlign(len, <span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;  }<span class="comment"></span></div>
-<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;<span class="comment">  /// @endcond</span></div>
-<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
-<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;<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="l00821"></a><span class="lineno">  821</span>&#160;<span class="comment">  /// @param[in] len The number of bytes that should be stored from `str`.</span></div>
-<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
-<div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">  823</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <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="l00824"></a><span class="lineno">  824</span>&#160;    NotNested();</div>
-<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    PreAlign&lt;uoffset_t&gt;(len + 1);  <span class="comment">// Always 0-terminated.</span></div>
-<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    buf_.fill(1);</div>
-<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    PushBytes(reinterpret_cast&lt;const uint8_t *&gt;(str), len);</div>
-<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    PushElement(static_cast&lt;uoffset_t&gt;(len));</div>
-<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    <span class="keywordflow">return</span> Offset&lt;String&gt;(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>());</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;  <span class="comment">// This checks a required field has been set in a given table that has</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;  <span class="comment">// just been constructed.</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> Required(Offset&lt;T&gt; table, voffset_t field) {</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    <span class="keyword">auto</span> table_ptr = buf_.data_at(table.o);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="keyword">auto</span> vtable_ptr = table_ptr - ReadScalar&lt;soffset_t&gt;(table_ptr);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    <span class="keywordtype">bool</span> ok = ReadScalar&lt;voffset_t&gt;(vtable_ptr + field) != 0;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    <span class="comment">// If this fails, the caller will show what field needs to be set.</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    assert(ok);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    (void)ok;</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;  }</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;  uoffset_t StartStruct(<span class="keywordtype">size_t</span> alignment) {</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    Align(alignment);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>();</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;  }</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;  uoffset_t EndStruct() { <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>(); }</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;  <span class="keywordtype">void</span> ClearOffsets() { offsetbuf_.clear(); }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;  <span class="comment">// Aligns such that when &quot;len&quot; bytes are written, an object can be written</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;  <span class="comment">// after it with &quot;alignment&quot; without padding.</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;  <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="l00829"></a><span class="lineno">  829</span>&#160;    buf_.fill(PaddingBytes(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>() + len, alignment));</div>
 <div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;  }</div>
-<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
-<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;<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="l00834"></a><span class="lineno">  834</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
-<div class="line"><a name="l00835"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">  835</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <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="l00836"></a><span class="lineno">  836</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str, strlen(str));</div>
-<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;  }</div>
-<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
-<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;<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="l00841"></a><span class="lineno">  841</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
-<div class="line"><a name="l00842"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">  842</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">CreateString</a>(<span class="keyword">const</span> std::string &amp;str) {</div>
-<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str.c_str(), str.length());</div>
-<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;  }</div>
-<div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
-<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;<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="l00848"></a><span class="lineno">  848</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts</span></div>
-<div class="line"><a name="l00849"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">  849</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">CreateString</a>(<span class="keyword">const</span> String *str) {</div>
-<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str-&gt;c_str(), str-&gt;Length());</div>
-<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;  }</div>
-<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;<span class="comment"></span>  uoffset_t EndVector(<span class="keywordtype">size_t</span> len) {</div>
-<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    assert(nested);  <span class="comment">// Hit if no corresponding StartVector.</span></div>
-<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    nested = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    <span class="keywordflow">return</span> PushElement(static_cast&lt;uoffset_t&gt;(len));</div>
-<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;  }</div>
-<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;</div>
-<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;  <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="l00861"></a><span class="lineno">  861</span>&#160;    NotNested();</div>
-<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;    nested = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    PreAlign&lt;uoffset_t&gt;(len * elemsize);</div>
-<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    PreAlign(len * elemsize, elemsize);  <span class="comment">// Just in case elemsize &gt; uoffset_t.</span></div>
-<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;  }</div>
-<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;</div>
-<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;  <span class="comment">// Call this right before StartVector/CreateVector if you want to force the</span></div>
-<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;  <span class="comment">// alignment to be something different than what the element size would</span></div>
-<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;  <span class="comment">// normally dictate.</span></div>
-<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;  <span class="comment">// This is useful when storing a nested_flatbuffer in a vector of bytes,</span></div>
-<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;  <span class="comment">// or when storing SIMD floats, etc.</span></div>
-<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;  <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="l00873"></a><span class="lineno">  873</span>&#160;    PreAlign(len * elemsize, alignment);</div>
-<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;  }</div>
-<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;</div>
-<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;  uint8_t *ReserveElements(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize) {</div>
-<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;    <span class="keywordflow">return</span> buf_.make_space(len * elemsize);</div>
-<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;  }<span class="comment"></span></div>
-<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;<span class="comment">  /// @endcond</span></div>
-<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;<span class="comment">  /// @brief Serialize an array into a FlatBuffer `vector`.</span></div>
-<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;<span class="comment">  /// @tparam T The data type of the array elements.</span></div>
-<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;<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="l00884"></a><span class="lineno">  884</span>&#160;<span class="comment">  /// buffer as a `vector`.</span></div>
-<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;<span class="comment">  /// @param[in] len The number of elements to serialize.</span></div>
-<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
-<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
-<div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">  888</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;T&gt;&gt; <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="l00889"></a><span class="lineno">  889</span>&#160;    StartVector(len, <span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i &gt; 0; ) {</div>
-<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;      PushElement(v[--i]);</div>
-<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    }</div>
-<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <span class="keywordflow">return</span> Offset&lt;Vector&lt;T&gt;&gt;(EndVector(len));</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> PreAlign(<span class="keywordtype">size_t</span> len) {</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    AssertScalarT&lt;T&gt;();</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    PreAlign(len, <span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;  }<span class="comment"></span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;<span class="comment">  /// @endcond</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;<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="l00839"></a><span class="lineno">  839</span>&#160;<span class="comment">  /// @param[in] len The number of bytes that should be stored from `str`.</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">  841</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <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="l00842"></a><span class="lineno">  842</span>&#160;    NotNested();</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    PreAlign&lt;uoffset_t&gt;(len + 1);  <span class="comment">// Always 0-terminated.</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    buf_.fill(1);</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    PushBytes(reinterpret_cast&lt;const uint8_t *&gt;(str), len);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    PushElement(static_cast&lt;uoffset_t&gt;(len));</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    <span class="keywordflow">return</span> Offset&lt;String&gt;(<a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">GetSize</a>());</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;  }</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which is null-terminated.</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;<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="l00852"></a><span class="lineno">  852</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5">  853</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <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="l00854"></a><span class="lineno">  854</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str, strlen(str));</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;  }</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;<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="l00859"></a><span class="lineno">  859</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">  860</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f">CreateString</a>(<span class="keyword">const</span> std::string &amp;str) {</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str.c_str(), str.length());</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;  }</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;<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="l00866"></a><span class="lineno">  866</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">  867</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506">CreateString</a>(<span class="keyword">const</span> String *str) {</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str-&gt;c_str(), str-&gt;Length());</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;  }</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;<span class="comment">  /// If a string with this exact contents has already been serialized before,</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;<span class="comment">  /// instead simply returns the offset of the existing string.</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;<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="l00875"></a><span class="lineno">  875</span>&#160;<span class="comment">  /// @param[in] len The number of bytes that should be stored from `str`.</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">  877</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <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="l00878"></a><span class="lineno">  878</span>&#160;    <span class="keywordflow">if</span> (!string_pool)</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;      string_pool = <span class="keyword">new</span> StringOffsetMap(StringOffsetCompare(buf_));</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;    <span class="keyword">auto</span> size_before_string = buf_.size();</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    <span class="comment">// Must first serialize the string, since the set is all offsets into</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;    <span class="comment">// buffer.</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <span class="keyword">auto</span> off = <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">CreateString</a>(str, len);</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <span class="keyword">auto</span> it = string_pool-&gt;find(off);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    <span class="comment">// If it exists we reuse existing serialized data!</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    <span class="keywordflow">if</span> (it != string_pool-&gt;end()) {</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;      <span class="comment">// We can remove the string we serialized.</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;      buf_.pop(buf_.size() - size_before_string);</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;      <span class="keywordflow">return</span> *it;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    }</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    <span class="comment">// Record this string for future use.</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    string_pool-&gt;insert(off);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <span class="keywordflow">return</span> off;</div>
 <div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;  }</div>
 <div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="comment">  /// @brief Serialize a `std::vector` into a FlatBuffer `vector`.</span></div>
-<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="comment">  /// @tparam T The data type of the `std::vector` elements.</span></div>
-<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;<span class="comment">  /// @param v A const reference to the `std::vector` to serialize into the</span></div>
-<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;<span class="comment">  /// buffer as a `vector`.</span></div>
-<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
-<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
-<div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">  902</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;T&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">CreateVector</a>(<span class="keyword">const</span> std::vector&lt;T&gt; &amp;v) {</div>
-<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">CreateVector</a>(v.data(), v.size());</div>
-<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;  }</div>
-<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;<span class="comment">  /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div>
-<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment">  /// @tparam T The data type of the struct array elements.</span></div>
-<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<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="l00909"></a><span class="lineno">  909</span>&#160;<span class="comment">  /// buffer as a `vector`.</span></div>
-<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;<span class="comment">  /// @param[in] len The number of elements to serialize.</span></div>
-<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
-<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
-<div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">  913</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;const T *&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">CreateVectorOfStructs</a>(</div>
-<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;                                                       <span class="keyword">const</span> T *v, <span class="keywordtype">size_t</span> len) {</div>
-<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;    StartVector(len * <span class="keyword">sizeof</span>(T) / AlignOf&lt;T&gt;(), AlignOf&lt;T&gt;());</div>
-<div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    PushBytes(reinterpret_cast&lt;const uint8_t *&gt;(v), <span class="keyword">sizeof</span>(T) * len);</div>
-<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    <span class="keywordflow">return</span> Offset&lt;Vector&lt;const T *&gt;&gt;(EndVector(len));</div>
-<div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;  }</div>
-<div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;<span class="comment">  /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`.</span></div>
-<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;<span class="comment">  /// @tparam T The data type of the `std::vector` struct elements.</span></div>
-<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="comment">  /// @param[in]] v A const reference to the `std::vector` of structs to</span></div>
-<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;<span class="comment">  /// serialize into the buffer as a `vector`.</span></div>
-<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
-<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
-<div class="line"><a name="l00926"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1">  926</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;const T *&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1">CreateVectorOfStructs</a>(</div>
-<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;                                                      <span class="keyword">const</span> std::vector&lt;T&gt; &amp;v) {</div>
-<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">CreateVectorOfStructs</a>(v.data(), v.size());</div>
-<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;  }</div>
-<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
-<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;  <span class="keyword">struct </span>TableKeyComparator {</div>
-<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;  TableKeyComparator(vector_downward&amp; buf) : buf_(buf) {}</div>
-<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> Offset&lt;T&gt; &amp;a, <span class="keyword">const</span> Offset&lt;T&gt; &amp;b)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;      <span class="keyword">auto</span> table_a = <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(buf_.data_at(a.o));</div>
-<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;      <span class="keyword">auto</span> table_b = <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(buf_.data_at(b.o));</div>
-<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;      <span class="keywordflow">return</span> table_a-&gt;KeyCompareLessThan(table_b);</div>
-<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    }</div>
-<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    vector_downward&amp; buf_;</div>
-<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;  };<span class="comment"></span></div>
-<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;<span class="comment">  /// @endcond</span></div>
-<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;<span class="comment">  /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div>
-<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;<span class="comment">  /// in sorted order.</span></div>
-<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;<span class="comment">  /// @tparam T The data type that the offset refers to.</span></div>
-<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;<span class="comment">  /// @param[in] v An array of type `Offset&lt;T&gt;` that contains the `table`</span></div>
-<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;<span class="comment">  /// offsets to store in the buffer in sorted order.</span></div>
-<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;<span class="comment">  /// @param[in] len The number of elements to store in the `vector`.</span></div>
-<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
-<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
-<div class="line"><a name="l00952"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">  952</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;Offset&lt;T&gt;&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">CreateVectorOfSortedTables</a>(</div>
-<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;                                                     Offset&lt;T&gt; *v, <span class="keywordtype">size_t</span> len) {</div>
-<div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;    std::sort(v, v + len, TableKeyComparator&lt;T&gt;(buf_));</div>
-<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">CreateVector</a>(v, len);</div>
-<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;  }</div>
-<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;<span class="comment">  /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div>
-<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;<span class="comment">  /// in sorted order.</span></div>
-<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;<span class="comment">  /// @tparam T The data type that the offset refers to.</span></div>
-<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;<span class="comment">  /// @param[in] v An array of type `Offset&lt;T&gt;` that contains the `table`</span></div>
-<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;<span class="comment">  /// offsets to store in the buffer in sorted order.</span></div>
-<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
-<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
-<div class="line"><a name="l00965"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">  965</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;Offset&lt;T&gt;&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">CreateVectorOfSortedTables</a>(</div>
-<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;                                                    std::vector&lt;Offset&lt;T&gt;&gt; *v) {</div>
-<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">CreateVectorOfSortedTables</a>(v-&gt;data(), v-&gt;size());</div>
-<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;  }</div>
-<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;<span class="comment">  /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div>
-<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;<span class="comment">  /// Write the data any time later to the returned buffer pointer `buf`.</span></div>
-<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;<span class="comment">  /// @param[in] len The number of elements to store in the `vector`.</span></div>
-<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;<span class="comment">  /// @param[in] elemsize The size of each element in the `vector`.</span></div>
-<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;<span class="comment">  /// @param[out] buf A pointer to a `uint8_t` pointer that can be</span></div>
-<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;<span class="comment">  /// written to at a later time to serialize the data into a `vector`</span></div>
-<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;<span class="comment">  /// in the buffer.</span></div>
-<div class="line"><a name="l00977"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">  977</a></span>&#160;<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="l00978"></a><span class="lineno">  978</span>&#160;                                      uint8_t **buf) {</div>
-<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    NotNested();</div>
-<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    StartVector(len, elemsize);</div>
-<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    *buf = buf_.make_space(len * elemsize);</div>
-<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    <span class="keywordflow">return</span> EndVector(len);</div>
-<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;  }</div>
-<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;<span class="comment">  /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div>
-<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;<span class="comment">  /// Write the data any time later to the returned buffer pointer `buf`.</span></div>
-<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;<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="l00988"></a><span class="lineno">  988</span>&#160;<span class="comment">  /// as a `vector`.</span></div>
-<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;<span class="comment">  /// @param[in] len The number of elements to store in the `vector`.</span></div>
-<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment">  /// @param[out] buf A pointer to a pointer of type `T` that can be</span></div>
-<div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;<span class="comment">  /// written to at a later time to serialize the data into a `vector`</span></div>
-<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;<span class="comment">  /// in the buffer.</span></div>
-<div class="line"><a name="l00993"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">  993</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;T&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">CreateUninitializedVector</a>(</div>
-<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;                                                    <span class="keywordtype">size_t</span> len, T **buf) {</div>
-<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">CreateUninitializedVector</a>(len, <span class="keyword">sizeof</span>(T),</div>
-<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;                                     reinterpret_cast&lt;uint8_t **&gt;(buf));</div>
-<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;  }</div>
-<div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;<span class="comment">  /// @brief The length of a FlatBuffer file header.</span></div>
-<div class="line"><a name="l01000"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19"> 1000</a></span>&#160;<span class="comment"></span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">kFileIdentifierLength</a> = 4;</div>
-<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="comment">  /// @brief Finish serializing a buffer by writing the root offset.</span></div>
-<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment">  /// @param[in] file_identifier If a `file_identifier` is given, the buffer</span></div>
-<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="comment">  /// will be prefixed with a standard FlatBuffers file header.</span></div>
-<div class="line"><a name="l01005"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912"> 1005</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">Finish</a>(Offset&lt;T&gt; root,</div>
-<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier = <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;    NotNested();</div>
-<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    <span class="comment">// This will cause the whole buffer to be aligned.</span></div>
-<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    PreAlign(<span class="keyword">sizeof</span>(uoffset_t) + (file_identifier ? <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">kFileIdentifierLength</a> : 0),</div>
-<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;             minalign_);</div>
-<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    <span class="keywordflow">if</span> (file_identifier) {</div>
-<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;      assert(strlen(file_identifier) == kFileIdentifierLength);</div>
-<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;      buf_.push(reinterpret_cast&lt;const uint8_t *&gt;(file_identifier),</div>
-<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;                kFileIdentifierLength);</div>
-<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;    }</div>
-<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    PushElement(ReferTo(root.o));  <span class="comment">// Location of root.</span></div>
-<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    finished = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;  }</div>
-<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div>
-<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keyword">private</span>:</div>
-<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;  <span class="comment">// You shouldn&#39;t really be copying instances of this class.</span></div>
-<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">FlatBufferBuilder</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &amp;);</div>
-<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &amp;operator=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &amp;);</div>
-<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;</div>
-<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;  <span class="keyword">struct </span>FieldLoc {</div>
-<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    uoffset_t off;</div>
-<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    voffset_t id;</div>
-<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;  };</div>
-<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div>
-<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;  simple_allocator default_allocator;</div>
-<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;</div>
-<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;  vector_downward buf_;</div>
-<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div>
-<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;  <span class="comment">// Accumulating offsets of table members while it is being built.</span></div>
-<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;  std::vector&lt;FieldLoc&gt; offsetbuf_;</div>
-<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div>
-<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;  <span class="comment">// Ensure objects are not nested.</span></div>
-<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;  <span class="keywordtype">bool</span> nested;</div>
-<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div>
-<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;  <span class="comment">// Ensure the buffer is finished before it is being accessed.</span></div>
-<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;  <span class="keywordtype">bool</span> finished;</div>
-<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div>
-<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;  std::vector&lt;uoffset_t&gt; vtables_;  <span class="comment">// todo: Could make this into a map?</span></div>
-<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div>
-<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;  <span class="keywordtype">size_t</span> minalign_;</div>
-<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;</div>
-<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;  <span class="keywordtype">bool</span> force_defaults_;  <span class="comment">// Serialize values equal to their defaults anyway.</span></div>
-<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;};<span class="comment"></span></div>
-<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="comment">/// @}</span></div>
-<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="comment"></span><span class="comment"></span></div>
-<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
-<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;<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="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T *GetMutableRoot(<span class="keywordtype">void</span> *buf) {</div>
-<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;  EndianCheck();</div>
-<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(buf) +</div>
-<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    EndianScalar(*reinterpret_cast&lt;uoffset_t *&gt;(buf)));</div>
-<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;}</div>
-<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div>
-<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">const</span> T *GetRoot(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf) {</div>
-<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;  <span class="keywordflow">return</span> GetMutableRoot&lt;T&gt;(<span class="keyword">const_cast&lt;</span><span class="keywordtype">void</span> *<span class="keyword">&gt;</span>(buf));</div>
-<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;}</div>
-<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;</div>
-<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="comment">// Helper to see if the identifier in a buffer has the expected value.</span></div>
-<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<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) {</div>
-<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;  <span class="keywordflow">return</span> strncmp(reinterpret_cast&lt;const char *&gt;(buf) + <span class="keyword">sizeof</span>(uoffset_t),</div>
-<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;                 identifier, <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">FlatBufferBuilder::kFileIdentifierLength</a>) == 0;</div>
-<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;}</div>
-<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div>
-<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment">// Helper class to verify the integrity of a FlatBuffer</span></div>
-<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="keyword">class </span>Verifier FLATBUFFERS_FINAL_CLASS {</div>
-<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keyword">public</span>:</div>
-<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;  Verifier(<span class="keyword">const</span> uint8_t *buf, <span class="keywordtype">size_t</span> buf_len, <span class="keywordtype">size_t</span> _max_depth = 64,</div>
-<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;           <span class="keywordtype">size_t</span> _max_tables = 1000000)</div>
-<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    : buf_(buf), end_(buf + buf_len), depth_(0), max_depth_(_max_depth),</div>
-<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;      num_tables_(0), max_tables_(_max_tables)</div>
-<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    {}</div>
-<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;</div>
-<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;  <span class="comment">// Central location where any verification failures register.</span></div>
-<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;  <span class="keywordtype">bool</span> Check(<span class="keywordtype">bool</span> ok)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="preprocessor">    #ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE</span></div>
-<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;      assert(ok);</div>
-<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    <span class="keywordflow">return</span> ok;</div>
-<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;  }</div>
-<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;</div>
-<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;  <span class="comment">// Verify any range within the buffer.</span></div>
-<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;  <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> <span class="keywordtype">void</span> *elem, <span class="keywordtype">size_t</span> elem_len)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    <span class="keywordflow">return</span> Check(elem_len &lt;= (<span class="keywordtype">size_t</span>) (end_ - buf_) &amp;&amp; elem &gt;= buf_ &amp;&amp; elem &lt;= end_ - elem_len);</div>
-<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;  }</div>
-<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div>
-<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;  <span class="comment">// Verify a range indicated by sizeof(T).</span></div>
-<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> <span class="keywordtype">void</span> *elem)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    <span class="keywordflow">return</span> Verify(elem, <span class="keyword">sizeof</span>(T));</div>
-<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;  }</div>
-<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;</div>
-<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) of a table type.</span></div>
-<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyTable(<span class="keyword">const</span> T *table) {</div>
-<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;    <span class="keywordflow">return</span> !table || table-&gt;Verify(*<span class="keyword">this</span>);</div>
-<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;  }</div>
-<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;</div>
-<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) of any vector type.</span></div>
-<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> Vector&lt;T&gt; *vec)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    <span class="keyword">const</span> uint8_t *end;</div>
-<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;    <span class="keywordflow">return</span> !vec ||</div>
-<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;           VerifyVector(reinterpret_cast&lt;const uint8_t *&gt;(vec), <span class="keyword">sizeof</span>(T),</div>
-<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;                        &amp;end);</div>
-<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;  }</div>
-<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div>
-<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) of a vector to struct.</span></div>
-<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> Vector&lt;const T *&gt; *vec)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;    <span class="keywordflow">return</span> Verify(<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Vector&lt;T&gt; *<span class="keyword">&gt;</span>(vec));</div>
-<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;  }</div>
-<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;</div>
-<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) to string.</span></div>
-<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;  <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> String *str)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    <span class="keyword">const</span> uint8_t *end;</div>
-<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    <span class="keywordflow">return</span> !str ||</div>
-<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;           (VerifyVector(reinterpret_cast&lt;const uint8_t *&gt;(str), 1, &amp;end) &amp;&amp;</div>
-<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;            Verify(end, 1) &amp;&amp;      <span class="comment">// Must have terminator</span></div>
-<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;            Check(*end == <span class="charliteral">&#39;\0&#39;</span>));  <span class="comment">// Terminating byte must be 0.</span></div>
-<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;  }</div>
-<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;</div>
-<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;  <span class="comment">// Common code between vectors and strings.</span></div>
-<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;  <span class="keywordtype">bool</span> VerifyVector(<span class="keyword">const</span> uint8_t *vec, <span class="keywordtype">size_t</span> elem_size,</div>
-<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;                    <span class="keyword">const</span> uint8_t **end)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;    <span class="comment">// Check we can read the size field.</span></div>
-<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;    <span class="keywordflow">if</span> (!Verify&lt;uoffset_t&gt;(vec)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    <span class="comment">// Check the whole array. If this is a string, the byte past the array</span></div>
-<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    <span class="comment">// must be 0.</span></div>
-<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <span class="keyword">auto</span> size = ReadScalar&lt;uoffset_t&gt;(vec);</div>
-<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    <span class="keyword">auto</span> byte_size = <span class="keyword">sizeof</span>(size) + elem_size * size;</div>
-<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    *end = vec + byte_size;</div>
-<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    <span class="keywordflow">return</span> Verify(vec, byte_size);</div>
-<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;  }</div>
-<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;</div>
-<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;  <span class="comment">// Special case for string contents, after the above has been called.</span></div>
-<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;  <span class="keywordtype">bool</span> VerifyVectorOfStrings(<span class="keyword">const</span> Vector&lt;Offset&lt;String&gt;&gt; *vec)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;      <span class="keywordflow">if</span> (vec) {</div>
-<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;        <span class="keywordflow">for</span> (uoffset_t i = 0; i &lt; vec-&gt;size(); i++) {</div>
-<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;          <span class="keywordflow">if</span> (!Verify(vec-&gt;Get(i))) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;        }</div>
-<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;      }</div>
-<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;  }</div>
-<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;</div>
-<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;  <span class="comment">// Special case for table contents, after the above has been called.</span></div>
-<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyVectorOfTables(<span class="keyword">const</span> Vector&lt;Offset&lt;T&gt;&gt; *vec) {</div>
-<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    <span class="keywordflow">if</span> (vec) {</div>
-<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;      <span class="keywordflow">for</span> (uoffset_t i = 0; i &lt; vec-&gt;size(); i++) {</div>
-<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;        <span class="keywordflow">if</span> (!vec-&gt;Get(i)-&gt;Verify(*<span class="keyword">this</span>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;      }</div>
-<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    }</div>
-<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;  }</div>
-<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div>
-<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;  <span class="comment">// Verify this whole buffer, starting with root type T.</span></div>
-<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyBuffer() {</div>
-<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    <span class="comment">// Call T::Verify, which must be in the generated code for this type.</span></div>
-<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;    <span class="keywordflow">return</span> Verify&lt;uoffset_t&gt;(buf_) &amp;&amp;</div>
-<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;      reinterpret_cast&lt;const T *&gt;(buf_ + ReadScalar&lt;uoffset_t&gt;(buf_))-&gt;</div>
-<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;        Verify(*<span class="keyword">this</span>);</div>
-<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;  }</div>
-<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;</div>
-<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;  <span class="comment">// Called at the start of a table to increase counters measuring data</span></div>
-<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;  <span class="comment">// structure depth and amount, and possibly bails out with false if</span></div>
-<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;  <span class="comment">// limits set by the constructor have been hit. Needs to be balanced</span></div>
-<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;  <span class="comment">// with EndTable().</span></div>
-<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;  <span class="keywordtype">bool</span> VerifyComplexity() {</div>
-<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    depth_++;</div>
-<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;    num_tables_++;</div>
-<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;    <span class="keywordflow">return</span> Check(depth_ &lt;= max_depth_ &amp;&amp; num_tables_ &lt;= max_tables_);</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which null-terminated.</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="comment">  /// If a string with this exact contents has already been serialized before,</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;<span class="comment">  /// instead simply returns the offset of the existing string.</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;<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="l00900"></a><span class="lineno">  900</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">  901</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <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="l00902"></a><span class="lineno">  902</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a>(str, strlen(str));</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;  }</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;<span class="comment">  /// If a string with this exact contents has already been serialized before,</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment">  /// instead simply returns the offset of the existing string.</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<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="l00909"></a><span class="lineno">  909</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts.</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">  910</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9">CreateSharedString</a>(<span class="keyword">const</span> std::string &amp;str) {</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a>(str.c_str(), str.length());</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;  }</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;<span class="comment">  /// @brief Store a string in the buffer, which can contain any binary data.</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="comment">  /// If a string with this exact contents has already been serialized before,</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="comment">  /// instead simply returns the offset of the existing string.</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;<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="l00918"></a><span class="lineno">  918</span>&#160;<span class="comment">  /// @return Returns the offset in the buffer where the string starts</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">  919</a></span>&#160;<span class="comment"></span>  Offset&lt;String&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3">CreateSharedString</a>(<span class="keyword">const</span> String *str) {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">CreateSharedString</a>(str-&gt;c_str(), str-&gt;Length());</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;  }</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;<span class="comment"></span>  uoffset_t EndVector(<span class="keywordtype">size_t</span> len) {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    assert(nested);  <span class="comment">// Hit if no corresponding StartVector.</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    nested = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    <span class="keywordflow">return</span> PushElement(static_cast&lt;uoffset_t&gt;(len));</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;  }</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;  <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="l00931"></a><span class="lineno">  931</span>&#160;    NotNested();</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    nested = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    PreAlign&lt;uoffset_t&gt;(len * elemsize);</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    PreAlign(len * elemsize, elemsize);  <span class="comment">// Just in case elemsize &gt; uoffset_t.</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;  }</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;  <span class="comment">// Call this right before StartVector/CreateVector if you want to force the</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;  <span class="comment">// alignment to be something different than what the element size would</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;  <span class="comment">// normally dictate.</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;  <span class="comment">// This is useful when storing a nested_flatbuffer in a vector of bytes,</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;  <span class="comment">// or when storing SIMD floats, etc.</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;  <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="l00943"></a><span class="lineno">  943</span>&#160;    PreAlign(len * elemsize, alignment);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;  }</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;  uint8_t *ReserveElements(<span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span> elemsize) {</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    <span class="keywordflow">return</span> buf_.make_space(len * elemsize);</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;  }<span class="comment"></span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;<span class="comment">  /// @endcond</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;<span class="comment">  /// @brief Serialize an array into a FlatBuffer `vector`.</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;<span class="comment">  /// @tparam T The data type of the array elements.</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;<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="l00954"></a><span class="lineno">  954</span>&#160;<span class="comment">  /// buffer as a `vector`.</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;<span class="comment">  /// @param[in] len The number of elements to serialize.</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">  958</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;T&gt;&gt; <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="l00959"></a><span class="lineno">  959</span>&#160;    StartVector(len, <span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = len; i &gt; 0; ) {</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;      PushElement(v[--i]);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    }</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    <span class="keywordflow">return</span> Offset&lt;Vector&lt;T&gt;&gt;(EndVector(len));</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;  }</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;<span class="comment">  /// @brief Serialize a `std::vector` into a FlatBuffer `vector`.</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;<span class="comment">  /// @tparam T The data type of the `std::vector` elements.</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;<span class="comment">  /// @param v A const reference to the `std::vector` to serialize into the</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;<span class="comment">  /// buffer as a `vector`.</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">  972</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;T&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">CreateVector</a>(<span class="keyword">const</span> std::vector&lt;T&gt; &amp;v) {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">CreateVector</a>(v.data(), v.size());</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;  }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;<span class="comment">  /// @brief Serialize an array of structs into a FlatBuffer `vector`.</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;<span class="comment">  /// @tparam T The data type of the struct array elements.</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<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="l00979"></a><span class="lineno">  979</span>&#160;<span class="comment">  /// buffer as a `vector`.</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;<span class="comment">  /// @param[in] len The number of elements to serialize.</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">  983</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;const T *&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">CreateVectorOfStructs</a>(</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;                                                       <span class="keyword">const</span> T *v, <span class="keywordtype">size_t</span> len) {</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;    StartVector(len * <span class="keyword">sizeof</span>(T) / AlignOf&lt;T&gt;(), AlignOf&lt;T&gt;());</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    PushBytes(reinterpret_cast&lt;const uint8_t *&gt;(v), <span class="keyword">sizeof</span>(T) * len);</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    <span class="keywordflow">return</span> Offset&lt;Vector&lt;const T *&gt;&gt;(EndVector(len));</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;  }</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment">  /// @brief Serialize a `std::vector` of structs into a FlatBuffer `vector`.</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;<span class="comment">  /// @tparam T The data type of the `std::vector` struct elements.</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;<span class="comment">  /// @param[in]] v A const reference to the `std::vector` of structs to</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;<span class="comment">  /// serialize into the buffer as a `vector`.</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1">  996</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;const T *&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1">CreateVectorOfStructs</a>(</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;                                                      <span class="keyword">const</span> std::vector&lt;T&gt; &amp;v) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">CreateVectorOfStructs</a>(v.data(), v.size());</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;  }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment">  /// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;  <span class="keyword">struct </span>TableKeyComparator {</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;  TableKeyComparator(vector_downward&amp; buf) : buf_(buf) {}</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> Offset&lt;T&gt; &amp;a, <span class="keyword">const</span> Offset&lt;T&gt; &amp;b)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;      <span class="keyword">auto</span> table_a = <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(buf_.data_at(a.o));</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;      <span class="keyword">auto</span> table_b = <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(buf_.data_at(b.o));</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;      <span class="keywordflow">return</span> table_a-&gt;KeyCompareLessThan(table_b);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    vector_downward&amp; buf_;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;    TableKeyComparator&amp; operator= (<span class="keyword">const</span> TableKeyComparator&amp;);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;  };<span class="comment"></span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="comment">  /// @endcond</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;<span class="comment">  /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="comment">  /// in sorted order.</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;<span class="comment">  /// @tparam T The data type that the offset refers to.</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="comment">  /// @param[in] v An array of type `Offset&lt;T&gt;` that contains the `table`</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="comment">  /// offsets to store in the buffer in sorted order.</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="comment">  /// @param[in] len The number of elements to store in the `vector`.</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6"> 1025</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;Offset&lt;T&gt;&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">CreateVectorOfSortedTables</a>(</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;                                                     Offset&lt;T&gt; *v, <span class="keywordtype">size_t</span> len) {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    std::sort(v, v + len, TableKeyComparator&lt;T&gt;(buf_));</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3">CreateVector</a>(v, len);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;  }</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;<span class="comment">  /// @brief Serialize an array of `table` offsets as a `vector` in the buffer</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="comment">  /// in sorted order.</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="comment">  /// @tparam T The data type that the offset refers to.</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;<span class="comment">  /// @param[in] v An array of type `Offset&lt;T&gt;` that contains the `table`</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="comment">  /// offsets to store in the buffer in sorted order.</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;<span class="comment">  /// @return Returns a typed `Offset` into the serialized data indicating</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;<span class="comment">  /// where the vector is stored.</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135"> 1038</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;Offset&lt;T&gt;&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">CreateVectorOfSortedTables</a>(</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;                                                    std::vector&lt;Offset&lt;T&gt;&gt; *v) {</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">CreateVectorOfSortedTables</a>(v-&gt;data(), v-&gt;size());</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;  }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;<span class="comment">  /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="comment">  /// Write the data any time later to the returned buffer pointer `buf`.</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;<span class="comment">  /// @param[in] len The number of elements to store in the `vector`.</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="comment">  /// @param[in] elemsize The size of each element in the `vector`.</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="comment">  /// @param[out] buf A pointer to a `uint8_t` pointer that can be</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;<span class="comment">  /// written to at a later time to serialize the data into a `vector`</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="comment">  /// in the buffer.</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c"> 1050</a></span>&#160;<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="l01051"></a><span class="lineno"> 1051</span>&#160;                                      uint8_t **buf) {</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    NotNested();</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;    StartVector(len, elemsize);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    *buf = buf_.make_space(len * elemsize);</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <span class="keywordflow">return</span> EndVector(len);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;  }</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="comment">  /// @brief Specialized version of `CreateVector` for non-copying use cases.</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="comment">  /// Write the data any time later to the returned buffer pointer `buf`.</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<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="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="comment">  /// as a `vector`.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="comment">  /// @param[in] len The number of elements to store in the `vector`.</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="comment">  /// @param[out] buf A pointer to a pointer of type `T` that can be</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="comment">  /// written to at a later time to serialize the data into a `vector`</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<span class="comment">  /// in the buffer.</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50"> 1066</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; Offset&lt;Vector&lt;T&gt;&gt; <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50">CreateUninitializedVector</a>(</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;                                                    <span class="keywordtype">size_t</span> len, T **buf) {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c">CreateUninitializedVector</a>(len, <span class="keyword">sizeof</span>(T),</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;                                     reinterpret_cast&lt;uint8_t **&gt;(buf));</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;  }</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment">  /// @brief The length of a FlatBuffer file header.</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19"> 1073</a></span>&#160;<span class="comment"></span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">kFileIdentifierLength</a> = 4;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="comment">  /// @brief Finish serializing a buffer by writing the root offset.</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="comment">  /// @param[in] file_identifier If a `file_identifier` is given, the buffer</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="comment">  /// will be prefixed with a standard FlatBuffers file header.</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"><a class="line" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912"> 1078</a></span>&#160;<span class="comment"></span>  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">void</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912">Finish</a>(Offset&lt;T&gt; root,</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *file_identifier = <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    NotNested();</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    <span class="comment">// This will cause the whole buffer to be aligned.</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;    PreAlign(<span class="keyword">sizeof</span>(uoffset_t) + (file_identifier ? <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">kFileIdentifierLength</a> : 0),</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;             minalign_);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;    <span class="keywordflow">if</span> (file_identifier) {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;      assert(strlen(file_identifier) == kFileIdentifierLength);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;      buf_.push(reinterpret_cast&lt;const uint8_t *&gt;(file_identifier),</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;                kFileIdentifierLength);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    PushElement(ReferTo(root.o));  <span class="comment">// Location of root.</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    finished = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;  }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;  <span class="comment">// You shouldn&#39;t really be copying instances of this class.</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">FlatBufferBuilder</a>(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &amp;);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;  <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &amp;operator=(<span class="keyword">const</span> <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html">FlatBufferBuilder</a> &amp;);</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;  <span class="keyword">struct </span>FieldLoc {</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    uoffset_t off;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    voffset_t id;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;  };</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;  simple_allocator default_allocator;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;  vector_downward buf_;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;  <span class="comment">// Accumulating offsets of table members while it is being built.</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;  std::vector&lt;FieldLoc&gt; offsetbuf_;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;  <span class="comment">// Ensure objects are not nested.</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;  <span class="keywordtype">bool</span> nested;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;  <span class="comment">// Ensure the buffer is finished before it is being accessed.</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;  <span class="keywordtype">bool</span> finished;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;  std::vector&lt;uoffset_t&gt; vtables_;  <span class="comment">// todo: Could make this into a map?</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;  <span class="keywordtype">size_t</span> minalign_;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;  <span class="keywordtype">bool</span> force_defaults_;  <span class="comment">// Serialize values equal to their defaults anyway.</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;  <span class="keyword">struct </span>StringOffsetCompare {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    StringOffsetCompare(<span class="keyword">const</span> vector_downward &amp;buf) : buf_(&amp;buf) {}</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;    <span class="keywordtype">bool</span> operator() (<span class="keyword">const</span> Offset&lt;String&gt; &amp;a, <span class="keyword">const</span> Offset&lt;String&gt; &amp;b)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;      <span class="keyword">auto</span> stra = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>String *<span class="keyword">&gt;</span>(buf_-&gt;data_at(a.o));</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;      <span class="keyword">auto</span> strb = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>String *<span class="keyword">&gt;</span>(buf_-&gt;data_at(b.o));</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;      <span class="keywordflow">return</span> strncmp(stra-&gt;c_str(), strb-&gt;c_str(),</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;                     std::min(stra-&gt;size(), strb-&gt;size()) + 1) &lt; 0;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    }</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <span class="keyword">const</span> vector_downward *buf_;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;  };</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;  <span class="comment">// For use with CreateSharedString. Instantiated on first use only.</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;  <span class="keyword">typedef</span> std::set&lt;Offset&lt;String&gt;, StringOffsetCompare&gt; StringOffsetMap;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;  StringOffsetMap *string_pool;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;};<span class="comment"></span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;<span class="comment">/// @}</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;<span class="comment"></span><span class="comment"></span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;<span class="comment">/// @cond FLATBUFFERS_INTERNAL</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;<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="l01141"></a><span class="lineno"> 1141</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T *GetMutableRoot(<span class="keywordtype">void</span> *buf) {</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;  EndianCheck();</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T *<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(buf) +</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    EndianScalar(*reinterpret_cast&lt;uoffset_t *&gt;(buf)));</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;}</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keyword">const</span> T *GetRoot(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf) {</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;  <span class="keywordflow">return</span> GetMutableRoot&lt;T&gt;(<span class="keyword">const_cast&lt;</span><span class="keywordtype">void</span> *<span class="keyword">&gt;</span>(buf));</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;}</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;<span class="comment">// Helper to see if the identifier in a buffer has the expected value.</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;<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) {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;  <span class="keywordflow">return</span> strncmp(reinterpret_cast&lt;const char *&gt;(buf) + <span class="keyword">sizeof</span>(uoffset_t),</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;                 identifier, <a class="code" href="classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19">FlatBufferBuilder::kFileIdentifierLength</a>) == 0;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;}</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;<span class="comment">// Helper class to verify the integrity of a FlatBuffer</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;<span class="keyword">class </span>Verifier FLATBUFFERS_FINAL_CLASS {</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;  Verifier(<span class="keyword">const</span> uint8_t *buf, <span class="keywordtype">size_t</span> buf_len, <span class="keywordtype">size_t</span> _max_depth = 64,</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;           <span class="keywordtype">size_t</span> _max_tables = 1000000)</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;    : buf_(buf), end_(buf + buf_len), depth_(0), max_depth_(_max_depth),</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;      num_tables_(0), max_tables_(_max_tables)</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    {}</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;  <span class="comment">// Central location where any verification failures register.</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;  <span class="keywordtype">bool</span> Check(<span class="keywordtype">bool</span> ok)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="preprocessor">    #ifdef FLATBUFFERS_DEBUG_VERIFICATION_FAILURE</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;      assert(ok);</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;    <span class="keywordflow">return</span> ok;</div>
 <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;  }</div>
 <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;</div>
-<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;  <span class="comment">// Called at the end of a table to pop the depth count.</span></div>
-<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;  <span class="keywordtype">bool</span> EndTable() {</div>
-<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;    depth_--;</div>
-<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;  }</div>
-<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;</div>
-<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="keyword">private</span>:</div>
-<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;  <span class="keyword">const</span> uint8_t *buf_;</div>
-<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;  <span class="keyword">const</span> uint8_t *end_;</div>
-<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;  <span class="keywordtype">size_t</span> depth_;</div>
-<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;  <span class="keywordtype">size_t</span> max_depth_;</div>
-<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;  <span class="keywordtype">size_t</span> num_tables_;</div>
-<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;  <span class="keywordtype">size_t</span> max_tables_;</div>
-<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;};</div>
-<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div>
-<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="comment">// &quot;structs&quot; are flat structures that do not have an offset table, thus</span></div>
-<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;<span class="comment">// always have all members present and do not support forwards/backwards</span></div>
-<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="comment">// compatible extensions.</span></div>
-<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div>
-<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="keyword">class </span>Struct FLATBUFFERS_FINAL_CLASS {</div>
-<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keyword">public</span>:</div>
-<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetField(uoffset_t o)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    <span class="keywordflow">return</span> ReadScalar&lt;T&gt;(&amp;data_[o]);</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;  <span class="comment">// Verify any range within the buffer.</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;  <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> <span class="keywordtype">void</span> *elem, <span class="keywordtype">size_t</span> elem_len)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;    <span class="keywordflow">return</span> Check(elem_len &lt;= (<span class="keywordtype">size_t</span>) (end_ - buf_) &amp;&amp;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;                 elem &gt;= buf_ &amp;&amp;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;                 elem &lt;= end_ - elem_len);</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;  }</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;  <span class="comment">// Verify a range indicated by sizeof(T).</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> <span class="keywordtype">void</span> *elem)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    <span class="keywordflow">return</span> Verify(elem, <span class="keyword">sizeof</span>(T));</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;  }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) of a table type.</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyTable(<span class="keyword">const</span> T *table) {</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    <span class="keywordflow">return</span> !table || table-&gt;Verify(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;  }</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) of any vector type.</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> Vector&lt;T&gt; *vec)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;    <span class="keyword">const</span> uint8_t *end;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    <span class="keywordflow">return</span> !vec ||</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;           VerifyVector(reinterpret_cast&lt;const uint8_t *&gt;(vec), <span class="keyword">sizeof</span>(T),</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;                        &amp;end);</div>
 <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;  }</div>
 <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div>
-<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetPointer(uoffset_t o)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    <span class="keyword">auto</span> p = &amp;data_[o];</div>
-<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T<span class="keyword">&gt;</span>(p + ReadScalar&lt;uoffset_t&gt;(p));</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) of a vector to struct.</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> Vector&lt;const T *&gt; *vec)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;    <span class="keywordflow">return</span> Verify(<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Vector&lt;T&gt; *<span class="keyword">&gt;</span>(vec));</div>
 <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;  }</div>
 <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;</div>
-<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetStruct(uoffset_t o)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T<span class="keyword">&gt;</span>(&amp;data_[o]);</div>
-<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;  }</div>
-<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;</div>
-<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;  <span class="keyword">const</span> uint8_t *GetAddressOf(uoffset_t o)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;data_[o]; }</div>
-<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;  uint8_t *GetAddressOf(uoffset_t o) { <span class="keywordflow">return</span> &amp;data_[o]; }</div>
-<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;</div>
-<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keyword">private</span>:</div>
-<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;  uint8_t data_[1];</div>
-<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;};</div>
-<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;</div>
-<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="comment">// &quot;tables&quot; use an offset table (possibly shared) that allows fields to be</span></div>
-<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;<span class="comment">// omitted and added at will, but uses an extra indirection to read.</span></div>
-<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="keyword">class </span>Table {</div>
-<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keyword">public</span>:</div>
-<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;  <span class="comment">// This gets the field offset for any of the functions below it, or 0</span></div>
-<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;  <span class="comment">// if the field was not present.</span></div>
-<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;  voffset_t GetOptionalFieldOffset(voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    <span class="comment">// The vtable offset is always at the start.</span></div>
-<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;    <span class="keyword">auto</span> vtable = data_ - ReadScalar&lt;soffset_t&gt;(data_);</div>
-<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    <span class="comment">// The first element is the size of the vtable (fields + type id + itself).</span></div>
-<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;    <span class="keyword">auto</span> vtsize = ReadScalar&lt;voffset_t&gt;(vtable);</div>
-<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    <span class="comment">// If the field we&#39;re accessing is outside the vtable, we&#39;re reading older</span></div>
-<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    <span class="comment">// data, so it&#39;s the same as if the offset was 0 (not present).</span></div>
-<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;    <span class="keywordflow">return</span> field &lt; vtsize ? ReadScalar&lt;voffset_t&gt;(vtable + field) : 0;</div>
-<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;  }</div>
-<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;</div>
-<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetField(voffset_t field, T defaultval)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;    <span class="keywordflow">return</span> field_offset ? ReadScalar&lt;T&gt;(data_ + field_offset) : defaultval;</div>
-<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;  }</div>
-<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;</div>
-<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt; P GetPointer(voffset_t field) {</div>
-<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;    <span class="keyword">auto</span> p = data_ + field_offset;</div>
-<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;    <span class="keywordflow">return</span> field_offset</div>
-<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;      ? <span class="keyword">reinterpret_cast&lt;</span>P<span class="keyword">&gt;</span>(p + ReadScalar&lt;uoffset_t&gt;(p))</div>
-<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;      : nullptr;</div>
-<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;  }</div>
-<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt; P GetPointer(voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>Table *<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;GetPointer&lt;P&gt;(field);</div>
-<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;  }</div>
-<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;</div>
-<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt; P GetStruct(voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;    <span class="keyword">auto</span> p = <span class="keyword">const_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(data_ + field_offset);</div>
-<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    <span class="keywordflow">return</span> field_offset ? <span class="keyword">reinterpret_cast&lt;</span>P<span class="keyword">&gt;</span>(p) : <span class="keyword">nullptr</span>;</div>
-<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;  }</div>
-<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div>
-<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> SetField(voffset_t field, T val) {</div>
-<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;    WriteScalar(data_ + field_offset, val);</div>
-<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;  }</div>
-<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;</div>
-<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;  <span class="keywordtype">bool</span> SetPointer(voffset_t field, <span class="keyword">const</span> uint8_t *val) {</div>
-<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    WriteScalar(data_ + field_offset, val - (data_ + field_offset));</div>
-<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;  }</div>
-<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;</div>
-<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;  uint8_t *GetAddressOf(voffset_t field) {</div>
-<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;    <span class="keywordflow">return</span> field_offset ? data_ + field_offset : <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;  <span class="comment">// Verify a pointer (may be NULL) to string.</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;  <span class="keywordtype">bool</span> Verify(<span class="keyword">const</span> String *str)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;    <span class="keyword">const</span> uint8_t *end;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;    <span class="keywordflow">return</span> !str ||</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;           (VerifyVector(reinterpret_cast&lt;const uint8_t *&gt;(str), 1, &amp;end) &amp;&amp;</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;            Verify(end, 1) &amp;&amp;      <span class="comment">// Must have terminator</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;            Check(*end == <span class="charliteral">&#39;\0&#39;</span>));  <span class="comment">// Terminating byte must be 0.</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;  }</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;  <span class="comment">// Common code between vectors and strings.</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;  <span class="keywordtype">bool</span> VerifyVector(<span class="keyword">const</span> uint8_t *vec, <span class="keywordtype">size_t</span> elem_size,</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;                    <span class="keyword">const</span> uint8_t **end)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;    <span class="comment">// Check we can read the size field.</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;    <span class="keywordflow">if</span> (!Verify&lt;uoffset_t&gt;(vec)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    <span class="comment">// Check the whole array. If this is a string, the byte past the array</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    <span class="comment">// must be 0.</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    <span class="keyword">auto</span> size = ReadScalar&lt;uoffset_t&gt;(vec);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    <span class="keyword">auto</span> max_elems = FLATBUFFERS_MAX_BUFFER_SIZE / elem_size;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    Check(size &lt; max_elems);  <span class="comment">// Protect against byte_size overflowing.</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;    <span class="keyword">auto</span> byte_size = <span class="keyword">sizeof</span>(size) + elem_size * size;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    *end = vec + byte_size;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;    <span class="keywordflow">return</span> Verify(vec, byte_size);</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;  }</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;  <span class="comment">// Special case for string contents, after the above has been called.</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;  <span class="keywordtype">bool</span> VerifyVectorOfStrings(<span class="keyword">const</span> Vector&lt;Offset&lt;String&gt;&gt; *vec)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;      <span class="keywordflow">if</span> (vec) {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;        <span class="keywordflow">for</span> (uoffset_t i = 0; i &lt; vec-&gt;size(); i++) {</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;          <span class="keywordflow">if</span> (!Verify(vec-&gt;Get(i))) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;        }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;      }</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;  }</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;  <span class="comment">// Special case for table contents, after the above has been called.</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyVectorOfTables(<span class="keyword">const</span> Vector&lt;Offset&lt;T&gt;&gt; *vec) {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;    <span class="keywordflow">if</span> (vec) {</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;      <span class="keywordflow">for</span> (uoffset_t i = 0; i &lt; vec-&gt;size(); i++) {</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;        <span class="keywordflow">if</span> (!vec-&gt;Get(i)-&gt;Verify(*<span class="keyword">this</span>)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;      }</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;    }</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;  }</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;  <span class="comment">// Verify this whole buffer, starting with root type T.</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyBuffer() {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    <span class="comment">// Call T::Verify, which must be in the generated code for this type.</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    <span class="keywordflow">return</span> Verify&lt;uoffset_t&gt;(buf_) &amp;&amp;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;      reinterpret_cast&lt;const T *&gt;(buf_ + ReadScalar&lt;uoffset_t&gt;(buf_))-&gt;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;        Verify(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;  }</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;  <span class="comment">// Called at the start of a table to increase counters measuring data</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;  <span class="comment">// structure depth and amount, and possibly bails out with false if</span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;  <span class="comment">// limits set by the constructor have been hit. Needs to be balanced</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;  <span class="comment">// with EndTable().</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;  <span class="keywordtype">bool</span> VerifyComplexity() {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    depth_++;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    num_tables_++;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    <span class="keywordflow">return</span> Check(depth_ &lt;= max_depth_ &amp;&amp; num_tables_ &lt;= max_tables_);</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;  }</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;  <span class="comment">// Called at the end of a table to pop the depth count.</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;  <span class="keywordtype">bool</span> EndTable() {</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;    depth_--;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
 <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;  }</div>
-<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;  <span class="keyword">const</span> uint8_t *GetAddressOf(voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>Table *<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;GetAddressOf(field);</div>
-<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;  }</div>
-<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;</div>
-<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;  uint8_t *GetVTable() { <span class="keywordflow">return</span> data_ - ReadScalar&lt;soffset_t&gt;(data_); }</div>
-<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;</div>
-<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;  <span class="keywordtype">bool</span> CheckField(voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;    <span class="keywordflow">return</span> GetOptionalFieldOffset(field) != 0;</div>
-<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;  }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;  <span class="keyword">const</span> uint8_t *buf_;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;  <span class="keyword">const</span> uint8_t *end_;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;  <span class="keywordtype">size_t</span> depth_;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;  <span class="keywordtype">size_t</span> max_depth_;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;  <span class="keywordtype">size_t</span> num_tables_;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;  <span class="keywordtype">size_t</span> max_tables_;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;};</div>
 <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div>
-<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;  <span class="comment">// Verify the vtable of this table.</span></div>
-<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;  <span class="comment">// Call this once per table, followed by VerifyField once per field.</span></div>
-<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;  <span class="keywordtype">bool</span> VerifyTableStart(Verifier &amp;verifier)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    <span class="comment">// Check the vtable offset.</span></div>
-<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;    <span class="keywordflow">if</span> (!verifier.Verify&lt;soffset_t&gt;(data_)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;    <span class="keyword">auto</span> vtable = data_ - ReadScalar&lt;soffset_t&gt;(data_);</div>
-<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;    <span class="comment">// Check the vtable size field, then check vtable fits in its entirety.</span></div>
-<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;    <span class="keywordflow">return</span> verifier.VerifyComplexity() &amp;&amp;</div>
-<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;           verifier.Verify&lt;voffset_t&gt;(vtable) &amp;&amp;</div>
-<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;           verifier.Verify(vtable, ReadScalar&lt;voffset_t&gt;(vtable));</div>
-<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;  }</div>
-<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;</div>
-<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;  <span class="comment">// Verify a particular field.</span></div>
-<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyField(<span class="keyword">const</span> Verifier &amp;verifier,</div>
-<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;                                        voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;    <span class="comment">// Calling GetOptionalFieldOffset should be safe now thanks to</span></div>
-<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;    <span class="comment">// VerifyTable().</span></div>
-<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;    <span class="comment">// Check the actual field.</span></div>
-<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;    <span class="keywordflow">return</span> !field_offset || verifier.Verify&lt;T&gt;(data_ + field_offset);</div>
-<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;  }</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;<span class="comment">// &quot;structs&quot; are flat structures that do not have an offset table, thus</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;<span class="comment">// always have all members present and do not support forwards/backwards</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;<span class="comment">// compatible extensions.</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;<span class="keyword">class </span>Struct FLATBUFFERS_FINAL_CLASS {</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetField(uoffset_t o)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;    <span class="keywordflow">return</span> ReadScalar&lt;T&gt;(&amp;data_[o]);</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;  }</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetPointer(uoffset_t o)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;    <span class="keyword">auto</span> p = &amp;data_[o];</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T<span class="keyword">&gt;</span>(p + ReadScalar&lt;uoffset_t&gt;(p));</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;  }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetStruct(uoffset_t o)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T<span class="keyword">&gt;</span>(&amp;data_[o]);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;  }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;  <span class="keyword">const</span> uint8_t *GetAddressOf(uoffset_t o)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;data_[o]; }</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;  uint8_t *GetAddressOf(uoffset_t o) { <span class="keywordflow">return</span> &amp;data_[o]; }</div>
 <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;</div>
-<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;  <span class="comment">// VerifyField for required fields.</span></div>
-<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyFieldRequired(<span class="keyword">const</span> Verifier &amp;verifier,</div>
-<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;                                        voffset_t field)<span class="keyword"> const </span>{</div>
-<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
-<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    <span class="keywordflow">return</span> verifier.Check(field_offset != 0) &amp;&amp;</div>
-<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;           verifier.Verify&lt;T&gt;(data_ + field_offset);</div>
-<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;  }</div>
-<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;</div>
-<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keyword">private</span>:</div>
-<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;  <span class="comment">// private constructor &amp; copy constructor: you obtain instances of this</span></div>
-<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;  <span class="comment">// class by pointing to existing data only</span></div>
-<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;  Table();</div>
-<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;  Table(<span class="keyword">const</span> Table &amp;other);</div>
-<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;</div>
-<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;  uint8_t data_[1];</div>
-<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;};</div>
-<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;</div>
-<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;<span class="comment">// Helper function to test if a field is present, using any of the field</span></div>
-<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;<span class="comment">// enums in the generated code.</span></div>
-<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;<span class="comment">// `table` must be a generated table type. Since this is a template parameter,</span></div>
-<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;<span class="comment">// this is not typechecked to be a subclass of Table, so beware!</span></div>
-<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;<span class="comment">// Note: this function will return false for fields equal to the default</span></div>
-<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;<span class="comment">// value, since they&#39;re not stored in the buffer (unless force_defaults was</span></div>
-<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;<span class="comment">// used).</span></div>
-<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> IsFieldPresent(<span class="keyword">const</span> T *table, voffset_t field) {</div>
-<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;  <span class="comment">// Cast, since Table is a private baseclass of any table types.</span></div>
-<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Table *<span class="keyword">&gt;</span>(table)-&gt;CheckField(field);</div>
-<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;}</div>
-<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div>
-<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="comment">// Utility function for reverse lookups on the EnumNames*() functions</span></div>
-<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment">// (in the generated C++ code)</span></div>
-<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;<span class="comment">// names must be NULL terminated.</span></div>
-<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<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="l01336"></a><span class="lineno"> 1336</span>&#160;  <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="l01337"></a><span class="lineno"> 1337</span>&#160;    <span class="keywordflow">if</span> (!strcmp(*p, name))</div>
-<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(p - names);</div>
-<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;  <span class="keywordflow">return</span> -1;</div>
-<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;}</div>
-<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;</div>
-<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;<span class="comment">// These macros allow us to layout a struct with a guarantee that they&#39;ll end</span></div>
-<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;<span class="comment">// up looking the same on different compilers and platforms.</span></div>
-<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment">// It does this by disallowing the compiler to do any padding, and then</span></div>
-<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;<span class="comment">// does padding itself by inserting extra padding fields that make every</span></div>
-<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;<span class="comment">// element aligned to its own size.</span></div>
-<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;<span class="comment">// Additionally, it manually sets the alignment of the struct as a whole,</span></div>
-<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;<span class="comment">// which is typically its largest element, or a custom size set in the schema</span></div>
-<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;<span class="comment">// by the force_align attribute.</span></div>
-<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;<span class="comment">// These are used in the generated code only.</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;  uint8_t data_[1];</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;};</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;<span class="comment">// &quot;tables&quot; use an offset table (possibly shared) that allows fields to be</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;<span class="comment">// omitted and added at will, but uses an extra indirection to read.</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;<span class="keyword">class </span>Table {</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;  <span class="comment">// This gets the field offset for any of the functions below it, or 0</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;  <span class="comment">// if the field was not present.</span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;  voffset_t GetOptionalFieldOffset(voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;    <span class="comment">// The vtable offset is always at the start.</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;    <span class="keyword">auto</span> vtable = data_ - ReadScalar&lt;soffset_t&gt;(data_);</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    <span class="comment">// The first element is the size of the vtable (fields + type id + itself).</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    <span class="keyword">auto</span> vtsize = ReadScalar&lt;voffset_t&gt;(vtable);</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;    <span class="comment">// If the field we&#39;re accessing is outside the vtable, we&#39;re reading older</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <span class="comment">// data, so it&#39;s the same as if the offset was 0 (not present).</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;    <span class="keywordflow">return</span> field &lt; vtsize ? ReadScalar&lt;voffset_t&gt;(vtable + field) : 0;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;  }</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; T GetField(voffset_t field, T defaultval)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    <span class="keywordflow">return</span> field_offset ? ReadScalar&lt;T&gt;(data_ + field_offset) : defaultval;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;  }</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt; P GetPointer(voffset_t field) {</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;    <span class="keyword">auto</span> p = data_ + field_offset;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;    <span class="keywordflow">return</span> field_offset</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;      ? <span class="keyword">reinterpret_cast&lt;</span>P<span class="keyword">&gt;</span>(p + ReadScalar&lt;uoffset_t&gt;(p))</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;      : nullptr;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;  }</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt; P GetPointer(voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>Table *<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;GetPointer&lt;P&gt;(field);</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;  }</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> P&gt; P GetStruct(voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    <span class="keyword">auto</span> p = <span class="keyword">const_cast&lt;</span>uint8_t *<span class="keyword">&gt;</span>(data_ + field_offset);</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;    <span class="keywordflow">return</span> field_offset ? <span class="keyword">reinterpret_cast&lt;</span>P<span class="keyword">&gt;</span>(p) : <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;  }</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> SetField(voffset_t field, T val) {</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;    WriteScalar(data_ + field_offset, val);</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;  }</div>
 <div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div>
-<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;<span class="preprocessor">#if defined(_MSC_VER)</span></div>
-<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;<span class="preprocessor">  #define MANUALLY_ALIGNED_STRUCT(alignment) \</span></div>
-<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;<span class="preprocessor">    __pragma(pack(1)); \</span></div>
-<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;<span class="preprocessor">    struct __declspec(align(alignment))</span></div>
-<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;<span class="preprocessor">  #define STRUCT_END(name, size) \</span></div>
-<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;<span class="preprocessor">    __pragma(pack()); \</span></div>
-<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;<span class="preprocessor">    static_assert(sizeof(name) == size, &quot;compiler breaks packing rules&quot;)</span></div>
-<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;<span class="preprocessor">#elif defined(__GNUC__) || defined(__clang__)</span></div>
-<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;<span class="preprocessor">  #define MANUALLY_ALIGNED_STRUCT(alignment) \</span></div>
-<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;<span class="preprocessor">    _Pragma(&quot;pack(1)&quot;) \</span></div>
-<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;<span class="preprocessor">    struct __attribute__((aligned(alignment)))</span></div>
-<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;<span class="preprocessor">  #define STRUCT_END(name, size) \</span></div>
-<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;<span class="preprocessor">    _Pragma(&quot;pack()&quot;) \</span></div>
-<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;<span class="preprocessor">    static_assert(sizeof(name) == size, &quot;compiler breaks packing rules&quot;)</span></div>
-<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<span class="preprocessor">  #error Unknown compiler, please define structure alignment macros</span></div>
-<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;</div>
-<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;<span class="comment">// String which identifies the current version of FlatBuffers.</span></div>
-<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="comment">// flatbuffer_version_string is used by Google developers to identify which</span></div>
-<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;<span class="comment">// applications uploaded to Google Play are using this library.  This allows</span></div>
-<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;<span class="comment">// the development team at Google to determine the popularity of the library.</span></div>
-<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;<span class="comment">// How it works: Applications that are uploaded to the Google Play Store are</span></div>
-<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;<span class="comment">// scanned for this version string.  We track which applications are using it</span></div>
-<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;<span class="comment">// to measure popularity.  You are free to remove it (of course) but we would</span></div>
-<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<span class="comment">// appreciate if you left it in.</span></div>
-<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;</div>
-<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;<span class="comment">// Weak linkage is culled by VS &amp; doesn&#39;t work on cygwin.</span></div>
-<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;<span class="preprocessor">#if !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</span></div>
-<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div>
-<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;<span class="keyword">extern</span> <span class="keyword">volatile</span> __attribute__((weak)) const <span class="keywordtype">char</span> *flatbuffer_version_string;</div>
-<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;volatile __attribute__((weak)) const <span class="keywordtype">char</span> *flatbuffer_version_string =</div>
-<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;  &quot;FlatBuffers &quot;</div>
-<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MAJOR) &quot;.&quot;</div>
-<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MINOR) &quot;.&quot;</div>
-<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_REVISION);</div>
-<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div>
-<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;<span class="preprocessor">#endif  // !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</span></div>
-<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;<span class="comment"></span></div>
-<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;<span class="comment">/// @endcond</span></div>
-<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;<span class="comment"></span>}  <span class="comment">// namespace flatbuffers</span></div>
-<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div>
-<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;<span class="preprocessor">#endif  // FLATBUFFERS_H_</span></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:977</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&lt; Vector&lt; Offset&lt; T &gt; &gt; &gt; CreateVectorOfSortedTables(std::vector&lt; Offset&lt; T &gt;&gt; *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:965</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:553</div></div>
-<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac1bfd609f7f736e9a37cedae77448b63"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">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:587</div></div>
-<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac72b54a75e0c329e0ce0b8fab758e256"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">flatbuffers::FlatBufferBuilder::FlatBufferBuilder</a></div><div class="ttdeci">FlatBufferBuilder(uoffset_t initial_size=1024, const simple_allocator *allocator=nullptr)</div><div class="ttdoc">Default constructor for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:565</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:576</div></div>
-<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a21c7f933d7ff1212f2090763ef9f0c44"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">flatbuffers::FlatBufferBuilder::ReleaseBufferPointer</a></div><div class="ttdeci">unique_ptr_t ReleaseBufferPointer()</div><div class="ttdoc">Get the released pointer to the serialized buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:607</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&lt; String &gt; 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:823</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:626</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:1000</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&lt; String &gt; 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:849</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&lt; Vector&lt; const T * &gt; &gt; 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:913</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&lt; String &gt; CreateString(const char *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:835</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&lt; String &gt; CreateString(const std::string &amp;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:842</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&lt; Vector&lt; T &gt; &gt; CreateVector(const std::vector&lt; T &gt; &amp;v)</div><div class="ttdoc">Serialize a std::vector into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:902</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&lt; Vector&lt; T &gt; &gt; 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:993</div></div>
-<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a3f4252e9bc005ba6c700469544fdccc9"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9">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:599</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&lt; Vector&lt; T &gt; &gt; 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:888</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&lt; Vector&lt; Offset&lt; T &gt; &gt; &gt; CreateVectorOfSortedTables(Offset&lt; T &gt; *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:952</div></div>
-<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a8704709a2e25ad04679212ee4126b1a1"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset&lt; Vector&lt; const T * &gt; &gt; CreateVectorOfStructs(const std::vector&lt; T &gt; &amp;v)</div><div class="ttdoc">Serialize a std::vector of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:926</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&lt; T &gt; 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:1005</div></div>
-<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a8dc35f792179df4ca850492c1796d8b8"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8">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:592</div></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;  <span class="keywordtype">bool</span> SetPointer(voffset_t field, <span class="keyword">const</span> uint8_t *val) {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;    <span class="keywordflow">if</span> (!field_offset) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    WriteScalar(data_ + field_offset, val - (data_ + field_offset));</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;  }</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;  uint8_t *GetAddressOf(voffset_t field) {</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    <span class="keywordflow">return</span> field_offset ? data_ + field_offset : <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;  }</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;  <span class="keyword">const</span> uint8_t *GetAddressOf(voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>Table *<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;GetAddressOf(field);</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;  }</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;  uint8_t *GetVTable() { <span class="keywordflow">return</span> data_ - ReadScalar&lt;soffset_t&gt;(data_); }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;  <span class="keywordtype">bool</span> CheckField(voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;    <span class="keywordflow">return</span> GetOptionalFieldOffset(field) != 0;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;  }</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;  <span class="comment">// Verify the vtable of this table.</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;  <span class="comment">// Call this once per table, followed by VerifyField once per field.</span></div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;  <span class="keywordtype">bool</span> VerifyTableStart(Verifier &amp;verifier)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;    <span class="comment">// Check the vtable offset.</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;    <span class="keywordflow">if</span> (!verifier.Verify&lt;soffset_t&gt;(data_)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    <span class="keyword">auto</span> vtable = data_ - ReadScalar&lt;soffset_t&gt;(data_);</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;    <span class="comment">// Check the vtable size field, then check vtable fits in its entirety.</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;    <span class="keywordflow">return</span> verifier.VerifyComplexity() &amp;&amp;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;           verifier.Verify&lt;voffset_t&gt;(vtable) &amp;&amp;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;           verifier.Verify(vtable, ReadScalar&lt;voffset_t&gt;(vtable));</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;  }</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;  <span class="comment">// Verify a particular field.</span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyField(<span class="keyword">const</span> Verifier &amp;verifier,</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;                                        voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    <span class="comment">// Calling GetOptionalFieldOffset should be safe now thanks to</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;    <span class="comment">// VerifyTable().</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    <span class="comment">// Check the actual field.</span></div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    <span class="keywordflow">return</span> !field_offset || verifier.Verify&lt;T&gt;(data_ + field_offset);</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;  }</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;  <span class="comment">// VerifyField for required fields.</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;  <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> VerifyFieldRequired(<span class="keyword">const</span> Verifier &amp;verifier,</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;                                        voffset_t field)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;    <span class="keyword">auto</span> field_offset = GetOptionalFieldOffset(field);</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;    <span class="keywordflow">return</span> verifier.Check(field_offset != 0) &amp;&amp;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;           verifier.Verify&lt;T&gt;(data_ + field_offset);</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;  }</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="keyword">private</span>:</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;  <span class="comment">// private constructor &amp; copy constructor: you obtain instances of this</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;  <span class="comment">// class by pointing to existing data only</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;  Table();</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;  Table(<span class="keyword">const</span> Table &amp;other);</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;  uint8_t data_[1];</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;};</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;<span class="comment">// Helper function to test if a field is present, using any of the field</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;<span class="comment">// enums in the generated code.</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<span class="comment">// `table` must be a generated table type. Since this is a template parameter,</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;<span class="comment">// this is not typechecked to be a subclass of Table, so beware!</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;<span class="comment">// Note: this function will return false for fields equal to the default</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;<span class="comment">// value, since they&#39;re not stored in the buffer (unless force_defaults was</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;<span class="comment">// used).</span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt; <span class="keywordtype">bool</span> IsFieldPresent(<span class="keyword">const</span> T *table, voffset_t field) {</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;  <span class="comment">// Cast, since Table is a private baseclass of any table types.</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Table *<span class="keyword">&gt;</span>(table)-&gt;CheckField(field);</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;}</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;<span class="comment">// Utility function for reverse lookups on the EnumNames*() functions</span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="comment">// (in the generated C++ code)</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<span class="comment">// names must be NULL terminated.</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;<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="l01428"></a><span class="lineno"> 1428</span>&#160;  <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="l01429"></a><span class="lineno"> 1429</span>&#160;    <span class="keywordflow">if</span> (!strcmp(*p, name))</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(p - names);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;  <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;}</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;<span class="comment">// These macros allow us to layout a struct with a guarantee that they&#39;ll end</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="comment">// up looking the same on different compilers and platforms.</span></div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="comment">// It does this by disallowing the compiler to do any padding, and then</span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="comment">// does padding itself by inserting extra padding fields that make every</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;<span class="comment">// element aligned to its own size.</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;<span class="comment">// Additionally, it manually sets the alignment of the struct as a whole,</span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;<span class="comment">// which is typically its largest element, or a custom size set in the schema</span></div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;<span class="comment">// by the force_align attribute.</span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;<span class="comment">// These are used in the generated code only.</span></div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;<span class="preprocessor">#if defined(_MSC_VER)</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;<span class="preprocessor">  #define MANUALLY_ALIGNED_STRUCT(alignment) \</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;<span class="preprocessor">    __pragma(pack(1)); \</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;<span class="preprocessor">    struct __declspec(align(alignment))</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;<span class="preprocessor">  #define STRUCT_END(name, size) \</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;<span class="preprocessor">    __pragma(pack()); \</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;<span class="preprocessor">    static_assert(sizeof(name) == size, &quot;compiler breaks packing rules&quot;)</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;<span class="preprocessor">#elif defined(__GNUC__) || defined(__clang__)</span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;<span class="preprocessor">  #define MANUALLY_ALIGNED_STRUCT(alignment) \</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;<span class="preprocessor">    _Pragma(&quot;pack(1)&quot;) \</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;<span class="preprocessor">    struct __attribute__((aligned(alignment)))</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;<span class="preprocessor">  #define STRUCT_END(name, size) \</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;<span class="preprocessor">    _Pragma(&quot;pack()&quot;) \</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;<span class="preprocessor">    static_assert(sizeof(name) == size, &quot;compiler breaks packing rules&quot;)</span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;<span class="preprocessor">  #error Unknown compiler, please define structure alignment macros</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="comment">// String which identifies the current version of FlatBuffers.</span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;<span class="comment">// flatbuffer_version_string is used by Google developers to identify which</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="comment">// applications uploaded to Google Play are using this library.  This allows</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment">// the development team at Google to determine the popularity of the library.</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;<span class="comment">// How it works: Applications that are uploaded to the Google Play Store are</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;<span class="comment">// scanned for this version string.  We track which applications are using it</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;<span class="comment">// to measure popularity.  You are free to remove it (of course) but we would</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;<span class="comment">// appreciate if you left it in.</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;<span class="comment">// Weak linkage is culled by VS &amp; doesn&#39;t work on cygwin.</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;<span class="preprocessor">#if !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;<span class="keyword">extern</span> <span class="keyword">volatile</span> __attribute__((weak)) const <span class="keywordtype">char</span> *flatbuffer_version_string;</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;volatile __attribute__((weak)) const <span class="keywordtype">char</span> *flatbuffer_version_string =</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;  &quot;FlatBuffers &quot;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MAJOR) &quot;.&quot;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_MINOR) &quot;.&quot;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;  FLATBUFFERS_STRING(FLATBUFFERS_VERSION_REVISION);</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;<span class="preprocessor">#endif  // !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;<span class="comment">/// @endcond</span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment"></span>}  <span class="comment">// namespace flatbuffers</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="preprocessor">#endif  // FLATBUFFERS_H_</span></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:1050</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&lt; Vector&lt; Offset&lt; T &gt; &gt; &gt; CreateVectorOfSortedTables(std::vector&lt; Offset&lt; T &gt;&gt; *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:1038</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:565</div></div>
+<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac1bfd609f7f736e9a37cedae77448b63"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63">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:605</div></div>
+<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_ac72b54a75e0c329e0ce0b8fab758e256"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256">flatbuffers::FlatBufferBuilder::FlatBufferBuilder</a></div><div class="ttdeci">FlatBufferBuilder(uoffset_t initial_size=1024, const simple_allocator *allocator=nullptr)</div><div class="ttdoc">Default constructor for FlatBufferBuilder. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:577</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:593</div></div>
+<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a21c7f933d7ff1212f2090763ef9f0c44"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44">flatbuffers::FlatBufferBuilder::ReleaseBufferPointer</a></div><div class="ttdeci">unique_ptr_t ReleaseBufferPointer()</div><div class="ttdoc">Get the released pointer to the serialized buffer. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:625</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&lt; String &gt; 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:901</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&lt; String &gt; 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:841</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:644</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:1073</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&lt; String &gt; 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:867</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&lt; String &gt; 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:919</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&lt; Vector&lt; const T * &gt; &gt; 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:983</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&lt; String &gt; 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:853</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&lt; String &gt; CreateString(const std::string &amp;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:860</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&lt; Vector&lt; T &gt; &gt; CreateVector(const std::vector&lt; T &gt; &amp;v)</div><div class="ttdoc">Serialize a std::vector into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:972</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&lt; Vector&lt; T &gt; &gt; 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:1066</div></div>
+<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a3f4252e9bc005ba6c700469544fdccc9"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9">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:617</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&lt; Vector&lt; T &gt; &gt; 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:958</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&lt; String &gt; CreateSharedString(const std::string &amp;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:910</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&lt; Vector&lt; Offset&lt; T &gt; &gt; &gt; CreateVectorOfSortedTables(Offset&lt; T &gt; *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:1025</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&lt; String &gt; 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:877</div></div>
+<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a8704709a2e25ad04679212ee4126b1a1"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1">flatbuffers::FlatBufferBuilder::CreateVectorOfStructs</a></div><div class="ttdeci">Offset&lt; Vector&lt; const T * &gt; &gt; CreateVectorOfStructs(const std::vector&lt; T &gt; &amp;v)</div><div class="ttdoc">Serialize a std::vector of structs into a FlatBuffer vector. </div><div class="ttdef"><b>Definition:</b> flatbuffers.h:996</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&lt; T &gt; 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:1078</div></div>
+<div class="ttc" id="classflatbuffers_1_1_flat_buffer_builder_html_a8dc35f792179df4ca850492c1796d8b8"><div class="ttname"><a href="classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8">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:610</div></div>
 </div><!-- fragment --></div><!-- contents -->
 </div><!-- doc-content -->
 <!-- Google Analytics -->
diff --git a/flatbuffers_8js.html b/flatbuffers_8js.html
index 5295a60d..bb7547bb 100644
--- a/flatbuffers_8js.html
+++ b/flatbuffers_8js.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -145,6 +145,9 @@ Variables</h2></td></tr>
 <tr class="memitem:gabd00b65bbe9e9fbac55fe4982eb6cec8"><td class="memItemLeft" align="right" valign="top">flatbuffers&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a></td></tr>
 <tr class="memdesc:gabd00b65bbe9e9fbac55fe4982eb6cec8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a FlatBufferBuilder.  <a href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">More...</a><br /></td></tr>
 <tr class="separator:gabd00b65bbe9e9fbac55fe4982eb6cec8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c5bb4a00c46fb6665787fa9ff52089b"><td class="memItemLeft" align="right" valign="top">flatbuffers <a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a> prototype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b">createLong</a></td></tr>
+<tr class="memdesc:ga8c5bb4a00c46fb6665787fa9ff52089b"><td class="mdescLeft">&#160;</td><td class="mdescRight">A helper function to avoid generated code depending on this file directly.  <a href="group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b">More...</a><br /></td></tr>
+<tr class="separator:ga8c5bb4a00c46fb6665787fa9ff52089b"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:gaa7a7bd67cb1c3190792d4b2b3e66376f"><td class="memItemLeft" align="right" valign="top">flatbuffers <a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a> prototype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f">createString</a></td></tr>
 <tr class="memdesc:gaa7a7bd67cb1c3190792d4b2b3e66376f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encode the string <code>s</code> in the buffer using UTF-8.  <a href="group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f">More...</a><br /></td></tr>
 <tr class="separator:gaa7a7bd67cb1c3190792d4b2b3e66376f"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/flatbuffers_benchmarks.html b/flatbuffers_benchmarks.html
index 6ed9c0ff..1d65d6bf 100644
--- a/flatbuffers_benchmarks.html
+++ b/flatbuffers_benchmarks.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_grammar.html b/flatbuffers_grammar.html
index 223f32e4..43cc9071 100644
--- a/flatbuffers_grammar.html
+++ b/flatbuffers_grammar.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_building.html b/flatbuffers_guide_building.html
index a4e33770..8959909c 100644
--- a/flatbuffers_guide_building.html
+++ b/flatbuffers_guide_building.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_tutorial.html b/flatbuffers_guide_tutorial.html
index 120b9cc5..c05ee1c8 100644
--- a/flatbuffers_guide_tutorial.html
+++ b/flatbuffers_guide_tutorial.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -344,10 +344,10 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_tutorial.html','');}
 <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">String weaponOneName = builder.createString(<span class="stringliteral">&quot;Sword&quot;</span>)</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">&quot;Sword&quot;</span>)</div>
 <div class="line"><span class="keywordtype">short</span> weaponOneDamage = 3;</div>
 <div class="line"></div>
-<div class="line">String weaponTwoName = builder.createString(<span class="stringliteral">&quot;Axe&quot;</span>);</div>
+<div class="line"><span class="keywordtype">int</span> weaponTwoName = builder.createString(<span class="stringliteral">&quot;Axe&quot;</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>
@@ -993,7 +993,7 @@ $(document).ready(function(){initNavTree('flatbuffers_guide_tutorial.html','');}
 <p>After the above mutations, you can send on the FlatBuffer to a new recipient without any further work!</p>
 <p>Note that any <code>mutate</code> functions on a table will return a boolean, which is <code>false</code> if the field we're trying to set is not present in the buffer. Fields that are not present if they weren't set, or even if they happen to be equal to the default value. For example, in the creation code above, the <code>mana</code> field is equal to <code>150</code>, which is the default value, so it was never stored in the buffer. Trying to call the corresponding <code>mutate</code> method for <code>mana</code> on such data will return <code>false</code>, and the value won't actually be modified!</p>
 <p>One way to solve this is to call <code>ForceDefaults</code> on a FlatBufferBuilder to force all fields you set to actually be written. This, of course, increases the size of the buffer somewhat, but this may be acceptable for a mutable buffer.</p>
-<div class="language-csharp"> <b>Note: <code>ForceDefaults</code> is not yet implemented in C#.</b> </div><h2>JSON with FlatBuffers</h2>
+<h2>JSON with FlatBuffers</h2>
 <h4>Using <code>flatc</code> as a Conversion Tool</h4>
 <p>This is often the preferred method to use JSON with FlatBuffers, as it doesn't require you to add any new code to your program. It is also efficient, since you can ship with the binary data. The drawback is that it requires an extra step for your users/developers to perform (although it may be able to be automated as part of your compilation).</p>
 <p>Lets say you have a JSON file that describes your monster. In this example, we will use the file <code>flatbuffers/samples/monsterdata.json</code>.</p>
diff --git a/flatbuffers_guide_use_cpp.html b/flatbuffers_guide_use_cpp.html
index a3951c44..f5adce1f 100644
--- a/flatbuffers_guide_use_cpp.html
+++ b/flatbuffers_guide_use_cpp.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_use_go.html b/flatbuffers_guide_use_go.html
index 243462ac..90940989 100644
--- a/flatbuffers_guide_use_go.html
+++ b/flatbuffers_guide_use_go.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_use_java_c-sharp.html b/flatbuffers_guide_use_java_c-sharp.html
index d41d82e5..68fc6ebc 100644
--- a/flatbuffers_guide_use_java_c-sharp.html
+++ b/flatbuffers_guide_use_java_c-sharp.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_use_javascript.html b/flatbuffers_guide_use_javascript.html
index 9c365964..48ed1436 100644
--- a/flatbuffers_guide_use_javascript.html
+++ b/flatbuffers_guide_use_javascript.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_use_php.html b/flatbuffers_guide_use_php.html
index 4c6da220..2e94747d 100644
--- a/flatbuffers_guide_use_php.html
+++ b/flatbuffers_guide_use_php.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_use_python.html b/flatbuffers_guide_use_python.html
index fb5ffd09..ddbc5c8f 100644
--- a/flatbuffers_guide_use_python.html
+++ b/flatbuffers_guide_use_python.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_using_schema_compiler.html b/flatbuffers_guide_using_schema_compiler.html
index b516b75a..fc581e9f 100644
--- a/flatbuffers_guide_using_schema_compiler.html
+++ b/flatbuffers_guide_using_schema_compiler.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_guide_writing_schema.html b/flatbuffers_guide_writing_schema.html
index 20060752..1130e2e4 100644
--- a/flatbuffers_guide_writing_schema.html
+++ b/flatbuffers_guide_writing_schema.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -171,7 +171,7 @@ root_type Monster;
 <h3>(Default) Values</h3>
 <p>Values are a sequence of digits. Values may be optionally followed by a decimal point (<code>.</code>) and more digits, for float constants, or optionally prefixed by a <code>-</code>. Floats may also be in scientific notation; optionally ending with an <code>e</code> or <code>E</code>, followed by a <code>+</code> or <code>-</code> and more digits.</p>
 <p>Only scalar values can have defaults, non-scalar (string/vector/table) fields default to <code>NULL</code> when not present.</p>
-<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 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>
+<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>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>
@@ -196,7 +196,13 @@ root_type Monster;
 <p>After loading a buffer, you can use a call like <code>MonsterBufferHasIdentifier</code> to check if the identifier is present.</p>
 <p>Note that this is best for open-ended uses such as files. If you simply wanted to send one of a set of possible messages over a network for example, you'd be better off with a union.</p>
 <p>Additionally, by default <code>flatc</code> will output binary files as <code>.bin</code>. This declaration in the schema will change that to whatever you want: </p><pre class="fragment">file_extension "ext";
-</pre><h3>Comments &amp; documentation</h3>
+</pre><h3>RPC interface declarations</h3>
+<p>You can declare RPC calls in a schema, that define a set of functions that take a FlatBuffer as an argument (the request) and return a FlatBuffer as the response (both of which must be table types): </p><pre class="fragment">rpc_service MonsterStorage {
+  Store(Monster):StoreResponse;
+  Retrieve(MonsterId):Monster;
+}
+</pre><p>What code this produces and how it is used depends on language and RPC system used, FlatBuffers itself does not offer this functionality.</p>
+<h3>Comments &amp; documentation</h3>
 <p>May be written as in most C-based languages. Additionally, a triple comment (<code>///</code>) on a line by itself signals that a comment is documentation for whatever is declared on the line after it (table/struct/field/enum/union/element), and the comment is output in the corresponding C++ code. Multiple such lines per item are allowed.</p>
 <h3>Attributes</h3>
 <p>Attributes may be attached to a declaration, behind a field, or after the name of a table/struct/enum/union. These may either have a value or not. Some attributes like <code>deprecated</code> are understood by the compiler; user defined ones need to be declared with the attribute declaration (like <code>priority</code> in the example above), and are available to query if you parse the schema at runtime. This is useful if you write your own code generators/editors etc., and you wish to add additional information specific to your tool (such as a help text).</p>
@@ -251,7 +257,14 @@ root_type Monster;
 </pre><p>This is MAYBE ok, and only in the case where the type change is the same size, like here. If old data never contained any negative numbers, this will be safe to do. </p><pre class="fragment">table { a:int = 1; b:int = 2; }
 </pre><p>Generally NOT ok. Any older data written that had 0 values were not written to the buffer, and rely on the default value to be recreated. These will now have those values appear to <code>1</code> and <code>2</code> instead. There may be cases in which this is ok, but care must be taken. </p><pre class="fragment">table { aa:int; bb:int; }
 </pre><p>Occasionally ok. You've renamed fields, which will break all code (and JSON files!) that use this schema, but as long as the change is obvious, this is not incompatible with the actual binary buffers, since those only ever address fields by id/offset. <br />
- </p>
+</p>
+<h3>Testing whether a field is present in a table</h3>
+<p>Most serialization formats (e.g. JSON or Protocol Buffers) make it very explicit in the format whether a field is present in an object or not, allowing you to use this as "extra" information.</p>
+<p>In FlatBuffers, this also holds for everything except scalar values.</p>
+<p>FlatBuffers by default will not write fields that are equal to the default value (for scalars), sometimes resulting in a significant space savings.</p>
+<p>However, this also means testing whether a field is "present" is somewhat meaningless, since it does not tell you if the field was actually written by calling <code>add_field</code> style calls, unless you're only interested in this information for non-default values.</p>
+<p>Some <code>FlatBufferBuilder</code> implementations have an option called <code>force_defaults</code> that circumvents this behavior, and writes fields even if they are equal to the default. You can then use <code>IsFieldPresent</code> to query this.</p>
+<p>Another option that works in all languages is to wrap a scalar field in a struct. This way it will return null if it is not present. The cool thing is that structs don't take up any more space than the scalar they represent. </p>
 </div></div><!-- contents -->
 </div><!-- doc-content -->
 <!-- Google Analytics -->
diff --git a/flatbuffers_internals.html b/flatbuffers_internals.html
index 1c37467a..f603ffe5 100644
--- a/flatbuffers_internals.html
+++ b/flatbuffers_internals.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_support.html b/flatbuffers_support.html
index bf15e72f..ab054efb 100644
--- a/flatbuffers_support.html
+++ b/flatbuffers_support.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/flatbuffers_white_paper.html b/flatbuffers_white_paper.html
index 01a2afc7..14c61a3a 100644
--- a/flatbuffers_white_paper.html
+++ b/flatbuffers_white_paper.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/functions.html b/functions.html
index 84001aaf..0a025730 100644
--- a/functions.html
+++ b/functions.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -267,12 +267,15 @@ $(document).ready(function(){initNavTree('functions.html','');});
 : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a74ed0e43043c6e486dbe40b0d2ff63d6">FlatBuffers.FlatBufferBuilder</a>
 , <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">flatbuffers::FlatBufferBuilder</a>
 </li>
+<li>CreateSharedString()
+: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1">flatbuffers::FlatBufferBuilder</a>
+</li>
 <li>createString()
-: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab0cd613dda628a2723925eda5f4d5e74">com.google.flatbuffers.FlatBufferBuilder</a>
+: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577">com.google.flatbuffers.FlatBufferBuilder</a>
 </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#ac0b6a1c5d949f20ad84367fc0f9e1506">flatbuffers::FlatBufferBuilder</a>
+, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">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>
@@ -284,7 +287,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
 : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">flatbuffers::FlatBufferBuilder</a>
 </li>
 <li>CreateVectorOfSortedTables()
-: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">flatbuffers::FlatBufferBuilder</a>
+: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">flatbuffers::FlatBufferBuilder</a>
 </li>
 <li>CreateVectorOfStructs()
 : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">flatbuffers::FlatBufferBuilder</a>
@@ -317,7 +320,7 @@ $(document).ready(function(){initNavTree('functions.html','');});
 : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14">com.google.flatbuffers.FlatBufferBuilder</a>
 </li>
 <li>Finish()
-: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b">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()
@@ -331,8 +334,9 @@ $(document).ready(function(){initNavTree('functions.html','');});
 <li>forceDefaults()
 : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aaadff3772bfdff756b4f269afae5ac69">com.google.flatbuffers.FlatBufferBuilder</a>
 </li>
-<li>ForceDefaults()
-: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">flatbuffers::FlatBufferBuilder</a>
+<li>ForceDefaults
+: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13">FlatBuffers.FlatBufferBuilder</a>
+, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a">flatbuffers::FlatBufferBuilder</a>
 </li>
 <li>forceDefaults()
 : <a class="el" href="class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html#a5d75bca1a17d58bb6e383a73761ba45f">Google\FlatBuffers\FlatbufferBuilder</a>
diff --git a/functions_func.html b/functions_func.html
index 9b419923..4ae27c7d 100644
--- a/functions_func.html
+++ b/functions_func.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -258,12 +258,15 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
 : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a74ed0e43043c6e486dbe40b0d2ff63d6">FlatBuffers.FlatBufferBuilder</a>
 , <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412">flatbuffers::FlatBufferBuilder</a>
 </li>
+<li>CreateSharedString()
+: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7">flatbuffers::FlatBufferBuilder</a>
+</li>
 <li>createString()
-: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab0cd613dda628a2723925eda5f4d5e74">com.google.flatbuffers.FlatBufferBuilder</a>
+: <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a8d676eb9973ecba574a220cdef725577">com.google.flatbuffers.FlatBufferBuilder</a>
 </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#ac0b6a1c5d949f20ad84367fc0f9e1506">flatbuffers::FlatBufferBuilder</a>
+, <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe">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>
@@ -275,7 +278,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
 : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207">flatbuffers::FlatBufferBuilder</a>
 </li>
 <li>CreateVectorOfSortedTables()
-: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135">flatbuffers::FlatBufferBuilder</a>
+: <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6">flatbuffers::FlatBufferBuilder</a>
 </li>
 <li>CreateVectorOfStructs()
 : <a class="el" href="classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7">flatbuffers::FlatBufferBuilder</a>
@@ -303,7 +306,7 @@ $(document).ready(function(){initNavTree('functions_func.html','');});
 : <a class="el" href="classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#aee9ed3214a7b35075773c506e3d95a14">com.google.flatbuffers.FlatBufferBuilder</a>
 </li>
 <li>Finish()
-: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b">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()
diff --git a/functions_prop.html b/functions_prop.html
index e8f793a8..d7e9b244 100644
--- a/functions_prop.html
+++ b/functions_prop.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -134,6 +134,9 @@ $(document).ready(function(){initNavTree('functions_prop.html','');});
 <li>DataBuffer
 : <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a6f0cbd075878e2c0f021c0947cc8a211">FlatBuffers.FlatBufferBuilder</a>
 </li>
+<li>ForceDefaults
+: <a class="el" href="class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13">FlatBuffers.FlatBufferBuilder</a>
+</li>
 </ul>
 </div><!-- contents -->
 </div><!-- doc-content -->
diff --git a/functions_vars.html b/functions_vars.html
index 4a78ded7..5ce864bf 100644
--- a/functions_vars.html
+++ b/functions_vars.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/group__flatbuffers__cpp__api.html b/group__flatbuffers__cpp__api.html
index ae300f6e..a5ced804 100644
--- a/group__flatbuffers__cpp__api.html
+++ b/group__flatbuffers__cpp__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/group__flatbuffers__cpp__api.js b/group__flatbuffers__cpp__api.js
index a7a615eb..506d1d89 100644
--- a/group__flatbuffers__cpp__api.js
+++ b/group__flatbuffers__cpp__api.js
@@ -2,7 +2,12 @@ var group__flatbuffers__cpp__api =
 [
     [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html", [
       [ "FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256", null ],
+      [ "~FlatBufferBuilder", "classflatbuffers_1_1_flat_buffer_builder.html#a01dabf5cdd6b1b2881337e1e84aa1683", null ],
       [ "Clear", "classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412", null ],
+      [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1", null ],
+      [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7", null ],
+      [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9", null ],
+      [ "CreateSharedString", "classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3", null ],
       [ "CreateString", "classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe", null ],
       [ "CreateString", "classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5", null ],
       [ "CreateString", "classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f", null ],
diff --git a/group__flatbuffers__csharp__api.html b/group__flatbuffers__csharp__api.html
index cac54475..be6c6343 100644
--- a/group__flatbuffers__csharp__api.html
+++ b/group__flatbuffers__csharp__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/group__flatbuffers__go__api.html b/group__flatbuffers__go__api.html
index 478d45d0..1cc60918 100644
--- a/group__flatbuffers__go__api.html
+++ b/group__flatbuffers__go__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/group__flatbuffers__java__api.html b/group__flatbuffers__java__api.html
index a41c18e3..17634909 100644
--- a/group__flatbuffers__java__api.html
+++ b/group__flatbuffers__java__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/group__flatbuffers__javascript__api.html b/group__flatbuffers__javascript__api.html
index 5be0930d..229f63ae 100644
--- a/group__flatbuffers__javascript__api.html
+++ b/group__flatbuffers__javascript__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
@@ -150,6 +150,9 @@ Variables</h2></td></tr>
 <tr class="memitem:gabd00b65bbe9e9fbac55fe4982eb6cec8"><td class="memItemLeft" align="right" valign="top">flatbuffers&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a></td></tr>
 <tr class="memdesc:gabd00b65bbe9e9fbac55fe4982eb6cec8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a FlatBufferBuilder.  <a href="#gabd00b65bbe9e9fbac55fe4982eb6cec8">More...</a><br /></td></tr>
 <tr class="separator:gabd00b65bbe9e9fbac55fe4982eb6cec8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c5bb4a00c46fb6665787fa9ff52089b"><td class="memItemLeft" align="right" valign="top">flatbuffers <a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a> prototype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b">createLong</a></td></tr>
+<tr class="memdesc:ga8c5bb4a00c46fb6665787fa9ff52089b"><td class="mdescLeft">&#160;</td><td class="mdescRight">A helper function to avoid generated code depending on this file directly.  <a href="#ga8c5bb4a00c46fb6665787fa9ff52089b">More...</a><br /></td></tr>
+<tr class="separator:ga8c5bb4a00c46fb6665787fa9ff52089b"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:gaa7a7bd67cb1c3190792d4b2b3e66376f"><td class="memItemLeft" align="right" valign="top">flatbuffers <a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a> prototype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f">createString</a></td></tr>
 <tr class="memdesc:gaa7a7bd67cb1c3190792d4b2b3e66376f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encode the string <code>s</code> in the buffer using UTF-8.  <a href="#gaa7a7bd67cb1c3190792d4b2b3e66376f">More...</a><br /></td></tr>
 <tr class="separator:gaa7a7bd67cb1c3190792d4b2b3e66376f"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -369,6 +372,31 @@ Variables</h2></td></tr>
   </dd>
 </dl>
 
+</div>
+</div>
+<a class="anchor" id="ga8c5bb4a00c46fb6665787fa9ff52089b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">flatbuffers <a class="el" href="group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8">Builder</a> prototype createLong</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">= <span class="keyword">function</span>(low, high) {</div>
+<div class="line">  <span class="keywordflow">return</span> flatbuffers.Long.create(low, high);</div>
+<div class="line">}</div>
+</div><!-- fragment -->
+<p>A helper function to avoid generated code depending on this file directly. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">{number}</td><td>low </td></tr>
+    <tr><td class="paramname">{number}</td><td>high </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>{flatbuffers.Long} </dd></dl>
+
 </div>
 </div>
 <a class="anchor" id="gaa7a7bd67cb1c3190792d4b2b3e66376f"></a>
@@ -437,7 +465,7 @@ Variables</h2></td></tr>
 <div class="line">  this.<a class="code" href="group__flatbuffers__javascript__api.html#ga21ba7dd4c33dafd6abb89568e4d9c8b8">addOffset</a>(root_table);</div>
 <div class="line">  this.bb.setPosition(this.space);</div>
 <div class="line">}</div>
-<div class="ttc" id="group__flatbuffers__javascript__api_html_ga21ba7dd4c33dafd6abb89568e4d9c8b8"><div class="ttname"><a href="group__flatbuffers__javascript__api.html#ga21ba7dd4c33dafd6abb89568e4d9c8b8">addOffset</a></div><div class="ttdeci">flatbuffers Builder prototype addOffset</div><div class="ttdoc">Adds on offset, relative to where it will be written. </div><div class="ttdef"><b>Definition:</b> flatbuffers.js:540</div></div>
+<div class="ttc" id="group__flatbuffers__javascript__api_html_ga21ba7dd4c33dafd6abb89568e4d9c8b8"><div class="ttname"><a href="group__flatbuffers__javascript__api.html#ga21ba7dd4c33dafd6abb89568e4d9c8b8">addOffset</a></div><div class="ttdeci">flatbuffers Builder prototype addOffset</div><div class="ttdoc">Adds on offset, relative to where it will be written. </div><div class="ttdef"><b>Definition:</b> flatbuffers.js:550</div></div>
 </div><!-- fragment -->
 <p>Finalize a buffer, poiting to the given <code>root_table</code>. </p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -462,7 +490,7 @@ Variables</h2></td></tr>
 <b>Initial value:</b><div class="fragment"><div class="line">= <span class="keyword">function</span>(<a class="code" href="group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33">forceDefaults</a>) {</div>
 <div class="line">  this.force_defaults = <a class="code" href="group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33">forceDefaults</a>;</div>
 <div class="line">}</div>
-<div class="ttc" id="group__flatbuffers__javascript__api_html_ga0d1738111b83dffb2c2a7fc8bca19b33"><div class="ttname"><a href="group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33">forceDefaults</a></div><div class="ttdeci">flatbuffers Builder prototype forceDefaults</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.js:211</div></div>
+<div class="ttc" id="group__flatbuffers__javascript__api_html_ga0d1738111b83dffb2c2a7fc8bca19b33"><div class="ttname"><a href="group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33">forceDefaults</a></div><div class="ttdeci">flatbuffers Builder prototype forceDefaults</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.js:221</div></div>
 </div><!-- fragment -->
 <p>In order to save space, fields that are set to their default value don't get serialized into the buffer. </p>
 <p>Forcing defaults provides a way to manually disable this optimization.</p>
diff --git a/group__flatbuffers__javascript__api.js b/group__flatbuffers__javascript__api.js
index 32fe9025..68588486 100644
--- a/group__flatbuffers__javascript__api.js
+++ b/group__flatbuffers__javascript__api.js
@@ -9,6 +9,7 @@ var group__flatbuffers__javascript__api =
     [ "addOffset", "group__flatbuffers__javascript__api.html#ga21ba7dd4c33dafd6abb89568e4d9c8b8", null ],
     [ "asUint8Array", "group__flatbuffers__javascript__api.html#ga997af48d5c8f757fcb962168d67e33fb", null ],
     [ "Builder", "group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8", null ],
+    [ "createLong", "group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b", null ],
     [ "createString", "group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f", null ],
     [ "dataBuffer", "group__flatbuffers__javascript__api.html#ga674814e0816f06c8a29ab364d19bed60", null ],
     [ "finish", "group__flatbuffers__javascript__api.html#ga62c5cf622a7bbcfd49f21bddd8b9bef7", null ],
diff --git a/group__flatbuffers__php__api.html b/group__flatbuffers__php__api.html
index 1ad7df7f..4e9f63ca 100644
--- a/group__flatbuffers__php__api.html
+++ b/group__flatbuffers__php__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/group__flatbuffers__python__api.html b/group__flatbuffers__python__api.html
index 6468ddef..0c074497 100644
--- a/group__flatbuffers__python__api.html
+++ b/group__flatbuffers__python__api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/index.html b/index.html
index 37e80029..95bc6eff 100644
--- a/index.html
+++ b/index.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/md__go_api.html b/md__go_api.html
index 3d37cec4..e3921eb8 100644
--- a/md__go_api.html
+++ b/md__go_api.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/modules.html b/modules.html
index 4804d563..8a942c7a 100644
--- a/modules.html
+++ b/modules.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/namespace_flat_buffers.html b/namespace_flat_buffers.html
index 06648f3b..e0a879ad 100644
--- a/namespace_flat_buffers.html
+++ b/namespace_flat_buffers.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/navtree.js b/navtree.js
index 8b84866c..130fa187 100644
--- a/navtree.js
+++ b/navtree.js
@@ -18,7 +18,7 @@ var NAVTREE =
     [ "Benchmarks", "flatbuffers_benchmarks.html", null ],
     [ "FlatBuffers white paper", "flatbuffers_white_paper.html", null ],
     [ "FlatBuffers internals", "flatbuffers_internals.html", null ],
-    [ "Grammar of the schema langauge", "flatbuffers_grammar.html", null ],
+    [ "Grammar of the schema language", "flatbuffers_grammar.html", null ],
     [ "API Reference", "usergroup1.html", [
       [ "APIs", "modules.html", "modules" ],
       [ "Class List", null, [
diff --git a/navtreeindex0.js b/navtreeindex0.js
index e0f93466..6d696e94 100644
--- a/navtreeindex0.js
+++ b/navtreeindex0.js
@@ -12,6 +12,7 @@ var NAVTREEINDEX0 =
 "class_flat_buffers_1_1_flat_buffer_builder.html#a0d182e151b4f57d47069885cc1d05893":[7,1,0,2,0,6],
 "class_flat_buffers_1_1_flat_buffer_builder.html#a1afc6853539aaff7ac6937ed03ff5c7b":[7,1,0,2,0,16],
 "class_flat_buffers_1_1_flat_buffer_builder.html#a3b6e42519f278e4a060895633d048070":[7,1,0,2,0,14],
+"class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13":[7,1,0,2,0,20],
 "class_flat_buffers_1_1_flat_buffer_builder.html#a41a1e6f7e7b9098a9d8c1af7157ef2bf":[7,1,0,2,0,4],
 "class_flat_buffers_1_1_flat_buffer_builder.html#a52c19b3daa97b0272da0dd7121b2ff5f":[7,1,0,2,0,12],
 "class_flat_buffers_1_1_flat_buffer_builder.html#a6b66d785555d19cd0f141978eff78e2e":[7,1,0,2,0,1],
@@ -71,27 +72,32 @@ var NAVTREEINDEX0 =
 "classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#af49427a6a8a6ec24f3c9cf812f30812d":[7,0,3,0,0],
 "classes.html":[7,1,1],
 "classflatbuffers_1_1_flat_buffer_builder.html":[7,0,0,0],
-"classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912":[7,0,0,0,14],
-"classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a":[7,0,0,0,15],
-"classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6":[7,0,0,0,10],
-"classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44":[7,0,0,0,19],
-"classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50":[7,0,0,0,7],
-"classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3":[7,0,0,0,8],
-"classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9":[7,0,0,0,17],
-"classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1":[7,0,0,0,13],
-"classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f":[7,0,0,0,4],
-"classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8":[7,0,0,0,16],
-"classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5":[7,0,0,0,3],
-"classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506":[7,0,0,0,5],
-"classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63":[7,0,0,0,18],
-"classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c":[7,0,0,0,6],
-"classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135":[7,0,0,0,11],
+"classflatbuffers_1_1_flat_buffer_builder.html#a01dabf5cdd6b1b2881337e1e84aa1683":[7,0,0,0,1],
+"classflatbuffers_1_1_flat_buffer_builder.html#a0c9e507b373d598b51052fab4fa34912":[7,0,0,0,19],
+"classflatbuffers_1_1_flat_buffer_builder.html#a10e8ec7d1c8fbdc21b1c7047bbbe38d9":[7,0,0,0,5],
+"classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a":[7,0,0,0,20],
+"classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6":[7,0,0,0,15],
+"classflatbuffers_1_1_flat_buffer_builder.html#a21c7f933d7ff1212f2090763ef9f0c44":[7,0,0,0,24],
+"classflatbuffers_1_1_flat_buffer_builder.html#a2305b63d367845972b51669dd995cc50":[7,0,0,0,12],
+"classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3":[7,0,0,0,13],
+"classflatbuffers_1_1_flat_buffer_builder.html#a3eb68613e5883dc4b8fff6cf7d1223d7":[7,0,0,0,4],
+"classflatbuffers_1_1_flat_buffer_builder.html#a3f4252e9bc005ba6c700469544fdccc9":[7,0,0,0,22],
+"classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3":[7,0,0,0,6],
+"classflatbuffers_1_1_flat_buffer_builder.html#a8704709a2e25ad04679212ee4126b1a1":[7,0,0,0,18],
+"classflatbuffers_1_1_flat_buffer_builder.html#a8c3af55e64f5cda9aefa38ac5287ef9f":[7,0,0,0,9],
+"classflatbuffers_1_1_flat_buffer_builder.html#a8dc35f792179df4ca850492c1796d8b8":[7,0,0,0,21],
+"classflatbuffers_1_1_flat_buffer_builder.html#aad93d113ac24e86ed04b5236b3f4c0c5":[7,0,0,0,8],
+"classflatbuffers_1_1_flat_buffer_builder.html#ab478a645216d2d613fc7b7c29b0ff9d1":[7,0,0,0,3],
+"classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506":[7,0,0,0,10],
+"classflatbuffers_1_1_flat_buffer_builder.html#ac1bfd609f7f736e9a37cedae77448b63":[7,0,0,0,23],
+"classflatbuffers_1_1_flat_buffer_builder.html#ac2b96292fa0fb1534fe7fd218a094d0c":[7,0,0,0,11],
+"classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135":[7,0,0,0,16],
 "classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256":[7,0,0,0,0],
-"classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412":[7,0,0,0,1],
-"classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe":[7,0,0,0,2],
-"classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207":[7,0,0,0,9],
-"classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19":[7,0,0,0,20],
-"classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7":[7,0,0,0,12],
+"classflatbuffers_1_1_flat_buffer_builder.html#ae94b94ba71ea0aeb2d9a98c43b713412":[7,0,0,0,2],
+"classflatbuffers_1_1_flat_buffer_builder.html#aec6f9df2a0366b540b24822414d92cbe":[7,0,0,0,7],
+"classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207":[7,0,0,0,14],
+"classflatbuffers_1_1_flat_buffer_builder.html#af8c7583c92e1d1d6f438977da5158d19":[7,0,0,0,25],
+"classflatbuffers_1_1_flat_buffer_builder.html#afede51fd9c32d146cbb1832f57c5e1b7":[7,0,0,0,17],
 "contributing.html":[8],
 "flatbuffers_benchmarks.html":[3],
 "flatbuffers_grammar.html":[6],
@@ -117,17 +123,18 @@ var NAVTREEINDEX0 =
 "group__flatbuffers__go__api.html":[7,0,2],
 "group__flatbuffers__java__api.html":[7,0,3],
 "group__flatbuffers__javascript__api.html":[7,0,4],
-"group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33":[7,0,4,12],
+"group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33":[7,0,4,13],
 "group__flatbuffers__javascript__api.html#ga17a48cc241b10348fd6751ed3a973e2d":[7,0,4,4],
 "group__flatbuffers__javascript__api.html#ga1c36e9d7e294c61d1d6ab0923ea91e8e":[7,0,4,0],
 "group__flatbuffers__javascript__api.html#ga21ba7dd4c33dafd6abb89568e4d9c8b8":[7,0,4,6],
 "group__flatbuffers__javascript__api.html#ga53af3baf50f96de783c06a35934d63bf":[7,0,4,1],
-"group__flatbuffers__javascript__api.html#ga62c5cf622a7bbcfd49f21bddd8b9bef7":[7,0,4,11],
-"group__flatbuffers__javascript__api.html#ga674814e0816f06c8a29ab364d19bed60":[7,0,4,10],
+"group__flatbuffers__javascript__api.html#ga62c5cf622a7bbcfd49f21bddd8b9bef7":[7,0,4,12],
+"group__flatbuffers__javascript__api.html#ga674814e0816f06c8a29ab364d19bed60":[7,0,4,11],
 "group__flatbuffers__javascript__api.html#ga7963cbb1ae0a8589b183f9b26fb25b45":[7,0,4,5],
 "group__flatbuffers__javascript__api.html#ga8260b8431cb8b1c32b5997646cb102a9":[7,0,4,2],
+"group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b":[7,0,4,9],
 "group__flatbuffers__javascript__api.html#ga997af48d5c8f757fcb962168d67e33fb":[7,0,4,7],
-"group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f":[7,0,4,9],
+"group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f":[7,0,4,10],
 "group__flatbuffers__javascript__api.html#gaba2edd0e1e53d1c2815bb1a6ee54abf5":[7,0,4,3],
 "group__flatbuffers__javascript__api.html#gabd00b65bbe9e9fbac55fe4982eb6cec8":[7,0,4,8],
 "group__flatbuffers__php__api.html":[7,0,5],
diff --git a/search/all_2.js b/search/all_2.js
index 2052032f..474efc10 100644
--- a/search/all_2.js
+++ b/search/all_2.js
@@ -3,8 +3,8 @@ var searchData=
   ['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()']]],
   ['addboolean',['addBoolean',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a53e6356cfef3d6be298efb9a0d67be06',1,'com::google::flatbuffers::FlatBufferBuilder']]],
   ['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()']]],
+  ['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()']]],
   ['addfloat32',['addFloat32',['../group__flatbuffers__javascript__api.html#ga1c36e9d7e294c61d1d6ab0923ea91e8e',1,'flatbuffers.js']]],
   ['addfloat64',['addFloat64',['../group__flatbuffers__javascript__api.html#ga53af3baf50f96de783c06a35934d63bf',1,'flatbuffers.js']]],
   ['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()']]],
@@ -12,7 +12,7 @@ var searchData=
   ['addint32',['addInt32',['../group__flatbuffers__javascript__api.html#gaba2edd0e1e53d1c2815bb1a6ee54abf5',1,'flatbuffers.js']]],
   ['addint64',['addInt64',['../group__flatbuffers__javascript__api.html#ga17a48cc241b10348fd6751ed3a973e2d',1,'flatbuffers.js']]],
   ['addint8',['addInt8',['../group__flatbuffers__javascript__api.html#ga7963cbb1ae0a8589b183f9b26fb25b45',1,'flatbuffers.js']]],
-  ['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()']]],
+  ['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()'],['../group__flatbuffers__javascript__api.html#ga21ba7dd4c33dafd6abb89568e4d9c8b8',1,'addOffset():&#160;flatbuffers.js']]],
   ['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',['../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()']]],
diff --git a/search/all_4.js b/search/all_4.js
index 3b8ee285..f436d3c7 100644
--- a/search/all_4.js
+++ b/search/all_4.js
@@ -2,7 +2,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()']]],
   ['contributing',['Contributing',['../contributing.html',1,'']]],
-  ['createstring',['createString',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab0cd613dda628a2723925eda5f4d5e74',1,'com.google.flatbuffers.FlatBufferBuilder.createString(String 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#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &amp;str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f',1,'createString():&#160;flatbuffers.js']]],
+  ['createlong',['createLong',['../group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b',1,'flatbuffers.js']]],
+  ['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 &amp;str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const String *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#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &amp;str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab0cd613dda628a2723925eda5f4d5e74',1,'com.google.flatbuffers.FlatBufferBuilder.createString(String 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()'],['../group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f',1,'createString():&#160;flatbuffers.js']]],
   ['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)']]],
   ['createvector',['CreateVector',['../classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3',1,'flatbuffers::FlatBufferBuilder::CreateVector(const T *v, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207',1,'flatbuffers::FlatBufferBuilder::CreateVector(const std::vector&lt; T &gt; &amp;v)']]],
   ['createvectorofsortedtables',['CreateVectorOfSortedTables',['../classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6',1,'flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables(Offset&lt; T &gt; *v, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135',1,'flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables(std::vector&lt; Offset&lt; T &gt;&gt; *v)']]],
diff --git a/search/all_7.js b/search/all_7.js
index d37a3be4..d1b5552a 100644
--- a/search/all_7.js
+++ b/search/all_7.js
@@ -1,10 +1,10 @@
 var searchData=
 [
-  ['finish',['Finish',['../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#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#aee9ed3214a7b35075773c506e3d95a14',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table)'],['../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()'],['../group__flatbuffers__javascript__api.html#ga62c5cf622a7bbcfd49f21bddd8b9bef7',1,'finish():&#160;flatbuffers.js']]],
+  ['finish',['finish',['../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#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#a1afc6853539aaff7ac6937ed03ff5c7b',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable)'],['../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()'],['../group__flatbuffers__javascript__api.html#ga62c5cf622a7bbcfd49f21bddd8b9bef7',1,'finish():&#160;flatbuffers.js']]],
+  ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com::google::flatbuffers']]],
   ['flatbufferbuilder',['FlatbufferBuilder',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google::FlatBuffers']]],
-  ['flatbufferbuilder',['FlatBufferBuilder',['../classflatbuffers_1_1_flat_buffer_builder.html',1,'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#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#a61ad1938219bcdbe99cc4b668f4c0f99',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder()'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder()']]],
-  ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com::google::flatbuffers']]],
+  ['flatbufferbuilder',['FlatBufferBuilder',['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder']]],
   ['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,'']]],
@@ -13,5 +13,5 @@ var searchData=
   ['flatbuffers_2ejs',['flatbuffers.js',['../flatbuffers_8js.html',1,'']]],
   ['flatbuffer_20internals',['FlatBuffer Internals',['../flatbuffers_internals.html',1,'']]],
   ['flatbuffers_20white_20paper',['FlatBuffers white paper',['../flatbuffers_white_paper.html',1,'']]],
-  ['forcedefaults',['ForceDefaults',['../classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a',1,'flatbuffers::FlatBufferBuilder::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()'],['../group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33',1,'forceDefaults():&#160;flatbuffers.js']]]
+  ['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()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13',1,'FlatBuffers.FlatBufferBuilder.ForceDefaults()'],['../classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a',1,'flatbuffers::FlatBufferBuilder::ForceDefaults()'],['../group__flatbuffers__javascript__api.html#ga0d1738111b83dffb2c2a7fc8bca19b33',1,'forceDefaults():&#160;flatbuffers.js']]]
 ];
diff --git a/search/all_e.js b/search/all_e.js
index bc99f301..b77a213f 100644
--- a/search/all_e.js
+++ b/search/all_e.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['sizedbytearray',['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()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2',1,'FlatBuffers.FlatBufferBuilder.SizedByteArray()']]]
+  ['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()']]]
 ];
diff --git a/search/classes_0.js b/search/classes_0.js
index 7f890a8e..a9d92103 100644
--- a/search/classes_0.js
+++ b/search/classes_0.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['flatbufferbuilder',['FlatbufferBuilder',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google::FlatBuffers']]],
   ['flatbufferbuilder',['FlatBufferBuilder',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html',1,'com::google::flatbuffers']]],
-  ['flatbufferbuilder',['FlatBufferBuilder',['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder']]]
+  ['flatbufferbuilder',['FlatBufferBuilder',['../classflatbuffers_1_1_flat_buffer_builder.html',1,'flatbuffers::FlatBufferBuilder'],['../class_flat_buffers_1_1_flat_buffer_builder.html',1,'FlatBuffers.FlatBufferBuilder']]],
+  ['flatbufferbuilder',['FlatbufferBuilder',['../class_google_1_1_flat_buffers_1_1_flatbuffer_builder.html',1,'Google::FlatBuffers']]]
 ];
diff --git a/search/functions_1.js b/search/functions_1.js
index 038aa8d3..5ae18241 100644
--- a/search/functions_1.js
+++ b/search/functions_1.js
@@ -3,10 +3,10 @@ var searchData=
   ['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()']]],
   ['addboolean',['addBoolean',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#a53e6356cfef3d6be298efb9a0d67be06',1,'com::google::flatbuffers::FlatBufferBuilder']]],
   ['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()']]],
+  ['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',['../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()']]],
+  ['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',['../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()']]],
diff --git a/search/functions_2.js b/search/functions_2.js
index 4b41c224..82a4e229 100644
--- a/search/functions_2.js
+++ b/search/functions_2.js
@@ -1,7 +1,8 @@
 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()']]],
-  ['createstring',['createString',['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab0cd613dda628a2723925eda5f4d5e74',1,'com.google.flatbuffers.FlatBufferBuilder.createString(String 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#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &amp;str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)']]],
+  ['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 &amp;str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#a840b769fbb4148f97d3eed266e4690c3',1,'flatbuffers::FlatBufferBuilder::CreateSharedString(const String *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#a8c3af55e64f5cda9aefa38ac5287ef9f',1,'flatbuffers::FlatBufferBuilder::CreateString(const std::string &amp;str)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac0b6a1c5d949f20ad84367fc0f9e1506',1,'flatbuffers::FlatBufferBuilder::CreateString(const String *str)'],['../classcom_1_1google_1_1flatbuffers_1_1_flat_buffer_builder.html#ab0cd613dda628a2723925eda5f4d5e74',1,'com.google.flatbuffers.FlatBufferBuilder.createString(String 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()']]],
   ['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)']]],
   ['createvector',['CreateVector',['../classflatbuffers_1_1_flat_buffer_builder.html#a2cca5c89246a53e80e6ad9487f4c36f3',1,'flatbuffers::FlatBufferBuilder::CreateVector(const T *v, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#af715dd24dd37cb0151dc7a980ad0f207',1,'flatbuffers::FlatBufferBuilder::CreateVector(const std::vector&lt; T &gt; &amp;v)']]],
   ['createvectorofsortedtables',['CreateVectorOfSortedTables',['../classflatbuffers_1_1_flat_buffer_builder.html#a2130ef232ff405eebe2e7f184ecd06e6',1,'flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables(Offset&lt; T &gt; *v, size_t len)'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac64d11c219559ea51567eab556e13135',1,'flatbuffers::FlatBufferBuilder::CreateVectorOfSortedTables(std::vector&lt; Offset&lt; T &gt;&gt; *v)']]],
diff --git a/search/functions_5.js b/search/functions_5.js
index de31c30f..1d9a4b2d 100644
--- a/search/functions_5.js
+++ b/search/functions_5.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['finish',['Finish',['../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#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#aee9ed3214a7b35075773c506e3d95a14',1,'com.google.flatbuffers.FlatBufferBuilder.finish(int root_table)'],['../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()']]],
+  ['finish',['finish',['../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#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#a1afc6853539aaff7ac6937ed03ff5c7b',1,'FlatBuffers.FlatBufferBuilder.Finish(int rootTable)'],['../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()']]],
   ['flatbufferbuilder',['FlatBufferBuilder',['../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#a61ad1938219bcdbe99cc4b668f4c0f99',1,'com.google.flatbuffers.FlatBufferBuilder.FlatBufferBuilder(ByteBuffer existing_bb)'],['../class_flat_buffers_1_1_flat_buffer_builder.html#ae24f93e3f9672846dd241d585d62c63d',1,'FlatBuffers.FlatBufferBuilder.FlatBufferBuilder()'],['../classflatbuffers_1_1_flat_buffer_builder.html#ac72b54a75e0c329e0ce0b8fab758e256',1,'flatbuffers::FlatBufferBuilder::FlatBufferBuilder()']]],
-  ['forcedefaults',['ForceDefaults',['../classflatbuffers_1_1_flat_buffer_builder.html#a16a8fd46b34ad7727406c37b65b6b27a',1,'flatbuffers::FlatBufferBuilder::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()']]]
+  ['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_9.js b/search/functions_9.js
index bc99f301..b77a213f 100644
--- a/search/functions_9.js
+++ b/search/functions_9.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['sizedbytearray',['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()'],['../class_flat_buffers_1_1_flat_buffer_builder.html#abfd2f4e19cf51f62290a0272683f23b2',1,'FlatBuffers.FlatBufferBuilder.SizedByteArray()']]]
+  ['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()']]]
 ];
diff --git a/search/properties_1.html b/search/properties_1.html
new file mode 100644
index 00000000..a2cc5c00
--- /dev/null
+++ b/search/properties_1.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.7"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="properties_1.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/properties_1.js b/search/properties_1.js
new file mode 100644
index 00000000..179771ea
--- /dev/null
+++ b/search/properties_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['forcedefaults',['ForceDefaults',['../class_flat_buffers_1_1_flat_buffer_builder.html#a40d549b2db96b91b2345d1a44ff3fe13',1,'FlatBuffers::FlatBufferBuilder']]]
+];
diff --git a/search/search.js b/search/search.js
index f09098c9..61787f35 100644
--- a/search/search.js
+++ b/search/search.js
@@ -13,7 +13,7 @@ var indexSectionsWithContent =
   3: "f",
   4: "_acdefgirs",
   5: "$abcdfk",
-  6: "d",
+  6: "df",
   7: "cgjp",
   8: "bcfgptuw"
 };
diff --git a/search/variables_3.js b/search/variables_3.js
index 51e8256f..162ef569 100644
--- a/search/variables_3.js
+++ b/search/variables_3.js
@@ -1,4 +1,5 @@
 var searchData=
 [
+  ['createlong',['createLong',['../group__flatbuffers__javascript__api.html#ga8c5bb4a00c46fb6665787fa9ff52089b',1,'flatbuffers.js']]],
   ['createstring',['createString',['../group__flatbuffers__javascript__api.html#gaa7a7bd67cb1c3190792d4b2b3e66376f',1,'flatbuffers.js']]]
 ];
diff --git a/usergroup0.html b/usergroup0.html
index a2cfc040..ba30c770 100644
--- a/usergroup0.html
+++ b/usergroup0.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
diff --git a/usergroup1.html b/usergroup1.html
index fc33ce32..f4593dc8 100644
--- a/usergroup1.html
+++ b/usergroup1.html
@@ -58,7 +58,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
       <li><a href="flatbuffers_benchmarks.html"><span>Benchmarks</span></a></li>
       <li><a href="flatbuffers_white_paper.html"><span>FlatBuffers&#160;white&#160;paper</span></a></li>
       <li><a href="flatbuffers_internals.html"><span>FlatBuffers&#160;internals</span></a></li>
-      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;langauge</span></a></li>
+      <li><a href="flatbuffers_grammar.html"><span>Grammar&#160;of&#160;the&#160;schema&#160;language</span></a></li>
       <li class="current"><a href="usergroup1.html"><span>API&#160;Reference</span></a></li>
       <li><a href="contributing.html"><span>Contributing</span></a></li>
       <li>
-- 
GitLab