blob: d79df43f1f2d97ac2c1dc884e903e3571a00c072 [file] [log] [blame] [edit]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://flatbuffers.dev/tutorial/">
<link rel="prev" href="../quick_start/">
<link rel="next" href="../building/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.0">
<title>Tutorial - FlatBuffers Docs</title>
<link rel="stylesheet" href="../assets/stylesheets/main.618322db.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#tutorial" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="FlatBuffers Docs" class="md-header__button md-logo" aria-label="FlatBuffers Docs" data-md-component="logo">
<img src="../assets/flatbuffers_logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
FlatBuffers Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Tutorial
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<div class="md-header__source">
<a href="https://github.com/google/flatbuffers" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
google/FlatBuffers
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="FlatBuffers Docs" class="md-nav__button md-logo" aria-label="FlatBuffers Docs" data-md-component="logo">
<img src="../assets/flatbuffers_logo.svg" alt="logo">
</a>
FlatBuffers Docs
</label>
<div class="md-nav__source">
<a href="https://github.com/google/flatbuffers" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
google/FlatBuffers
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../quick_start/" class="md-nav__link">
<span class="md-ellipsis">
Quick Start
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Tutorial
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Tutorial
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#flatbuffers-schema-fbs" class="md-nav__link">
<span class="md-ellipsis">
FlatBuffers Schema (.fbs)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#compiling-schema-to-code-flatc" class="md-nav__link">
<span class="md-ellipsis">
Compiling Schema to Code (flatc)
</span>
</a>
<nav class="md-nav" aria-label="Compiling Schema to Code (flatc)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#building-flatc" class="md-nav__link">
<span class="md-ellipsis">
Building flatc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#compiling-schema" class="md-nav__link">
<span class="md-ellipsis">
Compiling Schema
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#application-integration" class="md-nav__link">
<span class="md-ellipsis">
Application Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#serialization" class="md-nav__link">
<span class="md-ellipsis">
Serialization
</span>
</a>
<nav class="md-nav" aria-label="Serialization">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#flatbufferbuilder" class="md-nav__link">
<span class="md-ellipsis">
FlatBufferBuilder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#serializing-data" class="md-nav__link">
<span class="md-ellipsis">
Serializing Data
</span>
</a>
<nav class="md-nav" aria-label="Serializing Data">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#strings" class="md-nav__link">
<span class="md-ellipsis">
Strings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tables" class="md-nav__link">
<span class="md-ellipsis">
Tables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#vectors" class="md-nav__link">
<span class="md-ellipsis">
Vectors
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unions" class="md-nav__link">
<span class="md-ellipsis">
Unions
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#finishing" class="md-nav__link">
<span class="md-ellipsis">
Finishing
</span>
</a>
<nav class="md-nav" aria-label="Finishing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#buffer-access" class="md-nav__link">
<span class="md-ellipsis">
Buffer Access
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#deserialization" class="md-nav__link">
<span class="md-ellipsis">
Deserialization
</span>
</a>
<nav class="md-nav" aria-label="Deserialization">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#root-access" class="md-nav__link">
<span class="md-ellipsis">
Root Access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#table-access" class="md-nav__link">
<span class="md-ellipsis">
Table Access
</span>
</a>
<nav class="md-nav" aria-label="Table Access">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#nested-object-access" class="md-nav__link">
<span class="md-ellipsis">
Nested Object Access
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#vector-access" class="md-nav__link">
<span class="md-ellipsis">
Vector Access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#union-access" class="md-nav__link">
<span class="md-ellipsis">
Union Access
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Compiler (flatc)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Compiler (flatc)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../building/" class="md-nav__link">
<span class="md-ellipsis">
Building
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../flatc/" class="md-nav__link">
<span class="md-ellipsis">
Using
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Schema (.fbs)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Schema (.fbs)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../schema/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../evolution/" class="md-nav__link">
<span class="md-ellipsis">
Evolution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../grammar/" class="md-nav__link">
<span class="md-ellipsis">
Grammar
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Language Guides
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Language Guides
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../languages/c/" class="md-nav__link">
<span class="md-ellipsis">
C
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/cpp/" class="md-nav__link">
<span class="md-ellipsis">
C++
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/c_sharp/" class="md-nav__link">
<span class="md-ellipsis">
C#
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/dart/" class="md-nav__link">
<span class="md-ellipsis">
Dart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/go/" class="md-nav__link">
<span class="md-ellipsis">
Go
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/java/" class="md-nav__link">
<span class="md-ellipsis">
Java
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/javascript/" class="md-nav__link">
<span class="md-ellipsis">
JavaScript
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/kotlin/" class="md-nav__link">
<span class="md-ellipsis">
Kotlin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/lobster/" class="md-nav__link">
<span class="md-ellipsis">
Lobster
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/lua/" class="md-nav__link">
<span class="md-ellipsis">
Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/php/" class="md-nav__link">
<span class="md-ellipsis">
PHP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/python/" class="md-nav__link">
<span class="md-ellipsis">
Python
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/rust/" class="md-nav__link">
<span class="md-ellipsis">
Rust
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/swift/" class="md-nav__link">
<span class="md-ellipsis">
Swift
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../languages/typescript/" class="md-nav__link">
<span class="md-ellipsis">
TypeScript
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../support/" class="md-nav__link">
<span class="md-ellipsis">
Supported Configurations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../white_paper/" class="md-nav__link">
<span class="md-ellipsis">
White Paper
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
<span class="md-ellipsis">
Advanced
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Advanced
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../internals/" class="md-nav__link">
<span class="md-ellipsis">
FlatBuffers Internals
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../intermediate_representation/" class="md-nav__link">
<span class="md-ellipsis">
Intermediate Representation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../annotation/" class="md-nav__link">
<span class="md-ellipsis">
Annotating Buffers (.afb)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../benchmarks/" class="md-nav__link">
<span class="md-ellipsis">
Benchmarks
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../flexbuffers/" class="md-nav__link">
<span class="md-ellipsis">
FlexBuffers (Schema-less version)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../contributing/" class="md-nav__link">
<span class="md-ellipsis">
Contributing
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#flatbuffers-schema-fbs" class="md-nav__link">
<span class="md-ellipsis">
FlatBuffers Schema (.fbs)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#compiling-schema-to-code-flatc" class="md-nav__link">
<span class="md-ellipsis">
Compiling Schema to Code (flatc)
</span>
</a>
<nav class="md-nav" aria-label="Compiling Schema to Code (flatc)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#building-flatc" class="md-nav__link">
<span class="md-ellipsis">
Building flatc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#compiling-schema" class="md-nav__link">
<span class="md-ellipsis">
Compiling Schema
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#application-integration" class="md-nav__link">
<span class="md-ellipsis">
Application Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#serialization" class="md-nav__link">
<span class="md-ellipsis">
Serialization
</span>
</a>
<nav class="md-nav" aria-label="Serialization">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#flatbufferbuilder" class="md-nav__link">
<span class="md-ellipsis">
FlatBufferBuilder
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#serializing-data" class="md-nav__link">
<span class="md-ellipsis">
Serializing Data
</span>
</a>
<nav class="md-nav" aria-label="Serializing Data">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#strings" class="md-nav__link">
<span class="md-ellipsis">
Strings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tables" class="md-nav__link">
<span class="md-ellipsis">
Tables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#vectors" class="md-nav__link">
<span class="md-ellipsis">
Vectors
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unions" class="md-nav__link">
<span class="md-ellipsis">
Unions
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#finishing" class="md-nav__link">
<span class="md-ellipsis">
Finishing
</span>
</a>
<nav class="md-nav" aria-label="Finishing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#buffer-access" class="md-nav__link">
<span class="md-ellipsis">
Buffer Access
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#deserialization" class="md-nav__link">
<span class="md-ellipsis">
Deserialization
</span>
</a>
<nav class="md-nav" aria-label="Deserialization">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#root-access" class="md-nav__link">
<span class="md-ellipsis">
Root Access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#table-access" class="md-nav__link">
<span class="md-ellipsis">
Table Access
</span>
</a>
<nav class="md-nav" aria-label="Table Access">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#nested-object-access" class="md-nav__link">
<span class="md-ellipsis">
Nested Object Access
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#vector-access" class="md-nav__link">
<span class="md-ellipsis">
Vector Access
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#union-access" class="md-nav__link">
<span class="md-ellipsis">
Union Access
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/google/flatbuffers/edit/master/docs/source/tutorial.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<h1 id="tutorial">Tutorial</h1>
<p>This tutorial provides an example of how to work with FlatBuffers in a variety
of languages. The following topics will cover all the steps of using FlatBuffers
in your application.</p>
<ol>
<li>Writing a FlatBuffers schema file (<code>.fbs</code>).</li>
<li>Using the <code>flatc</code> compiler to transform the schema into language-specific
code.</li>
<li>Importing the generated code and libraries into your application.</li>
<li>Serializing data into a flatbuffer.</li>
<li>Deserializing a flatbuffer.</li>
</ol>
<p>The tutorial is structured to be language agnostic, with language specifics in
code blocks providing more context. Additionally, this tries to cover the major
parts and type system of flatbuffers to give a general overview. It's not
expected to be an exhaustive list of all features, or provide the best way to do
things.</p>
<h2 id="flatbuffers-schema-fbs">FlatBuffers Schema (<code>.fbs</code>)</h2>
<p>To start working with FlatBuffers, you first need to create a
<a href="../schema/">schema</a> file which defines the format of the data structures you
wish to serialize. The schema is processed by the <code>flatc</code> compiler to generate
language-specific code that you use in your projects.</p>
<p>The following
<a href="https://github.com/google/flatbuffers/blob/master/samples/monster.fbs"><code>monster.fbs</code></a>
schema will be used for this tutorial. This is part of the FlatBuffers
<a href="https://github.com/google/flatbuffers/tree/master/samples">sample code</a> to give
complete sample binaries demonstrations.</p>
<p>FlatBuffers schema is a Interface Definition Language (IDL) that has a couple
data structures, see the <a href="../schema/">schema</a> documentation for a detail
description. Use the inline code annotations to get a brief synopsis of each
part of the schema.</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">monster.fbs</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="c1">// Example IDL file for our monster&#39;s schema.</span>
<span class="n">namespace</span><span class="w"> </span><span class="n">MyGame.Sample</span><span class="p">;</span><span class="w"> </span><span class="c1">//(1)!</span>
<span class="kd">enum</span><span class="w"> </span><span class="n">Color</span><span class="o">:</span><span class="n">byte</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="na">Red</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">Green</span><span class="p">,</span><span class="w"> </span><span class="na">Blue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">//(2)!</span>
<span class="c1">// Optionally add more tables.</span>
<span class="n">union</span><span class="w"> </span><span class="n">Equipment</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">Weapon</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="c1">//(3)!</span>
<span class="n">struct</span><span class="w"> </span><span class="n">Vec3</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">//(4)!</span>
<span class="w"> </span><span class="n">x</span><span class="o">:</span><span class="kt">float</span><span class="p">;</span><span class="w"> </span><span class="c1">//(5)!</span>
<span class="w"> </span><span class="n">y</span><span class="o">:</span><span class="kt">float</span><span class="p">;</span>
<span class="w"> </span><span class="n">z</span><span class="o">:</span><span class="kt">float</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">table</span><span class="w"> </span><span class="n">Monster</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">//(6)!</span>
<span class="w"> </span><span class="n">pos</span><span class="o">:</span><span class="n">Vec3</span><span class="p">;</span><span class="w"> </span><span class="c1">//(7)!</span>
<span class="w"> </span><span class="n">mana</span><span class="o">:</span><span class="na">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span><span class="w"> </span><span class="c1">//(8)!</span>
<span class="w"> </span><span class="n">hp</span><span class="o">:</span><span class="na">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="kt">string</span><span class="p">;</span><span class="w"> </span><span class="c1">//(9)!</span>
<span class="w"> </span><span class="n">friendly</span><span class="o">:</span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">(</span><span class="n">deprecated</span><span class="p">);</span><span class="w"> </span><span class="c1">//(10)!</span>
<span class="w"> </span><span class="n">inventory</span><span class="o">:</span><span class="p">[</span><span class="n">ubyte</span><span class="p">];</span><span class="w"> </span><span class="c1">//(11)!</span>
<span class="w"> </span><span class="n">color</span><span class="o">:</span><span class="na">Color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Blue</span><span class="p">;</span>
<span class="w"> </span><span class="n">weapons</span><span class="o">:</span><span class="p">[</span><span class="n">Weapon</span><span class="p">];</span><span class="w"> </span><span class="c1">//(12)!</span>
<span class="w"> </span><span class="n">equipped</span><span class="o">:</span><span class="n">Equipment</span><span class="p">;</span><span class="w"> </span><span class="c1">//(13)!</span>
<span class="w"> </span><span class="n">path</span><span class="o">:</span><span class="p">[</span><span class="n">Vec3</span><span class="p">];</span>
<span class="p">}</span>
<span class="n">table</span><span class="w"> </span><span class="n">Weapon</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">name</span><span class="o">:</span><span class="kt">string</span><span class="p">;</span>
<span class="w"> </span><span class="n">damage</span><span class="o">:</span><span class="n">short</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">root_type</span><span class="w"> </span><span class="n">Monster</span><span class="p">;</span><span class="w"> </span><span class="c1">//(14)!</span>
</code></pre></div></td></tr></table></div>
<ol>
<li>
<p>FlatBuffers has support for namespaces to place the generated code into.
There is mixed level of support for namespaces (some languages don't have
namespaces), but for the C family of languages, it is fully supported.</p>
</li>
<li>
<p>Enums definitions can be defined with the backing numerical type. Implicit
numbering is supported, so that <code>Green</code> would have a value of 1.</p>
</li>
<li>
<p>A union represents a single value from a set of possible values. Its
effectively an enum (to represent the type actually store) and a value,
combined into one. In this example, the union is not very useful, since it
only has a single type.</p>
</li>
<li>
<p>A struct is a collection of scalar fields with names. It is itself a scalar
type, which uses less memory and has faster lookup. However, once a struct is
defined, it cannot be changed. Use tables for data structures that can evolve
over time.</p>
</li>
<li>
<p>FlatBuffers has the standard set of scalar numerical types (<code>int8</code>, <code>int16</code>,
<code>int32</code>, <code>int64</code>, <code>uint8</code>, <code>uint16</code>, <code>uint32</code>, <code>uint64</code>, <code>float</code>, <code>double</code>),
as well as <code>bool</code>. Note, scalars are fixed width, <code>varints</code> are not
supported.</p>
</li>
<li>
<p>Tables are the main data structure for grouping data together. It can evolve
by adding and deprecating fields over time, while preserving forward and
backwards compatibility.</p>
</li>
<li>
<p>A field that happens to be a <code>struct</code>. This means the data of the <code>Vec3</code>
struct will be serialized inline in the table without any need for offset.</p>
</li>
<li>
<p>Fields can be provided a default value. Default values can be configured to
not be serialized at all while still providing the default value while
deserializing. However, once set, a default value cannot be changed.</p>
</li>
<li>
<p>A <code>string</code> field which points to a serialized string external to the table.</p>
</li>
<li>
<p>A deprecated field that is no longer being used. This is used instead of
removing the field outright.</p>
</li>
<li>
<p>A <code>vector</code> field that points to a vector of bytes. Like <code>strings</code>, the
vector data is serialized elsewhere and this field just stores an offset to
the vector.</p>
</li>
<li>
<p>Vector of <code>tables</code> and <code>structs</code> are also possible.</p>
</li>
<li>
<p>A field to a <code>union</code> type.</p>
</li>
<li>
<p>The root of the flatbuffer is always a <code>table</code>. This indicates the type of
<code>table</code> the "entry" point of the flatbuffer will point to.</p>
</li>
</ol>
<h2 id="compiling-schema-to-code-flatc">Compiling Schema to Code (<code>flatc</code>)</h2>
<p>After a schema file is written, you compile it to code in the languages you wish
to work with. This compilation is done by the <a href="../flatc/">FlatBuffers Compiler</a>
(<code>flatc</code>) which is one of the binaries built in the repo.</p>
<h3 id="building-flatc">Building <code>flatc</code></h3>
<p>FlatBuffers uses <a href="https://cmake.org/"><code>cmake</code></a> to build projects files for your
environment.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="unix" name="__tabbed_1" type="radio" /><input id="windows" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="unix">Unix</label><label for="windows">Windows</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>cmake<span class="w"> </span>-G<span class="w"> </span><span class="s2">&quot;Unix Makefiles&quot;</span>
make<span class="w"> </span>flatc
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>cmake<span class="w"> </span>-G<span class="w"> </span><span class="s2">&quot;Visual Studio 17 2022&quot;</span>
msbuild.exe<span class="w"> </span>FlatBuffers.sln
</code></pre></div>
</div>
</div>
</div>
<p>See the documentation on <a href="../building/">building</a> for more details and other
environments. Some languages also include a prebuilt <code>flatc</code> via their package
manager.</p>
<h3 id="compiling-schema">Compiling Schema</h3>
<p>To compile the schema, invoke <code>flatc</code> with the schema file and the language
flags you wish to generate code for. This compilation will generate files that
you include in your application code. These files provide convenient APIs for
serializing and deserializing the flatbuffer binary data.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="2:15"><input checked="checked" id="c" name="__tabbed_2" type="radio" /><input id="c_1" name="__tabbed_2" type="radio" /><input id="c_2" name="__tabbed_2" type="radio" /><input id="dart" name="__tabbed_2" type="radio" /><input id="go" name="__tabbed_2" type="radio" /><input id="java" name="__tabbed_2" type="radio" /><input id="javascript" name="__tabbed_2" type="radio" /><input id="kotlin" name="__tabbed_2" type="radio" /><input id="lobster" name="__tabbed_2" type="radio" /><input id="lua" name="__tabbed_2" type="radio" /><input id="php" name="__tabbed_2" type="radio" /><input id="python" name="__tabbed_2" type="radio" /><input id="rust" name="__tabbed_2" type="radio" /><input id="swift" name="__tabbed_2" type="radio" /><input id="typescript" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="c">C++</label><label for="c_1">C</label><label for="c_2">C#</label><label for="dart">Dart</label><label for="go">Go</label><label for="java">Java</label><label for="javascript">JavaScript</label><label for="kotlin">Kotlin</label><label for="lobster">Lobster</label><label for="lua">Lua</label><label for="php">PHP</label><label for="python">Python</label><label for="rust">Rust</label><label for="swift">Swift</label><label for="typescript">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--cpp<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you're working in C, you need to use the separate project
<a href="https://github.com/dvidelabs/flatcc">FlatCC</a> which contains a schema
compiler and runtime library in C for C. See
<a href="https://github.com/dvidelabs/flatcc#building">flatcc build instructions</a>.</p>
<p>Please be aware of the difference between <code>flatc</code> and <code>flatcc</code> tools.</p>
</div>
<div class="highlight"><pre><span></span><code><span class="nb">cd</span><span class="w"> </span>flatcc
mkdir<span class="w"> </span>-p<span class="w"> </span>build/tmp/samples/monster
bin/flatcc<span class="w"> </span>-a<span class="w"> </span>-o<span class="w"> </span>build/tmp/samples/monster<span class="w"> </span>samples/monster/monster.fbs
<span class="c1"># or just</span>
flatcc/samples/monster/build.sh
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--csharp<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--dart<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--go<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--java<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--js<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--kotlin<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--lobster<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--lua<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--php<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--python<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--rust<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--swift<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>flatc<span class="w"> </span>--ts<span class="w"> </span>monster.fbs
</code></pre></div>
</div>
</div>
</div>
<p>You can deserialize flatbuffers in languages that differ from the language that
serialized it. For purpose of this tutorial, we assume one language is used for
both serializing and deserializing.</p>
<h2 id="application-integration">Application Integration</h2>
<p>The generated files are then included in your project to be built into your
application. This is heavily dependent on your build system and language, but
generally involves two things:</p>
<ol>
<li>Importing the generated code.</li>
<li>Importing the "runtime" libraries.</li>
</ol>
<div class="tabbed-set tabbed-alternate" data-tabs="3:15"><input checked="checked" id="c_3" name="__tabbed_3" type="radio" /><input id="c_4" name="__tabbed_3" type="radio" /><input id="c_5" name="__tabbed_3" type="radio" /><input id="dart_1" name="__tabbed_3" type="radio" /><input id="go_1" name="__tabbed_3" type="radio" /><input id="java_1" name="__tabbed_3" type="radio" /><input id="javascript_1" name="__tabbed_3" type="radio" /><input id="kotlin_1" name="__tabbed_3" type="radio" /><input id="lobster_1" name="__tabbed_3" type="radio" /><input id="lua_1" name="__tabbed_3" type="radio" /><input id="php_1" name="__tabbed_3" type="radio" /><input id="python_1" name="__tabbed_3" type="radio" /><input id="rust_1" name="__tabbed_3" type="radio" /><input id="swift_1" name="__tabbed_3" type="radio" /><input id="typescript_1" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="c_3">C++</label><label for="c_4">C</label><label for="c_5">C#</label><label for="dart_1">Dart</label><label for="go_1">Go</label><label for="java_1">Java</label><label for="javascript_1">JavaScript</label><label for="kotlin_1">Kotlin</label><label for="lobster_1">Lobster</label><label for="lua_1">Lua</label><label for="php_1">PHP</label><label for="python_1">Python</label><label for="rust_1">Rust</label><label for="swift_1">Swift</label><label for="typescript_1">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;monster_generated.h&quot;</span><span class="c1"> // This was generated by `flatc`</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;flatbuffers.h&quot;</span><span class="c1"> // The runtime library for C++</span>
<span class="c1">// Simplifies naming in the following examples.</span>
<span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">MyGame</span><span class="o">::</span><span class="nn">Sample</span><span class="p">;</span><span class="w"> </span><span class="c1">// Specified in the schema.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;monster_builder.h&quot;</span><span class="c1"> // Generated by `flatcc`.</span>
<span class="c1">// Convenient namespace macro to manage long namespace prefix.</span>
<span class="cp">#undef ns</span>
<span class="c1">// Specified in the schema.</span>
<span class="cp">#define ns(x) FLATBUFFERS_WRAP_NAMESPACE(MyGame_Sample, x)</span>
<span class="c1">// A helper to simplify creating vectors from C-arrays.</span>
<span class="cp">#define c_vec_len(V) (sizeof(V)/sizeof((V)[0]))</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">using</span><span class="w"> </span><span class="nn">Google.FlatBuffers</span><span class="p">;</span><span class="w"> </span><span class="c1">// The runtime library for C#</span>
<span class="k">using</span><span class="w"> </span><span class="nn">MyGame.Sample</span><span class="p">;</span><span class="w"> </span><span class="c1">// The generated files from `flatc`</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="s1">&#39;package:flat_buffers/flat_buffers.dart&#39;</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">fb</span><span class="p">;</span>
<span class="c1">// Generated by `flatc`.</span>
<span class="k">import</span><span class="w"> </span><span class="s1">&#39;monster_my_game.sample_generated.dart&#39;</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">myGame</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="nx">flatbuffers</span><span class="w"> </span><span class="s">&quot;github.com/google/flatbuffers/go&quot;</span>
<span class="w"> </span><span class="nx">sample</span><span class="w"> </span><span class="s">&quot;MyGame/Sample&quot;</span>
<span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">MyGame.Sample.*</span><span class="p">;</span><span class="w"> </span><span class="c1">//The `flatc` generated files. (Monster, Vec3, etc.)</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.google.flatbuffers.FlatBufferBuilder</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// The following code is an example - use your desired module flavor by</span>
<span class="c1">// transpiling from TS.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">flatbuffers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;/js/flatbuffers&#39;</span><span class="p">).</span><span class="nx">flatbuffers</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">MyGame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./monster_generated&#39;</span><span class="p">).</span><span class="nx">MyGame</span><span class="p">;</span><span class="w"> </span><span class="c1">// Generated by `flatc`.</span>
<span class="c1">//------------------------------------------------------------------------//</span>
<span class="c1">// The following code is for browser-based HTML/JavaScript. Use the above</span>
<span class="c1">// code for JavaScript module loaders (e.g. Node.js).</span>
<span class="o">&lt;</span><span class="nx">script</span><span class="w"> </span><span class="nx">src</span><span class="o">=</span><span class="s2">&quot;../js/flatbuffers.js&quot;</span><span class="o">&gt;&lt;</span><span class="err">/script&gt;</span>
<span class="o">&lt;</span><span class="nx">script</span><span class="w"> </span><span class="nx">src</span><span class="o">=</span><span class="s2">&quot;monster_generated.js&quot;</span><span class="o">&gt;&lt;</span><span class="sr">/script&gt; /</span><span class="o">/</span><span class="w"> </span><span class="nx">Generated</span><span class="w"> </span><span class="nx">by</span><span class="w"> </span><span class="sb">`flatc`</span><span class="p">.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">MyGame.Sample.*</span><span class="w"> </span><span class="c1">//The `flatc` generated files. (Monster, Vec3, etc.)</span>
<span class="k">import</span><span class="w"> </span><span class="nn">com.google.flatbuffers.FlatBufferBuilder</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>import from &quot;../lobster/&quot; // Where to find flatbuffers.lobster
import monster_generated
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- require the flatbuffers module</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">flatbuffers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">require</span><span class="p">(</span><span class="s2">&quot;flatbuffers&quot;</span><span class="p">)</span>
<span class="c1">-- require the generated files from `flatc`.</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">require</span><span class="p">(</span><span class="s2">&quot;MyGame.Sample.Color&quot;</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">equipment</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">require</span><span class="p">(</span><span class="s2">&quot;MyGame.Sample.Equipment&quot;</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">require</span><span class="p">(</span><span class="s2">&quot;MyGame.Sample.Monster&quot;</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">vec3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">require</span><span class="p">(</span><span class="s2">&quot;MyGame.Sample.Vec3&quot;</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">require</span><span class="p">(</span><span class="s2">&quot;MyGame.Sample.Weapon&quot;</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// It is recommended that your use PSR autoload when using FlatBuffers in</span>
<span class="c1">// PHP. Here is an example from `SampleBinary.php`:</span>
<span class="k">function</span> <span class="nf">__autoload</span><span class="p">(</span><span class="nv">$class_name</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// The last segment of the class name matches the file name.</span>
<span class="nv">$class</span> <span class="o">=</span> <span class="nb">substr</span><span class="p">(</span><span class="nv">$class_name</span><span class="p">,</span> <span class="nb">strrpos</span><span class="p">(</span><span class="nv">$class_name</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
<span class="c1">// `flatbuffers` root.</span>
<span class="nv">$root_dir</span> <span class="o">=</span> <span class="nb">join</span><span class="p">(</span><span class="nx">DIRECTORY_SEPARATOR</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="nb">dirname</span><span class="p">(</span><span class="nb">dirname</span><span class="p">(</span><span class="no">__FILE__</span><span class="p">))));</span>
<span class="c1">// Contains the `*.php` files for the FlatBuffers library and the `flatc`</span>
<span class="c1">// generated files.</span>
<span class="nv">$paths</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="nb">join</span><span class="p">(</span><span class="nx">DIRECTORY_SEPARATOR</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="nv">$root_dir</span><span class="p">,</span> <span class="s2">&quot;php&quot;</span><span class="p">)),</span>
<span class="nb">join</span><span class="p">(</span><span class="nx">DIRECTORY_SEPARATOR</span><span class="p">,</span>
<span class="k">array</span><span class="p">(</span><span class="nv">$root_dir</span><span class="p">,</span> <span class="s2">&quot;samples&quot;</span><span class="p">,</span> <span class="s2">&quot;MyGame&quot;</span><span class="p">,</span> <span class="s2">&quot;Sample&quot;</span><span class="p">)));</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$paths</span> <span class="k">as</span> <span class="nv">$path</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$file</span> <span class="o">=</span> <span class="nb">join</span><span class="p">(</span><span class="nx">DIRECTORY_SEPARATOR</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="nv">$path</span><span class="p">,</span> <span class="nv">$class</span> <span class="o">.</span> <span class="s2">&quot;.php&quot;</span><span class="p">));</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">file_exists</span><span class="p">(</span><span class="nv">$file</span><span class="p">))</span> <span class="p">{</span>
<span class="k">require</span><span class="p">(</span><span class="nv">$file</span><span class="p">);</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">flatbuffers</span>
<span class="c1"># Generated by `flatc`.</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">MyGame.Sample.Color</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">MyGame.Sample.Equipment</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">MyGame.Sample.Monster</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">MyGame.Sample.Vec3</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">MyGame.Sample.Weapon</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// import the flatbuffers runtime library</span>
<span class="k">extern</span><span class="w"> </span><span class="k">crate</span><span class="w"> </span><span class="n">flatbuffers</span><span class="p">;</span>
<span class="c1">// import the generated code</span>
<span class="cp">#[allow(dead_code, unused_imports)]</span>
<span class="cp">#[path = </span><span class="s">&quot;./monster_generated.rs&quot;</span><span class="cp">]</span>
<span class="k">mod</span><span class="w"> </span><span class="nn">monster_generated</span><span class="p">;</span>
<span class="k">pub</span><span class="w"> </span><span class="k">use</span><span class="w"> </span><span class="n">monster_generated</span><span class="p">::</span><span class="n">my_game</span><span class="p">::</span><span class="n">sample</span><span class="p">::{</span><span class="n">root_as_monster</span><span class="p">,</span>
<span class="w"> </span><span class="n">Color</span><span class="p">,</span><span class="w"> </span><span class="n">Equipment</span><span class="p">,</span>
<span class="w"> </span><span class="n">Monster</span><span class="p">,</span><span class="w"> </span><span class="n">MonsterArgs</span><span class="p">,</span>
<span class="w"> </span><span class="n">Vec3</span><span class="p">,</span>
<span class="w"> </span><span class="n">Weapon</span><span class="p">,</span><span class="w"> </span><span class="n">WeaponArgs</span><span class="p">};</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="cm">/**</span>
<span class="cm">// make sure that monster_generated.swift is included in your project</span>
<span class="cm">*/</span>
<span class="kd">import</span><span class="w"> </span><span class="nc">Flatbuffers</span>
<span class="c1">// typealiases for convenience</span>
<span class="kd">typealias</span><span class="w"> </span><span class="n">Monster</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">MyGame1_Sample_Monster</span>
<span class="kd">typealias</span><span class="w"> </span><span class="n">Weapon</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">MyGame1_Sample_Weapon</span>
<span class="kd">typealias</span><span class="w"> </span><span class="n">Color</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">MyGame1_Sample_Color</span>
<span class="kd">typealias</span><span class="w"> </span><span class="n">Vec3</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">MyGame1_Sample_Vec3</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// note: import flatbuffers with your desired import method</span>
<span class="k">import</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">MyGame</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="kr">from</span><span class="w"> </span><span class="s1">&#39;./monster_generated&#39;</span><span class="p">;</span>
</code></pre></div>
</div>
</div>
</div>
<p>For some languages the runtime libraries are just code files you compile into
your application. While other languages provide packaged libraries via their
package managers.</p>
<p>The generated files include APIs for both serializing and deserializing
FlatBuffers. So these steps are identical for both the consumer and producer.</p>
<h2 id="serialization">Serialization</h2>
<p>Once all the files are included into your application, it's time to start
serializing some data!</p>
<p>With FlatBuffers, serialization can be a bit verbose, since each piece of data
must be serialized separately and in a particular order (depth-first, pre-order
traversal). The verbosity allows efficient serialization without heap
allocations, at the cost of more complex serialization APIs.</p>
<p>For example, any reference type (e.g. <code>table</code>, <code>vector</code>, <code>string</code>) must be
serialized before it can be referred to by other structures. So its typical to
serialize the data from leaf to root node, as will be shown below.</p>
<h3 id="flatbufferbuilder">FlatBufferBuilder</h3>
<p>Most languages use a Builder object for managing the binary array that the data
is serialized into. It provides an API for serializing data, as well as keeps
track of some internal state. The generated code wraps methods on the Builder
object to provide an API tailored to the schema.</p>
<p>First instantiate a Builder (or reuse an existing one) and specify some memory
for it. The builder will automatically resize the backing buffer when necessary.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="4:15"><input checked="checked" id="c_6" name="__tabbed_4" type="radio" /><input id="c_7" name="__tabbed_4" type="radio" /><input id="c_8" name="__tabbed_4" type="radio" /><input id="dart_2" name="__tabbed_4" type="radio" /><input id="go_2" name="__tabbed_4" type="radio" /><input id="java_2" name="__tabbed_4" type="radio" /><input id="javascript_2" name="__tabbed_4" type="radio" /><input id="kotlin_2" name="__tabbed_4" type="radio" /><input id="lobster_2" name="__tabbed_4" type="radio" /><input id="lua_2" name="__tabbed_4" type="radio" /><input id="php_2" name="__tabbed_4" type="radio" /><input id="python_2" name="__tabbed_4" type="radio" /><input id="rust_2" name="__tabbed_4" type="radio" /><input id="swift_2" name="__tabbed_4" type="radio" /><input id="typescript_2" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="c_6">C++</label><label for="c_7">C</label><label for="c_8">C#</label><label for="dart_2">Dart</label><label for="go_2">Go</label><label for="java_2">Java</label><label for="javascript_2">JavaScript</label><label for="kotlin_2">Kotlin</label><label for="lobster_2">Lobster</label><label for="lua_2">Lua</label><label for="php_2">PHP</label><label for="python_2">Python</label><label for="rust_2">Rust</label><label for="swift_2">Swift</label><label for="typescript_2">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">FlatBufferBuilder</span><span class="w"> </span><span class="nf">builder</span><span class="p">(</span><span class="mi">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">flatcc_builder_t</span><span class="w"> </span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">B</span><span class="p">;</span>
<span class="n">B</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">builder</span><span class="p">;</span>
<span class="c1">// Initialize the builder object.</span>
<span class="n">flatcc_builder_init</span><span class="p">(</span><span class="n">B</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="n">FlatBufferBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FlatBufferBuilder</span><span class="p">(</span><span class="mi">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="kd">var</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">fb</span><span class="p">.</span><span class="n">Builder</span><span class="p">(</span><span class="nl">initialSize:</span><span class="w"> </span><span class="m">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="nx">builder</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">flatbuffers</span><span class="p">.</span><span class="nx">NewBuilder</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="n">FlatBufferBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FlatBufferBuilder</span><span class="p">(</span><span class="mi">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">flatbuffers</span><span class="p">.</span><span class="nx">Builder</span><span class="p">(</span><span class="mf">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FlatBufferBuilder</span><span class="p">(</span><span class="m">1024</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>// Construct a Builder with 1024 byte backing array.
let builder = flatbuffers_builder {}
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- Construct a Builder with 1024 byte backing array.</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">flatbuffers</span><span class="p">.</span><span class="nf">Builder</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="nv">$builder</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Google\FlatBuffers\FlatbufferBuilder</span><span class="p">(</span><span class="mi">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># Construct a Builder with 1024 byte backing array.</span>
<span class="n">builder</span> <span class="o">=</span> <span class="n">flatbuffers</span><span class="o">.</span><span class="n">Builder</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatbuffers</span><span class="p">::</span><span class="n">FlatBufferBuilder</span><span class="p">::</span><span class="n">with_capacity</span><span class="p">(</span><span class="mi">1024</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">builder</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">FlatBufferBuilder</span><span class="p">(</span><span class="n">initialSize</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Construct a Builder with 1024 byte backing array.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">flatbuffers</span><span class="p">.</span><span class="nx">Builder</span><span class="p">(</span><span class="mf">1024</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>Once a Builder is available, data can be serialized to it via the Builder APIs
and the generated code.</p>
<h3 id="serializing-data">Serializing Data</h3>
<p>In this tutorial, we are building <code>Monsters</code> and <code>Weapons</code> for a computer game.
A <code>Weapon</code> is represented by a flatbuffer <code>table</code> with some fields. One field is
the <code>name</code> field, which is type <code>string</code> and the other <code>damage</code> field is a
numerical scalar.</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">monster.fbs</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="n">table</span><span class="w"> </span><span class="n">Weapon</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nl">name</span><span class="p">:</span><span class="n">string</span><span class="p">;</span>
<span class="w"> </span><span class="nl">damage</span><span class="p">:</span><span class="kt">short</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></td></tr></table></div>
<h4 id="strings">Strings</h4>
<p>Since <code>string</code> is a reference type, we first need to serialize it before
assigning it to the <code>name</code> field of the <code>Weapon</code> table. This is done through the
Builder <code>CreateString</code> method.</p>
<p>Let's serialize two weapon strings.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="5:15"><input checked="checked" id="c_9" name="__tabbed_5" type="radio" /><input id="c_10" name="__tabbed_5" type="radio" /><input id="c_11" name="__tabbed_5" type="radio" /><input id="dart_3" name="__tabbed_5" type="radio" /><input id="go_3" name="__tabbed_5" type="radio" /><input id="java_3" name="__tabbed_5" type="radio" /><input id="javascript_3" name="__tabbed_5" type="radio" /><input id="kotlin_3" name="__tabbed_5" type="radio" /><input id="lobster_3" name="__tabbed_5" type="radio" /><input id="lua_3" name="__tabbed_5" type="radio" /><input id="php_3" name="__tabbed_5" type="radio" /><input id="python_3" name="__tabbed_5" type="radio" /><input id="rust_3" name="__tabbed_5" type="radio" /><input id="swift_3" name="__tabbed_5" type="radio" /><input id="typescript_3" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="c_9">C++</label><label for="c_10">C</label><label for="c_11">C#</label><label for="dart_3">Dart</label><label for="go_3">Go</label><label for="java_3">Java</label><label for="javascript_3">JavaScript</label><label for="kotlin_3">Kotlin</label><label for="lobster_3">Lobster</label><label for="lua_3">Lua</label><label for="php_3">PHP</label><label for="python_3">Python</label><label for="rust_3">Rust</label><label for="swift_3">Swift</label><label for="typescript_3">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">weapon_one_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s">&quot;Sword&quot;</span><span class="p">);</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">weapon_two_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
<p><code>flatbuffers::Offset&lt;&gt;</code> is a just a "typed" integer tied to a particular
type. It helps make the numerical offset more strongly typed.</p>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">flatbuffers_string_ref_t</span><span class="w"> </span><span class="n">weapon_one_name</span>
<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatbuffers_string_create_str</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Sword&quot;</span><span class="p">);</span>
<span class="n">flatbuffers_string_ref_t</span><span class="w"> </span><span class="n">weapon_two_name</span>
<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatbuffers_string_create_str</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">Offset</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">weaponOneName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s">&quot;Sword&quot;</span><span class="p">);</span>
<span class="n">Offset</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">weaponTwoName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">weaponOneName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">writeString</span><span class="p">(</span><span class="s2">&quot;Sword&quot;</span><span class="p">);</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">weaponTwoName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">writeString</span><span class="p">(</span><span class="s2">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nx">weaponOne</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">CreateString</span><span class="p">(</span><span class="s">&quot;Sword&quot;</span><span class="p">)</span>
<span class="nx">weaponTwo</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">CreateString</span><span class="p">(</span><span class="s">&quot;Axe&quot;</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">weaponOneName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">createString</span><span class="p">(</span><span class="s">&quot;Sword&quot;</span><span class="p">)</span>
<span class="kt">int</span><span class="w"> </span><span class="n">weaponTwoName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">createString</span><span class="p">(</span><span class="s">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">weaponOne</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">createString</span><span class="p">(</span><span class="s1">&#39;Sword&#39;</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">weaponTwo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">createString</span><span class="p">(</span><span class="s1">&#39;Axe&#39;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">weaponOneName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">createString</span><span class="p">(</span><span class="s">&quot;Sword&quot;</span><span class="p">)</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">weaponTwoName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">createString</span><span class="p">(</span><span class="s">&quot;Axe&quot;</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let weapon_one = builder.CreateString(&quot;Sword&quot;)
let weapon_two = builder.CreateString(&quot;Axe&quot;)
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">weaponOne</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">CreateString</span><span class="p">(</span><span class="s2">&quot;Sword&quot;</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">weaponTwo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">CreateString</span><span class="p">(</span><span class="s2">&quot;Axe&quot;</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$weapon_one_name</span> <span class="o">=</span> <span class="nv">$builder</span><span class="o">-&gt;</span><span class="na">createString</span><span class="p">(</span><span class="s2">&quot;Sword&quot;</span><span class="p">)</span>
<span class="nv">$weapon_two_name</span> <span class="o">=</span> <span class="nv">$builder</span><span class="o">-&gt;</span><span class="na">createString</span><span class="p">(</span><span class="s2">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">weapon_one</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s1">&#39;Sword&#39;</span><span class="p">)</span>
<span class="n">weapon_two</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s1">&#39;Axe&#39;</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="n">weapon_one_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create_string</span><span class="p">(</span><span class="s">&quot;Sword&quot;</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="n">weapon_two_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create_string</span><span class="p">(</span><span class="s">&quot;Axe&quot;</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nv">weapon1Name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="n">string</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Sword&quot;</span><span class="p">)</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weapon2Name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="n">string</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Axe&quot;</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">weaponOne</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">createString</span><span class="p">(</span><span class="s1">&#39;Sword&#39;</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">weaponTwo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">createString</span><span class="p">(</span><span class="s1">&#39;Axe&#39;</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>This performs the actual serialization (the string data is copied into the
backing array) and returns an offset. Think of the offset as a handle to that
reference. It's just a "typed" numerical offset to where that data resides in
the buffer.</p>
<h4 id="tables">Tables</h4>
<p>Now that we have some names serialized, we can serialize the <code>Weapon</code> tables.
Here we will use one of the generated helper functions that was emitted by
<code>flatc</code>. The <code>CreateWeapon</code> function takes in the Builder object, as well as the
offset to the weapon's name and a numerical value for the damage field.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="6:15"><input checked="checked" id="c_12" name="__tabbed_6" type="radio" /><input id="c_13" name="__tabbed_6" type="radio" /><input id="c_14" name="__tabbed_6" type="radio" /><input id="dart_4" name="__tabbed_6" type="radio" /><input id="go_4" name="__tabbed_6" type="radio" /><input id="java_4" name="__tabbed_6" type="radio" /><input id="javascript_4" name="__tabbed_6" type="radio" /><input id="kotlin_4" name="__tabbed_6" type="radio" /><input id="lobster_4" name="__tabbed_6" type="radio" /><input id="lua_4" name="__tabbed_6" type="radio" /><input id="php_4" name="__tabbed_6" type="radio" /><input id="python_4" name="__tabbed_6" type="radio" /><input id="rust_4" name="__tabbed_6" type="radio" /><input id="swift_4" name="__tabbed_6" type="radio" /><input id="typescript_4" name="__tabbed_6" type="radio" /><div class="tabbed-labels"><label for="c_12">C++</label><label for="c_13">C</label><label for="c_14">C#</label><label for="dart_4">Dart</label><label for="go_4">Go</label><label for="java_4">Java</label><label for="javascript_4">JavaScript</label><label for="kotlin_4">Kotlin</label><label for="lobster_4">Lobster</label><label for="lua_4">Lua</label><label for="php_4">PHP</label><label for="python_4">Python</label><label for="rust_4">Rust</label><label for="swift_4">Swift</label><label for="typescript_4">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">short</span><span class="w"> </span><span class="n">weapon_one_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="kt">short</span><span class="w"> </span><span class="n">weapon_two_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="c1">// Use the `CreateWeapon()` shortcut to create Weapons with all the fields</span>
<span class="c1">// set.</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="w"> </span><span class="n">sword</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">CreateWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_one_name</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_one_damage</span><span class="p">);</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="w"> </span><span class="n">axe</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">CreateWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_two_name</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_two_damage</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">uint16_t</span><span class="w"> </span><span class="n">weapon_one_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="kt">uint16_t</span><span class="w"> </span><span class="n">weapon_two_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Weapon_ref_t</span><span class="p">)</span><span class="w"> </span><span class="n">sword</span>
<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_create</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_one_name</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_one_damage</span><span class="p">));</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Weapon_ref_t</span><span class="p">)</span><span class="w"> </span><span class="n">axe</span>
<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_create</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_two_name</span><span class="p">,</span><span class="w"> </span><span class="n">weapon_two_damage</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">short</span><span class="w"> </span><span class="n">weaponOneDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="kt">short</span><span class="w"> </span><span class="n">weaponTwoDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="c1">// Use the `CreateWeapon()` helper function to create the weapons, since we</span>
<span class="c1">// set every field.</span>
<span class="n">Offset</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="w"> </span><span class="n">sword</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="n">CreateWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaponOneName</span><span class="p">,</span><span class="w"> </span><span class="n">weaponOneDamage</span><span class="p">);</span>
<span class="n">Offset</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="w"> </span><span class="n">axe</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="n">CreateWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaponTwoName</span><span class="p">,</span><span class="w"> </span><span class="n">weaponTwoDamage</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">weaponOneDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">;</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">weaponTwoDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">5</span><span class="p">;</span>
<span class="kd">final</span><span class="w"> </span><span class="n">swordBuilder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponBuilder</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">begin</span><span class="p">()</span>
<span class="w"> </span><span class="p">..</span><span class="n">addNameOffset</span><span class="p">(</span><span class="n">weaponOneName</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addDamage</span><span class="p">(</span><span class="n">weaponOneDamage</span><span class="p">);</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">swordBuilder</span><span class="p">.</span><span class="n">finish</span><span class="p">();</span>
<span class="kd">final</span><span class="w"> </span><span class="n">axeBuilder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponBuilder</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">begin</span><span class="p">()</span>
<span class="w"> </span><span class="p">..</span><span class="n">addNameOffset</span><span class="p">(</span><span class="n">weaponTwoName</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addDamage</span><span class="p">(</span><span class="n">weaponTwoDamage</span><span class="p">);</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">axeBuilder</span><span class="p">.</span><span class="n">finish</span><span class="p">();</span>
</code></pre></div>
<p>Note, as an alternative, the previous steps can be combined using the
generative Builder classes.</p>
<div class="highlight"><pre><span></span><code><span class="kd">final</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponBuilder</span><span class="w"> </span><span class="n">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponObjectBuilder</span><span class="p">(</span>
<span class="w"> </span><span class="nl">name:</span><span class="w"> </span><span class="s2">&quot;Sword&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nl">damage:</span><span class="w"> </span><span class="m">3</span><span class="p">,</span>
<span class="p">);</span>
<span class="kd">final</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponBuilder</span><span class="w"> </span><span class="n">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponObjectBuilder</span><span class="p">(</span>
<span class="w"> </span><span class="nl">name:</span><span class="w"> </span><span class="s2">&quot;Axe&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nl">damage:</span><span class="w"> </span><span class="m">5</span><span class="p">,</span>
<span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create the first `Weapon` (&quot;Sword&quot;).</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponStart</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponAddName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaponOne</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponAddDamage</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span>
<span class="nx">sword</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponEnd</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span>
<span class="c1">// Create the second `Weapon` (&quot;Axe&quot;).</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponStart</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponAddName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaponTwo</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponAddDamage</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span>
<span class="nx">axe</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">WeaponEnd</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">short</span><span class="w"> </span><span class="n">weaponOneDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="kt">short</span><span class="w"> </span><span class="n">weaponTwoDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="c1">// Use the `createWeapon()` helper function to create the weapons, since we</span>
<span class="c1">// set every field.</span>
<span class="kt">int</span><span class="w"> </span><span class="n">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="na">createWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaponOneName</span><span class="p">,</span><span class="w"> </span><span class="n">weaponOneDamage</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="n">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="na">createWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaponTwoName</span><span class="p">,</span><span class="w"> </span><span class="n">weaponTwoDamage</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create the first `Weapon` (&#39;Sword&#39;).</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">startWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaponOne</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addDamage</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">endWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="c1">// Create the second `Weapon` (&#39;Axe&#39;).</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">startWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaponTwo</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addDamage</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">endWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">weaponOneDamage</span><span class="p">:</span><span class="w"> </span><span class="kt">Short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">;</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">weaponTwoDamage</span><span class="p">:</span><span class="w"> </span><span class="kt">Short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">5</span><span class="p">;</span>
<span class="c1">// Use the `createWeapon()` helper function to create the weapons, since we</span>
<span class="c1">// set every field.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="na">createWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaponOneName</span><span class="p">,</span><span class="w"> </span><span class="n">weaponOneDamage</span><span class="p">)</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="na">createWeapon</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaponTwoName</span><span class="p">,</span><span class="w"> </span><span class="n">weaponTwoDamage</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let sword = MyGame_Sample_WeaponBuilder { b }
.start()
.add_name(weapon_one)
.add_damage(3)
.end()
let axe = MyGame_Sample_WeaponBuilder { b }
.start()
.add_name(weapon_two)
.add_damage(5)
.end()
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- Create the first &#39;Weapon&#39;</span>
<span class="nv">weapon</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span><span class="nv">builder</span><span class="p">)</span>
<span class="nv">weapon</span><span class="p">.</span><span class="nf">AddName</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">weaponOne</span><span class="p">)</span>
<span class="nv">weapon</span><span class="p">.</span><span class="nf">AddDamage</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">weapon</span><span class="p">.</span><span class="nf">End</span><span class="p">(</span><span class="nv">builder</span><span class="p">)</span>
<span class="c1">-- Create the second &#39;Weapon&#39;</span>
<span class="nv">weapon</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span><span class="nv">builder</span><span class="p">)</span>
<span class="nv">weapon</span><span class="p">.</span><span class="nf">AddName</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">weaponTwo</span><span class="p">)</span>
<span class="nv">weapon</span><span class="p">.</span><span class="nf">AddDamage</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">weapon</span><span class="p">.</span><span class="nf">End</span><span class="p">(</span><span class="nv">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$sword</span> <span class="o">=</span> <span class="nx">\MyGame\Sample\Weapon</span><span class="o">::</span><span class="na">CreateWeapon</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$weapon_one_name</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span>
<span class="nv">$axe</span> <span class="o">=</span> <span class="nx">\MyGame\Sample\Weapon</span><span class="o">::</span><span class="na">CreateWeapon</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$weapon_two_name</span><span class="p">,</span> <span class="mi">5</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># Create the first `Weapon` (&#39;Sword&#39;).</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">Start</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">AddName</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">weapon_one</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">AddDamage</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">sword</span> <span class="o">=</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">End</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="c1"># Create the second `Weapon` (&#39;Axe&#39;).</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">Start</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">AddName</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">weapon_two</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">AddDamage</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">axe</span> <span class="o">=</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">End</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Use the `Weapon::create` shortcut to create Weapons with named field</span>
<span class="c1">// arguments.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">::</span><span class="n">create</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">WeaponArgs</span><span class="p">{</span>
<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">weapon_one_name</span><span class="p">),</span>
<span class="w"> </span><span class="n">damage</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span>
<span class="p">});</span>
<span class="kd">let</span><span class="w"> </span><span class="n">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">::</span><span class="n">create</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">WeaponArgs</span><span class="p">{</span>
<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">weapon_two_name</span><span class="p">),</span>
<span class="w"> </span><span class="n">damage</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span>
<span class="p">});</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// start creating the weapon by calling startWeapon</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weapon1Start</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="n">startWeapon</span><span class="p">(&amp;</span><span class="n">builder</span><span class="p">)</span>
<span class="n">Weapon</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="n">weapon1Name</span><span class="p">,</span><span class="w"> </span><span class="p">&amp;</span><span class="n">builder</span><span class="p">)</span>
<span class="n">Weapon</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">damage</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="p">&amp;</span><span class="n">builder</span><span class="p">)</span>
<span class="c1">// end the object by passing the start point for the weapon 1</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">sword</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="n">endWeapon</span><span class="p">(&amp;</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="p">:</span><span class="w"> </span><span class="n">weapon1Start</span><span class="p">)</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weapon2Start</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="n">startWeapon</span><span class="p">(&amp;</span><span class="n">builder</span><span class="p">)</span>
<span class="n">Weapon</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="n">weapon2Name</span><span class="p">,</span><span class="w"> </span><span class="p">&amp;</span><span class="n">builder</span><span class="p">)</span>
<span class="n">Weapon</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">damage</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="p">&amp;</span><span class="n">builder</span><span class="p">)</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">axe</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="n">endWeapon</span><span class="p">(&amp;</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="p">:</span><span class="w"> </span><span class="n">weapon2Start</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create the first `Weapon` (&#39;Sword&#39;).</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">startWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaponOne</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addDamage</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">sword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">endWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="c1">// Create the second `Weapon` (&#39;Axe&#39;).</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">startWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaponTwo</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">addDamage</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">axe</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">.</span><span class="nx">endWeapon</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>The generated functions from <code>flatc</code>, like <code>CreateWeapon</code>, are just composed of
various Builder API methods. So its not required to use the generated code, but
it does make things much simpler and compact.</p>
<p>Just like the <code>CreateString</code> methods, the table serialization functions return
an offset to the location of the serialized <code>Weapon</code> table.</p>
<p>Now that we have some <code>Weapons</code> serialized, we can serialize a <code>Monster</code>.
Looking at the schema again, this table has a lot more fields of various types.
Some of these need to be serialized beforehand, for the same reason we
serialized the name string before the weapon table.</p>
<div class="admonition note inline end">
<p class="admonition-title">Note</p>
<p>There is no prescribed ordering of which table fields must be serialized
first, you could serialize in any order you want. You can also not serialize
a field to provide a <code>null</code> value, this is done by using an 0 offset value.</p>
</div>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">monster.fbs</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="n">table</span><span class="w"> </span><span class="n">Monster</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nl">pos</span><span class="p">:</span><span class="n">Vec3</span><span class="p">;</span>
<span class="w"> </span><span class="nl">mana</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span>
<span class="w"> </span><span class="nl">hp</span><span class="p">:</span><span class="kt">short</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
<span class="w"> </span><span class="nl">name</span><span class="p">:</span><span class="n">string</span><span class="p">;</span>
<span class="w"> </span><span class="nl">friendly</span><span class="p">:</span><span class="kt">bool</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="w"> </span><span class="p">(</span><span class="n">deprecated</span><span class="p">);</span>
<span class="w"> </span><span class="nl">inventory</span><span class="p">:[</span><span class="n">ubyte</span><span class="p">];</span>
<span class="w"> </span><span class="nl">color</span><span class="p">:</span><span class="n">Color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Blue</span><span class="p">;</span>
<span class="w"> </span><span class="nl">weapons</span><span class="p">:[</span><span class="n">Weapon</span><span class="p">];</span>
<span class="w"> </span><span class="nl">equipped</span><span class="p">:</span><span class="n">Equipment</span><span class="p">;</span>
<span class="w"> </span><span class="nl">path</span><span class="p">:[</span><span class="n">Vec3</span><span class="p">];</span>
<span class="p">}</span>
</code></pre></div></td></tr></table></div>
<h4 id="vectors">Vectors</h4>
<p>The <code>weapons</code> field is a <code>vector</code> of <code>Weapon</code> tables. We already have two
<code>Weapons</code> serialized, so we just need to serialize a <code>vector</code> of those offsets.
The Builder provides multiple ways to create <code>vectors</code>.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="7:15"><input checked="checked" id="c_15" name="__tabbed_7" type="radio" /><input id="c_16" name="__tabbed_7" type="radio" /><input id="c_17" name="__tabbed_7" type="radio" /><input id="dart_5" name="__tabbed_7" type="radio" /><input id="go_5" name="__tabbed_7" type="radio" /><input id="java_5" name="__tabbed_7" type="radio" /><input id="javascript_5" name="__tabbed_7" type="radio" /><input id="kotlin_5" name="__tabbed_7" type="radio" /><input id="lobster_5" name="__tabbed_7" type="radio" /><input id="lua_5" name="__tabbed_7" type="radio" /><input id="php_5" name="__tabbed_7" type="radio" /><input id="python_5" name="__tabbed_7" type="radio" /><input id="rust_5" name="__tabbed_7" type="radio" /><input id="swift_5" name="__tabbed_7" type="radio" /><input id="typescript_5" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="c_15">C++</label><label for="c_16">C</label><label for="c_17">C#</label><label for="dart_5">Dart</label><label for="go_5">Go</label><label for="java_5">Java</label><label for="javascript_5">JavaScript</label><label for="kotlin_5">Kotlin</label><label for="lobster_5">Lobster</label><label for="lua_5">Lua</label><label for="php_5">PHP</label><label for="python_5">Python</label><label for="rust_5">Rust</label><label for="swift_5">Swift</label><label for="typescript_5">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a std::vector of the offsets we had previous made.</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">weapons_vector</span><span class="p">;</span>
<span class="n">weapons_vector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">sword</span><span class="p">);</span>
<span class="n">weapons_vector</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">axe</span><span class="p">);</span>
<span class="c1">// Then serialize that std::vector into the buffer and again get an Offset</span>
<span class="c1">// to that vector. Use `auto` here since the full type is long, and it just</span>
<span class="c1">// a &quot;typed&quot; number.</span>
<span class="k">auto</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateVector</span><span class="p">(</span><span class="n">weapons_vector</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// We use the internal builder stack to implement a dynamic vector.</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_start</span><span class="p">(</span><span class="n">B</span><span class="p">));</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_push</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="n">sword</span><span class="p">));</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_push</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">));</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_ref_t</span><span class="p">)</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_end</span><span class="p">(</span><span class="n">B</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create an array of the two weapon offsets.</span>
<span class="kt">var</span><span class="w"> </span><span class="n">weaps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="n">weaps</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sword</span><span class="p">;</span>
<span class="n">weaps</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">axe</span><span class="p">;</span>
<span class="c1">// Pass the `weaps` array into the `CreateWeaponsVector()` method to create</span>
<span class="c1">// a FlatBuffer vector.</span>
<span class="kt">var</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="n">CreateWeaponsVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaps</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// If using the Builder classes, serialize the `[sword,axe]`</span>
<span class="kd">final</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">writeList</span><span class="p">([</span><span class="n">sword</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">]);</span>
<span class="c1">// If using the ObjectBuilders, just create an array from the two `Weapon`s</span>
<span class="kd">final</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">myGame</span><span class="p">.</span><span class="n">WeaponBuilder</span><span class="o">&gt;</span><span class="w"> </span><span class="n">weaps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">sword</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">];</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a FlatBuffer vector and prepend the weapons.</span>
<span class="c1">// Note: Since we prepend the data, prepend them in reverse order.</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterStartWeaponsVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="nx">builder</span><span class="p">.</span><span class="nx">PrependUOffsetT</span><span class="p">(</span><span class="nx">axe</span><span class="p">)</span>
<span class="nx">builder</span><span class="p">.</span><span class="nx">PrependUOffsetT</span><span class="p">(</span><span class="nx">sword</span><span class="p">)</span>
<span class="nx">weapons</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">EndVector</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Place the two weapons into an array, and pass it to the</span>
<span class="c1">// `createWeaponsVector()` method to create a FlatBuffer vector.</span>
<span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">weaps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="p">;</span>
<span class="n">weaps</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sword</span><span class="p">;</span>
<span class="n">weaps</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">axe</span><span class="p">;</span>
<span class="c1">// Pass the `weaps` array into the `createWeaponsVector()` method to create</span>
<span class="c1">// a FlatBuffer vector.</span>
<span class="kt">int</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">createWeaponsVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaps</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create an array from the two `Weapon`s and pass it to the</span>
<span class="c1">// `createWeaponsVector()` method to create a FlatBuffer vector.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">weaps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="nx">sword</span><span class="p">,</span><span class="w"> </span><span class="nx">axe</span><span class="p">];</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">createWeaponsVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaps</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Place the two weapons into an array, and pass it to the</span>
<span class="c1">// `createWeaponsVector()` method to create a FlatBuffer vector.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">weaps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">intArrayOf</span><span class="p">(</span><span class="n">sword</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">)</span>
<span class="c1">// Pass the `weaps` array into the `createWeaponsVector()` method to create</span>
<span class="c1">// a FlatBuffer vector.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">createWeaponsVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weaps</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let weapons = builder.MyGame_Sample_MonsterCreateWeaponsVector([sword, axe])
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- Create a FlatBuffer vector and prepend the weapons.</span>
<span class="c1">-- Note: Since we prepend the data, prepend them in reverse order.</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">StartWeaponsVector</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="nv">builder</span><span class="p">:</span><span class="nf">PrependUOffsetTRelative</span><span class="p">(</span><span class="nv">axe</span><span class="p">)</span>
<span class="nv">builder</span><span class="p">:</span><span class="nf">PrependUOffsetTRelative</span><span class="p">(</span><span class="nv">sword</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">EndVector</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create an array from the two `Weapon`s and pass it to the</span>
<span class="c1">// `CreateWeaponsVector()` method to create a FlatBuffer vector.</span>
<span class="nv">$weaps</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="nv">$sword</span><span class="p">,</span> <span class="nv">$axe</span><span class="p">);</span>
<span class="nv">$weapons</span> <span class="o">=</span> <span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">CreateWeaponsVector</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$weaps</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># Create a FlatBuffer vector and prepend the weapons.</span>
<span class="c1"># Note: Since we prepend the data, prepend them in reverse order.</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">StartWeaponsVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">builder</span><span class="o">.</span><span class="n">PrependUOffsetTRelative</span><span class="p">(</span><span class="n">axe</span><span class="p">)</span>
<span class="n">builder</span><span class="o">.</span><span class="n">PrependUOffsetTRelative</span><span class="p">(</span><span class="n">sword</span><span class="p">)</span>
<span class="n">weapons</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">EndVector</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a FlatBuffer `vector` that contains offsets to the sword and axe</span>
<span class="c1">// we created above.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create_vector</span><span class="p">(</span><span class="o">&amp;</span><span class="p">[</span><span class="n">sword</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">]);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a FlatBuffer `vector` that contains offsets to the sword and axe</span>
<span class="c1">// we created above.</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weaponsOffset</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">createVector</span><span class="p">(</span><span class="n">ofOffsets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="n">sword</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">])</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create an array from the two `Weapon`s and pass it to the</span>
<span class="c1">// `createWeaponsVector()` method to create a FlatBuffer vector.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">weaps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="nx">sword</span><span class="p">,</span><span class="w"> </span><span class="nx">axe</span><span class="p">];</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">createWeaponsVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weaps</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>While we are at it, let us serialize the other two vector fields: the
<code>inventory</code> field is just a vector of scalars, and the <code>path</code> field is a vector
of structs (which are scalar data as well). So these vectors can be serialized a
bit more directly.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="8:15"><input checked="checked" id="c_18" name="__tabbed_8" type="radio" /><input id="c_19" name="__tabbed_8" type="radio" /><input id="c_20" name="__tabbed_8" type="radio" /><input id="dart_6" name="__tabbed_8" type="radio" /><input id="go_6" name="__tabbed_8" type="radio" /><input id="java_6" name="__tabbed_8" type="radio" /><input id="javascript_6" name="__tabbed_8" type="radio" /><input id="kotlin_6" name="__tabbed_8" type="radio" /><input id="lobster_6" name="__tabbed_8" type="radio" /><input id="lua_6" name="__tabbed_8" type="radio" /><input id="php_6" name="__tabbed_8" type="radio" /><input id="python_6" name="__tabbed_8" type="radio" /><input id="rust_6" name="__tabbed_8" type="radio" /><input id="swift_6" name="__tabbed_8" type="radio" /><input id="typescript_6" name="__tabbed_8" type="radio" /><div class="tabbed-labels"><label for="c_18">C++</label><label for="c_19">C</label><label for="c_20">C#</label><label for="dart_6">Dart</label><label for="go_6">Go</label><label for="java_6">Java</label><label for="javascript_6">JavaScript</label><label for="kotlin_6">Kotlin</label><label for="lobster_6">Lobster</label><label for="lua_6">Lua</label><label for="php_6">PHP</label><label for="python_6">Python</label><label for="rust_6">Rust</label><label for="swift_6">Swift</label><label for="typescript_6">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kt">unsigned</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">treasure</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">};</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">flatbuffers</span><span class="o">::</span><span class="n">Vector</span><span class="o">&lt;</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">char</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">inventory</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateVector</span><span class="p">(</span><span class="n">treasure</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span>
<span class="c1">// Construct an array of two `Vec3` structs.</span>
<span class="n">Vec3</span><span class="w"> </span><span class="n">points</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">Vec3</span><span class="p">(</span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="p">),</span><span class="w"> </span><span class="n">Vec3</span><span class="p">(</span><span class="mf">4.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0f</span><span class="p">)</span><span class="w"> </span><span class="p">};</span>
<span class="c1">// Serialize it as a vector of structs.</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">flatbuffers</span><span class="o">::</span><span class="n">Vector</span><span class="o">&lt;</span><span class="n">Vec3</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateVectorOfStructs</span><span class="p">(</span><span class="n">points</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kt">uint8_t</span><span class="w"> </span><span class="n">treasure</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">};</span>
<span class="n">flatbuffers_uint8_vec_ref_t</span><span class="w"> </span><span class="n">inventory</span><span class="p">;</span>
<span class="c1">// `c_vec_len` is the convenience macro we defined earlier.</span>
<span class="n">inventory</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatbuffers_uint8_vec_create</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="n">treasure</span><span class="p">,</span><span class="w"> </span><span class="n">c_vec_len</span><span class="p">(</span><span class="n">treasure</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="c1">// Note: Since we prepend the bytes, this loop iterates in reverse order.</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">StartInventoryVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">--</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">AddByte</span><span class="p">((</span><span class="kt">byte</span><span class="p">)</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">Offset</span><span class="o">&lt;</span><span class="n">Vector</span><span class="o">&lt;</span><span class="kt">byte</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">inventory</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">EndVector</span><span class="p">();</span>
<span class="w"> </span><span class="c1">// Start building a path vector of length 2.</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">StartPathVector</span><span class="p">(</span><span class="n">fbb</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="c1">// Serialize the individual Vec3 structs</span>
<span class="n">Vec3</span><span class="p">.</span><span class="n">CreateVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="p">);</span>
<span class="n">Vec3</span><span class="p">.</span><span class="n">CreateVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">4.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0f</span><span class="p">);</span>
<span class="c1">// End the vector to get the offset</span>
<span class="n">Offset</span><span class="o">&lt;</span><span class="n">Vector</span><span class="o">&lt;</span><span class="n">Vec3</span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fbb</span><span class="p">.</span><span class="n">EndVector</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a list representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kd">final</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">treasure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="m">4</span><span class="p">,</span><span class="w"> </span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">6</span><span class="p">,</span><span class="w"> </span><span class="m">7</span><span class="p">,</span><span class="w"> </span><span class="m">8</span><span class="p">,</span><span class="w"> </span><span class="m">9</span><span class="p">];</span>
<span class="kd">final</span><span class="w"> </span><span class="n">inventory</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">writeListUint8</span><span class="p">(</span><span class="n">treasure</span><span class="p">);</span>
<span class="c1">// Using the Builder classes, you can write a list of structs like so:</span>
<span class="c1">// Note that the intended order should be reversed if order is important.</span>
<span class="kd">final</span><span class="w"> </span><span class="n">vec3Builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">Vec3Builder</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="n">vec3Builder</span><span class="p">.</span><span class="n">finish</span><span class="p">(</span><span class="m">4.0</span><span class="p">,</span><span class="w"> </span><span class="m">5.0</span><span class="p">,</span><span class="w"> </span><span class="m">6.0</span><span class="p">);</span>
<span class="n">vec3Builder</span><span class="p">.</span><span class="n">finish</span><span class="p">(</span><span class="m">1.0</span><span class="p">,</span><span class="w"> </span><span class="m">2.0</span><span class="p">,</span><span class="w"> </span><span class="m">3.0</span><span class="p">);</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">endStructVector</span><span class="p">(</span><span class="m">2</span><span class="p">);</span><span class="w"> </span><span class="c1">// the length of the vector</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="c1">// Note: Since we prepend the bytes, this loop iterates in reverse.</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterStartInventoryVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span>
<span class="k">for</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">9</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="o">--</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">PrependByte</span><span class="p">(</span><span class="nb">byte</span><span class="p">(</span><span class="nx">i</span><span class="p">))</span>
<span class="p">}</span>
<span class="nx">inv</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">EndVector</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterStartPathVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">CreateVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">CreateVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">4.0</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0</span><span class="p">)</span>
<span class="nx">path</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">EndVector</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">treasure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">};</span>
<span class="kt">int</span><span class="w"> </span><span class="n">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">createInventoryVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">treasure</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">startPathVector</span><span class="p">(</span><span class="n">fbb</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="n">Vec3</span><span class="p">.</span><span class="na">createVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="p">);</span>
<span class="n">Vec3</span><span class="p">.</span><span class="na">createVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">4.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0f</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fbb</span><span class="p">.</span><span class="na">endVector</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">treasure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">0</span><span class="p">,</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">,</span><span class="w"> </span><span class="mf">4</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">,</span><span class="w"> </span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="mf">7</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">,</span><span class="w"> </span><span class="mf">9</span><span class="p">];</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">createInventoryVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">treasure</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">startPathVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Vec3</span><span class="p">.</span><span class="nx">createVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Vec3</span><span class="p">.</span><span class="nx">createVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">4.0</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">endVector</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">treasure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">byteArrayOf</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="m">4</span><span class="p">,</span><span class="w"> </span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">6</span><span class="p">,</span><span class="w"> </span><span class="m">7</span><span class="p">,</span><span class="w"> </span><span class="m">8</span><span class="p">,</span><span class="w"> </span><span class="m">9</span><span class="p">)</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">createInventoryVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">treasure</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">startPathVector</span><span class="p">(</span><span class="n">fbb</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">)</span>
<span class="n">Vec3</span><span class="p">.</span><span class="na">createVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="m">1.0f</span><span class="p">,</span><span class="w"> </span><span class="m">2.0f</span><span class="p">,</span><span class="w"> </span><span class="m">3.0f</span><span class="p">)</span>
<span class="n">Vec3</span><span class="p">.</span><span class="na">createVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="m">4.0f</span><span class="p">,</span><span class="w"> </span><span class="m">5.0f</span><span class="p">,</span><span class="w"> </span><span class="m">6.0f</span><span class="p">)</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fbb</span><span class="p">.</span><span class="na">endVector</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>// Inventory.
let inv = builder.MyGame_Sample_MonsterCreateInventoryVector(map(10): _)
builder.MyGame_Sample_MonsterStartPathVector(2)
builder.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0)
builder.MyGame_Sample_CreateVec3(4.0, 5.0, 6.0)
let path = builder.EndVector(2)
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">-- could correspond to an item that can be claimed after he is slain.</span>
<span class="c1">-- Note: Since we prepend the bytes, this loop iterates in reverse.</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">StartInventoryVector</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span>
<span class="kr">for</span><span class="w"> </span><span class="nv">i</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="w"> </span><span class="kr">do</span>
<span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">PrependByte</span><span class="p">(</span><span class="nv">i</span><span class="p">)</span>
<span class="kr">end</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">EndVector</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="c1">-- Create a FlatBuffer vector and prepend the path locations.</span>
<span class="c1">-- Note: Since we prepend the data, prepend them in reverse order.</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">StartPathVector</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="nv">vec3</span><span class="p">.</span><span class="nf">CreateVec3</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">)</span>
<span class="nv">vec3</span><span class="p">.</span><span class="nf">CreateVec3</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">4.0</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">EndVector</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="nv">$treasure</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">);</span>
<span class="nv">$inv</span> <span class="o">=</span> <span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">CreateInventoryVector</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$treasure</span><span class="p">);</span>
<span class="nx">\MyGame\Example\Monster</span><span class="o">::</span><span class="na">StartPathVector</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Vec3</span><span class="o">::</span><span class="na">CreateVec3</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Vec3</span><span class="o">::</span><span class="na">CreateVec3</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">);</span>
<span class="nv">$path</span> <span class="o">=</span> <span class="nv">$builder</span><span class="o">-&gt;</span><span class="na">endVector</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1"># could correspond to an item that can be claimed after he is slain.</span>
<span class="c1"># Note: Since we prepend the bytes, this loop iterates in reverse.</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">StartInventoryVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)):</span>
<span class="n">builder</span><span class="o">.</span><span class="n">PrependByte</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">inv</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">EndVector</span><span class="p">()</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">StartPathVector</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Vec3</span><span class="o">.</span><span class="n">CreateVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Vec3</span><span class="o">.</span><span class="n">CreateVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mf">4.0</span><span class="p">,</span> <span class="mf">5.0</span><span class="p">,</span> <span class="mf">6.0</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">EndVector</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Inventory.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">inventory</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create_vector</span><span class="p">(</span><span class="o">&amp;</span><span class="p">[</span><span class="mi">0</span><span class="k">u8</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">]);</span>
<span class="c1">// Create the path vector of Vec3 objects.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Vec3</span><span class="p">::</span><span class="n">new</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Vec3</span><span class="p">::</span><span class="n">new</span><span class="p">(</span><span class="mf">4.0</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create_vector</span><span class="p">(</span><span class="o">&amp;</span><span class="p">[</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">]);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// create inventory</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">inventory</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="n">Byte</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">]</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">inventoryOffset</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">createVector</span><span class="p">(</span><span class="n">inventory</span><span class="p">)</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fbb</span><span class="p">.</span><span class="n">createVector</span><span class="p">(</span><span class="n">ofStructs</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="n">Vec3</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">z</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">),</span>
<span class="w"> </span><span class="n">Vec3</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="n">z</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">)</span>
<span class="p">])</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create a `vector` representing the inventory of the Orc. Each number</span>
<span class="c1">// could correspond to an item that can be claimed after he is slain.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">treasure</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">0</span><span class="p">,</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">,</span><span class="w"> </span><span class="mf">4</span><span class="p">,</span><span class="w"> </span><span class="mf">5</span><span class="p">,</span><span class="w"> </span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="mf">7</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">,</span><span class="w"> </span><span class="mf">9</span><span class="p">];</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">createInventoryVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">treasure</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">startPathVector</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Vec3</span><span class="p">.</span><span class="nx">createVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Vec3</span><span class="p">.</span><span class="nx">createVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">4.0</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">,</span><span class="w"> </span><span class="mf">6.0</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">endVector</span><span class="p">();</span>
</code></pre></div>
</div>
</div>
</div>
<h4 id="unions">Unions</h4>
<p>The last non-scalar data field for the <code>Monster</code> table is the <code>equipped</code> <code>union</code>
field. For this case, we will reuse an already serialized <code>Weapon</code> (the only
type in the union), without needing to reserialize it. Union fields implicitly
add a hidden <code>_type</code> field that stores the type of value stored in the union.
When serializing a union, you must explicitly set this type field, along with
providing the union value.</p>
<p>We will also serialize the other scalar data at the same time, since we have all
the necessary values and Offsets to make a <code>Monster</code>.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="9:15"><input checked="checked" id="c_21" name="__tabbed_9" type="radio" /><input id="c_22" name="__tabbed_9" type="radio" /><input id="c_23" name="__tabbed_9" type="radio" /><input id="dart_7" name="__tabbed_9" type="radio" /><input id="go_7" name="__tabbed_9" type="radio" /><input id="java_7" name="__tabbed_9" type="radio" /><input id="javascript_7" name="__tabbed_9" type="radio" /><input id="kotlin_7" name="__tabbed_9" type="radio" /><input id="lobster_7" name="__tabbed_9" type="radio" /><input id="lua_7" name="__tabbed_9" type="radio" /><input id="php_7" name="__tabbed_9" type="radio" /><input id="python_7" name="__tabbed_9" type="radio" /><input id="rust_7" name="__tabbed_9" type="radio" /><input id="swift_7" name="__tabbed_9" type="radio" /><input id="typescript_7" name="__tabbed_9" type="radio" /><div class="tabbed-labels"><label for="c_21">C++</label><label for="c_22">C</label><label for="c_23">C#</label><label for="dart_7">Dart</label><label for="go_7">Go</label><label for="java_7">Java</label><label for="javascript_7">JavaScript</label><label for="kotlin_7">Kotlin</label><label for="lobster_7">Lobster</label><label for="lua_7">Lua</label><label for="php_7">PHP</label><label for="python_7">Python</label><label for="rust_7">Rust</label><label for="swift_7">Swift</label><label for="typescript_7">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create the remaining data needed for the Monster.</span>
<span class="k">auto</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s">&quot;Orc&quot;</span><span class="p">);</span>
<span class="c1">// Create the position struct</span>
<span class="k">auto</span><span class="w"> </span><span class="n">position</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Vec3</span><span class="p">(</span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="p">);</span>
<span class="c1">// Set his hit points to 300 and his mana to 150.</span>
<span class="kt">int</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">300</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span>
<span class="c1">// Finally, create the monster using the `CreateMonster` helper function</span>
<span class="c1">// to set all fields.</span>
<span class="c1">//</span>
<span class="c1">// Here we set the union field by using the `.Union()` method of the</span>
<span class="c1">// `Offset&lt;Weapon&gt;` axe we already serialized above. We just have to specify</span>
<span class="c1">// which type of object we put in the union, and do that with the</span>
<span class="c1">// auto-generated `Equipment_Weapon` enum.</span>
<span class="n">flatbuffers</span><span class="o">::</span><span class="n">Offset</span><span class="o">&lt;</span><span class="n">Monster</span><span class="o">&gt;</span><span class="w"> </span><span class="n">orc</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">CreateMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">position</span><span class="p">,</span><span class="w"> </span><span class="n">mana</span><span class="p">,</span><span class="w"> </span><span class="n">hp</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">inventory</span><span class="p">,</span>
<span class="w"> </span><span class="n">Color_Red</span><span class="p">,</span><span class="w"> </span><span class="n">weapons</span><span class="p">,</span><span class="w"> </span><span class="n">Equipment_Weapon</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">.</span><span class="n">Union</span><span class="p">(),</span>
<span class="w"> </span><span class="n">path</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="c1">// The _str suffix indicates the source is an ascii-z string.</span>
<span class="n">flatbuffers_string_ref_t</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatbuffers_string_create_str</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Orc&quot;</span><span class="p">);</span>
<span class="c1">// Set his hit points to 300 and his mana to 150.</span>
<span class="kt">uint16_t</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">300</span><span class="p">;</span>
<span class="kt">uint16_t</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">150</span><span class="p">;</span>
<span class="c1">// Define an equipment union. `create` calls in C has a single</span>
<span class="c1">// argument for unions where C++ has both a type and a data argument.</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Equipment_union_ref_t</span><span class="p">)</span><span class="w"> </span><span class="n">equipped</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Equipment_as_Weapon</span><span class="p">(</span><span class="n">axe</span><span class="p">));</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Vec3_t</span><span class="p">)</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="w"> </span><span class="p">};</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Monster_create_as_root</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">pos</span><span class="p">,</span><span class="w"> </span><span class="n">mana</span><span class="p">,</span><span class="w"> </span><span class="n">hp</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">inventory</span><span class="p">,</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Color_Red</span><span class="p">),</span>
<span class="w"> </span><span class="n">weapons</span><span class="p">,</span><span class="w"> </span><span class="n">equipped</span><span class="p">,</span><span class="w"> </span><span class="n">path</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Create the remaining data needed for the Monster.</span>
<span class="kt">var</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s">&quot;Orc&quot;</span><span class="p">);</span>
<span class="c1">// Create our monster using `StartMonster()` and `EndMonster()`.</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">StartMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddPos</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Vec3</span><span class="p">.</span><span class="n">CreateVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="p">));</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddHp</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">short</span><span class="p">)</span><span class="mi">300</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddName</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddInventory</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">inv</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddColor</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Color</span><span class="p">.</span><span class="n">Red</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddWeapons</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weapons</span><span class="p">);</span>
<span class="c1">// For union fields, we explicitly add the auto-generated enum for the type</span>
<span class="c1">// of value stored in the union.</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddEquippedType</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Equipment</span><span class="p">.</span><span class="n">Weapon</span><span class="p">);</span>
<span class="c1">// And we just use the `.Value` property of the already serialized axe.</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddEquipped</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">.</span><span class="n">Value</span><span class="p">);</span><span class="w"> </span><span class="c1">// Axe</span>
<span class="n">Monster</span><span class="p">.</span><span class="n">AddPath</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">path</span><span class="p">);</span>
<span class="n">Offset</span><span class="o">&lt;</span><span class="n">Monster</span><span class="o">&gt;</span><span class="w"> </span><span class="n">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="n">EndMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">writeString</span><span class="p">(</span><span class="s1">&#39;Orc&#39;</span><span class="p">);</span>
<span class="c1">// Using the Builder API:</span>
<span class="c1">// Set his hit points to 300 and his mana to 150.</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">300</span><span class="p">;</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">150</span><span class="p">;</span>
<span class="kd">final</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">MonsterBuilder</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">begin</span><span class="p">()</span>
<span class="w"> </span><span class="p">..</span><span class="n">addNameOffset</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addInventoryOffset</span><span class="p">(</span><span class="n">inventory</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addWeaponsOffset</span><span class="p">(</span><span class="n">weapons</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addEquippedType</span><span class="p">(</span><span class="n">myGame</span><span class="p">.</span><span class="n">EquipmentTypeId</span><span class="p">.</span><span class="n">Weapon</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addEquippedOffset</span><span class="p">(</span><span class="n">axe</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addHp</span><span class="p">(</span><span class="n">hp</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addMana</span><span class="p">(</span><span class="n">mana</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addPos</span><span class="p">(</span><span class="n">vec3Builder</span><span class="p">.</span><span class="n">finish</span><span class="p">(</span><span class="m">1.0</span><span class="p">,</span><span class="w"> </span><span class="m">2.0</span><span class="p">,</span><span class="w"> </span><span class="m">3.0</span><span class="p">))</span>
<span class="w"> </span><span class="p">..</span><span class="n">addPathOffset</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="w"> </span><span class="p">..</span><span class="n">addColor</span><span class="p">(</span><span class="n">myGame</span><span class="p">.</span><span class="n">Color</span><span class="p">.</span><span class="n">Red</span><span class="p">);</span>
<span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">finish</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="nx">name</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">CreateString</span><span class="p">(</span><span class="s">&quot;Orc&quot;</span><span class="p">)</span>
<span class="c1">// Create our monster using `MonsterStart()` and `MonsterEnd()`.</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterStart</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddPos</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">CreateVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">))</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddHp</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">300</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">name</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddInventory</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">inv</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddColor</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">ColorRed</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddWeapons</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weapons</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddEquippedType</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">EquipmentWeapon</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddEquipped</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">axe</span><span class="p">)</span>
<span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterAddPath</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">path</span><span class="p">)</span>
<span class="nx">orc</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">MonsterEnd</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="kt">int</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">createString</span><span class="p">(</span><span class="s">&quot;Orc&quot;</span><span class="p">);</span>
<span class="c1">// Create our monster using `startMonster()` and `endMonster()`.</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">startMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addPos</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Vec3</span><span class="p">.</span><span class="na">createVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0f</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0f</span><span class="p">));</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addName</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addColor</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Color</span><span class="p">.</span><span class="na">Red</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addHp</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">short</span><span class="p">)</span><span class="mi">300</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addInventory</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">inv</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addWeapons</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weapons</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addEquippedType</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Equipment</span><span class="p">.</span><span class="na">Weapon</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addEquipped</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">);</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addPath</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">path</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="n">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">endMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &#39;Orc&#39;.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">createString</span><span class="p">(</span><span class="s1">&#39;Orc&#39;</span><span class="p">);</span>
<span class="c1">// Create our monster by using `startMonster()` and `endMonster()`.</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">startMonster</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addPos</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span>
<span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Vec3</span><span class="p">.</span><span class="nx">createVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">));</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addHp</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">300</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addColor</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Color</span><span class="p">.</span><span class="nx">Red</span><span class="p">)</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">name</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addInventory</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">inv</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addWeapons</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weapons</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addEquippedType</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span>
<span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Equipment</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addEquipped</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">axe</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addPath</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">path</span><span class="p">);</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">endMonster</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">createString</span><span class="p">(</span><span class="s">&quot;Orc&quot;</span><span class="p">)</span>
<span class="c1">// Create our monster using `startMonster()` and `endMonster()`.</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">startMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addPos</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Vec3</span><span class="p">.</span><span class="na">createVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="m">1.0f</span><span class="p">,</span><span class="w"> </span><span class="m">2.0f</span><span class="p">,</span><span class="w"> </span><span class="m">3.0f</span><span class="p">))</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addName</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addColor</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Color</span><span class="p">.</span><span class="na">Red</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addHp</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="m">300.</span><span class="n">toShort</span><span class="p">())</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addInventory</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">inv</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addWeapons</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">weapons</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addEquippedType</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">Equipment</span><span class="p">.</span><span class="na">Weapon</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addEquipped</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">axe</span><span class="p">)</span>
<span class="n">Monster</span><span class="p">.</span><span class="na">addPath</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="n">path</span><span class="p">)</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">endMonster</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>// Name of the monster.
let name = builder.CreateString(&quot;Orc&quot;)
let orc = MyGame_Sample_MonsterBuilder { b }
.start()
.add_pos(b.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0))
.add_hp(300)
.add_name(name)
.add_inventory(inv)
.add_color(MyGame_Sample_Color_Red)
.add_weapons(weapons)
.add_equipped_type(MyGame_Sample_Equipment_Weapon)
.add_equipped(weapon_offsets[1])
.add_path(path)
.end()
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- Serialize a name for our monster, called &#39;orc&#39;</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">CreateString</span><span class="p">(</span><span class="s2">&quot;Orc&quot;</span><span class="p">)</span>
<span class="c1">-- Create our monster by using Start() andEnd()</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span><span class="nv">builder</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddPos</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">vec3</span><span class="p">.</span><span class="nf">CreateVec3</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">))</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddHp</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="mi">300</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddName</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">name</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddInventory</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">inv</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddColor</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">color</span><span class="p">.</span><span class="py">Red</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddWeapons</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">weapons</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddEquippedType</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">equipment</span><span class="p">.</span><span class="py">Weapon</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddEquipped</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">axe</span><span class="p">)</span>
<span class="nv">monster</span><span class="p">.</span><span class="nf">AddPath</span><span class="p">(</span><span class="nv">builder</span><span class="p">,</span><span class="w"> </span><span class="nv">path</span><span class="p">)</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">monster</span><span class="p">.</span><span class="nf">End</span><span class="p">(</span><span class="nv">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="nv">$name</span> <span class="o">=</span> <span class="nv">$builder</span><span class="o">-&gt;</span><span class="na">createString</span><span class="p">(</span><span class="s2">&quot;Orc&quot;</span><span class="p">);</span>
<span class="c1">// Create our monster by using `StartMonster()` and `EndMonster()`.</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">StartMonster</span><span class="p">(</span><span class="nv">$builder</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddPos</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span>
<span class="nx">\MyGame\Sample\Vec3</span><span class="o">::</span><span class="na">CreateVec3</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">));</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddHp</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="mi">300</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddName</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$name</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddInventory</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$inv</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddColor</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nx">\MyGame\Sample\Color</span><span class="o">::</span><span class="na">Red</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddWeapons</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$weapons</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddEquippedType</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span>
<span class="nx">\MyGame\Sample\Equipment</span><span class="o">::</span><span class="na">Weapon</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddEquipped</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$axe</span><span class="p">);</span>
<span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">AddPath</span><span class="p">(</span><span class="nv">$builder</span><span class="p">,</span> <span class="nv">$path</span><span class="p">);</span>
<span class="nv">$orc</span> <span class="o">=</span> <span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">EndMonster</span><span class="p">(</span><span class="nv">$builder</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># Serialize a name for our monster, called &quot;Orc&quot;.</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">CreateString</span><span class="p">(</span><span class="s2">&quot;Orc&quot;</span><span class="p">)</span>
<span class="c1"># Create our monster by using `Monster.Start()` and `Monster.End()`.</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">Start</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddPos</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Vec3</span><span class="o">.</span><span class="n">CreateVec3</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">))</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddHp</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="mi">300</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddName</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddInventory</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">inv</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddColor</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Color</span><span class="o">.</span><span class="n">Color</span><span class="p">()</span><span class="o">.</span><span class="n">Red</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddWeapons</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">weapons</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddEquippedType</span><span class="p">(</span>
<span class="n">builder</span><span class="p">,</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Equipment</span><span class="o">.</span><span class="n">Equipment</span><span class="p">()</span><span class="o">.</span><span class="n">Weapon</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddEquipped</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">axe</span><span class="p">)</span>
<span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">AddPath</span><span class="p">(</span><span class="n">builder</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
<span class="n">orc</span> <span class="o">=</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">End</span><span class="p">(</span><span class="n">builder</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Name of the Monster.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create_string</span><span class="p">(</span><span class="s">&quot;Orc&quot;</span><span class="p">);</span>
<span class="c1">// Create the monster using the `Monster::create` helper function. This</span>
<span class="c1">// function accepts a `MonsterArgs` struct, which supplies all of the data</span>
<span class="c1">// needed to build a `Monster`. To supply empty/default fields, just use the</span>
<span class="c1">// Rust built-in `Default::default()` function, as demonstrated below.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">::</span><span class="n">create</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="n">builder</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">MonsterArgs</span><span class="p">{</span>
<span class="w"> </span><span class="n">pos</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="o">&amp;</span><span class="n">Vec3</span><span class="p">::</span><span class="n">new</span><span class="p">(</span><span class="mf">1.0</span><span class="k">f32</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="k">f32</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="k">f32</span><span class="p">)),</span>
<span class="w"> </span><span class="n">mana</span><span class="p">:</span><span class="w"> </span><span class="mi">150</span><span class="p">,</span>
<span class="w"> </span><span class="n">hp</span><span class="p">:</span><span class="w"> </span><span class="mi">80</span><span class="p">,</span>
<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">name</span><span class="p">),</span>
<span class="w"> </span><span class="n">inventory</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">inventory</span><span class="p">),</span>
<span class="w"> </span><span class="n">color</span><span class="p">:</span><span class="w"> </span><span class="nc">Color</span><span class="p">::</span><span class="n">Red</span><span class="p">,</span>
<span class="w"> </span><span class="n">weapons</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">weapons</span><span class="p">),</span>
<span class="w"> </span><span class="n">equipped_type</span><span class="p">:</span><span class="w"> </span><span class="nc">Equipment</span><span class="p">::</span><span class="n">Weapon</span><span class="p">,</span>
<span class="w"> </span><span class="n">equipped</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">axe</span><span class="p">.</span><span class="n">as_union_value</span><span class="p">()),</span>
<span class="w"> </span><span class="n">path</span><span class="p">:</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">path</span><span class="p">),</span>
<span class="w"> </span><span class="o">..</span><span class="nb">Default</span><span class="p">::</span><span class="n">default</span><span class="p">()</span>
<span class="p">});</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Name of the Monster.</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="n">string</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Orc&quot;</span><span class="p">)</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">orc</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="n">createMonster</span><span class="p">(</span>
<span class="w"> </span><span class="p">&amp;</span><span class="n">builder</span><span class="p">,</span>
<span class="w"> </span><span class="n">pos</span><span class="p">:</span><span class="w"> </span><span class="n">MyGame_Sample_Vec3</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">z</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">),</span>
<span class="w"> </span><span class="n">hp</span><span class="p">:</span><span class="w"> </span><span class="mi">300</span><span class="p">,</span>
<span class="w"> </span><span class="n">nameOffset</span><span class="p">:</span><span class="w"> </span><span class="n">name</span><span class="p">,</span>
<span class="w"> </span><span class="n">inventoryVectorOffset</span><span class="p">:</span><span class="w"> </span><span class="n">inventoryOffset</span><span class="p">,</span>
<span class="w"> </span><span class="n">color</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">red</span><span class="p">,</span>
<span class="w"> </span><span class="n">weaponsVectorOffset</span><span class="p">:</span><span class="w"> </span><span class="n">weaponsOffset</span><span class="p">,</span>
<span class="w"> </span><span class="n">equippedType</span><span class="p">:</span><span class="w"> </span><span class="p">.</span><span class="n">weapon</span><span class="p">,</span>
<span class="w"> </span><span class="n">equippedOffset</span><span class="p">:</span><span class="w"> </span><span class="n">axe</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Serialize a name for our monster, called &#39;Orc&#39;.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">createString</span><span class="p">(</span><span class="s1">&#39;Orc&#39;</span><span class="p">);</span>
<span class="c1">// Create our monster by using `startMonster()` and `endMonster()`.</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">startMonster</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addPos</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span>
<span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Vec3</span><span class="p">.</span><span class="nx">createVec3</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">2.0</span><span class="p">,</span><span class="w"> </span><span class="mf">3.0</span><span class="p">));</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addHp</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="mf">300</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addColor</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Color</span><span class="p">.</span><span class="nx">Red</span><span class="p">)</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addName</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">name</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addInventory</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">inv</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addWeapons</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">weapons</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addEquippedType</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span>
<span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Equipment</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addEquipped</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">axe</span><span class="p">);</span>
<span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">addPath</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span><span class="w"> </span><span class="nx">path</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">orc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">endMonster</span><span class="p">(</span><span class="nx">builder</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<h3 id="finishing">Finishing</h3>
<p>At this point, we have serialized a <code>Monster</code> we've named "orc" to the
flatbuffer and have its offset. The <code>root_type</code> of the schema is also a
<code>Monster</code>, so we have everything we need to finish the serialization step.</p>
<p>This is done by calling the appropriate <code>finish</code> method on the Builder, passing
in the orc offset to indicate this <code>table</code> is the "entry" point when
deserializing the buffer later.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="10:15"><input checked="checked" id="c_24" name="__tabbed_10" type="radio" /><input id="c_25" name="__tabbed_10" type="radio" /><input id="c_26" name="__tabbed_10" type="radio" /><input id="dart_8" name="__tabbed_10" type="radio" /><input id="go_8" name="__tabbed_10" type="radio" /><input id="java_8" name="__tabbed_10" type="radio" /><input id="javascript_8" name="__tabbed_10" type="radio" /><input id="kotlin_8" name="__tabbed_10" type="radio" /><input id="lobster_8" name="__tabbed_10" type="radio" /><input id="lua_8" name="__tabbed_10" type="radio" /><input id="php_8" name="__tabbed_10" type="radio" /><input id="python_8" name="__tabbed_10" type="radio" /><input id="rust_8" name="__tabbed_10" type="radio" /><input id="swift_8" name="__tabbed_10" type="radio" /><input id="typescript_8" name="__tabbed_10" type="radio" /><div class="tabbed-labels"><label for="c_24">C++</label><label for="c_25">C</label><label for="c_26">C#</label><label for="dart_8">Dart</label><label for="go_8">Go</label><label for="java_8">Java</label><label for="javascript_8">JavaScript</label><label for="kotlin_8">Kotlin</label><label for="lobster_8">Lobster</label><label for="lua_8">Lua</label><label for="php_8">PHP</label><label for="python_8">Python</label><label for="rust_8">Rust</label><label for="swift_8">Swift</label><label for="typescript_8">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `Finish()` to instruct the builder that this monster is complete.</span>
<span class="c1">// You could also call `FinishMonsterBuffer(builder, orc);`</span>
<span class="n">builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">(</span><span class="n">orc</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Because we used `Monster_create_as_root`, we do not need a `finish` call</span>
<span class="c1">// in C.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `Finish()` to instruct the builder that this monster is complete.</span>
<span class="c1">// You could also call `Monster.FinishMonsterBuffer(builder, orc);`</span>
<span class="n">builder</span><span class="p">.</span><span class="n">Finish</span><span class="p">(</span><span class="n">orc</span><span class="p">.</span><span class="n">Value</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="c1">// See the next code section, as in Dart `finish` will also return the byte</span>
<span class="c1">// array.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `Finish()` to instruct the builder that this monster is complete.</span>
<span class="nx">builder</span><span class="p">.</span><span class="nx">Finish</span><span class="p">(</span><span class="nx">orc</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="n">builder</span><span class="p">.</span><span class="na">finish</span><span class="p">(</span><span class="n">orc</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="nx">builder</span><span class="p">.</span><span class="nx">finish</span><span class="p">(</span><span class="nx">orc</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="n">builder</span><span class="p">.</span><span class="na">finish</span><span class="p">(</span><span class="n">orc</span><span class="p">)</span><span class="w"> </span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>// Call `Finish()` to instruct the builder that this monster is complete.
builder.Finish(orc)
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">-- Call &#39;Finish()&#39; to instruct the builder that this monster is complete.</span>
<span class="nv">builder</span><span class="p">:</span><span class="nf">Finish</span><span class="p">(</span><span class="nv">orc</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="nv">$builder</span><span class="o">-&gt;</span><span class="na">finish</span><span class="p">(</span><span class="nv">$orc</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># Call `Finish()` to instruct the builder that this monster is complete.</span>
<span class="n">builder</span><span class="o">.</span><span class="n">Finish</span><span class="p">(</span><span class="n">orc</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="n">builder</span><span class="p">.</span><span class="n">finish</span><span class="p">(</span><span class="n">orc</span><span class="p">,</span><span class="w"> </span><span class="nb">None</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="n">builder</span><span class="p">.</span><span class="n">finish</span><span class="p">(</span><span class="n">offset</span><span class="p">:</span><span class="w"> </span><span class="n">orc</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Call `finish()` to instruct the builder that this monster is complete.</span>
<span class="nx">builder</span><span class="p">.</span><span class="nx">finish</span><span class="p">(</span><span class="nx">orc</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>Once you finish a Builder, you can no longer serialize more data to it.</p>
<h4 id="buffer-access">Buffer Access</h4>
<p>The flatbuffer is now ready to be stored somewhere, sent over the network,
compressed, or whatever you would like to do with it. You access the raw buffer
like so:</p>
<div class="tabbed-set tabbed-alternate" data-tabs="11:15"><input checked="checked" id="c_27" name="__tabbed_11" type="radio" /><input id="c_28" name="__tabbed_11" type="radio" /><input id="c_29" name="__tabbed_11" type="radio" /><input id="dart_9" name="__tabbed_11" type="radio" /><input id="go_9" name="__tabbed_11" type="radio" /><input id="java_9" name="__tabbed_11" type="radio" /><input id="javascript_9" name="__tabbed_11" type="radio" /><input id="kotlin_9" name="__tabbed_11" type="radio" /><input id="lobster_9" name="__tabbed_11" type="radio" /><input id="lua_9" name="__tabbed_11" type="radio" /><input id="php_9" name="__tabbed_11" type="radio" /><input id="python_9" name="__tabbed_11" type="radio" /><input id="rust_9" name="__tabbed_11" type="radio" /><input id="swift_9" name="__tabbed_11" type="radio" /><input id="typescript_9" name="__tabbed_11" type="radio" /><div class="tabbed-labels"><label for="c_27">C++</label><label for="c_28">C</label><label for="c_29">C#</label><label for="dart_9">Dart</label><label for="go_9">Go</label><label for="java_9">Java</label><label for="javascript_9">JavaScript</label><label for="kotlin_9">Kotlin</label><label for="lobster_9">Lobster</label><label for="lua_9">Lua</label><label for="php_9">PHP</label><label for="python_9">Python</label><label for="rust_9">Rust</label><label for="swift_9">Swift</label><label for="typescript_9">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `Finish()`.</span>
<span class="kt">uint8_t</span><span class="w"> </span><span class="o">*</span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">GetBufferPointer</span><span class="p">();</span>
<span class="c1">// Returns the size of the buffer that `GetBufferPointer()` points to.</span>
<span class="kt">int</span><span class="w"> </span><span class="n">size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">GetSize</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">uint8_t</span><span class="w"> </span><span class="o">*</span><span class="n">buf</span><span class="p">;</span>
<span class="kt">size_t</span><span class="w"> </span><span class="n">size</span><span class="p">;</span>
<span class="c1">// Allocate and extract a readable buffer from internal builder heap.</span>
<span class="c1">// The returned buffer must be deallocated using `free`.</span>
<span class="c1">// NOTE: Finalizing the buffer does NOT change the builder, it</span>
<span class="c1">// just creates a snapshot of the builder content.</span>
<span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatcc_builder_finalize_buffer</span><span class="p">(</span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">size</span><span class="p">);</span>
<span class="c1">// use buf</span>
<span class="n">free</span><span class="p">(</span><span class="n">buf</span><span class="p">);</span>
<span class="c1">// Optionally reset builder to reuse builder without deallocating</span>
<span class="c1">// internal stack and heap.</span>
<span class="n">flatcc_builder_reset</span><span class="p">(</span><span class="n">B</span><span class="p">);</span>
<span class="c1">// build next buffer.</span>
<span class="c1">// ...</span>
<span class="c1">// Cleanup.</span>
<span class="n">flatcc_builder_clear</span><span class="p">(</span><span class="n">B</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `Finish()`.</span>
<span class="c1">//</span>
<span class="c1">// The data in this ByteBuffer does NOT start at 0, but at buf.Position.</span>
<span class="c1">// The end of the data is marked by buf.Length, so the size is</span>
<span class="c1">// buf.Length - buf.Position.</span>
<span class="n">FlatBuffers</span><span class="p">.</span><span class="n">ByteBuffer</span><span class="w"> </span><span class="n">dataBuffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">DataBuffer</span><span class="p">;</span>
<span class="c1">// Alternatively this copies the above data out of the ByteBuffer for you:</span>
<span class="kt">byte</span><span class="p">[]</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">SizedByteArray</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">final</span><span class="w"> </span><span class="n">Uint8List</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">finish</span><span class="p">(</span><span class="n">orc</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `Finish()`.</span>
<span class="nx">buf</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">FinishedBytes</span><span class="p">()</span><span class="w"> </span><span class="c1">// Of type `byte[]`.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="n">java</span><span class="p">.</span><span class="na">nio</span><span class="p">.</span><span class="na">ByteBuffer</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">dataBuffer</span><span class="p">();</span>
<span class="c1">// The data in this ByteBuffer does NOT start at 0, but at buf.position().</span>
<span class="c1">// The number of bytes is buf.remaining().</span>
<span class="c1">// Alternatively this copies the above data out of the ByteBuffer for you:</span>
<span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">sizedByteArray</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">asUint8Array</span><span class="p">();</span><span class="w"> </span><span class="c1">// Of type `Uint8Array`.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">dataBuffer</span><span class="p">()</span>
<span class="c1">// The data in this ByteBuffer does NOT start at 0, but at buf.position().</span>
<span class="c1">// The number of bytes is buf.remaining().</span>
<span class="c1">// Alternatively this copies the above data out of the ByteBuffer for you:</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">sizedByteArray</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>// This must be called after `Finish()`.
let buf = builder.SizedCopy() // Of type `string`.
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">bufAsString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">builder</span><span class="p">:</span><span class="nf">Output</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="nv">$buf</span> <span class="o">=</span> <span class="nv">$builder</span><span class="o">-&gt;</span><span class="na">dataBuffer</span><span class="p">();</span> <span class="c1">// Of type `Google\FlatBuffers\ByteBuffer`</span>
<span class="c1">// The data in this ByteBuffer does NOT start at 0, but at</span>
<span class="c1">// buf-&gt;getPosition().</span>
<span class="c1">// The end of the data is marked by buf-&gt;capacity(), so the size is</span>
<span class="c1">// buf-&gt;capacity() - buf-&gt;getPosition().</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1"># This must be called after `Finish()`.</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">builder</span><span class="o">.</span><span class="n">Output</span><span class="p">()</span> <span class="o">//</span> <span class="n">Of</span> <span class="nb">type</span> <span class="err">`</span><span class="nb">bytearray</span><span class="err">`</span><span class="o">.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="c1">// `finished_data` returns a byte slice.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">finished_data</span><span class="p">();</span><span class="w"> </span><span class="c1">// Of type `&amp;[u8]`</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="c1">// `sizedByteArray` returns the finished buf of type [UInt8].</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">sizedByteArray</span>
<span class="c1">// or you can use to get an object of type Data</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">bufData</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ByteBuffer</span><span class="p">(</span><span class="n">data</span><span class="p">:</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">data</span><span class="p">)</span>
<span class="c1">// or</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="n">sizedBuffer</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// This must be called after `finish()`.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">builder</span><span class="p">.</span><span class="nx">asUint8Array</span><span class="p">();</span><span class="w"> </span><span class="c1">// Of type `Uint8Array`.</span>
</code></pre></div>
</div>
</div>
</div>
<p>Now you can write the bytes to a file or send them over the network. The buffer
stays valid until the Builder is cleared or destroyed.</p>
<p>Make sure your file mode (or transfer protocol) is set to BINARY, and not TEXT.
If you try to transfer a flatbuffer in TEXT mode, the buffer will be corrupted
and be hard to diagnose.</p>
<h2 id="deserialization">Deserialization</h2>
<p>Deserialization is a bit of a misnomer, since FlatBuffers doesn't deserialize
the whole buffer when accessed. It just "decodes" the data that is requested,
leaving all the other data untouched. It is up to the application to decide if
the data is copied out or even read in the first place. However, we continue to
use the word <code>deserialize</code> to mean accessing data from a binary flatbuffer.</p>
<p>Now that we have successfully create an orc FlatBuffer, the data can be saved,
sent over a network, etc. At some point, the buffer will be accessed to obtain
the underlying data.</p>
<p>The same application setup used for serialization is needed for deserialization
(see <a href="#application-integration">application integration</a>).</p>
<h3 id="root-access">Root Access</h3>
<p>All access to the data in the flatbuffer must first go through the root object.
There is only one root object per flatbuffer. The generated code provides
functions to get the root object given the buffer.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="12:15"><input checked="checked" id="c_30" name="__tabbed_12" type="radio" /><input id="c_31" name="__tabbed_12" type="radio" /><input id="c_32" name="__tabbed_12" type="radio" /><input id="dart_10" name="__tabbed_12" type="radio" /><input id="go_10" name="__tabbed_12" type="radio" /><input id="java_10" name="__tabbed_12" type="radio" /><input id="javascript_10" name="__tabbed_12" type="radio" /><input id="kotlin_10" name="__tabbed_12" type="radio" /><input id="lobster_10" name="__tabbed_12" type="radio" /><input id="lua_10" name="__tabbed_12" type="radio" /><input id="php_10" name="__tabbed_12" type="radio" /><input id="python_10" name="__tabbed_12" type="radio" /><input id="rust_10" name="__tabbed_12" type="radio" /><input id="swift_10" name="__tabbed_12" type="radio" /><input id="typescript_10" name="__tabbed_12" type="radio" /><div class="tabbed-labels"><label for="c_30">C++</label><label for="c_31">C</label><label for="c_32">C#</label><label for="dart_10">Dart</label><label for="go_10">Go</label><label for="java_10">Java</label><label for="javascript_10">JavaScript</label><label for="kotlin_10">Kotlin</label><label for="lobster_10">Lobster</label><label for="lua_10">Lua</label><label for="php_10">PHP</label><label for="python_10">Python</label><label for="rust_10">Rust</label><label for="swift_10">Swift</label><label for="typescript_10">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">uint8_t</span><span class="w"> </span><span class="o">*</span><span class="n">buffer_pointer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* the data you just read */</span><span class="p">;</span>
<span class="c1">// Get a view to the root object inside the buffer.</span>
<span class="n">Monster</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GetMonster</span><span class="p">(</span><span class="n">buffer_pointer</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Note that we use the `table_t` suffix when reading a table object</span>
<span class="c1">// as opposed to the `ref_t` suffix used during the construction of</span>
<span class="c1">// the buffer.</span>
<span class="n">ns</span><span class="p">(</span><span class="n">Monster_table_t</span><span class="p">)</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_as_root</span><span class="p">(</span><span class="n">buffer</span><span class="p">));</span>
<span class="c1">// Note: root object pointers are NOT the same as the `buffer` pointer.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">byte</span><span class="p">[]</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* the data you just read */</span>
<span class="c1">// Get a view to the root object inside the buffer.</span>
<span class="n">Monster</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="n">GetRootAsMonster</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">ByteBuffer</span><span class="p">(</span><span class="n">bytes</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">List</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="c1">// the data, e.g. from file or network</span>
<span class="c1">// A generated factory constructor that will read the data.</span>
<span class="n">myGame</span><span class="p">.</span><span class="n">Monster</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">Monster</span><span class="p">(</span><span class="n">data</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">buf</span><span class="w"> </span><span class="p">[]</span><span class="kt">byte</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="cm">/* the data you just read */</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="nx">monster</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">GetRootAsMonster</span><span class="p">(</span><span class="nx">buf</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="c1">// Note: We use `0` for the offset here, which is typical for most buffers</span>
<span class="c1">// you would read. If you wanted to read from `builder.Bytes` directly, you</span>
<span class="c1">// would need to pass in the offset of `builder.Head()`, as the builder</span>
<span class="c1">// constructs the buffer backwards, so may not start at offset 0.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* the data you just read */</span>
<span class="n">java</span><span class="p">.</span><span class="na">nio</span><span class="p">.</span><span class="na">ByteBuffer</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">java</span><span class="p">.</span><span class="na">nio</span><span class="p">.</span><span class="na">ByteBuffer</span><span class="p">.</span><span class="na">wrap</span><span class="p">(</span><span class="n">bytes</span><span class="p">);</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="n">Monster</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">getRootAsMonster</span><span class="p">(</span><span class="n">buf</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// the data you just read, as a `Uint8Array`</span>
<span class="c1">// Note that the example here uses `readFileSync` from the built-in `fs`</span>
<span class="c1">// module, but other methods for accessing the file contents will also work.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Uint8Array</span><span class="p">(</span><span class="nx">readFileSync</span><span class="p">(</span><span class="s1">&#39;./monsterdata.bin&#39;</span><span class="p">));</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">flatbuffers</span><span class="p">.</span><span class="nx">ByteBuffer</span><span class="p">(</span><span class="nx">bytes</span><span class="p">);</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">getRootAsMonster</span><span class="p">(</span><span class="nx">buf</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* the data you just read */</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">java</span><span class="p">.</span><span class="na">nio</span><span class="p">.</span><span class="na">ByteBuffer</span><span class="p">.</span><span class="na">wrap</span><span class="p">(</span><span class="n">bytes</span><span class="p">)</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="n">Monster</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Monster</span><span class="p">.</span><span class="na">getRootAsMonster</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>buf = /* the data you just read, in a string */
// Get an accessor to the root object inside the buffer.
let monster = MyGame_Sample_GetRootAsMonster(buf)
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">bufAsString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="c1">-- The data you just read in</span>
<span class="c1">-- Convert the string representation into binary array Lua structure</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">flatbuffers</span><span class="p">.</span><span class="py">binaryArray</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="nv">bufAsString</span><span class="p">)</span>
<span class="c1">-- Get an accessor to the root object insert the buffer</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">mon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">monster</span><span class="p">.</span><span class="nf">GetRootAsMonster</span><span class="p">(</span><span class="nv">buf</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$bytes</span> <span class="o">=</span> <span class="cm">/* the data you just read, in a string */</span>
<span class="nv">$buf</span> <span class="o">=</span> <span class="nx">Google\FlatBuffers\ByteBuffer</span><span class="o">::</span><span class="na">wrap</span><span class="p">(</span><span class="nv">$bytes</span><span class="p">);</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="nv">$monster</span> <span class="o">=</span> <span class="nx">\MyGame\Sample\Monster</span><span class="o">::</span><span class="na">GetRootAsMonster</span><span class="p">(</span><span class="nv">$buf</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">buf</span> <span class="o">=</span> <span class="o">/*</span> <span class="n">the</span> <span class="n">data</span> <span class="n">you</span> <span class="n">just</span> <span class="n">read</span><span class="p">,</span> <span class="ow">in</span> <span class="n">an</span> <span class="nb">object</span> <span class="n">of</span> <span class="nb">type</span> <span class="s2">&quot;bytearray&quot;</span> <span class="o">*/</span>
<span class="c1"># Get an accessor to the root object inside the buffer.</span>
<span class="n">monster</span> <span class="o">=</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">Monster</span><span class="o">.</span><span class="n">GetRootAs</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="c1"># Note: We use `0` for the offset here, which is typical for most buffers</span>
<span class="c1"># you would read. If you wanted to read from the `builder.Bytes` directly,</span>
<span class="c1"># you would need to pass in the offset of `builder.Head()`, as the builder</span>
<span class="c1"># constructs the buffer backwards, so may not start at offset 0.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="n">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* the data you just read, in a &amp;[u8] */</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">root_as_monster</span><span class="p">(</span><span class="n">buf</span><span class="p">).</span><span class="n">unwrap</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// create a ByteBuffer(:) from an [UInt8] or Data()</span>
<span class="kd">var</span><span class="w"> </span><span class="nv">buf</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="c1">// Get your data</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">monster</span><span class="p">:</span><span class="w"> </span><span class="n">Monster</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">try</span><span class="p">!</span><span class="w"> </span><span class="n">getCheckedRoot</span><span class="p">(</span><span class="n">byteBuffer</span><span class="p">:</span><span class="w"> </span><span class="p">&amp;</span><span class="n">byteBuffer</span><span class="p">)</span>
<span class="c1">// let monster: Monster = getRoot(byteBuffer: &amp;byteBuffer)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// the data you just read, as a `Uint8Array`.</span>
<span class="c1">// Note that the example here uses `readFileSync` from the built-in `fs`</span>
<span class="c1">// module, but other methods for accessing the file contents will also work.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Uint8Array</span><span class="p">(</span><span class="nx">readFileSync</span><span class="p">(</span><span class="s1">&#39;./monsterdata.bin&#39;</span><span class="p">));</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">buf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">flatbuffers</span><span class="p">.</span><span class="nx">ByteBuffer</span><span class="p">(</span><span class="nx">bytes</span><span class="p">);</span>
<span class="c1">// Get an accessor to the root object inside the buffer.</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">monster</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Monster</span><span class="p">.</span><span class="nx">getRootAsMonster</span><span class="p">(</span><span class="nx">buf</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>Again, make sure you read the bytes in BINARY mode, otherwise the buffer may be
corrupted.</p>
<p>In most languages, the returned object is just a "view" of the data with helpful
accessors. Data is typically not copied out of the backing buffer. This also
means the backing buffer must remain alive for the duration of the views.</p>
<h3 id="table-access">Table Access</h3>
<p>If you look in the generated files emitted by <code>flatc</code>, you will see it generated
, for each <code>table</code>, accessors of all its non-<code>deprecated</code> fields. For example,
some of the accessors of the <code>Monster</code> root table would look like:</p>
<div class="tabbed-set tabbed-alternate" data-tabs="13:15"><input checked="checked" id="c_33" name="__tabbed_13" type="radio" /><input id="c_34" name="__tabbed_13" type="radio" /><input id="c_35" name="__tabbed_13" type="radio" /><input id="dart_11" name="__tabbed_13" type="radio" /><input id="go_11" name="__tabbed_13" type="radio" /><input id="java_11" name="__tabbed_13" type="radio" /><input id="javascript_11" name="__tabbed_13" type="radio" /><input id="kotlin_11" name="__tabbed_13" type="radio" /><input id="lobster_11" name="__tabbed_13" type="radio" /><input id="lua_11" name="__tabbed_13" type="radio" /><input id="php_11" name="__tabbed_13" type="radio" /><input id="python_11" name="__tabbed_13" type="radio" /><input id="rust_11" name="__tabbed_13" type="radio" /><input id="swift_11" name="__tabbed_13" type="radio" /><input id="typescript_11" name="__tabbed_13" type="radio" /><div class="tabbed-labels"><label for="c_33">C++</label><label for="c_34">C</label><label for="c_35">C#</label><label for="dart_11">Dart</label><label for="go_11">Go</label><label for="java_11">Java</label><label for="javascript_11">JavaScript</label><label for="kotlin_11">Kotlin</label><label for="lobster_11">Lobster</label><label for="lua_11">Lua</label><label for="php_11">PHP</label><label for="python_11">Python</label><label for="rust_11">Rust</label><label for="swift_11">Swift</label><label for="typescript_11">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">auto</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">hp</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">mana</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">c_str</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">uint16_t</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_hp</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
<span class="kt">uint16_t</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_mana</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
<span class="n">flatbuffers_string_t</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_name</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// For C#, unlike most other languages support by FlatBuffers, most values</span>
<span class="c1">// (except for vectors and unions) are available as properties instead of</span>
<span class="c1">// accessor methods.</span>
<span class="kt">var</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Hp</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Mana</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Name</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// For Dart, unlike other languages support by FlatBuffers, most values</span>
<span class="c1">// are available as properties instead of accessor methods.</span>
<span class="kd">var</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">hp</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">mana</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">name</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nx">hp</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">Hp</span><span class="p">()</span>
<span class="nx">mana</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">Mana</span><span class="p">()</span>
<span class="nx">name</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nb">string</span><span class="p">(</span><span class="nx">monster</span><span class="p">.</span><span class="nx">Name</span><span class="p">())</span><span class="w"> </span><span class="c1">// Note: `monster.Name()` returns a byte[].</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">short</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">hp</span><span class="p">();</span>
<span class="kt">short</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">mana</span><span class="p">();</span>
<span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">name</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">hp</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">mana</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">name</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">hp</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">mana</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">name</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let hp = monster.hp
let mana = monster.mana
let name = monster.name
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Hp</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Mana</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Name</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$hp</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getHp</span><span class="p">();</span>
<span class="nv">$mana</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getMana</span><span class="p">();</span>
<span class="nv">$name</span> <span class="o">=</span> <span class="nx">monster</span><span class="o">-&gt;</span><span class="na">getName</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">hp</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Hp</span><span class="p">()</span>
<span class="n">mana</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Mana</span><span class="p">()</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Name</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get and test some scalar types from the FlatBuffer.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">hp</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">mana</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">name</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nv">hp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">hp</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">mana</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">mana</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="c1">// returns an optional string</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">hp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">hp</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">mana</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">mana</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">name</span><span class="p">();</span>
</code></pre></div>
</div>
</div>
</div>
<p>These accessors should hold the values <code>300</code>, <code>150</code>, and <code>"Orc"</code> respectively.</p>
<p>The default value of <code>150</code> wasn't stored in the <code>mana</code> field, but we are still
able to retrieve it. That is because the generated accessors return a hard-coded
default value when it doesn't find the value in the buffer.</p>
<h4 id="nested-object-access">Nested Object Access</h4>
<p>Accessing nested objects is very similar, with the nested field pointing to
another object type. Be careful, the field could be <code>null</code> if not present.</p>
<p>For example, accessing the <code>pos</code> <code>struct</code>, which is type <code>Vec3</code> you would do:</p>
<div class="tabbed-set tabbed-alternate" data-tabs="14:15"><input checked="checked" id="c_36" name="__tabbed_14" type="radio" /><input id="c_37" name="__tabbed_14" type="radio" /><input id="c_38" name="__tabbed_14" type="radio" /><input id="dart_12" name="__tabbed_14" type="radio" /><input id="go_12" name="__tabbed_14" type="radio" /><input id="java_12" name="__tabbed_14" type="radio" /><input id="javascript_12" name="__tabbed_14" type="radio" /><input id="kotlin_12" name="__tabbed_14" type="radio" /><input id="lobster_12" name="__tabbed_14" type="radio" /><input id="lua_12" name="__tabbed_14" type="radio" /><input id="php_12" name="__tabbed_14" type="radio" /><input id="python_12" name="__tabbed_14" type="radio" /><input id="rust_12" name="__tabbed_14" type="radio" /><input id="swift_12" name="__tabbed_14" type="radio" /><input id="typescript_12" name="__tabbed_14" type="radio" /><div class="tabbed-labels"><label for="c_36">C++</label><label for="c_37">C</label><label for="c_38">C#</label><label for="dart_12">Dart</label><label for="go_12">Go</label><label for="java_12">Java</label><label for="javascript_12">JavaScript</label><label for="kotlin_12">Kotlin</label><label for="lobster_12">Lobster</label><label for="lua_12">Lua</label><label for="php_12">PHP</label><label for="python_12">Python</label><label for="rust_12">Rust</label><label for="swift_12">Swift</label><label for="typescript_12">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">auto</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">pos</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="o">-&gt;</span><span class="n">x</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="o">-&gt;</span><span class="n">y</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="o">-&gt;</span><span class="n">z</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">ns</span><span class="p">(</span><span class="n">Vec3_struct_t</span><span class="p">)</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_pos</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
<span class="kt">float</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Vec3_x</span><span class="p">(</span><span class="n">pos</span><span class="p">));</span>
<span class="kt">float</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Vec3_y</span><span class="p">(</span><span class="n">pos</span><span class="p">));</span>
<span class="kt">float</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Vec3_z</span><span class="p">(</span><span class="n">pos</span><span class="p">));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">var</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Pos</span><span class="p">.</span><span class="n">Value</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">X</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">Y</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">Z</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">myGame</span><span class="p">.</span><span class="n">Vec3</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">pos</span><span class="p">;</span>
<span class="kt">double</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">x</span><span class="p">;</span>
<span class="kt">double</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">y</span><span class="p">;</span>
<span class="kt">double</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">z</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nx">pos</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">Pos</span><span class="p">(</span><span class="kc">nil</span><span class="p">)</span>
<span class="nx">x</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">X</span><span class="p">()</span>
<span class="nx">y</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">Y</span><span class="p">()</span>
<span class="nx">z</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">Z</span><span class="p">()</span>
<span class="c1">// Note: Whenever you access a new object, like in `Pos()`, a new temporary</span>
<span class="c1">// accessor object gets created. If your code is very performance sensitive,</span>
<span class="c1">// you can pass in a pointer to an existing `Vec3` instead of `nil`. This</span>
<span class="c1">// allows you to reuse it across many calls to reduce the amount of object</span>
<span class="c1">// allocation/garbage collection.</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">Vec3</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">pos</span><span class="p">();</span>
<span class="kt">float</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="na">x</span><span class="p">();</span>
<span class="kt">float</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="na">y</span><span class="p">();</span>
<span class="kt">float</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="na">z</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">pos</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">x</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">y</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">z</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">pos</span><span class="o">!!</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="na">x</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="na">y</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="na">z</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let pos = monster.pos
let x = pos.x
let y = pos.y
let z = pos.z
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Pos</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">pos</span><span class="p">:</span><span class="nf">X</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">pos</span><span class="p">:</span><span class="nf">Y</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">pos</span><span class="p">:</span><span class="nf">Z</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$pos</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getPos</span><span class="p">();</span>
<span class="nv">$x</span> <span class="o">=</span> <span class="nv">$pos</span><span class="o">-&gt;</span><span class="na">getX</span><span class="p">();</span>
<span class="nv">$y</span> <span class="o">=</span> <span class="nv">$pos</span><span class="o">-&gt;</span><span class="na">getY</span><span class="p">();</span>
<span class="nv">$z</span> <span class="o">=</span> <span class="nv">$pos</span><span class="o">-&gt;</span><span class="na">getZ</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">pos</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Pos</span><span class="p">()</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">pos</span><span class="o">.</span><span class="n">X</span><span class="p">()</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">pos</span><span class="o">.</span><span class="n">Y</span><span class="p">()</span>
<span class="n">z</span> <span class="o">=</span> <span class="n">pos</span><span class="o">.</span><span class="n">Z</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">pos</span><span class="p">().</span><span class="n">unwrap</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">x</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">y</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">z</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nv">pos</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">pos</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">x</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">y</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">y</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">z</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">pos</span><span class="p">.</span><span class="n">z</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">pos</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">x</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">y</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">z</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pos</span><span class="p">.</span><span class="nx">z</span><span class="p">();</span>
</code></pre></div>
</div>
</div>
</div>
<p>Where <code>x</code>, <code>y</code>, and <code>z</code> will contain <code>1.0</code>, <code>2.0</code>, and <code>3.0</code> respectively.</p>
<h3 id="vector-access">Vector Access</h3>
<p>Similarly, we can access elements of the <code>inventory</code> <code>vector</code> by indexing it.
You can also iterate over the length of the vector.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="15:15"><input checked="checked" id="c_39" name="__tabbed_15" type="radio" /><input id="c_40" name="__tabbed_15" type="radio" /><input id="c_41" name="__tabbed_15" type="radio" /><input id="dart_13" name="__tabbed_15" type="radio" /><input id="go_13" name="__tabbed_15" type="radio" /><input id="java_13" name="__tabbed_15" type="radio" /><input id="javascript_13" name="__tabbed_15" type="radio" /><input id="kotlin_13" name="__tabbed_15" type="radio" /><input id="lobster_13" name="__tabbed_15" type="radio" /><input id="lua_13" name="__tabbed_15" type="radio" /><input id="php_13" name="__tabbed_15" type="radio" /><input id="python_13" name="__tabbed_15" type="radio" /><input id="rust_13" name="__tabbed_15" type="radio" /><input id="swift_13" name="__tabbed_15" type="radio" /><input id="typescript_13" name="__tabbed_15" type="radio" /><div class="tabbed-labels"><label for="c_39">C++</label><label for="c_40">C</label><label for="c_41">C#</label><label for="dart_13">Dart</label><label for="go_13">Go</label><label for="java_13">Java</label><label for="javascript_13">JavaScript</label><label for="kotlin_13">Kotlin</label><label for="lobster_13">Lobster</label><label for="lua_13">Lua</label><label for="php_13">PHP</label><label for="python_13">Python</label><label for="rust_13">Rust</label><label for="swift_13">Swift</label><label for="typescript_13">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">flatbuffers</span><span class="o">::</span><span class="n">Vector</span><span class="o">&lt;</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">char</span><span class="o">&gt;</span><span class="w"> </span><span class="n">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">inventory</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">inv_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inv</span><span class="o">-&gt;</span><span class="n">size</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">third_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inv</span><span class="o">-&gt;</span><span class="n">Get</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// If `inv` hasn&#39;t been set, it will be null. It is valid get</span>
<span class="c1">// the length of null which will be 0, useful for iteration.</span>
<span class="n">flatbuffers_uint8_vec_t</span><span class="w"> </span><span class="n">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_inventory</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
<span class="kt">size_t</span><span class="w"> </span><span class="n">inv_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">flatbuffers_uint8_vec_len</span><span class="p">(</span><span class="n">inv</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">InventoryLength</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Inventory</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">inventory</span><span class="p">.</span><span class="n">length</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span><span class="n">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">inventory</span><span class="p">[</span><span class="m">2</span><span class="p">];</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nx">invLength</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">InventoryLength</span><span class="p">()</span>
<span class="nx">thirdItem</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">Inventory</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">inventoryLength</span><span class="p">();</span>
<span class="kt">byte</span><span class="w"> </span><span class="n">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">inventory</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">inventoryLength</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">inventory</span><span class="p">(</span><span class="mf">2</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">inventoryLength</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">inventory</span><span class="p">(</span><span class="m">2</span><span class="p">)</span><span class="o">!!</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let inv_len = monster.inventory_length
let third_item = monster.inventory(2)
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">InventoryLength</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Inventory</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="w"> </span><span class="c1">-- Lua is 1-based</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$inv_len</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getInventoryLength</span><span class="p">();</span>
<span class="nv">$third_item</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getInventory</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">inv_len</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">InventoryLength</span><span class="p">()</span>
<span class="n">third_item</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Inventory</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get and test an element from the `inventory` FlatBuffer&#39;s `vector`.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">inv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">inventory</span><span class="p">().</span><span class="n">unwrap</span><span class="p">();</span>
<span class="c1">// Note that this vector is returned as a slice, because direct access for</span>
<span class="c1">// this type, a `u8` vector, is safe on all platforms:</span>
<span class="kd">let</span><span class="w"> </span><span class="n">third_item</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inv</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get a the count of objects in the vector</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">count</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">inventoryCount</span>
<span class="c1">// get item at index 4</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">object</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">inventory</span><span class="p">(</span><span class="n">at</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">)</span>
<span class="c1">// or you can fetch the entire array</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">inv</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">inventory</span>
<span class="c1">// inv[4] should equal object</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">invLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">inventoryLength</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">thirdItem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">inventory</span><span class="p">(</span><span class="mf">2</span><span class="p">);</span>
</code></pre></div>
</div>
</div>
</div>
<p>For vectors of tables, you can access the elements like any other vector, except
you need to handle the result as a FlatBuffer table. Here we iterate over the
<code>weapons</code> vector that is houses <code>Weapon</code> <code>tables</code>.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="16:15"><input checked="checked" id="c_42" name="__tabbed_16" type="radio" /><input id="c_43" name="__tabbed_16" type="radio" /><input id="c_44" name="__tabbed_16" type="radio" /><input id="dart_14" name="__tabbed_16" type="radio" /><input id="go_14" name="__tabbed_16" type="radio" /><input id="java_14" name="__tabbed_16" type="radio" /><input id="javascript_14" name="__tabbed_16" type="radio" /><input id="kotlin_14" name="__tabbed_16" type="radio" /><input id="lobster_14" name="__tabbed_16" type="radio" /><input id="lua_14" name="__tabbed_16" type="radio" /><input id="php_14" name="__tabbed_16" type="radio" /><input id="python_14" name="__tabbed_16" type="radio" /><input id="rust_14" name="__tabbed_16" type="radio" /><input id="swift_14" name="__tabbed_16" type="radio" /><input id="typescript_14" name="__tabbed_16" type="radio" /><div class="tabbed-labels"><label for="c_42">C++</label><label for="c_43">C</label><label for="c_44">C#</label><label for="dart_14">Dart</label><label for="go_14">Go</label><label for="java_14">Java</label><label for="javascript_14">JavaScript</label><label for="kotlin_14">Kotlin</label><label for="lobster_14">Lobster</label><label for="lua_14">Lua</label><label for="php_14">PHP</label><label for="python_14">Python</label><label for="rust_14">Rust</label><label for="swift_14">Swift</label><label for="typescript_14">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">flatbuffers</span><span class="o">::</span><span class="n">Vector</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">weapons</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">weapon_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapons</span><span class="o">-&gt;</span><span class="n">size</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">second_weapon_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapons</span><span class="o">-&gt;</span><span class="n">Get</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">str</span><span class="p">();</span>
<span class="k">auto</span><span class="w"> </span><span class="n">second_weapon_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapons</span><span class="o">-&gt;</span><span class="n">Get</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">-&gt;</span><span class="n">damage</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_t</span><span class="p">)</span><span class="w"> </span><span class="n">weapons</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_weapons</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
<span class="kt">size_t</span><span class="w"> </span><span class="n">weapons_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_len</span><span class="p">(</span><span class="n">weapons</span><span class="p">));</span>
<span class="c1">// We can use `const char *` instead of `flatbuffers_string_t`.</span>
<span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">second_weapon_name</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_name</span><span class="p">(</span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_at</span><span class="p">(</span><span class="n">weapons</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))));</span>
<span class="kt">uint16_t</span><span class="w"> </span><span class="n">second_weapon_damage</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_damage</span><span class="p">(</span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_vec_at</span><span class="p">(</span><span class="n">weapons</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">))));</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">WeaponsLength</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Weapons</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="n">Name</span><span class="p">;</span>
<span class="kt">var</span><span class="w"> </span><span class="n">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Weapons</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="n">Damage</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">weapons</span><span class="p">.</span><span class="n">length</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span><span class="n">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">weapons</span><span class="p">[</span><span class="m">1</span><span class="p">].</span><span class="n">name</span><span class="p">;</span>
<span class="kd">var</span><span class="w"> </span><span class="n">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Weapons</span><span class="p">[</span><span class="m">1</span><span class="p">].</span><span class="n">damage</span><span class="p">;</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nx">weaponLength</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">WeaponsLength</span><span class="p">()</span>
<span class="c1">// We need a `sample.Weapon` to pass into `monster.Weapons()`</span>
<span class="c1">// to capture the output of the function.k</span>
<span class="nx">weapon</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nb">new</span><span class="p">(</span><span class="nx">sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">Weapons</span><span class="p">(</span><span class="nx">weapon</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">secondWeaponName</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">weapon</span><span class="p">.</span><span class="nx">Name</span><span class="p">()</span>
<span class="w"> </span><span class="nx">secondWeaponDamage</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">weapon</span><span class="p">.</span><span class="nx">Damage</span><span class="p">()</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">weaponsLength</span><span class="p">();</span>
<span class="n">String</span><span class="w"> </span><span class="n">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">weapons</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="na">name</span><span class="p">();</span>
<span class="kt">short</span><span class="w"> </span><span class="n">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">weapons</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="na">damage</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">weaponsLength</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">weapons</span><span class="p">(</span><span class="mf">1</span><span class="p">).</span><span class="nx">name</span><span class="p">();</span>
<span class="kd">var</span><span class="w"> </span><span class="nx">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">weapons</span><span class="p">(</span><span class="mf">1</span><span class="p">).</span><span class="nx">damage</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">weaponsLength</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">weapons</span><span class="p">(</span><span class="m">1</span><span class="p">)</span><span class="o">!!</span><span class="p">.</span><span class="na">name</span>
<span class="kd">val</span><span class="w"> </span><span class="nv">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">weapons</span><span class="p">(</span><span class="m">1</span><span class="p">)</span><span class="o">!!</span><span class="p">.</span><span class="na">damage</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>let weapons_length = monster.weapons_length
let second_weapon_name = monster.weapons(1).name
let second_weapon_damage = monster.weapons(1).damage
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">WeaponsLength</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Weapon</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span><span class="nf">Name</span><span class="p">()</span>
<span class="kd">local</span><span class="w"> </span><span class="nv">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Weapon</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span><span class="nf">Damage</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$weapons_len</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getWeaponsLength</span><span class="p">();</span>
<span class="nv">$second_weapon_name</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getWeapons</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">getName</span><span class="p">();</span>
<span class="nv">$second_weapon_damage</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getWeapons</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">getDamage</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">weapons_length</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">WeaponsLength</span><span class="p">()</span>
<span class="n">second_weapon_name</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Weapons</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">Name</span><span class="p">()</span>
<span class="n">second_weapon_damage</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">Weapons</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">Damage</span><span class="p">()</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get and test the `weapons` FlatBuffers&#39;s `vector`.</span>
<span class="kd">let</span><span class="w"> </span><span class="n">weps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">weapons</span><span class="p">().</span><span class="n">unwrap</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">weps_len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weps</span><span class="p">.</span><span class="n">len</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">wep2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weps</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="n">second_weapon_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wep2</span><span class="p">.</span><span class="n">name</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="n">second_weapon_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wep2</span><span class="p">.</span><span class="n">damage</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get the count of weapon objects</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">wepsCount</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">weaponsCount</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weapon2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">weapons</span><span class="p">(</span><span class="n">at</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weaponName</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">weapon2</span><span class="p">.</span><span class="n">name</span>
<span class="kd">let</span><span class="w"> </span><span class="nv">weaponDmg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">weapon2</span><span class="p">.</span><span class="n">damage</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">weaponsLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">weaponsLength</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">secondWeaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">weapons</span><span class="p">(</span><span class="mf">1</span><span class="p">).</span><span class="nx">name</span><span class="p">();</span>
<span class="kd">let</span><span class="w"> </span><span class="nx">secondWeaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">weapons</span><span class="p">(</span><span class="mf">1</span><span class="p">).</span><span class="nx">damage</span><span class="p">();</span>
</code></pre></div>
</div>
</div>
</div>
<h3 id="union-access">Union Access</h3>
<p>Lastly , we can access our <code>equipped</code> <code>union</code> field. Just like when we created
the union, we need to get both parts of the union: the type and the data.</p>
<p>We can access the type to dynamically cast the data as needed (since the union
only stores a FlatBuffer <code>table</code>).</p>
<div class="tabbed-set tabbed-alternate" data-tabs="17:15"><input checked="checked" id="c_45" name="__tabbed_17" type="radio" /><input id="c_46" name="__tabbed_17" type="radio" /><input id="c_47" name="__tabbed_17" type="radio" /><input id="dart_15" name="__tabbed_17" type="radio" /><input id="go_15" name="__tabbed_17" type="radio" /><input id="java_15" name="__tabbed_17" type="radio" /><input id="javascript_15" name="__tabbed_17" type="radio" /><input id="kotlin_15" name="__tabbed_17" type="radio" /><input id="lobster_15" name="__tabbed_17" type="radio" /><input id="lua_15" name="__tabbed_17" type="radio" /><input id="php_15" name="__tabbed_17" type="radio" /><input id="python_15" name="__tabbed_17" type="radio" /><input id="rust_15" name="__tabbed_17" type="radio" /><input id="swift_15" name="__tabbed_17" type="radio" /><input id="typescript_15" name="__tabbed_17" type="radio" /><div class="tabbed-labels"><label for="c_45">C++</label><label for="c_46">C</label><label for="c_47">C#</label><label for="dart_15">Dart</label><label for="go_15">Go</label><label for="java_15">Java</label><label for="javascript_15">JavaScript</label><label for="kotlin_15">Kotlin</label><label for="lobster_15">Lobster</label><label for="lua_15">Lua</label><label for="php_15">PHP</label><label for="python_15">Python</label><label for="rust_15">Rust</label><label for="swift_15">Swift</label><label for="typescript_15">TypeScript</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">auto</span><span class="w"> </span><span class="n">union_type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">equipped_type</span><span class="p">();</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">union_type</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">Equipment_Weapon</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Requires `static_cast` to type `const Weapon*`.</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">static_cast</span><span class="o">&lt;</span><span class="k">const</span><span class="w"> </span><span class="n">Weapon</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">monster</span><span class="o">-&gt;</span><span class="n">equipped</span><span class="p">());</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">weapon_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">()</span><span class="o">-&gt;</span><span class="n">str</span><span class="p">();</span><span class="w"> </span><span class="c1">// &quot;Axe&quot;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">weapon_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="o">-&gt;</span><span class="n">damage</span><span class="p">();</span><span class="w"> </span><span class="c1">// 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Access union type field.</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_equipped_type</span><span class="p">(</span><span class="n">monster</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Equipment_Weapon</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Cast to appropriate type:</span>
<span class="w"> </span><span class="c1">// C allows for silent void pointer assignment, so we need no</span>
<span class="w"> </span><span class="c1">// explicit cast.</span>
<span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_table_t</span><span class="p">)</span><span class="w"> </span><span class="n">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Monster_equipped</span><span class="p">(</span><span class="n">monster</span><span class="p">));</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">weapon_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_name</span><span class="p">(</span><span class="n">weapon</span><span class="p">));</span><span class="w"> </span><span class="c1">// &quot;Axe&quot;</span>
<span class="w"> </span><span class="kt">uint16_t</span><span class="w"> </span><span class="n">weapon_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ns</span><span class="p">(</span><span class="n">Weapon_damage</span><span class="p">(</span><span class="n">weapon</span><span class="p">));</span><span class="w"> </span><span class="c1">// 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">var</span><span class="w"> </span><span class="n">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">EquippedType</span><span class="p">;</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">Equipment</span><span class="p">.</span><span class="n">Weapon</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">Equipped</span><span class="o">&lt;</span><span class="n">Weapon</span><span class="o">&gt;</span><span class="p">().</span><span class="n">Value</span><span class="p">;</span>
<span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="n">Name</span><span class="p">;</span><span class="w"> </span><span class="c1">// &quot;Axe&quot;</span>
<span class="w"> </span><span class="kt">var</span><span class="w"> </span><span class="n">weaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="n">Damage</span><span class="p">;</span><span class="w"> </span><span class="c1">// 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">equippedType</span><span class="p">.</span><span class="n">value</span><span class="p">;</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">EquipmentTypeId</span><span class="p">.</span><span class="n">Weapon</span><span class="p">.</span><span class="n">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">Weapon</span><span class="w"> </span><span class="n">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mon</span><span class="p">.</span><span class="n">equipped</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">myGame</span><span class="p">.</span><span class="n">Weapon</span><span class="p">;</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="n">name</span><span class="p">;</span><span class="w"> </span><span class="c1">// &quot;Axe&quot;</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">weaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="n">damage</span><span class="p">;</span><span class="w"> </span><span class="c1">// 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// We need a `flatbuffers.Table` to capture the output of the</span>
<span class="c1">// `monster.Equipped()` function.</span>
<span class="nx">unionTable</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nb">new</span><span class="p">(</span><span class="nx">flatbuffers</span><span class="p">.</span><span class="nx">Table</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">Equipped</span><span class="p">(</span><span class="nx">unionTable</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">unionType</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">EquippedType</span><span class="p">()</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nx">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">sample</span><span class="p">.</span><span class="nx">EquipmentWeapon</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Create a `sample.Weapon` object that can be initialized with the</span>
<span class="w"> </span><span class="c1">// contents of the `flatbuffers.Table` (`unionTable`), which was</span>
<span class="w"> </span><span class="c1">// populated by `monster.Equipped()`.</span>
<span class="w"> </span><span class="nx">unionWeapon</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">new</span><span class="p">(</span><span class="nx">sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">)</span>
<span class="w"> </span><span class="nx">unionWeapon</span><span class="p">.</span><span class="nx">Init</span><span class="p">(</span><span class="nx">unionTable</span><span class="p">.</span><span class="nx">Bytes</span><span class="p">,</span><span class="w"> </span><span class="nx">unionTable</span><span class="p">.</span><span class="nx">Pos</span><span class="p">)</span>
<span class="w"> </span><span class="nx">weaponName</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">unionWeapon</span><span class="p">.</span><span class="nx">Name</span><span class="p">()</span>
<span class="w"> </span><span class="nx">weaponDamage</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">unionWeapon</span><span class="p">.</span><span class="nx">Damage</span><span class="p">()</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">EquippedType</span><span class="p">();</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">Equipment</span><span class="p">.</span><span class="na">Weapon</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Requires an explicit cast to `Weapon`.</span>
<span class="w"> </span><span class="n">Weapon</span><span class="w"> </span><span class="n">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Weapon</span><span class="p">)</span><span class="n">monster</span><span class="p">.</span><span class="na">equipped</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">Weapon</span><span class="p">());</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="na">name</span><span class="p">();</span><span class="w"> </span><span class="c1">// &quot;Axe&quot;</span>
<span class="w"> </span><span class="kt">short</span><span class="w"> </span><span class="n">weaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="na">damage</span><span class="p">();</span><span class="w"> </span><span class="c1">// 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="nx">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">equippedType</span><span class="p">();</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Equipment</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// &#39;Axe&#39;</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">equipped</span><span class="p">(</span><span class="ow">new</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">()).</span><span class="nx">name</span><span class="p">();</span>
<span class="w"> </span><span class="c1">// 5</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">weaponDamage</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">equipped</span><span class="p">(</span><span class="ow">new</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">()).</span><span class="nx">damage</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="nv">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">EquippedType</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">Equipment</span><span class="p">.</span><span class="na">Weapon</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Requires an explicit cast to `Weapon`.</span>
<span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">weapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="na">equipped</span><span class="p">(</span><span class="n">Weapon</span><span class="p">())</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">Weapon</span>
<span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="na">name</span><span class="w"> </span><span class="c1">// &quot;Axe&quot;</span>
<span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">weaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">weapon</span><span class="p">.</span><span class="na">damage</span><span class="w"> </span><span class="c1">// 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>union_type = monster.equipped_type
if union_type == MyGame_Sample_Equipment_Weapon:
// `monster.equipped_as_Weapon` returns a FlatBuffer handle much like
// normal table fields, but this is only valid to call if we already
// know it is the correct type.
let union_weapon = monster.equipped_as_Weapon
let weapon_name = union_weapon.name // &quot;Axe&quot;
let weapon_damage = union_weapon.damage // 5
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">local</span><span class="w"> </span><span class="nv">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">EquippedType</span><span class="p">()</span>
<span class="kr">if</span><span class="w"> </span><span class="nv">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nv">equipment</span><span class="p">.</span><span class="py">Weapon</span><span class="w"> </span><span class="kr">then</span>
<span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">unionWeapon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">weapon</span><span class="p">.</span><span class="nf">New</span><span class="p">()</span>
<span class="w"> </span><span class="nv">unionWeapon</span><span class="p">:</span><span class="nf">Init</span><span class="p">(</span><span class="nv">mon</span><span class="p">:</span><span class="nf">Equipped</span><span class="p">().</span><span class="nv">bytes</span><span class="p">,</span><span class="w"> </span><span class="nv">mon</span><span class="p">:</span><span class="nf">Equipped</span><span class="p">().</span><span class="nv">pos</span><span class="p">)</span>
<span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">unionWeapon</span><span class="p">:</span><span class="nf">Name</span><span class="p">()</span><span class="w"> </span><span class="c1">-- &#39;Axe&#39;</span>
<span class="w"> </span><span class="kd">local</span><span class="w"> </span><span class="nv">weaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">unionWeapon</span><span class="p">:</span><span class="nf">Damage</span><span class="p">()</span><span class="w"> </span><span class="c1">-- 5</span>
<span class="kr">end</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="nv">$union_type</span> <span class="o">=</span> <span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getEquippedType</span><span class="p">();</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$union_type</span> <span class="o">==</span> <span class="nx">\MyGame\Sample\Equipment</span><span class="o">::</span><span class="na">Weapon</span><span class="p">)</span> <span class="p">{</span>
<span class="c1">// &quot;Axe&quot;</span>
<span class="nv">$weapon_name</span> <span class="o">=</span>
<span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getEquipped</span><span class="p">(</span><span class="k">new</span> <span class="nx">\MyGame\Sample\Weapon</span><span class="p">())</span><span class="o">-&gt;</span><span class="na">getName</span><span class="p">();</span>
<span class="c1">// 5</span>
<span class="nv">$weapon_damage</span> <span class="o">=</span>
<span class="nv">$monster</span><span class="o">-&gt;</span><span class="na">getEquipped</span><span class="p">(</span><span class="k">new</span> <span class="nx">\MyGame\Sample\Weapon</span><span class="p">())</span><span class="o">-&gt;</span><span class="na">getDamage</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="n">union_type</span> <span class="o">=</span> <span class="n">monster</span><span class="o">.</span><span class="n">EquippedType</span><span class="p">()</span>
<span class="k">if</span> <span class="n">union_type</span> <span class="o">==</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Equipment</span><span class="o">.</span><span class="n">Equipment</span><span class="p">()</span><span class="o">.</span><span class="n">Weapon</span><span class="p">:</span>
<span class="c1"># `monster.Equipped()` returns a `flatbuffers.Table`, which can be used</span>
<span class="c1"># to initialize a `MyGame.Sample.Weapon.Weapon()`.</span>
<span class="n">union_weapon</span> <span class="o">=</span> <span class="n">MyGame</span><span class="o">.</span><span class="n">Sample</span><span class="o">.</span><span class="n">Weapon</span><span class="o">.</span><span class="n">Weapon</span><span class="p">()</span>
<span class="n">union_weapon</span><span class="o">.</span><span class="n">Init</span><span class="p">(</span><span class="n">monster</span><span class="o">.</span><span class="n">Equipped</span><span class="p">()</span><span class="o">.</span><span class="n">Bytes</span><span class="p">,</span> <span class="n">monster</span><span class="o">.</span><span class="n">Equipped</span><span class="p">()</span><span class="o">.</span><span class="n">Pos</span><span class="p">)</span>
<span class="n">weapon_name</span> <span class="o">=</span> <span class="n">union_weapon</span><span class="o">.</span><span class="n">Name</span><span class="p">()</span> <span class="o">//</span> <span class="s1">&#39;Axe&#39;</span>
<span class="n">weapon_damage</span> <span class="o">=</span> <span class="n">union_weapon</span><span class="o">.</span><span class="n">Damage</span><span class="p">()</span> <span class="o">//</span> <span class="mi">5</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get and test the `Equipment` union (`equipped` field).</span>
<span class="c1">// `equipped_as_weapon` returns a FlatBuffer handle much like normal table</span>
<span class="c1">// fields, but this will return `None` if the union is not actually of that</span>
<span class="c1">// type.</span>
<span class="k">if</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">equipped_type</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">Equipment</span><span class="p">::</span><span class="n">Weapon</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">equipped</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">equipped_as_weapon</span><span class="p">().</span><span class="n">unwrap</span><span class="p">();</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">weapon_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">equipped</span><span class="p">.</span><span class="n">name</span><span class="p">();</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">weapon_damage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">equipped</span><span class="p">.</span><span class="n">damage</span><span class="p">();</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="c1">// Get and check if the monster has an equipped item</span>
<span class="k">if</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">equippedType</span><span class="w"> </span><span class="p">==</span><span class="w"> </span><span class="p">.</span><span class="n">weapon</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">_weapon</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">monster</span><span class="p">.</span><span class="n">equipped</span><span class="p">(</span><span class="n">type</span><span class="p">:</span><span class="w"> </span><span class="n">Weapon</span><span class="p">.</span><span class="kc">self</span><span class="p">)</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">_weapon</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="c1">// should return &quot;Axe&quot;</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nv">dmg</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">_weapon</span><span class="p">.</span><span class="n">damage</span><span class="w"> </span><span class="c1">// should return 5</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">unionType</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">equippedType</span><span class="p">();</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">unionType</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Equipment</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// &#39;Axe&#39;</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">weaponName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">equipped</span><span class="p">(</span><span class="ow">new</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">()).</span><span class="nx">name</span><span class="p">();</span>
<span class="w"> </span><span class="c1">// 5</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">weaponDamage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">monster</span><span class="p">.</span><span class="nx">equipped</span><span class="p">(</span><span class="ow">new</span><span class="w"> </span><span class="nx">MyGame</span><span class="p">.</span><span class="nx">Sample</span><span class="p">.</span><span class="nx">Weapon</span><span class="p">()).</span><span class="nx">damage</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div>
</div>
</div>
</div>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../quick_start/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Quick Start">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Quick Start
</div>
</div>
</a>
<a href="../building/" class="md-footer__link md-footer__link--next" aria-label="Next: Building">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Building
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2025 Google
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://github.com/google/flatbuffers" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
<a href="https:///discord.gg/6qgKs3R" target="_blank" rel="noopener" title="" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1.1s-.6.4-.8.8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2C162.5 39 122.2 51.5 84.1 69c-.3.1-.6.4-.8.7C7.1 183.5-13.8 294.6-3.6 404.2c0 .3.1.5.2.8s.3.4.5.6c44.4 32.9 94 58 146.8 74.2.4.1.8.1 1.1 0s.7-.4.9-.7c11.3-15.4 21.4-31.8 30-48.8.1-.2.2-.5.2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6.2-.9.3-.5.6-.7c3.1-2.3 6.2-4.7 9.1-7.1.3-.2.6-.4.9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1.7-.2 1-.2s.7.2.9.4c2.9 2.4 6 4.9 9.1 7.2.2.2.4.4.6.7s.2.6.2.9-.1.6-.3.9-.4.5-.6.6c-14.7 8.6-30 15.9-45.9 21.8-.2.1-.5.2-.7.4s-.3.4-.4.7-.1.5-.1.8.1.5.2.8c8.8 17 18.8 33.3 30 48.8.2.3.6.6.9.7s.8.1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2.2-.2.4-.4.5-.6s.2-.5.2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2m195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2"/></svg>
</a>
<a href="https://twitter.com/dbaileychess" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M357.2 48h70.6L273.6 224.2 455 464H313L201.7 318.6 74.5 464H3.8l164.9-188.5L-5.2 48h145.6l100.5 132.9zm-24.8 373.8h39.1L119.1 88h-42z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.code.annotate", "content.tabs.link", "navigation.expand", "navigation.footer", "header.autohide", "content.action.edit"], "search": "../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.e71a0d61.min.js"></script>
</body>
</html>