/*
 @licstart  The following is the entire license notice for the JavaScript code in this file.

 The MIT License (MIT)

 Copyright (C) 1997-2020 by Dimitri van Heesch

 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 and associated documentation files (the "Software"), to deal in the Software without restriction,
 including without limitation the rights to use, copy, modify, merge, publish, distribute,
 sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

 The above copyright notice and this permission notice shall be included in all copies or
 substantial portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 @licend  The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Programmer's Guide",url:"usergroup0.html",children:[
{text:"Building",url:"flatbuffers_guide_building.html"},
{text:"Tutorial",url:"flatbuffers_guide_tutorial.html"},
{text:"Using the schema compiler",url:"flatbuffers_guide_using_schema_compiler.html"},
{text:"Writing a schema",url:"flatbuffers_guide_writing_schema.html"},
{text:"Use in C++",url:"flatbuffers_guide_use_cpp.html"},
{text:"Use in C",url:"flatbuffers_guide_use_c.html"},
{text:"Use in Go",url:"flatbuffers_guide_use_go.html"},
{text:"Use in Java",url:"flatbuffers_guide_use_java.html"},
{text:"Use in C#",url:"flatbuffers_guide_use_c-sharp.html"},
{text:"Use in JavaScript",url:"flatbuffers_guide_use_javascript.html"},
{text:"Use in TypeScript",url:"flatbuffers_guide_use_typescript.html"},
{text:"Use in PHP",url:"flatbuffers_guide_use_php.html"},
{text:"Use in Python",url:"flatbuffers_guide_use_python.html"},
{text:"Use in Dart",url:"flatbuffers_guide_use_dart.html"},
{text:"Use in Lua",url:"flatbuffers_guide_use_lua.html"},
{text:"Use in Lobster",url:"flatbuffers_guide_use_lobster.html"},
{text:"Use in Rust",url:"flatbuffers_guide_use_rust.html"},
{text:"Use in Swift",url:"flatbuffers_guide_use_swift.html"},
{text:"FlexBuffers (Schema-less version)",url:"flexbuffers.html"},
{text:"gRPC",url:"usergroup1.html",children:[
{text:"Use in C++",url:"flatbuffers_grpc_guide_use_cpp.html"}]}]},
{text:"Platform / Language / Feature support",url:"flatbuffers_support.html"},
{text:"Benchmarks",url:"flatbuffers_benchmarks.html"},
{text:"FlatBuffers white paper",url:"flatbuffers_white_paper.html"},
{text:"FlatBuffers internals",url:"flatbuffers_internals.html"},
{text:"Intermediate Representation",url:"intermediate_representation.html"},
{text:"Grammar of the schema language",url:"flatbuffers_grammar.html"},
{text:"API Reference",url:"usergroup2.html",children:[
{text:"APIs",url:"modules.html"},
{text:"Class List",url:"annotated.html",children:[
{text:"Class List",url:"annotated.html"},
{text:"Class Index",url:"classes.html"},
{text:"Class Hierarchy",url:"hierarchy.html"},
{text:"Class Members",url:"functions.html",children:[
{text:"All",url:"functions.html",children:[
{text:"$",url:"functions.html#index__24"},
{text:"_",url:"functions__.html#index__5F"},
{text:"a",url:"functions_a.html#index_a"},
{text:"b",url:"functions_b.html#index_b"},
{text:"c",url:"functions_c.html#index_c"},
{text:"d",url:"functions_d.html#index_d"},
{text:"e",url:"functions_e.html#index_e"},
{text:"f",url:"functions_f.html#index_f"},
{text:"g",url:"functions_g.html#index_g"},
{text:"i",url:"functions_i.html#index_i"},
{text:"k",url:"functions_k.html#index_k"},
{text:"l",url:"functions_l.html#index_l"},
{text:"n",url:"functions_n.html#index_n"},
{text:"o",url:"functions_o.html#index_o"},
{text:"p",url:"functions_p.html#index_p"},
{text:"r",url:"functions_r.html#index_r"},
{text:"s",url:"functions_s.html#index_s"},
{text:"t",url:"functions_t.html#index_t"},
{text:"v",url:"functions_v.html#index_v"}]},
{text:"Functions",url:"functions_func.html",children:[
{text:"_",url:"functions_func.html#index__5F"},
{text:"a",url:"functions_func_a.html#index_a"},
{text:"c",url:"functions_func_c.html#index_c"},
{text:"d",url:"functions_func_d.html#index_d"},
{text:"e",url:"functions_func_e.html#index_e"},
{text:"f",url:"functions_func_f.html#index_f"},
{text:"g",url:"functions_func_g.html#index_g"},
{text:"i",url:"functions_func_i.html#index_i"},
{text:"k",url:"functions_func_k.html#index_k"},
{text:"l",url:"functions_func_l.html#index_l"},
{text:"n",url:"functions_func_n.html#index_n"},
{text:"o",url:"functions_func_o.html#index_o"},
{text:"p",url:"functions_func_p.html#index_p"},
{text:"r",url:"functions_func_r.html#index_r"},
{text:"s",url:"functions_func_s.html#index_s"},
{text:"t",url:"functions_func_t.html#index_t"},
{text:"v",url:"functions_func_v.html#index_v"}]},
{text:"Variables",url:"functions_vars.html"},
{text:"Properties",url:"functions_prop.html"}]}]}]},
{text:"Contributing",url:"contributing.html"}]}
