<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<title>FlatBuffers: Use in C++</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet">
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea" style="height: 110px;">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="commonprojectlogo">
    <img alt="Logo" src="fpl_logo_small.png"/>
  </td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">FlatBuffers
   </div>
   <div style="font-size:12px;">
    An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>.
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('flatbuffers_guide_use_cpp.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">Use in C++ </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="md_CppUsage"></a></p>
<h1><a class="anchor" id="autotoc_md38"></a>
Before you get started</h1>
<p>Before diving into the FlatBuffers usage in C++, it should be noted that the <a class="el" href="flatbuffers_guide_tutorial.html">Tutorial</a> page has a complete guide to general FlatBuffers usage in all of the supported languages (including C++). This page is designed to cover the nuances of FlatBuffers usage, specific to C++.</p>
<h3><a class="anchor" id="autotoc_md39"></a>
Prerequisites</h3>
<p>This page assumes you have written a FlatBuffers schema and compiled it with the Schema Compiler. If you have not, please see <a class="el" href="flatbuffers_guide_using_schema_compiler.html">Using the schema compiler</a> and <a class="el" href="flatbuffers_guide_writing_schema.html">Writing a schema</a>.</p>
<p>Assuming you wrote a schema, say <code>mygame.fbs</code> (though the extension doesn't matter), you've generated a C++ header called <code>mygame_generated.h</code> using the compiler (e.g. <code>flatc -c mygame.fbs</code>), you can now start using this in your program by including the header. As noted, this header relies on <code>flatbuffers/flatbuffers.h</code>, which should be in your include path.</p>
<h1><a class="anchor" id="autotoc_md40"></a>
FlatBuffers C++ library code location</h1>
<p>The code for the FlatBuffers C++ library can be found at <code>flatbuffers/include/flatbuffers</code>. You can browse the library code on the <a href="https://github.com/google/flatbuffers/tree/master/include/flatbuffers">FlatBuffers GitHub page</a>.</p>
<h1><a class="anchor" id="autotoc_md41"></a>
Testing the FlatBuffers C++ library</h1>
<p>The code to test the C++ library can be found at <code>flatbuffers/tests</code>. The test code itself is located in <a href="https://github.com/google/flatbuffers/blob/master/tests/test.cpp">test.cpp</a>.</p>
<p>This test file is built alongside <code>flatc</code>. To review how to build the project, please read the <a class="el" href="flatbuffers_guide_building.html">Building</a> documentation.</p>
<p>To run the tests, execute <code>flattests</code> from the root <code>flatbuffers/</code> directory. For example, on <a href="https://en.wikipedia.org/wiki/Linux">Linux</a>, you would simply run: <code>./flattests</code>.</p>
<h1><a class="anchor" id="autotoc_md42"></a>
Using the FlatBuffers C++ library</h1>
<p><em>Note: See <a class="el" href="flatbuffers_guide_tutorial.html">Tutorial</a> for a more in-depth example of how to use FlatBuffers in C++.</em></p>
<p>FlatBuffers supports both reading and writing FlatBuffers in C++.</p>
<p>To use FlatBuffers in your code, first generate the C++ classes from your schema with the <code>--cpp</code> option to <code>flatc</code>. Then you can include both FlatBuffers and the generated code to read or write FlatBuffers.</p>
<p>For example, here is how you would read a FlatBuffer binary file in C++: First, include the library and generated code. Then read the file into a <code>char *</code> array, which you pass to <code>GetMonster()</code>.</p>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;flatbuffers/flatbuffers.h&quot;</span></div>
<div class="line"><span class="preprocessor">#include &quot;monster_test_generate.h&quot;</span></div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span> <span class="comment">// C++ header file for printing</span></div>
<div class="line"><span class="preprocessor">#include &lt;fstream&gt;</span> <span class="comment">// C++ header file for file access</span></div>
<div class="line"> </div>
<div class="line"> </div>
<div class="line">std::ifstream infile;</div>
<div class="line">infile.open(<span class="stringliteral">&quot;monsterdata_test.mon&quot;</span>, std::ios::binary | std::ios::in);</div>
<div class="line">infile.seekg(0,std::ios::end);</div>
<div class="line"><span class="keywordtype">int</span> length = infile.tellg();</div>
<div class="line">infile.seekg(0,std::ios::beg);</div>
<div class="line"><span class="keywordtype">char</span> *data = <span class="keyword">new</span> <span class="keywordtype">char</span>[length];</div>
<div class="line">infile.read(data, length);</div>
<div class="line">infile.close();</div>
<div class="line"> </div>
<div class="line"><span class="keyword">auto</span> monster = GetMonster(data);</div>
</div><!-- fragment --><p><code>monster</code> is of type <code>Monster *</code>, and points to somewhere <em>inside</em> your buffer (root object pointers are not the same as <code>buffer_pointer</code> !). If you look in your generated header, you'll see it has convenient accessors for all fields, e.g. <code>hp()</code>, <code>mana()</code>, etc:</p>
<div class="fragment"><div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;hp : &quot;</span> &lt;&lt; monster-&gt;hp() &lt;&lt; std::endl;              <span class="comment">// &#39;80&#39;</span></div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;mana : &quot;</span> &lt;&lt; monster-&gt;mana() &lt;&lt; std::endl;          <span class="comment">// default value of &#39;150&#39;</span></div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;name : &quot;</span> &lt;&lt; monster-&gt;name()-&gt;c_str() &lt;&lt; std::endl; <span class="comment">// &quot;MyMonster&quot;</span></div>
</div><!-- fragment --><p><em>Note: That we never stored a <code>mana</code> value, so it will return the default.</em></p>
<p>The following attributes are supported:</p>
<ul>
<li><p class="startli"><code>shared</code> (on a field): For string fields, this enables the usage of string pooling (i.e. <code>CreateSharedString</code>) as default serialization behavior.</p>
<p class="startli">Specifically, <code>CreateXxxDirect</code> functions and <code>Pack</code> functions for object based API (see below) will use <code>CreateSharedString</code> to create strings.</p>
</li>
</ul>
<h1><a class="anchor" id="flatbuffers_cpp_object_based_api"></a>
Object based API</h1>
<p>FlatBuffers is all about memory efficiency, which is why its base API is written around using as little as possible of it. This does make the API clumsier (requiring pre-order construction of all data, and making mutation harder).</p>
<p>For times when efficiency is less important a more convenient object based API can be used (through <code>--gen-object-api</code>) that is able to unpack &amp; pack a FlatBuffer into objects and standard STL containers, allowing for convenient construction, access and mutation.</p>
<p>To use:</p>
<div class="fragment"><div class="line"><span class="comment">// Autogenerated class from table Monster.</span></div>
<div class="line">MonsterT monsterobj;</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Deserialize from buffer into object.</span></div>
<div class="line">GetMonster(flatbuffer)-&gt;UnPackTo(&amp;monsterobj);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Update object directly like a C++ class instance.</span></div>
<div class="line">cout &lt;&lt; monsterobj.name;  <span class="comment">// This is now a std::string!</span></div>
<div class="line">monsterobj.name = <span class="stringliteral">&quot;Bob&quot;</span>;  <span class="comment">// Change the name.</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Serialize into new flatbuffer.</span></div>
<div class="line">FlatBufferBuilder fbb;</div>
<div class="line">fbb.Finish(Monster::Pack(fbb, &amp;monsterobj));</div>
</div><!-- fragment --><p>The following attributes are specific to the object-based API code generation:</p>
<ul>
<li><code>native_inline</code> (on a field): Because FlatBuffer tables and structs are optionally present in a given buffer, they are best represented as pointers (specifically std::unique_ptrs) in the native class since they can be null. This attribute changes the member declaration to use the type directly rather than wrapped in a unique_ptr.</li>
<li><code>native_default("value")</code> (on a field): For members that are declared "native_inline", the value specified with this attribute will be included verbatim in the class constructor initializer list for this member.</li>
<li><code>native_custom_alloc("custom_allocator")</code> (on a table or struct): When using the object-based API all generated NativeTables that are allocated when unpacking your flatbuffer will use "custom allocator". The allocator is also used by any std::vector that appears in a table defined with <code>native_custom_alloc</code>. This can be used to provide allocation from a pool for example, for faster unpacking when using the object-based API.</li>
</ul>
<p>Minimal Example:</p>
<p>schema:</p>
<div class="fragment"><div class="line">table mytable(native_custom_alloc:<span class="stringliteral">&quot;custom_allocator&quot;</span>) {</div>
<div class="line">  ...</div>
<div class="line">}</div>
</div><!-- fragment --><p>with <code>custom_allocator</code> defined before <code>flatbuffers.h</code> is included, as:</p>
<div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>custom_allocator : <span class="keyword">public</span> std::allocator&lt;T&gt; {</div>
<div class="line"> </div>
<div class="line">  <span class="keyword">typedef</span> T *pointer;</div>
<div class="line"> </div>
<div class="line">  <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt;</div>
<div class="line">  <span class="keyword">struct </span>rebind {</div>
<div class="line">    <span class="keyword">typedef</span> custom_allocator&lt;U&gt; other;</div>
<div class="line">  };</div>
<div class="line"> </div>
<div class="line">  pointer allocate(<span class="keyword">const</span> std::size_t n) {</div>
<div class="line">    <span class="keywordflow">return</span> std::allocator&lt;T&gt;::allocate(n);</div>
<div class="line">  }</div>
<div class="line"> </div>
<div class="line">  <span class="keywordtype">void</span> deallocate(T* ptr, std::size_t n) {</div>
<div class="line">    <span class="keywordflow">return</span> std::allocator&lt;T&gt;::deallocate(ptr,n);</div>
<div class="line">  }</div>
<div class="line"> </div>
<div class="line">  custom_allocator() throw() {}</div>
<div class="line"> </div>
<div class="line">  <span class="keyword">template</span> &lt;<span class="keyword">class</span> U&gt;</div>
<div class="line">  custom_allocator(<span class="keyword">const</span> custom_allocator&lt;U&gt;&amp;) <span class="keywordflow">throw</span>() {}</div>
<div class="line">};</div>
</div><!-- fragment --><ul>
<li><code>native_type("type")</code> (on a struct): In some cases, a more optimal C++ data type exists for a given struct. For example, the following schema:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Vec2 {</div>
<div class="line">  x: float;</div>
<div class="line">  y: float;</div>
<div class="line">}</div>
</div><!-- fragment --><p>generates the following Object-Based API class:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Vec2T : flatbuffers::NativeTable {</div>
<div class="line">  <span class="keywordtype">float</span> x;</div>
<div class="line">  <span class="keywordtype">float</span> y;</div>
<div class="line">};</div>
</div><!-- fragment --><p>However, it can be useful to instead use a user-defined C++ type since it can provide more functionality, eg.</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>vector2 {</div>
<div class="line">  <span class="keywordtype">float</span> x = 0, y = 0;</div>
<div class="line">  vector2 operator+(vector2 rhs)<span class="keyword"> const </span>{ ... }</div>
<div class="line">  vector2 operator-(vector2 rhs)<span class="keyword"> const </span>{ ... }</div>
<div class="line">  <span class="keywordtype">float</span> length()<span class="keyword"> const </span>{ ... }</div>
<div class="line">  <span class="comment">// etc.</span></div>
<div class="line">};</div>
</div><!-- fragment --><p>The <code>native_type</code> attribute will replace the usage of the generated class with the given type. So, continuing with the example, the generated code would use <code>vector2</code> in place of <code>Vec2T</code> for all generated code of the Object-Based API.</p>
<p>However, because the <code>native_type</code> is unknown to flatbuffers, the user must provide the following functions to aide in the serialization process:</p>
<div class="fragment"><div class="line"><span class="keyword">namespace </span>flatbuffers {</div>
<div class="line">  Vec2 Pack(<span class="keyword">const</span> vector2&amp; obj);</div>
<div class="line">  vector2 UnPack(<span class="keyword">const</span> Vec2&amp; obj);</div>
<div class="line">}</div>
</div><!-- fragment --><ul>
<li><code>native_type_pack_name("name")</code> (on a struct when <code>native_type</code> is specified, too): when you want to use the same <code>native_type</code> multiple times (e. g. with different precision) you must make the names of the Pack/UnPack functions unique, otherwise you will run into compile errors. This attribute appends a name to the expected Pack/UnPack functions. So when you specify <code>native_type_pack_name("Vec2")</code> in the above example you now need to implement these serialization functions instead:</li>
</ul>
<div class="fragment"><div class="line"><span class="keyword">namespace </span>flatbuffers {</div>
<div class="line">  Vec2 PackVec2(<span class="keyword">const</span> vector2&amp; obj);</div>
<div class="line">  vector2 UnPackVec2(<span class="keyword">const</span> Vec2&amp; obj);</div>
<div class="line">}</div>
</div><!-- fragment --><p>Finally, the following top-level attributes:</p>
<ul>
<li><code>native_include("path")</code> (at file level): Because the <code>native_type</code> attribute can be used to introduce types that are unknown to flatbuffers, it may be necessary to include "external" header files in the generated code. This attribute can be used to directly add an include directive to the top of the generated code that includes the specified path directly.</li>
<li><code>force_align</code>: this attribute may not be respected in the object API, depending on the aligned of the allocator used with <code>new</code>.</li>
</ul>
<h1><a class="anchor" id="autotoc_md43"></a>
External references</h1>
<p>An additional feature of the object API is the ability to allow you to load multiple independent FlatBuffers, and have them refer to eachothers objects using hashes which are then represented as typed pointers in the object API.</p>
<p>To make this work have a field in the objects you want to referred to which is using the string hashing feature (see <code>hash</code> attribute in the <a class="el" href="flatbuffers_guide_writing_schema.html">schema</a> documentation). Then you have a similar hash in the field referring to it, along with a <code>cpp_type</code> attribute specifying the C++ type this will refer to (this can be any C++ type, and will get a <code>*</code> added).</p>
<p>Then, in JSON or however you create these buffers, make sure they use the same string (or hash).</p>
<p>When you call <code>UnPack</code> (or <code>Create</code>), you'll need a function that maps from hash to the object (see <code>resolver_function_t</code> for details).</p>
<h1><a class="anchor" id="autotoc_md44"></a>
Using different pointer types</h1>
<p>By default the object tree is built out of <code>std::unique_ptr</code>, but you can influence this either globally (using the <code>--cpp-ptr-type</code> argument to <code>flatc</code>) or per field (using the <code>cpp_ptr_type</code> attribute) to by any smart pointer type (<code>my_ptr&lt;T&gt;</code>), or by specifying <code>naked</code> as the type to get <code>T *</code> pointers. Unlike the smart pointers, naked pointers do not manage memory for you, so you'll have to manage their lifecycles manually. To reference the pointer type specified by the <code>--cpp-ptr-type</code> argument to <code>flatc</code> from a flatbuffer field set the <code>cpp_ptr_type</code> attribute to <code>default_ptr_type</code>.</p>
<h1><a class="anchor" id="autotoc_md45"></a>
Using different string type</h1>
<p>By default the object tree is built out of <code>std::string</code>, but you can influence this either globally (using the <code>--cpp-str-type</code> argument to <code>flatc</code>) or per field using the <code>cpp_str_type</code> attribute.</p>
<p>The type must support <code>T::c_str()</code>, <code>T::length()</code> and <code>T::empty()</code> as member functions.</p>
<p>Further, the type must be constructible from std::string, as by default a std::string instance is constructed and then used to initialize the custom string type. This behavior impedes efficient and zero-copy construction of custom string types; the <code>--cpp-str-flex-ctor</code> argument to <code>flatc</code> or the per field attribute <code>cpp_str_flex_ctor</code> can be used to change this behavior, so that the custom string type is constructed by passing the pointer and length of the FlatBuffers String. The custom string class will require a constructor in the following format: <code>custom_str_class(const char *, size_t)</code>. Please note that the character array is not guaranteed to be NULL terminated, you should always use the provided size to determine end of string.</p>
<h2><a class="anchor" id="autotoc_md46"></a>
Reflection (&amp; Resizing)</h2>
<p>There is experimental support for reflection in FlatBuffers, allowing you to read and write data even if you don't know the exact format of a buffer, and even allows you to change sizes of strings and vectors in-place.</p>
<p>The way this works is very elegant; there is actually a FlatBuffer schema that describes schemas (!) which you can find in <code>reflection/reflection.fbs</code>. The compiler, <code>flatc</code>, can write out any schemas it has just parsed as a binary FlatBuffer, corresponding to this meta-schema.</p>
<p>Loading in one of these binary schemas at runtime allows you traverse any FlatBuffer data that corresponds to it without knowing the exact format. You can query what fields are present, and then read/write them after.</p>
<p>For convenient field manipulation, you can include the header <code>flatbuffers/reflection.h</code> which includes both the generated code from the meta schema, as well as a lot of helper functions.</p>
<p>And example of usage, for the time being, can be found in <code>test.cpp/ReflectionTest()</code>.</p>
<h2><a class="anchor" id="autotoc_md47"></a>
Mini Reflection</h2>
<p>A more limited form of reflection is available for direct inclusion in generated code, which doesn't do any (binary) schema access at all. It was designed to keep the overhead of reflection as low as possible (on the order of 2-6 bytes per field added to your executable), but doesn't contain all the information the (binary) schema contains.</p>
<p>You add this information to your generated code by specifying <code>--reflect-types</code> (or instead <code>--reflect-names</code> if you also want field / enum names).</p>
<p>You can now use this information, for example to print a FlatBuffer to text: </p><pre class="fragment">auto s = flatbuffers::FlatBufferToString(flatbuf, MonsterTypeTable());
</pre><p> <code>MonsterTypeTable()</code> is declared in the generated code for each type. The string produced is very similar to the JSON produced by the <code>Parser</code> based text generator.</p>
<p>You'll need <code>flatbuffers/minireflect.h</code> for this functionality. In there is also a convenient visitor/iterator so you can write your own output / functionality based on the mini reflection tables without having to know the FlatBuffers or reflection encoding.</p>
<h2><a class="anchor" id="autotoc_md48"></a>
Storing maps / dictionaries in a FlatBuffer</h2>
<p>FlatBuffers doesn't support maps natively, but there is support to emulate their behavior with vectors and binary search, which means you can have fast lookups directly from a FlatBuffer without having to unpack your data into a <code>std::map</code> or similar.</p>
<p>To use it:</p><ul>
<li>Designate one of the fields in a table as they "key" field. You do this by setting the <code>key</code> attribute on this field, e.g. <code>name:string (key)</code>. You may only have one key field, and it must be of string or scalar type.</li>
<li>Write out tables of this type as usual, collect their offsets in an array or vector.</li>
<li>Instead of <code>CreateVector</code>, call <code>CreateVectorOfSortedTables</code>, which will first sort all offsets such that the tables they refer to are sorted by the key field, then serialize it.</li>
<li>Now when you're accessing the FlatBuffer, you can use <code>Vector::LookupByKey</code> instead of just <code>Vector::Get</code> to access elements of the vector, e.g.: <code>myvector-&gt;LookupByKey("Fred")</code>, which returns a pointer to the corresponding table type, or <code>nullptr</code> if not found. <code>LookupByKey</code> performs a binary search, so should have a similar speed to <code>std::map</code>, though may be faster because of better caching. <code>LookupByKey</code> only works if the vector has been sorted, it will likely not find elements if it hasn't been sorted.</li>
</ul>
<h2><a class="anchor" id="autotoc_md49"></a>
Direct memory access</h2>
<p>As you can see from the above examples, all elements in a buffer are accessed through generated accessors. This is because everything is stored in little endian format on all platforms (the accessor performs a swap operation on big endian machines), and also because the layout of things is generally not known to the user.</p>
<p>For structs, layout is deterministic and guaranteed to be the same across platforms (scalars are aligned to their own size, and structs themselves to their largest member), and you are allowed to access this memory directly by using <code>sizeof()</code> and <code>memcpy</code> on the pointer to a struct, or even an array of structs.</p>
<p>To compute offsets to sub-elements of a struct, make sure they are a structs themselves, as then you can use the pointers to figure out the offset without having to hardcode it. This is handy for use of arrays of structs with calls like <code>glVertexAttribPointer</code> in OpenGL or similar APIs.</p>
<p>It is important to note is that structs are still little endian on all machines, so only use tricks like this if you can guarantee you're not shipping on a big endian machine (an <code>assert(FLATBUFFERS_LITTLEENDIAN)</code> would be wise).</p>
<h2><a class="anchor" id="autotoc_md50"></a>
Access of untrusted buffers</h2>
<p>The generated accessor functions access fields over offsets, which is very quick. These offsets are not verified at run-time, so a malformed buffer could cause a program to crash by accessing random memory.</p>
<p>When you're processing large amounts of data from a source you know (e.g. your own generated data on disk), this is acceptable, but when reading data from the network that can potentially have been modified by an attacker, this is undesirable.</p>
<p>For this reason, you can optionally use a buffer verifier before you access the data. This verifier will check all offsets, all sizes of fields, and null termination of strings to ensure that when a buffer is accessed, all reads will end up inside the buffer.</p>
<p>Each root type will have a verification function generated for it, e.g. for <code>Monster</code>, you can call:</p>
<div class="fragment"><div class="line"><span class="keywordtype">bool</span> ok = VerifyMonsterBuffer(Verifier(buf, len));</div>
</div><!-- fragment --><p>if <code>ok</code> is true, the buffer is safe to read.</p>
<p>Besides untrusted data, this function may be useful to call in debug mode, as extra insurance against data being corrupted somewhere along the way.</p>
<p>While verifying a buffer isn't "free", it is typically faster than a full traversal (since any scalar data is not actually touched), and since it may cause the buffer to be brought into cache before reading, the actual overhead may be even lower than expected.</p>
<p>In specialized cases where a denial of service attack is possible, the verifier has two additional constructor arguments that allow you to limit the nesting depth and total amount of tables the verifier may encounter before declaring the buffer malformed. The default is <code>Verifier(buf, len, 64 /* max depth */, 1000000, /* max tables */)</code> which should be sufficient for most uses.</p>
<h2><a class="anchor" id="autotoc_md51"></a>
Text &amp; schema parsing</h2>
<p>Using binary buffers with the generated header provides a super low overhead use of FlatBuffer data. There are, however, times when you want to use text formats, for example because it interacts better with source control, or you want to give your users easy access to data.</p>
<p>Another reason might be that you already have a lot of data in JSON format, or a tool that generates JSON, and if you can write a schema for it, this will provide you an easy way to use that data directly.</p>
<p>(see the schema documentation for some specifics on the JSON format accepted).</p>
<p>Schema evolution compatibility for the JSON format follows the same rules as the binary format (JSON formatted data will be forwards/backwards compatible with schemas that evolve in a compatible way).</p>
<p>There are two ways to use text formats:</p>
<h4><a class="anchor" id="autotoc_md52"></a>
Using the compiler as a conversion tool</h4>
<p>This is the preferred path, as it doesn't require you to add any new code to your program, and is maximally efficient since you can ship with binary data. The disadvantage is that it is an extra step for your users/developers to perform, though you might be able to automate it. </p><pre class="fragment">flatc -b myschema.fbs mydata.json
</pre><p> This will generate the binary file <code>mydata_wire.bin</code> which can be loaded as before.</p>
<h4><a class="anchor" id="autotoc_md53"></a>
Making your program capable of loading text directly</h4>
<p>This gives you maximum flexibility. You could even opt to support both, i.e. check for both files, and regenerate the binary from text when required, otherwise just load the binary.</p>
<p>This option is currently only available for C++, or Java through JNI.</p>
<p>As mentioned in the section "Building" above, this technique requires you to link a few more files into your program, and you'll want to include <code>flatbuffers/idl.h</code>.</p>
<p>Load text (either a schema or json) into an in-memory buffer (there is a convenient <code>LoadFile()</code> utility function in <code>flatbuffers/util.h</code> if you wish). Construct a parser:</p>
<div class="fragment"><div class="line">flatbuffers::Parser parser;</div>
</div><!-- fragment --><p>Now you can parse any number of text files in sequence:</p>
<div class="fragment"><div class="line">parser.Parse(text_file.c_str());</div>
</div><!-- fragment --><p>This works similarly to how the command-line compiler works: a sequence of files parsed by the same <code>Parser</code> object allow later files to reference definitions in earlier files. Typically this means you first load a schema file (which populates <code>Parser</code> with definitions), followed by one or more JSON files.</p>
<p>As optional argument to <code>Parse</code>, you may specify a null-terminated list of include paths. If not specified, any include statements try to resolve from the current directory.</p>
<p>If there were any parsing errors, <code>Parse</code> will return <code>false</code>, and <code>Parser::error_</code> contains a human readable error string with a line number etc, which you should present to the creator of that file.</p>
<p>After each JSON file, the <code>Parser::fbb</code> member variable is the <code>FlatBufferBuilder</code> that contains the binary buffer version of that file, that you can access as described above.</p>
<p><code>samples/sample_text.cpp</code> is a code sample showing the above operations.</p>
<h2><a class="anchor" id="autotoc_md54"></a>
Threading</h2>
<p>Reading a FlatBuffer does not touch any memory outside the original buffer, and is entirely read-only (all const), so is safe to access from multiple threads even without synchronisation primitives.</p>
<p>Creating a FlatBuffer is not thread safe. All state related to building a FlatBuffer is contained in a FlatBufferBuilder instance, and no memory outside of it is touched. To make this thread safe, either do not share instances of FlatBufferBuilder between threads (recommended), or manually wrap it in synchronisation primitives. There's no automatic way to accomplish this, by design, as we feel multithreaded construction of a single buffer will be rare, and synchronisation overhead would be costly.</p>
<h2><a class="anchor" id="autotoc_md55"></a>
Advanced union features</h2>
<p>The C++ implementation currently supports vectors of unions (i.e. you can declare a field as <code>[T]</code> where <code>T</code> is a union type instead of a table type). It also supports structs and strings in unions, besides tables.</p>
<p>For an example of these features, see <code>tests/union_vector</code>, and <code>UnionVectorTest</code> in <code>test.cpp</code>.</p>
<p>Since these features haven't been ported to other languages yet, if you choose to use them, you won't be able to use these buffers in other languages (<code>flatc</code> will refuse to compile a schema that uses these features).</p>
<p>These features reduce the amount of "table wrapping" that was previously needed to use unions.</p>
<p>To use scalars, simply wrap them in a struct.</p>
<h2><a class="anchor" id="autotoc_md56"></a>
Depth limit of nested objects and stack-overflow control</h2>
<p>The parser of Flatbuffers schema or json-files is kind of recursive parser. To avoid stack-overflow problem the parser has a built-in limiter of recursion depth. Number of nested declarations in a schema or number of nested json-objects is limited. By default, this depth limit set to <code>64</code>. It is possible to override this limit with <code>FLATBUFFERS_MAX_PARSING_DEPTH</code> definition. This definition can be helpful for testing purposes or embedded applications. For details see <a class="el" href="flatbuffers_guide_building.html">build</a> of CMake-based projects.</p>
<h2><a class="anchor" id="flatbuffers_locale_cpp"></a>
Dependence from C-locale</h2>
<p>The Flatbuffers flatbuffers grammar "grammar" uses ASCII character set for identifiers, alphanumeric literals, reserved words.</p>
<p>Internal implementation of the Flatbuffers depends from functions which depend from C-locale: <code>strtod()</code> or <code>strtof()</code>, for example. The library expects the dot <code>.</code> symbol as the separator of an integer part from the fractional part of a float number. Another separator symbols (<code>,</code> for example) will break the compatibility and may lead to an error while parsing a Flatbuffers schema or a json file.</p>
<p>The Standard C locale is a global resource, there is only one locale for the entire application. Some modern compilers and platforms have locale-independent or locale-narrow functions <code>strtof_l</code>, <code>strtod_l</code>, <code>strtoll_l</code>, <code>strtoull_l</code> to resolve this dependency. These functions use specified locale rather than the global or per-thread locale instead. They are part of POSIX-2008 but not part of the C/C++ standard library, therefore, may be missing on some platforms. The Flatbuffers library try to detect these functions at configuration and compile time:</p><ul>
<li>CMake <code>"CMakeLists.txt"</code>:<ul>
<li>Check existence of <code>strtol_l</code> and <code>strtod_l</code> in the <code>&lt;stdlib.h&gt;</code>.</li>
</ul>
</li>
<li>Compile-time <code>"/include/base.h"</code>:<ul>
<li><code>_MSC_VER &gt;= 1900</code>: MSVC2012 or higher if build with MSVC.</li>
<li><code>_XOPEN_SOURCE&gt;=700</code>: POSIX-2008 if build with GCC/Clang.</li>
</ul>
</li>
</ul>
<p>After detection, the definition <code>FLATBUFFERS_LOCALE_INDEPENDENT</code> will be set to <code>0</code> or <code>1</code>. To override or stop this detection use CMake <code>-DFLATBUFFERS_LOCALE_INDEPENDENT={0|1}</code> or predefine <code>FLATBUFFERS_LOCALE_INDEPENDENT</code> symbol.</p>
<p>To test the compatibility of the Flatbuffers library with a specific locale use the environment variable <code>FLATBUFFERS_TEST_LOCALE</code>: </p><div class="fragment"><div class="line">&gt;FLATBUFFERS_TEST_LOCALE=&quot;&quot; ./flattests</div>
<div class="line">&gt;FLATBUFFERS_TEST_LOCALE=&quot;ru_RU.CP1251&quot; ./flattests</div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md57"></a>
Support of floating-point numbers</h2>
<p>The Flatbuffers library assumes that a C++ compiler and a CPU are compatible with the <code>IEEE-754</code> floating-point standard. The schema and json parser may fail if <code>fast-math</code> or <code>/fp:fast</code> mode is active.</p>
<h3><a class="anchor" id="autotoc_md58"></a>
Support of hexadecimal and special floating-point numbers</h3>
<p>According to the <a class="el" href="flatbuffers_grammar.html">grammar</a> <code>fbs</code> and <code>json</code> files may use hexadecimal and special (<code>NaN</code>, <code>Inf</code>) floating-point literals. The Flatbuffers uses <code>strtof</code> and <code>strtod</code> functions to parse floating-point literals. The Flatbuffers library has a code to detect a compiler compatibility with the literals. If necessary conditions are met the preprocessor constant <code>FLATBUFFERS_HAS_NEW_STRTOD</code> will be set to <code>1</code>. The support of floating-point literals will be limited at compile time if <code>FLATBUFFERS_HAS_NEW_STRTOD</code> constant is less than <code>1</code>. In this case, schemas with hexadecimal or special literals cannot be used.</p>
<h3><a class="anchor" id="autotoc_md59"></a>
Comparison of floating-point NaN values</h3>
<p>The floating-point <code>NaN</code> (<code>not a number</code>) is special value which representing an undefined or unrepresentable value. <code>NaN</code> may be explicitly assigned to variables, typically as a representation for missing values or may be a result of a mathematical operation. The <code>IEEE-754</code> defines two kind of <code>NaNs</code>:</p><ul>
<li>Quiet NaNs, or <code>qNaNs</code>.</li>
<li>Signaling NaNs, or <code>sNaNs</code>.</li>
</ul>
<p>According to the <code>IEEE-754</code>, a comparison with <code>NaN</code> always returns an unordered result even when compared with itself. As a result, a whole Flatbuffers object will be not equal to itself if has one or more <code>NaN</code>. Flatbuffers scalar fields that have the default value are not actually stored in the serialized data but are generated in code (see <a class="el" href="flatbuffers_guide_writing_schema.html">Writing a schema</a>). Scalar fields with <code>NaN</code> defaults break this behavior. If a schema has a lot of <code>NaN</code> defaults the Flatbuffers can override the unordered comparison by the ordered: <code>(NaN==NaN)-&gt;true</code>. This ordered comparison is enabled when compiling a program with the symbol <code>FLATBUFFERS_NAN_DEFAULTS</code> defined. Additional computations added by <code>FLATBUFFERS_NAN_DEFAULTS</code> are very cheap if GCC or Clang used. These compilers have a compile-time implementation of <code>isnan</code> checking which MSVC does not.</p>
<p><br  />
 </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- Google Analytics -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-49880327-7', 'auto');
  ga('send', 'pageview');
</script>
</body>
</html>
