You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by pa...@apache.org on 2023/01/24 15:12:02 UTC

[arrow-nanoarrow] branch main updated: Update build configuration for IPC extension (#93)

This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new bd7cec6  Update build configuration for IPC extension (#93)
bd7cec6 is described below

commit bd7cec64c6a99bf0dcd2d2754d4514373cac1458
Author: Dewey Dunnington <de...@dunnington.ca>
AuthorDate: Tue Jan 24 11:11:54 2023 -0400

    Update build configuration for IPC extension (#93)
    
    * move generated files to their own directory
    
    * use the concatenation feature in the flatcc generator
    
    * vendor flatcc
    
    * use vendored flatcc and add option for shared
    
    * move linking reponsibility to caller
    
    * include nanoarrow.h
    
    * maybe just src/nanoarrow instead of src/nanoarrow_ipc
    
    * namespace
    
    * clean up inclues
    
    * steal nanoarrow's cmake config for build/install
    
    * don't commit dist/ files
    
    * implement the bundling
    
    * fix typo
    
    * prune vendored flatcc
    
    * update scripts for a more minimal vendoring of flatcc
    
    * update vendored files
    
    * add note
    
    * add initial example for ipc with cmake
    
    * add to CI
    
    * maybe fix build
    
    * just curious about namespace
    
    * try cache
    
    * Maybe explicit link?
    
    * try without the namespace
    
    * more link?
    
    * add question
    
    * whitespace
    
    * try it this way again
    
    * make output verbose
    
    * maybe this way?
    
    * maybe reversed?
    
    * see what that link command looks like
    
    * try again
    
    * back to what I think it should be
    
    * readme, fix typos
    
    * try a test workflow for IPC
    
    * fix typo
    
    * typos
    
    * try without coverage
    
    * punt on warnings for now
    
    * maybe fix build
    
    * bundle flatcc more compactly
    
    * retry bundling
    
    * rename artifact, add commit bundling code
    
    * explicit license, add passing attempt at README for dist/ files
---
 .github/workflows/build-and-test-ipc.yaml          |   186 +
 .github/workflows/examples.yaml                    |    18 +-
 LICENSE.txt                                        |  2191 +-
 dist/README.md                                     |     4 +-
 examples/cmake-ipc/CMakeLists.txt                  |    54 +
 {dist => examples/cmake-ipc}/README.md             |    26 +-
 examples/cmake-ipc/invalid.arrows                  |   Bin 0 -> 280 bytes
 examples/cmake-ipc/schema-valid.arrows             |   Bin 0 -> 280 bytes
 examples/cmake-ipc/src/app.c                       |    42 +
 examples/cmake-ipc/src/library.c                   |    42 +
 examples/cmake-ipc/src/library.h                   |    26 +
 .../{dev/update_fbs.sh => .gitignore}              |    18 +-
 extensions/nanoarrow_ipc/CMakeLists.txt            |   174 +-
 extensions/nanoarrow_ipc/dev/update_fbs.sh         |     5 +-
 .../nanoarrow_ipc/dev/update_vendored_flatcc.sh    |    78 +
 .../{nanoarrow_ipc => nanoarrow}/nanoarrow_ipc.c   |   158 +-
 .../nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.h    |    85 +
 .../src/nanoarrow/nanoarrow_ipc_flatcc_generated.h | 20271 +++++++++++++++++++
 .../nanoarrow_ipc_test.cc                          |    66 +-
 .../nanoarrow_ipc/src/nanoarrow_ipc/File_builder.h |    92 -
 .../nanoarrow_ipc/src/nanoarrow_ipc/File_reader.h  |   105 -
 .../src/nanoarrow_ipc/File_verifier.h              |    69 -
 .../src/nanoarrow_ipc/Message_builder.h            |   247 -
 .../src/nanoarrow_ipc/Message_reader.h             |   323 -
 .../src/nanoarrow_ipc/Message_verifier.h           |   176 -
 .../src/nanoarrow_ipc/Schema_builder.h             |   976 -
 .../src/nanoarrow_ipc/Schema_reader.h              |  1289 --
 .../src/nanoarrow_ipc/Schema_verifier.h            |   762 -
 .../src/nanoarrow_ipc/SparseTensor_builder.h       |   253 -
 .../src/nanoarrow_ipc/SparseTensor_reader.h        |   350 -
 .../src/nanoarrow_ipc/SparseTensor_verifier.h      |   154 -
 .../src/nanoarrow_ipc/Tensor_builder.h             |   120 -
 .../src/nanoarrow_ipc/Tensor_reader.h              |    97 -
 .../src/nanoarrow_ipc/Tensor_verifier.h            |    77 -
 .../src/nanoarrow_ipc/flatbuffers_common_builder.h |   685 -
 .../src/nanoarrow_ipc/flatbuffers_common_reader.h  |   578 -
 .../src/nanoarrow_ipc/nanoarrow_ipc.h              |   188 -
 extensions/nanoarrow_ipc/thirdparty/flatcc/LICENSE |   202 +
 .../flatcc/include/flatcc/flatcc_accessors.h       |   101 +
 .../flatcc/include/flatcc/flatcc_alloc.h           |   127 +
 .../flatcc/include/flatcc/flatcc_assert.h          |    45 +
 .../flatcc/include/flatcc/flatcc_builder.h         |  1908 ++
 .../flatcc/include/flatcc/flatcc_emitter.h         |   215 +
 .../flatcc/include/flatcc/flatcc_endian.h          |   125 +
 .../flatcc/include/flatcc/flatcc_epilogue.h        |     8 +
 .../flatcc/include/flatcc/flatcc_flatbuffers.h     |    55 +
 .../flatcc/include/flatcc/flatcc_identifier.h      |   148 +
 .../thirdparty/flatcc/include/flatcc/flatcc_iov.h  |    31 +
 .../flatcc/include/flatcc/flatcc_prologue.h        |     8 +
 .../flatcc/include/flatcc/flatcc_refmap.h          |   144 +
 .../flatcc/include/flatcc/flatcc_rtconfig.h        |   162 +
 .../flatcc/include/flatcc/flatcc_types.h           |    97 +
 .../flatcc/include/flatcc/flatcc_verifier.h        |   239 +
 .../include/flatcc/portable/flatcc_portable.h      |    14 +
 .../include/flatcc/portable/paligned_alloc.h       |   210 +
 .../flatcc/include/flatcc/portable/pattributes.h   |    84 +
 .../flatcc/include/flatcc/portable/pdiagnostic.h   |    85 +
 .../include/flatcc/portable/pdiagnostic_pop.h      |    20 +
 .../include/flatcc/portable/pdiagnostic_push.h     |    51 +
 .../flatcc/include/flatcc/portable/pendian.h       |   206 +
 .../include/flatcc/portable/pendian_detect.h       |   118 +
 .../flatcc/include/flatcc/portable/pinline.h       |    19 +
 .../flatcc/include/flatcc/portable/pinttypes.h     |    52 +
 .../flatcc/include/flatcc/portable/portable.h      |     2 +
 .../include/flatcc/portable/portable_basic.h       |    25 +
 .../include/flatcc/portable/pstatic_assert.h       |    67 +
 .../flatcc/include/flatcc/portable/pstdalign.h     |   162 +
 .../flatcc/include/flatcc/portable/pstdint.h       |   898 +
 .../flatcc/include/flatcc/portable/punaligned.h    |   190 +
 .../flatcc/include/flatcc/portable/pversion.h      |     6 +
 .../flatcc/include/flatcc/portable/pwarnings.h     |    52 +
 .../thirdparty/flatcc/src/runtime/builder.c        |  2035 ++
 .../thirdparty/flatcc/src/runtime/emitter.c        |   269 +
 .../thirdparty/flatcc/src/runtime/refmap.c         |   248 +
 .../thirdparty/flatcc/src/runtime/verifier.c       |   617 +
 75 files changed, 30116 insertions(+), 8914 deletions(-)

diff --git a/.github/workflows/build-and-test-ipc.yaml b/.github/workflows/build-and-test-ipc.yaml
new file mode 100644
index 0000000..fa0e398
--- /dev/null
+++ b/.github/workflows/build-and-test-ipc.yaml
@@ -0,0 +1,186 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: test-c-ipc
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    branches:
+      - main
+    paths:
+      - 'CMakeLists.txt'
+      - '.github/workflows/build-and-test-ipc.yaml'
+      - 'src/nanoarrow/**'
+      - 'extensions/nanoarrow_ipc/**'
+
+jobs:
+  test-c-ipc:
+
+    runs-on: ubuntu-latest
+
+    name: ${{ matrix.config.label }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        config:
+          - {label: default-build}
+          - {label: namespaced-build}
+          - {label: bundled-build}
+
+    env:
+      SUBDIR: 'extensions/nanoarrow_ipc'
+
+    steps:
+      - name: Checkout repo
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+
+      - name: Install dependencies
+        run: |
+          sudo apt-get update
+          sudo apt install -y -V ca-certificates lsb-release wget cmake valgrind
+          wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb
+          sudo apt-get install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb
+          sudo apt-get update
+          sudo apt-get install -y -V libarrow-dev
+          rm apache-arrow-apt-*.deb
+
+      - name: Build (default)
+        if: matrix.config.label == 'default-build'
+        run: |
+          cd $SUBDIR
+          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
+          sudo ldconfig
+          mkdir build
+          cd build
+          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_IPC_BUILD_TESTS=ON
+          cmake --build .
+
+      - name: Build (namespaced)
+        if: matrix.config.label == 'namespaced-build'
+        run: |
+          cd $SUBDIR
+          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
+          sudo ldconfig
+          mkdir build
+          cd build
+          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_IPC_BUILD_TESTS=ON -DNANOARROW_NAMESPACE=SomeUserNamespace
+          cmake --build .
+
+      - name: Build (bundled)
+        if: matrix.config.label == 'bundled-build'
+        run: |
+          cd $SUBDIR
+          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
+          sudo ldconfig
+          mkdir build
+          cd build
+          cmake .. -DCMAKE_BUILD_TYPE=Debug -DNANOARROW_IPC_BUILD_TESTS=ON -DNANOARROW_IPC_BUNDLE=ON
+          cmake --build .
+
+      - name: Check for non-namespaced symbols in namespaced build
+        if: matrix.config.label == 'namespaced-build'
+        run: |
+          cd $SUBDIR
+
+          # Dump all symbols
+          nm --extern-only build/libnanoarrow_ipc.a
+
+          # Check for non-namespaced ones
+          ARROW_SYMBOLS=`nm --extern-only build/libnanoarrow_ipc.a | grep "T Arrow" || true`
+          if [ -z "$ARROW_SYMBOLS" ]; then
+            exit 0
+          fi
+
+          echo "Found the following non-namespaced extern symbols:"
+          echo $ARROW_SYMBOLS
+          exit 1
+
+      - name: Run tests
+        run: |
+          cd $SUBDIR
+
+          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
+          sudo ldconfig
+          cd build
+          ctest -T test --output-on-failure .
+
+      - name: Run tests with valgrind
+        if: matrix.config.label == 'default-build'
+        run: |
+          cd $SUBDIR
+
+          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/dist/lib
+          sudo ldconfig
+          cd build
+          ctest -T memcheck .
+
+      - name: Upload memcheck results
+        if: failure() && matrix.config.label == 'default-build'
+        uses: actions/upload-artifact@main
+        with:
+          name: nanoarrow-ipc-memcheck
+          path: extensions/nanoarrow_ipc/build/Testing/Temporary/MemoryChecker.*.log
+
+  bundle-dist-ipc:
+    needs: test-c-ipc
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout repo
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+
+      - name: Install dependencies
+        run: |
+          sudo apt-get install -y cmake
+
+      - name: Create bundle
+        run: |
+          cd extensions/nanoarrow_ipc
+          mkdir build && cd build
+          cmake .. -DNANOARROW_IPC_BUNDLE=ON
+          cmake --build .
+          cmake --install . --prefix=../nanoarrow-latest
+          cd ..
+          cp -r thirdparty/flatcc nanoarrow-latest/flatcc
+          zip nanoarrow-latest.zip nanoarrow-latest/nanoarrow_ipc.h nanoarrow-latest/nanoarrow_ipc.c nanoarrow-latest/flatcc.c nanoarrow-latest/flatcc/**
+
+      - name: Upload bundle artifact
+        uses: actions/upload-artifact@main
+        with:
+          name: nanoarrow-ipc-latest
+          path: extensions/nanoarrow_ipc/nanoarrow-latest.zip
+
+      - name: Commit bundle to dist/
+        if: success() && github.repository == 'apache/arrow-nanoarrow' && github.ref == 'refs/heads/main'
+        run: |
+          cp -r extensions/nanoarrow_ipc/nanoarrow-latest/ dist/
+
+          # only commit if there are changes
+          git config --global user.email "actions@github.com"
+          git config --global user.name "GitHub Actions"
+          UPDATED=`git diff --name-only --cached`
+          if [ "$UPDATED" ]; then
+            git commit -m "Update dist/ for commit ${{ github.sha }}"
+            git push
+          fi
diff --git a/.github/workflows/examples.yaml b/.github/workflows/examples.yaml
index 3c95aca..b6bb433 100644
--- a/.github/workflows/examples.yaml
+++ b/.github/workflows/examples.yaml
@@ -25,6 +25,7 @@ on:
     branches:
       - main
     paths:
+      - 'examples/**'
       - 'CMakeLists.txt'
       - '.github/workflows/examples.yaml'
       - 'src/nanoarrow/**'
@@ -33,6 +34,8 @@ jobs:
   examples:
 
     runs-on: ubuntu-latest
+    env:
+      VERBOSE: 1
 
     steps:
       - name: Checkout repo
@@ -50,9 +53,9 @@ jobs:
           mkdir build && cd build
           cmake ..
           cmake --build .
-          
+
           ./example_cmake_minimal_app
-    
+
       - name: Minimal Vendored Example
         run: |
           cd examples/vendored-minimal
@@ -66,5 +69,14 @@ jobs:
           gcc -c library.c nanoarrow.c
           ar rcs libexample_vendored_minimal_library.a library.o nanoarrow.o
           gcc -o example_vendored_minimal_app app.c libexample_vendored_minimal_library.a
-          
+
           ./example_vendored_minimal_app
+
+      - name: Ipc CMake Example
+        run: |
+          cd examples/cmake-ipc
+          mkdir build && cd build
+          cmake ..
+          cmake --build .
+
+          cat ../schema-valid.arrows | ./example_cmake_ipc_app
diff --git a/LICENSE.txt b/LICENSE.txt
index a82c22a..d73bb3f 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -203,2192 +203,7 @@
 
 --------------------------------------------------------------------------------
 
-src/plasma/fling.cc and src/plasma/fling.h: Apache 2.0
+extensions/nanoarrow_ipc/thirdparty/flatcc, dist/flatcc.c,
+  and dist/flatcc: Apache 2.0
 
-Copyright 2013 Sharvil Nanavati
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-src/plasma/thirdparty/ae: Modified / 3-Clause BSD
-
-Copyright (c) 2006-2010, Salvatore Sanfilippo <antirez at gmail dot com>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
- * Neither the name of Redis nor the names of its contributors may be used
-   to endorse or promote products derived from this software without
-   specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-src/plasma/thirdparty/dlmalloc.c: CC0
-
-This is a version (aka dlmalloc) of malloc/free/realloc written by
-Doug Lea and released to the public domain, as explained at
-http://creativecommons.org/publicdomain/zero/1.0/ Send questions,
-comments, complaints, performance data, etc to dl@cs.oswego.edu
-
---------------------------------------------------------------------------------
-
-src/plasma/common.cc (some portions)
-
-Copyright (c) Austin Appleby (aappleby (AT) gmail)
-
-Some portions of this file are derived from code in the MurmurHash project
-
-All code is released to the public domain. For business purposes, Murmurhash is
-under the MIT license.
-
-https://sites.google.com/site/murmurhash/
-
---------------------------------------------------------------------------------
-
-src/arrow/util (some portions): Apache 2.0, and 3-clause BSD
-
-Some portions of this module are derived from code in the Chromium project,
-copyright (c) Google inc and (c) The Chromium Authors and licensed under the
-Apache 2.0 License or the under the 3-clause BSD license:
-
-  Copyright (c) 2013 The Chromium Authors. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are
-  met:
-
-     * Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-     * Redistributions in binary form must reproduce the above
-  copyright notice, this list of conditions and the following disclaimer
-  in the documentation and/or other materials provided with the
-  distribution.
-     * Neither the name of Google Inc. nor the names of its
-  contributors may be used to endorse or promote products derived from
-  this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-This project includes code from Daniel Lemire's FrameOfReference project.
-
-https://github.com/lemire/FrameOfReference/blob/6ccaf9e97160f9a3b299e23a8ef739e711ef0c71/src/bpacking.cpp
-https://github.com/lemire/FrameOfReference/blob/146948b6058a976bc7767262ad3a2ce201486b93/scripts/turbopacking64.py
-
-Copyright: 2013 Daniel Lemire
-Home page: http://lemire.me/en/
-Project page: https://github.com/lemire/FrameOfReference
-License: Apache License Version 2.0 http://www.apache.org/licenses/LICENSE-2.0
-
---------------------------------------------------------------------------------
-
-This project includes code from the TensorFlow project
-
-Copyright 2015 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-This project includes code from the NumPy project.
-
-https://github.com/numpy/numpy/blob/e1f191c46f2eebd6cb892a4bfe14d9dd43a06c4e/numpy/core/src/multiarray/multiarraymodule.c#L2910
-
-https://github.com/numpy/numpy/blob/68fd82271b9ea5a9e50d4e761061dfcca851382a/numpy/core/src/multiarray/datetime.c
-
-Copyright (c) 2005-2017, NumPy Developers.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-       copyright notice, this list of conditions and the following
-       disclaimer in the documentation and/or other materials provided
-       with the distribution.
-
-    * Neither the name of the NumPy Developers nor the names of any
-       contributors may be used to endorse or promote products derived
-       from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-This project includes code from the Boost project
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-This project includes code from the FlatBuffers project
-
-Copyright 2014 Google Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-This project includes code from the tslib project
-
-Copyright 2015 Microsoft Corporation. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-This project includes code from the jemalloc project
-
-https://github.com/jemalloc/jemalloc
-
-Copyright (C) 2002-2017 Jason Evans <ja...@canonware.com>.
-All rights reserved.
-Copyright (C) 2007-2012 Mozilla Foundation.  All rights reserved.
-Copyright (C) 2009-2017 Facebook, Inc.  All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-1. Redistributions of source code must retain the above copyright notice(s),
-   this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice(s),
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
-EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-
-This project includes code from the Go project, BSD 3-clause license + PATENTS
-weak patent termination clause
-(https://github.com/golang/go/blob/master/PATENTS).
-
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-This project includes code from the hs2client
-
-https://github.com/cloudera/hs2client
-
-Copyright 2016 Cloudera Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-The script ci/scripts/util_wait_for_it.sh has the following license
-
-Copyright (c) 2016 Giles Hall
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The script r/configure has the following license (MIT)
-
-Copyright (c) 2017, Jeroen Ooms and Jim Hester
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-cpp/src/arrow/util/logging.cc, cpp/src/arrow/util/logging.h and
-cpp/src/arrow/util/logging-test.cc are adapted from
-Ray Project (https://github.com/ray-project/ray) (Apache 2.0).
-
-Copyright (c) 2016 Ray Project (https://github.com/ray-project/ray)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-The files cpp/src/arrow/vendored/datetime/date.h, cpp/src/arrow/vendored/datetime/tz.h,
-cpp/src/arrow/vendored/datetime/tz_private.h, cpp/src/arrow/vendored/datetime/ios.h,
-cpp/src/arrow/vendored/datetime/ios.mm,
-cpp/src/arrow/vendored/datetime/tz.cpp are adapted from
-Howard Hinnant's date library (https://github.com/HowardHinnant/date)
-It is licensed under MIT license.
-
-The MIT License (MIT)
-Copyright (c) 2015, 2016, 2017 Howard Hinnant
-Copyright (c) 2016 Adrian Colomitchi
-Copyright (c) 2017 Florian Dang
-Copyright (c) 2017 Paul Thompson
-Copyright (c) 2018 Tomasz KamiƄski
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The file cpp/src/arrow/util/utf8.h includes code adapted from the page
-  https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
-with the following license (MIT)
-
-Copyright (c) 2008-2009 Bjoern Hoehrmann <bj...@hoehrmann.de>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The file cpp/src/arrow/vendored/string_view.hpp has the following license
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/xxhash/ have the following license
-(BSD 2-Clause License)
-
-xxHash Library
-Copyright (c) 2012-2014, Yann Collet
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice, this
-  list of conditions and the following disclaimer in the documentation and/or
-  other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-You can contact the author at :
-- xxHash homepage: http://www.xxhash.com
-- xxHash source repository : https://github.com/Cyan4973/xxHash
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/double-conversion/ have the following license
-(BSD 3-Clause License)
-
-Copyright 2006-2011, the V8 project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/uriparser/ have the following license
-(BSD 3-Clause License)
-
-uriparser - RFC 3986 URI parsing library
-
-Copyright (C) 2007, Weijia Song <so...@gmail.com>
-Copyright (C) 2007, Sebastian Pipping <se...@pipping.org>
-All rights reserved.
-
-Redistribution  and use in source and binary forms, with or without
-modification,  are permitted provided that the following conditions
-are met:
-
-    * Redistributions   of  source  code  must  retain  the   above
-      copyright  notice, this list of conditions and the  following
-      disclaimer.
-
-    * Redistributions  in  binary  form must  reproduce  the  above
-      copyright  notice, this list of conditions and the  following
-      disclaimer   in  the  documentation  and/or  other  materials
-      provided with the distribution.
-
-    * Neither  the name of the <ORGANIZATION> nor the names of  its
-      contributors  may  be  used to endorse  or  promote  products
-      derived  from  this software without specific  prior  written
-      permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS  IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT  NOT
-LIMITED  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS
-FOR  A  PARTICULAR  PURPOSE ARE DISCLAIMED. IN NO EVENT  SHALL  THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL,    SPECIAL,   EXEMPLARY,   OR   CONSEQUENTIAL   DAMAGES
-(INCLUDING,  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES;  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT  LIABILITY,  OR  TORT (INCLUDING  NEGLIGENCE  OR  OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-The files under dev/tasks/conda-recipes have the following license
-
-BSD 3-clause license
-Copyright (c) 2015-2018, conda-forge
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors
-   may be used to endorse or promote products derived from this software without
-   specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/utfcpp/ have the following license
-
-Copyright 2006-2018 Nemanja Trifunovic
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-This project includes code from Apache Kudu.
-
- * cpp/cmake_modules/CompilerInfo.cmake is based on Kudu's cmake_modules/CompilerInfo.cmake
-
-Copyright: 2016 The Apache Software Foundation.
-Home page: https://kudu.apache.org/
-License: http://www.apache.org/licenses/LICENSE-2.0
-
---------------------------------------------------------------------------------
-
-This project includes code from Apache Impala (incubating), formerly
-Impala. The Impala code and rights were donated to the ASF as part of the
-Incubator process after the initial code imports into Apache Parquet.
-
-Copyright: 2012 Cloudera, Inc.
-Copyright: 2016 The Apache Software Foundation.
-Home page: http://impala.apache.org/
-License: http://www.apache.org/licenses/LICENSE-2.0
-
---------------------------------------------------------------------------------
-
-This project includes code from Apache Aurora.
-
-* dev/release/{release,changelog,release-candidate} are based on the scripts from
-  Apache Aurora
-
-Copyright: 2016 The Apache Software Foundation.
-Home page: https://aurora.apache.org/
-License: http://www.apache.org/licenses/LICENSE-2.0
-
---------------------------------------------------------------------------------
-
-This project includes code from the Google styleguide.
-
-* cpp/build-support/cpplint.py is based on the scripts from the Google styleguide.
-
-Copyright: 2009 Google Inc. All rights reserved.
-Homepage: https://github.com/google/styleguide
-License: 3-clause BSD
-
---------------------------------------------------------------------------------
-
-This project includes code from Snappy.
-
-* cpp/cmake_modules/{SnappyCMakeLists.txt,SnappyConfig.h} are based on code
-  from Google's Snappy project.
-
-Copyright: 2009 Google Inc. All rights reserved.
-Homepage: https://github.com/google/snappy
-License: 3-clause BSD
-
---------------------------------------------------------------------------------
-
-This project includes code from the manylinux project.
-
-* python/manylinux1/scripts/{build_python.sh,python-tag-abi-tag.py,
-  requirements.txt} are based on code from the manylinux project.
-
-Copyright: 2016 manylinux
-Homepage: https://github.com/pypa/manylinux
-License: The MIT License (MIT)
-
---------------------------------------------------------------------------------
-
-This project includes code from the cymove project:
-
-* python/pyarrow/includes/common.pxd includes code from the cymove project
-
-The MIT License (MIT)
-Copyright (c) 2019 Omer Ozarslan
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The projects includes code from the Ursabot project under the dev/archery
-directory.
-
-License: BSD 2-Clause
-
-Copyright 2019 RStudio, Inc.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-This project include code from mingw-w64.
-
-* cpp/src/arrow/util/cpu-info.cc has a polyfill for mingw-w64 < 5
-
-Copyright (c) 2009 - 2013 by the mingw-w64 project
-Homepage: https://mingw-w64.org
-License: Zope Public License (ZPL) Version 2.1.
-
----------------------------------------------------------------------------------
-
-This project include code from Google's Asylo project.
-
-* cpp/src/arrow/result.h is based on status_or.h
-
-Copyright (c)  Copyright 2017 Asylo authors
-Homepage: https://asylo.dev/
-License: Apache 2.0
-
---------------------------------------------------------------------------------
-
-This project includes code from Google's protobuf project
-
-* cpp/src/arrow/result.h ARROW_ASSIGN_OR_RAISE is based off ASSIGN_OR_RETURN
-* cpp/src/arrow/util/bit_stream_utils.h contains code from wire_format_lite.h
-
-Copyright 2008 Google Inc.  All rights reserved.
-Homepage: https://developers.google.com/protocol-buffers/
-License:
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Code generated by the Protocol Buffer compiler is owned by the owner
-of the input file used when generating it.  This code is not
-standalone and requires a support library to be linked with it.  This
-support library is itself covered by the above license.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency LLVM is statically linked in certain binary distributions.
-Additionally some sections of source code have been derived from sources in LLVM
-and have been clearly labeled as such. LLVM has the following license:
-
-==============================================================================
-The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
-==============================================================================
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-    1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-    2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-    3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-    4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-    5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-    6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-    7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-    8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-    9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-    END OF TERMS AND CONDITIONS
-
-    APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-    Copyright [yyyy] [name of copyright owner]
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-
----- LLVM Exceptions to the Apache 2.0 License ----
-
-As an exception, if, as a result of your compiling your source code, portions
-of this Software are embedded into an Object form of such source code, you
-may redistribute such embedded portions in such Object form without complying
-with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
-
-In addition, if you combine or link compiled forms of this Software with
-software that is licensed under the GPLv2 ("Combined Software") and if a
-court of competent jurisdiction determines that the patent provision (Section
-3), the indemnity provision (Section 9) or other Section of the License
-conflicts with the conditions of the GPLv2, you may retroactively and
-prospectively choose to deem waived or otherwise exclude such Section(s) of
-the License, but only in their entirety and only with respect to the Combined
-Software.
-
-==============================================================================
-Software from third parties included in the LLVM Project:
-==============================================================================
-The LLVM Project contains third party software which is under different license
-terms. All such code will be identified clearly using at least one of two
-mechanisms:
-1) It will be in a separate directory tree with its own `LICENSE.txt` or
-   `LICENSE` file at the top containing the specific license and restrictions
-   which apply to that software, or
-2) It will contain specific license and restriction terms at the top of every
-   file.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency gRPC is statically linked in certain binary
-distributions, like the python wheels. gRPC has the following license:
-
-Copyright 2014 gRPC authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency Apache Thrift is statically linked in certain binary
-distributions, like the python wheels. Apache Thrift has the following license:
-
-Apache Thrift
-Copyright (C) 2006 - 2019, The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency Apache ORC is statically linked in certain binary
-distributions, like the python wheels. Apache ORC has the following license:
-
-Apache ORC
-Copyright 2013-2019 The Apache Software Foundation
-
-This product includes software developed by The Apache Software
-Foundation (http://www.apache.org/).
-
-This product includes software developed by Hewlett-Packard:
-(c) Copyright [2014-2015] Hewlett-Packard Development Company, L.P
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency zstd is statically linked in certain binary
-distributions, like the python wheels. ZSTD has the following license:
-
-BSD License
-
-For Zstandard software
-
-Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this
-   list of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice,
-   this list of conditions and the following disclaimer in the documentation
-   and/or other materials provided with the distribution.
-
- * Neither the name Facebook nor the names of its contributors may be used to
-   endorse or promote products derived from this software without specific
-   prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency lz4 is statically linked in certain binary
-distributions, like the python wheels. lz4 has the following license:
-
-LZ4 Library
-Copyright (c) 2011-2016, Yann Collet
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice, this
-  list of conditions and the following disclaimer in the documentation and/or
-  other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency Brotli is statically linked in certain binary
-distributions, like the python wheels. Brotli has the following license:
-
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency rapidjson is statically linked in certain binary
-distributions, like the python wheels. rapidjson and its dependencies have the
-following licenses:
-
-Tencent is pleased to support the open source community by making RapidJSON
-available.
-
-Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
-All rights reserved.
-
-If you have downloaded a copy of the RapidJSON binary from Tencent, please note
-that the RapidJSON binary is licensed under the MIT License.
-If you have downloaded a copy of the RapidJSON source code from Tencent, please
-note that RapidJSON source code is licensed under the MIT License, except for
-the third-party components listed below which are subject to different license
-terms.  Your integration of RapidJSON into your own projects may require
-compliance with the MIT License, as well as the other licenses applicable to
-the third-party components included within RapidJSON. To avoid the problematic
-JSON license in your own projects, it's sufficient to exclude the
-bin/jsonchecker/ directory, as it's the only code under the JSON license.
-A copy of the MIT License is included in this file.
-
-Other dependencies and licenses:
-
-    Open Source Software Licensed Under the BSD License:
-    --------------------------------------------------------------------
-
-    The msinttypes r29
-    Copyright (c) 2006-2013 Alexander Chemeris
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-    * Neither the name of  copyright holder nor the names of its contributors
-    may be used to endorse or promote products derived from this software
-    without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR
-    ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-    DAMAGE.
-
-    Terms of the MIT License:
-    --------------------------------------------------------------------
-
-    Permission is hereby granted, free of charge, to any person obtaining a
-    copy of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-    DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency snappy is statically linked in certain binary
-distributions, like the python wheels. snappy has the following license:
-
-Copyright 2011, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of Google Inc. nor the names of its contributors may be
-      used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-===
-
-Some of the benchmark data in testdata/ is licensed differently:
-
- - fireworks.jpeg is Copyright 2013 Steinar H. Gunderson, and
-   is licensed under the Creative Commons Attribution 3.0 license
-   (CC-BY-3.0). See https://creativecommons.org/licenses/by/3.0/
-   for more information.
-
- - kppkn.gtb is taken from the Gaviota chess tablebase set, and
-   is licensed under the MIT License. See
-   https://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1
-   for more information.
-
- - paper-100k.pdf is an excerpt (bytes 92160 to 194560) from the paper
-   “Combinatorial Modeling of Chromatin Features Quantitatively Predicts DNA
-   Replication Timing in _Drosophila_” by Federico Comoglio and Renato Paro,
-   which is licensed under the CC-BY license. See
-   http://www.ploscompbiol.org/static/license for more ifnormation.
-
- - alice29.txt, asyoulik.txt, plrabn12.txt and lcet10.txt are from Project
-   Gutenberg. The first three have expired copyrights and are in the public
-   domain; the latter does not have expired copyright, but is still in the
-   public domain according to the license information
-   (http://www.gutenberg.org/ebooks/53).
-
---------------------------------------------------------------------------------
-
-3rdparty dependency gflags is statically linked in certain binary
-distributions, like the python wheels. gflags has the following license:
-
-Copyright (c) 2006, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency glog is statically linked in certain binary
-distributions, like the python wheels. glog has the following license:
-
-Copyright (c) 2008, Google Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-A function gettimeofday in utilities.cc is based on
-
-http://www.google.com/codesearch/p?hl=en#dR3YEbitojA/COPYING&q=GetSystemTimeAsFileTime%20license:bsd
-
-The license of this code is:
-
-Copyright (c) 2003-2008, Jouni Malinen <j...@w1.fi> and contributors
-All Rights Reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name(s) of the above-listed copyright holder(s) nor the
-   names of its contributors may be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency re2 is statically linked in certain binary
-distributions, like the python wheels. re2 has the following license:
-
-Copyright (c) 2009 The RE2 Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its contributors
-      may be used to endorse or promote products derived from this
-      software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency c-ares is statically linked in certain binary
-distributions, like the python wheels. c-ares has the following license:
-
-# c-ares license
-
-Copyright (c) 2007 - 2018, Daniel Stenberg with many contributors, see AUTHORS
-file.
-
-Copyright 1998 by the Massachusetts Institute of Technology.
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided that
-the above copyright notice appear in all copies and that both that copyright
-notice and this permission notice appear in supporting documentation, and that
-the name of M.I.T. not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior permission.
-M.I.T. makes no representations about the suitability of this software for any
-purpose.  It is provided "as is" without express or implied warranty.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency zlib is redistributed as a dynamically linked shared
-library in certain binary distributions, like the python wheels. In the future
-this will likely change to static linkage. zlib has the following license:
-
-zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.11, January 15th, 2017
-
-  Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  Jean-loup Gailly        Mark Adler
-  jloup@gzip.org          madler@alumni.caltech.edu
-
---------------------------------------------------------------------------------
-
-3rdparty dependency openssl is redistributed as a dynamically linked shared
-library in certain binary distributions, like the python wheels. openssl
-preceding version 3 has the following license:
-
-  LICENSE ISSUES
-  ==============
-
-  The OpenSSL toolkit stays under a double license, i.e. both the conditions of
-  the OpenSSL License and the original SSLeay license apply to the toolkit.
-  See below for the actual license texts.
-
-  OpenSSL License
-  ---------------
-
-/* ====================================================================
- * Copyright (c) 1998-2019 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com).  This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-
- Original SSLeay License
- -----------------------
-
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
---------------------------------------------------------------------------------
-
-This project includes code from the rtools-backports project.
-
-* ci/scripts/PKGBUILD and ci/scripts/r_windows_build.sh are based on code
-  from the rtools-backports project.
-
-Copyright: Copyright (c) 2013 - 2019, АлДĐșсДĐč and Jeroen Ooms.
-All rights reserved.
-Homepage: https://github.com/r-windows/rtools-backports
-License: 3-clause BSD
-
---------------------------------------------------------------------------------
-
-Some code from pandas has been adapted for the pyarrow codebase. pandas is
-available under the 3-clause BSD license, which follows:
-
-pandas license
-==============
-
-Copyright (c) 2011-2012, Lambda Foundry, Inc. and PyData Development Team
-All rights reserved.
-
-Copyright (c) 2008-2011 AQR Capital Management, LLC
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-       copyright notice, this list of conditions and the following
-       disclaimer in the documentation and/or other materials provided
-       with the distribution.
-
-    * Neither the name of the copyright holder nor the names of any
-       contributors may be used to endorse or promote products derived
-       from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-Some bits from DyND, in particular aspects of the build system, have been
-adapted from libdynd and dynd-python under the terms of the BSD 2-clause
-license
-
-The BSD 2-Clause License
-
-    Copyright (C) 2011-12, Dynamic NDArray Developers
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are
-    met:
-
-        * Redistributions of source code must retain the above copyright
-           notice, this list of conditions and the following disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-           copyright notice, this list of conditions and the following
-           disclaimer in the documentation and/or other materials provided
-           with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Dynamic NDArray Developers list:
-
- * Mark Wiebe
- * Continuum Analytics
-
---------------------------------------------------------------------------------
-
-Some source code from Ibis (https://github.com/cloudera/ibis) has been adapted
-for PyArrow. Ibis is released under the Apache License, Version 2.0.
-
---------------------------------------------------------------------------------
-
-This project includes code from the autobrew project.
-
-The following files are based on code from the autobrew project:
-* r/tools/autobrew
-* dev/tasks/homebrew-formulae/autobrew/apache-arrow.rb
-* dev/tasks/homebrew-formulae/autobrew/apache-arrow-static.rb 
-
-Copyright (c) 2019, Jeroen Ooms
-License: MIT
-Homepage: https://github.com/autobrew/
-
---------------------------------------------------------------------------------
-
-dev/tasks/homebrew-formulae/apache-arrow.rb has the following license:
-
-BSD 2-Clause License
-
-Copyright (c) 2009-present, Homebrew contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-----------------------------------------------------------------------
-
-cpp/src/arrow/vendored/base64.cpp has the following license
-
-ZLIB License
-
-Copyright (C) 2004-2017 René Nyffenegger
-
-This source code is provided 'as-is', without any express or implied
-warranty. In no event will the author be held liable for any damages arising
-from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose, including
-commercial applications, and to alter it and redistribute it freely, subject to
-the following restrictions:
-
-1. The origin of this source code must not be misrepresented; you must not
-   claim that you wrote the original source code. If you use this source code
-   in a product, an acknowledgment in the product documentation would be
-   appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and must not be
-   misrepresented as being the original source code.
-
-3. This notice may not be removed or altered from any source distribution.
-
-René Nyffenegger rene.nyffenegger@adp-gmbh.ch
-
---------------------------------------------------------------------------------
-
-The file cpp/src/arrow/vendored/optional.hpp has the following license
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-This project includes code from Folly.
-
- * cpp/src/arrow/vendored/ProducerConsumerQueue.h
-
-is based on Folly's
-
- * folly/Portability.h
- * folly/lang/Align.h
- * folly/ProducerConsumerQueue.h
-
-Copyright: Copyright (c) Facebook, Inc. and its affiliates.
-Home page: https://github.com/facebook/folly
-License: http://www.apache.org/licenses/LICENSE-2.0
-
---------------------------------------------------------------------------------
-
-The file cpp/src/arrow/vendored/musl/strptime.c has the following license
-
-Copyright © 2005-2020 Rich Felker, et al.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The file cpp/cmake_modules/BuildUtils.cmake contains code from
-
-https://gist.github.com/cristianadam/ef920342939a89fae3e8a85ca9459b49
-
-which is made available under the MIT license
-
-Copyright (c) 2019 Cristian Adam
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/portable-snippets/ contain code from
-
-https://github.com/nemequ/portable-snippets
-
-and have the following copyright notice:
-
-Each source file contains a preamble explaining the license situation
-for that file, which takes priority over this file.  With the
-exception of some code pulled in from other repositories (such as
-”nit, an MIT-licensed project which is used for testing), the code is
-public domain, released using the CC0 1.0 Universal dedication (*).
-
-(*) https://creativecommons.org/publicdomain/zero/1.0/legalcode
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/fast_float/ contain code from
-
-https://github.com/lemire/fast_float
-
-which is made available under the Apache License 2.0.
-
---------------------------------------------------------------------------------
-
-The file python/pyarrow/vendored/docscrape.py contains code from
-
-https://github.com/numpy/numpydoc/
-
-which is made available under the BSD 2-clause license.
-
---------------------------------------------------------------------------------
-
-The file python/pyarrow/vendored/version.py contains code from
-
-https://github.com/pypa/packaging/
-
-which is made available under both the Apache license v2.0 and the
-BSD 2-clause license.
-
---------------------------------------------------------------------------------
-
-The files in cpp/src/arrow/vendored/pcg contain code from
-
-https://github.com/imneme/pcg-cpp
-
-and have the following copyright notice:
-
-Copyright 2014-2019 Melissa O'Neill <on...@pcg-random.org>,
-                    and the PCG Project contributors.
-
-SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
-Licensed under the Apache License, Version 2.0 (provided in
-LICENSE-APACHE.txt and at http://www.apache.org/licenses/LICENSE-2.0)
-or under the MIT license (provided in LICENSE-MIT.txt and at
-http://opensource.org/licenses/MIT), at your option. This file may not
-be copied, modified, or distributed except according to those terms.
-
-Distributed on an "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, either
-express or implied.  See your chosen license for details.
-
---------------------------------------------------------------------------------
-r/R/dplyr-count-tally.R (some portions)
-
-Some portions of this file are derived from code from
-
-https://github.com/tidyverse/dplyr/
-
-which is made available under the MIT license
-
-Copyright (c) 2013-2019 RStudio and others.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the “Software”), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-The file src/arrow/util/io_util.cc contains code from the CPython project
-which is made available under the Python Software Foundation License Version 2.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency opentelemetry-cpp is statically linked in certain binary
-distributions. opentelemetry-cpp is made available under the Apache License 2.0.
-
-Copyright The OpenTelemetry Authors
-SPDX-License-Identifier: Apache-2.0
-
---------------------------------------------------------------------------------
-
-ci/conan/ is based on code from Conan Package and Dependency Manager.
-
-Copyright (c) 2019 Conan.io
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-
-3rdparty dependency UCX is redistributed as a dynamically linked shared
-library in certain binary distributions. UCX has the following license:
-
-Copyright (c) 2014-2015      UT-Battelle, LLC. All rights reserved.
-Copyright (C) 2014-2020      Mellanox Technologies Ltd. All rights reserved.
-Copyright (C) 2014-2015      The University of Houston System. All rights reserved.
-Copyright (C) 2015           The University of Tennessee and The University
-                             of Tennessee Research Foundation. All rights reserved.
-Copyright (C) 2016-2020      ARM Ltd. All rights reserved.
-Copyright (c) 2016           Los Alamos National Security, LLC. All rights reserved.
-Copyright (C) 2016-2020      Advanced Micro Devices, Inc.  All rights reserved.
-Copyright (C) 2019           UChicago Argonne, LLC.  All rights reserved.
-Copyright (c) 2018-2020      NVIDIA CORPORATION. All rights reserved.
-Copyright (C) 2020           Huawei Technologies Co., Ltd. All rights reserved.
-Copyright (C) 2016-2020      Stony Brook University. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-3. Neither the name of the copyright holder nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------
-
-The file dev/tasks/r/github.packages.yml contains code from
-
-https://github.com/ursa-labs/arrow-r-nightly
-
-which is made available under the Apache License 2.0.
-
---------------------------------------------------------------------------------
-.github/actions/sync-nightlies/action.yml  (some portions)
-
-Some portions of this file are derived from code from
-
-https://github.com/JoshPiper/rsync-docker
-
-which is made available under the MIT license
-
-Copyright (c) 2020 Joshua Piper
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
---------------------------------------------------------------------------------
-.github/actions/sync-nightlies/action.yml (some portions)
-
-Some portions of this file are derived from code from
-
-https://github.com/burnett01/rsync-deployments
-
-which is made available under the MIT license
-
-Copyright (c) 2019-2022 Contention
-Copyright (c) 2019-2022 Burnett01
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+Copyright 2015-2023 Mikkel F. JĂžrgensen, dvide.com
diff --git a/dist/README.md b/dist/README.md
index c94e4fb..298156d 100644
--- a/dist/README.md
+++ b/dist/README.md
@@ -20,4 +20,6 @@
 # Bundled header and source files
 
 These files are automatically generated from the latest commit (that
-passes CI on the main branch).
+passes CI on the main branch). See the examples/ folder in the parent
+repo for examples of how to use these files. Note that flatcc is only
+needed for the nanoarrow_ipc extension.
diff --git a/examples/cmake-ipc/CMakeLists.txt b/examples/cmake-ipc/CMakeLists.txt
new file mode 100644
index 0000000..e1254f3
--- /dev/null
+++ b/examples/cmake-ipc/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+message(STATUS "Building using CMake version: ${CMAKE_VERSION}")
+cmake_minimum_required(VERSION 3.11)
+include(FetchContent)
+
+project(NanoArrowExampleCMakeIpc)
+
+# See examples/cmake-minimal for why this is a good idea
+set(NANOARROW_NAMESPACE "ExampleCmakeIpc")
+
+FetchContent_Declare(
+  # The name 'nanoarrow' is important here: it allows the IPC extension
+  # to link to the same version of nanoarrow as your library/application
+  nanoarrow
+
+  # See examples/cmake-minimal for how to specify a GIT repository or URL
+  SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
+FetchContent_MakeAvailable(nanoarrow)
+
+FetchContent_Declare(
+  nanoarrow_ipc_example_cmake
+  SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../extensions/nanoarrow_ipc)
+FetchContent_MakeAvailable(nanoarrow_ipc_example_cmake)
+
+# Add the library and link it against nanoarrow and nanoarrow_ipc
+# You will need to link to both...nanoarrow_ipc assumes the caller
+# will link in its own copy of nanoarrow with the same version
+include_directories(src)
+add_library(example_cmake_ipc_library src/library.c)
+
+# Always use PRIVATE to hide nanoarrow's headers from a
+# target that in turn uses your library.
+target_link_libraries(example_cmake_ipc_library PRIVATE nanoarrow_ipc PRIVATE nanoarrow)
+
+# Add the executable and link it against the library
+add_executable(example_cmake_ipc_app src/app.c)
+
+target_link_libraries(example_cmake_ipc_app example_cmake_ipc_library)
diff --git a/dist/README.md b/examples/cmake-ipc/README.md
similarity index 50%
copy from dist/README.md
copy to examples/cmake-ipc/README.md
index c94e4fb..bacd9bb 100644
--- a/dist/README.md
+++ b/examples/cmake-ipc/README.md
@@ -17,7 +17,27 @@
   under the License.
 -->
 
-# Bundled header and source files
+# IPC Extension CMake Example
 
-These files are automatically generated from the latest commit (that
-passes CI on the main branch).
+This folder contains a CMake project that links to its own copy of
+nanoarrow and nanoarrow_ipc using CMake's `FetchContent` module.
+This pattern is similar to the cmake-minimal example and includes
+both a library and a command-line application that can verify
+a small message read from stdin. To build:
+
+```bash
+git clone https://github.com/apache/arrow-nanoarrow.git
+cd arrow-nanoarrow/examples/cmake-ipc
+mkdir build && cd build
+cmake ..
+cmake --build .
+```
+
+You can test the command-line application using the two files
+provided in the example directory:
+
+```bash
+cat ../schema-valid.arrows | ./example_cmake_ipc_app
+cat ../invalid.arrows | ./example_cmake_ipc_app
+# Expected 0xFFFFFFFF at start of message but found 0xFFFFFF00
+```
diff --git a/examples/cmake-ipc/invalid.arrows b/examples/cmake-ipc/invalid.arrows
new file mode 100644
index 0000000..68a1bd6
Binary files /dev/null and b/examples/cmake-ipc/invalid.arrows differ
diff --git a/examples/cmake-ipc/schema-valid.arrows b/examples/cmake-ipc/schema-valid.arrows
new file mode 100644
index 0000000..9ffe2b6
Binary files /dev/null and b/examples/cmake-ipc/schema-valid.arrows differ
diff --git a/examples/cmake-ipc/src/app.c b/examples/cmake-ipc/src/app.c
new file mode 100644
index 0000000..47b3a32
--- /dev/null
+++ b/examples/cmake-ipc/src/app.c
@@ -0,0 +1,42 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include "library.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+
+int main(int argc, char* argv[]) {
+  int64_t in_size = 0;
+  uint8_t data[8096];
+
+  freopen(NULL, "rb", stdin);
+  in_size = fread(data, 1, 8096, stdin);
+
+  if (in_size == 8096) {
+    fprintf(stderr, "This example can't read messages more than 8096 bytes\n");
+    return -1;
+  }
+
+  int result = verify_ipc_message(data, in_size);
+  if (result != 0) {
+    fprintf(stderr, "%s\n", my_library_last_error());
+  }
+
+  return result;
+}
diff --git a/examples/cmake-ipc/src/library.c b/examples/cmake-ipc/src/library.c
new file mode 100644
index 0000000..a71db7b
--- /dev/null
+++ b/examples/cmake-ipc/src/library.c
@@ -0,0 +1,42 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include <stdio.h>
+
+#include "nanoarrow/nanoarrow_ipc.h"
+
+#include "library.h"
+
+static struct ArrowError global_error;
+
+const char* my_library_last_error(void) { return ArrowErrorMessage(&global_error); }
+
+int verify_ipc_message(const void* data, int64_t size_bytes) {
+  struct ArrowBufferView buffer_view;
+  buffer_view.data.data = data;
+  buffer_view.size_bytes = size_bytes;
+
+  struct ArrowIpcReader reader;
+  ArrowIpcReaderInit(&reader);
+  int result = ArrowIpcReaderVerify(&reader, &buffer_view, &global_error);
+  ArrowIpcReaderReset(&reader);
+
+  return result;
+}
diff --git a/examples/cmake-ipc/src/library.h b/examples/cmake-ipc/src/library.h
new file mode 100644
index 0000000..ee354c6
--- /dev/null
+++ b/examples/cmake-ipc/src/library.h
@@ -0,0 +1,26 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include <stdint.h>
+
+// Get the last error message from a call to verify_ipc_message()
+const char* my_library_last_error(void);
+
+// Verifies an IPC message
+int verify_ipc_message(const void* data, int64_t size_bytes);
diff --git a/extensions/nanoarrow_ipc/dev/update_fbs.sh b/extensions/nanoarrow_ipc/.gitignore
old mode 100755
new mode 100644
similarity index 53%
copy from extensions/nanoarrow_ipc/dev/update_fbs.sh
copy to extensions/nanoarrow_ipc/.gitignore
index c1474d4..ed6ccba
--- a/extensions/nanoarrow_ipc/dev/update_fbs.sh
+++ b/extensions/nanoarrow_ipc/.gitignore
@@ -15,20 +15,4 @@
 # specific language governing permissions and limitations
 # under the License.
 
-# get the .fbs files from the arrow repo
-mkdir format && cd format
-curl -L https://github.com/apache/arrow/raw/master/format/Schema.fbs --output Schema.fbs
-curl -L https://github.com/apache/arrow/raw/master/format/Tensor.fbs --output Tensor.fbs
-curl -L https://github.com/apache/arrow/raw/master/format/SparseTensor.fbs --output SparseTensor.fbs
-curl -L https://github.com/apache/arrow/raw/master/format/Message.fbs --output Message.fbs
-curl -L https://github.com/apache/arrow/raw/master/format/File.fbs --output File.fbs
-
-# compile using flatcc
-flatcc --common --reader --builder --verifier --recursive *.fbs
-
-# copy to src/
-cp *.h ../../src/nanoarrow_ipc
-
-# clean up
-cd ..
-rm -rf format
+dist/
diff --git a/extensions/nanoarrow_ipc/CMakeLists.txt b/extensions/nanoarrow_ipc/CMakeLists.txt
index 2fd2f7b..38517f7 100644
--- a/extensions/nanoarrow_ipc/CMakeLists.txt
+++ b/extensions/nanoarrow_ipc/CMakeLists.txt
@@ -19,41 +19,151 @@ message(STATUS "Building using CMake version: ${CMAKE_VERSION}")
 cmake_minimum_required(VERSION 3.11)
 include(FetchContent)
 
-project(NanoArrowIpc)
+project(nanoarrow_ipc)
 
 option(NANOARROW_IPC_BUILD_TESTS "Build tests" OFF)
+option(NANOARROW_IPC_BUNDLE "Create bundled nanoarrow_ipc.h and nanoarrow_ipc.c" OFF)
+option(NANOARROW_IPC_FLATCC_ROOT_DIR "Root directory for flatcc include and lib directories" OFF)
+option(NANOARROW_IPC_FLATCC_INCLUDE_DIR "Include directory for flatcc includes" OFF)
+option(NANOARROW_IPC_FLATCC_LIB_DIR "Library directory that contains libflatccrt.a" OFF)
+
 option(NANOARROW_IPC_CODE_COVERAGE "Enable coverage reporting" OFF)
 add_library(ipc_coverage_config INTERFACE)
 
-# Add the nanoarrow dependency
-FetchContent_Declare(
-  nanoarrow_for_nanoarrow_ipc
-  SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
-FetchContent_MakeAvailable(nanoarrow_for_nanoarrow_ipc)
-
-# Add the flatcc (runtime) dependency
-# TODO: Make it more flexible to use an existing flatcc
-set(FLATCC_RTONLY ON CACHE INTERNAL "")
-FetchContent_Declare(
-  flatcc
-  URL https://github.com/dvidelabs/flatcc/archive/refs/tags/v0.6.1.zip
-)
-FetchContent_MakeAvailable(flatcc)
-
-include_directories(src)
-include_directories(${flatcc_SOURCE_DIR}/include)
-add_library(nanoarrow_ipc src/nanoarrow_ipc/nanoarrow_ipc.c)
-target_link_libraries(nanoarrow_ipc PRIVATE nanoarrow flatccrt)
-
-if(NANOARROW_IPC_CODE_COVERAGE)
-  target_compile_options(ipc_coverage_config INTERFACE -O0 -g --coverage)
-  target_link_options(ipc_coverage_config INTERFACE --coverage)
-  target_link_libraries(nanoarrow_ipc ipc_coverage_config)
+if (NANOARROW_IPC_BUILD_TESTS OR NOT NANOARROW_IPC_BUNDLE)
+  # Add the nanoarrow dependency. nanoarrow is not linked into the
+  # nanoarrow_ipc library (the caller must link this themselves);
+  # however, we need nanoarrow.h to build nanoarrow_ipc.c.
+  FetchContent_Declare(
+    nanoarrow
+    SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
+
+  # Don't install nanoarrow because of this configuration
+  FetchContent_GetProperties(nanoarrow)
+  if(NOT nanoarrow_POPULATED)
+    FetchContent_Populate(nanoarrow)
+    add_subdirectory(${nanoarrow_SOURCE_DIR} ${nanoarrow_BINARY_DIR} EXCLUDE_FROM_ALL)
+  endif()
+
+  # Add the flatcc (runtime) dependency
+  set(FLATCC_RTONLY ON CACHE INTERNAL "")
+  set(FLATCC_REFLECTION OFF CACHE INTERNAL "")
+
+  # A flatcc installation is unlikely, so default to building the vendored one
+  if (NOT NANOARROW_IPC_FLATCC_INCLUDE_DIR AND NOT NANOARROW_IPC_FLATCC_ROOT_DIR)
+    add_library(
+      flatccrt STATIC
+      thirdparty/flatcc/src/runtime/builder.c
+      thirdparty/flatcc/src/runtime/emitter.c
+      thirdparty/flatcc/src/runtime/verifier.c
+      thirdparty/flatcc/src/runtime/refmap.c)
+
+    set(NANOARROW_IPC_FLATCC_INCLUDE_DIR
+      ${CMAKE_CURRENT_LIST_DIR}/thirdparty/flatcc/include)
+    target_include_directories(flatccrt PUBLIC
+      $<BUILD_INTERFACE:${NANOARROW_IPC_FLATCC_INCLUDE_DIR}>
+      $<INSTALL_INTERFACE:include>)
+
+  elseif(NOT NANOARROW_IPC_FLATCC_ROOT_DIR)
+    add_library(flatccrt STATIC IMPORTED)
+    set_target_properties(flatccrt PROPERTIES
+      IMPORTED_LOCATION "${NANOARROW_IPC_FLATCC_LIB_DIR}/libflatccrt.a"
+      INTERFACE_INCLUDE_DIRECTORIES "${NANOARROW_IPC_FLATCC_INCLUDE_DIR}"
+    )
+  elseif(NOT NANOARROW_IPC_FLATCC_INCLUDE_DIR)
+    set(NANOARROW_IPC_FLATCC_INCLUDE_DIR ${NANOARROW_IPC_FLATCC_ROOT_DIR}/include)
+    add_library(flatccrt STATIC IMPORTED)
+    set_target_properties(flatccrt PROPERTIES
+      IMPORTED_LOCATION "${NANOARROW_IPC_FLATCC_ROOT_DIR}/lib/libflatccrt.a"
+      INTERFACE_INCLUDE_DIRECTORIES "${NANOARROW_IPC_FLATCC_INCLUDE_DIR}"
+    )
+  endif()
 endif()
 
+if (NANOARROW_IPC_BUNDLE)
+  # The CMake build step is creating nanoarrow_ipc.c and nanoarrow_ipc.h;
+  # the CMake install step is copying them to a specific location
+  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/amalgamation)
+  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/amalgamation/nanoarrow)
+
+  # nanoarrow_ipc.h is already standalone
+  set(NANOARROW_IPC_H_TEMP ${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow_ipc.h)
+  file(READ src/nanoarrow/nanoarrow_ipc.h SRC_FILE_CONTENTS)
+  file(WRITE ${NANOARROW_IPC_H_TEMP} "${SRC_FILE_CONTENTS}")
+
+  # combine flatcc-generated headers and nanoarrow_ipc.c
+  set(NANOARROW_IPC_C_TEMP ${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow_ipc.c)
+  file(READ src/nanoarrow/nanoarrow_ipc_flatcc_generated.h SRC_FILE_CONTENTS)
+  file(WRITE ${NANOARROW_IPC_C_TEMP} "${SRC_FILE_CONTENTS}")
+  file(READ src/nanoarrow/nanoarrow_ipc.c SRC_FILE_CONTENTS)
+  file(APPEND ${NANOARROW_IPC_C_TEMP} "${SRC_FILE_CONTENTS}")
+
+  # remove the include for the generated files in the bundled version
+  file(READ ${NANOARROW_IPC_C_TEMP} SRC_FILE_CONTENTS)
+  string(
+    REGEX REPLACE "#include \"nanoarrow_ipc_flatcc_generated.h\"" ""
+    SRC_FILE_CONTENTS "${SRC_FILE_CONTENTS}")
+  file(WRITE ${NANOARROW_IPC_C_TEMP} "${SRC_FILE_CONTENTS}")
+
+  # combine the flatcc sources
+  set(FLATCC_C_TEMP ${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/flatcc.c)
+  file(READ thirdparty/flatcc/src/runtime/builder.c SRC_FILE_CONTENTS)
+  file(WRITE ${FLATCC_C_TEMP} "${SRC_FILE_CONTENTS}")
+  file(READ thirdparty/flatcc/src/runtime/emitter.c SRC_FILE_CONTENTS)
+  file(APPEND ${FLATCC_C_TEMP} "${SRC_FILE_CONTENTS}")
+  file(READ thirdparty/flatcc/src/runtime/verifier.c SRC_FILE_CONTENTS)
+  file(APPEND ${FLATCC_C_TEMP} "${SRC_FILE_CONTENTS}")
+  file(READ thirdparty/flatcc/src/runtime/refmap.c SRC_FILE_CONTENTS)
+  file(APPEND ${FLATCC_C_TEMP} "${SRC_FILE_CONTENTS}")
+
+  # Add a library that the tests can link against (but don't install it)
+  if(NANOARROW_IPC_BUILD_TESTS)
+    # Bundle flatcc into the nanoarrow_ipc library instead of
+    # link to the flatccrt static lib we declared above.
+    add_library(nanoarrow_ipc
+      ${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/nanoarrow_ipc.c
+      ${CMAKE_BINARY_DIR}/amalgamation/nanoarrow/flatcc.c)
+
+    target_include_directories(nanoarrow_ipc PUBLIC
+      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+      $<BUILD_INTERFACE:${nanoarrow_SOURCE_DIR}/src/nanoarrow>
+      $<BUILD_INTERFACE:${nanoarrow_BINARY_DIR}/generated>
+      $<BUILD_INTERFACE:${NANOARROW_IPC_FLATCC_INCLUDE_DIR}>)
+
+  endif()
+
+  # Install the amalgamated header and sources
+  install(FILES
+    ${NANOARROW_IPC_H_TEMP}
+    ${NANOARROW_IPC_C_TEMP}
+    ${FLATCC_C_TEMP}
+    DESTINATION ".")
+
+  # Also install the flatcc headers
+  install(DIRECTORY thirdparty/flatcc/include/flatcc DESTINATION ".")
+else()
+  # This is a normal CMake build that builds + installs some includes and a static lib
+  add_library(nanoarrow_ipc src/nanoarrow/nanoarrow_ipc.c)
+  target_link_libraries(nanoarrow_ipc PRIVATE flatccrt)
+
+  target_include_directories(nanoarrow_ipc PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+        $<BUILD_INTERFACE:${nanoarrow_SOURCE_DIR}/src/nanoarrow>
+        $<BUILD_INTERFACE:${nanoarrow_BINARY_DIR}/generated>
+        $<BUILD_INTERFACE:${NANOARROW_IPC_FLATCC_INCLUDE_DIR}>
+        $<INSTALL_INTERFACE:include>)
+
+  install(TARGETS nanoarrow_ipc DESTINATION lib)
+  install(
+    FILES
+      src/nanoarrow/nanoarrow_ipc.h
+      src/nanoarrow/nanoarrow_ipc_flatcc_generated.h
+    DESTINATION include/nanoarrow)
 
-if (NANOARROW_IPC_BUILD_TESTS)
+endif()
 
+
+if (NANOARROW_IPC_BUILD_TESTS)
   set(MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --suppressions=${CMAKE_CURRENT_LIST_DIR}/../../valgrind.supp --error-exitcode=1")
   include(CTest)
   include(FetchContent)
@@ -65,6 +175,8 @@ if (NANOARROW_IPC_BUILD_TESTS)
   message(STATUS "Arrow version: ${ARROW_VERSION}")
   message(STATUS "Arrow SO version: ${ARROW_FULL_SO_VERSION}")
 
+  # Warning about timestamps of downloaded files
+  cmake_policy(SET CMP0135 NEW)
   FetchContent_Declare(
     googletest
     URL https://github.com/google/googletest/archive/release-1.11.0.zip
@@ -73,9 +185,15 @@ if (NANOARROW_IPC_BUILD_TESTS)
 
   enable_testing()
 
-  add_executable(nanoarrow_ipc_test src/nanoarrow_ipc/nanoarrow_ipc_test.cc)
+  add_executable(nanoarrow_ipc_test src/nanoarrow/nanoarrow_ipc_test.cc)
+
+  if(NANOARROW_IPC_CODE_COVERAGE)
+    target_compile_options(ipc_coverage_config INTERFACE -O0 -g --coverage)
+    target_link_options(ipc_coverage_config INTERFACE --coverage)
+    target_link_libraries(nanoarrow_ipc PRIVATE ipc_coverage_config)
+  endif()
 
-  target_link_libraries(nanoarrow_ipc_test nanoarrow_ipc arrow_shared gtest_main)
+  target_link_libraries(nanoarrow_ipc_test nanoarrow_ipc nanoarrow arrow_shared gtest_main)
 
   include(GoogleTest)
   gtest_discover_tests(nanoarrow_ipc_test)
diff --git a/extensions/nanoarrow_ipc/dev/update_fbs.sh b/extensions/nanoarrow_ipc/dev/update_fbs.sh
index c1474d4..a8c14a7 100755
--- a/extensions/nanoarrow_ipc/dev/update_fbs.sh
+++ b/extensions/nanoarrow_ipc/dev/update_fbs.sh
@@ -24,10 +24,7 @@ curl -L https://github.com/apache/arrow/raw/master/format/Message.fbs --output M
 curl -L https://github.com/apache/arrow/raw/master/format/File.fbs --output File.fbs
 
 # compile using flatcc
-flatcc --common --reader --builder --verifier --recursive *.fbs
-
-# copy to src/
-cp *.h ../../src/nanoarrow_ipc
+flatcc --common --reader --builder --verifier --recursive --outfile ../../src/nanoarrow_ipc/nanoarrow_ipc_flatcc_generated.h *.fbs
 
 # clean up
 cd ..
diff --git a/extensions/nanoarrow_ipc/dev/update_vendored_flatcc.sh b/extensions/nanoarrow_ipc/dev/update_vendored_flatcc.sh
new file mode 100755
index 0000000..7b6316e
--- /dev/null
+++ b/extensions/nanoarrow_ipc/dev/update_vendored_flatcc.sh
@@ -0,0 +1,78 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Download a flatcc release
+curl -L https://github.com/dvidelabs/flatcc/archive/refs/tags/v0.6.1.zip --output flatcc-src.zip
+unzip flatcc-src.zip -d flatcc-src
+FLATCC_SRC_DIR=flatcc-src/`ls flatcc-src`
+
+# Remove previous vendored flatcc
+rm -rf ../thirdparty/flatcc
+
+# Create the folders we need to exist
+mkdir -p ../thirdparty/flatcc/src/runtime
+mkdir -p ../thirdparty/flatcc/include/flatcc/portable
+
+# The only part of the runtime we need
+cp $FLATCC_SRC_DIR/src/runtime/emitter.c \
+  $FLATCC_SRC_DIR/src/runtime/builder.c \
+  $FLATCC_SRC_DIR/src/runtime/verifier.c \
+  $FLATCC_SRC_DIR/src/runtime/refmap.c \
+  ../thirdparty/flatcc/src/runtime/
+
+# We also need the headers for those sources. makedepend
+# can get those for us in topological order.
+pushd $FLATCC_SRC_DIR/include
+
+# List object dependencies (warns that it can't find system headers, which is OK)
+# This list is in topological order and could be used for a single-file include;
+# however, this approach is easier to support alongside a previous installation
+# of the flatcc runtime.
+makedepend -s#: -f- -- -I. -DFLATCC_PORTABLE -- 2>/dev/null \
+  ../src/runtime/emitter.c \
+  ../src/runtime/builder.c \
+  ../src/runtime/verifier.c \
+  ../src/runtime/refmap.c \
+  ../../../../src/nanoarrow/nanoarrow_ipc.c | \
+  # Remove the '<src file>.o: ' prefix
+  sed 's/[^:]*: *//' | \
+  # Spaces to new lines
+  sed 's/ /\n/' | \
+  # Only unique lines (but don't sort to preserve topological order)
+  awk '!x[$0]++' | \
+  # Remove blank lines
+  sed '/^$/d' | \
+  # Or anything having to do with nanoarrow
+  sed '/nanoarrow/d' > ../../../flatcc-headers.txt
+
+popd
+
+# Copy the headers we need. Using loops because cp --parents is not portable.
+for file in $(cat flatcc-headers.txt | sed /portable/d); do
+    cp "$FLATCC_SRC_DIR/include/$file" ../thirdparty/flatcc/include/flatcc
+done
+for file in $(cat flatcc-headers.txt | sed -n /portable/p); do
+    cp "$FLATCC_SRC_DIR/include/$file" ../thirdparty/flatcc/include/flatcc/portable;
+done
+
+# And the license
+cp $FLATCC_SRC_DIR/LICENSE ../thirdparty/flatcc
+
+# clean up
+rm -rf flatcc-src
+rm flatcc-src.zip
+rm flatcc-headers.txt
diff --git a/extensions/nanoarrow_ipc/src/nanoarrow_ipc/nanoarrow_ipc.c b/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.c
similarity index 63%
rename from extensions/nanoarrow_ipc/src/nanoarrow_ipc/nanoarrow_ipc.c
rename to extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.c
index d4993f1..65db581 100644
--- a/extensions/nanoarrow_ipc/src/nanoarrow_ipc/nanoarrow_ipc.c
+++ b/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.c
@@ -17,37 +17,22 @@
 
 #include <errno.h>
 #include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "nanoarrow/nanoarrow.h"
-
-#include "File_reader.h"
-#include "Message_reader.h"
-#include "Message_verifier.h"
-#include "Schema_reader.h"
 
+#include "nanoarrow.h"
+#include "nanoarrow_ipc_flatcc_generated.h"
 #include "nanoarrow_ipc.h"
 
-ArrowIpcErrorCode ArrowIpcErrorSet(struct ArrowIpcError* error, const char* fmt, ...) {
-  if (error == NULL) {
-    return NANOARROW_OK;
-  }
-
-  memset(error->message, 0, sizeof(error->message));
+ArrowErrorCode ArrowIpcCheckRuntime(struct ArrowError* error) {
+  const char* nanoarrow_runtime_version = ArrowNanoarrowVersion();
+  const char* nanoarrow_ipc_build_time_version = NANOARROW_VERSION;
 
-  va_list args;
-  va_start(args, fmt);
-  int chars_needed = vsnprintf(error->message, sizeof(error->message), fmt, args);
-  va_end(args);
-
-  if (chars_needed < 0) {
+  if (strcmp(nanoarrow_runtime_version, nanoarrow_ipc_build_time_version) != 0) {
+    ArrowErrorSet(error, "Expected nanoarrow runtime version '%s' but found version '%s'",
+                  nanoarrow_ipc_build_time_version, nanoarrow_runtime_version);
     return EINVAL;
-  } else if (((size_t)chars_needed) >= sizeof(error->message)) {
-    return ERANGE;
-  } else {
-    return NANOARROW_OK;
   }
+
+  return NANOARROW_OK;
 }
 
 void ArrowIpcReaderInit(struct ArrowIpcReader* reader) {
@@ -62,20 +47,20 @@ void ArrowIpcReaderReset(struct ArrowIpcReader* reader) {
   ArrowIpcReaderInit(reader);
 }
 
-static inline uint32_t ArrowIpcReadUint32LE(struct ArrowIpcBufferView* data) {
+static inline uint32_t ArrowIpcReadUint32LE(struct ArrowBufferView* data) {
   uint32_t value;
-  memcpy(&value, data->data, sizeof(uint32_t));
+  memcpy(&value, data->data.as_uint8, sizeof(uint32_t));
   // TODO: bswap32() if big endian
-  data->data += sizeof(uint32_t);
+  data->data.as_uint8 += sizeof(uint32_t);
   data->size_bytes -= sizeof(uint32_t);
   return value;
 }
 
-static inline int32_t ArrowIpcReadInt32LE(struct ArrowIpcBufferView* data) {
+static inline int32_t ArrowIpcReadInt32LE(struct ArrowBufferView* data) {
   int32_t value;
-  memcpy(&value, data->data, sizeof(int32_t));
+  memcpy(&value, data->data.as_uint8, sizeof(int32_t));
   // TODO: bswap32() if big endian
-  data->data += sizeof(int32_t);
+  data->data.as_uint8 += sizeof(int32_t);
   data->size_bytes -= sizeof(int32_t);
   return value;
 }
@@ -83,11 +68,11 @@ static inline int32_t ArrowIpcReadInt32LE(struct ArrowIpcBufferView* data) {
 #define ns(x) FLATBUFFERS_WRAP_NAMESPACE(org_apache_arrow_flatbuf, x)
 
 static int ArrowIpcReaderSetTypeSimple(struct ArrowSchema* schema, int nanoarrow_type,
-                                       struct ArrowIpcError* error) {
+                                       struct ArrowError* error) {
   int result = ArrowSchemaSetType(schema, nanoarrow_type);
   if (result != NANOARROW_OK) {
-    ArrowIpcErrorSet(error, "ArrowSchemaSetType() failed for type %s",
-                     ArrowTypeString(nanoarrow_type));
+    ArrowErrorSet(error, "ArrowSchemaSetType() failed for type %s",
+                  ArrowTypeString(nanoarrow_type));
     return result;
   }
 
@@ -96,7 +81,7 @@ static int ArrowIpcReaderSetTypeSimple(struct ArrowSchema* schema, int nanoarrow
 
 static int ArrowIpcReaderSetTypeInt(struct ArrowSchema* schema,
                                     flatbuffers_generic_t type_generic,
-                                    struct ArrowIpcError* error) {
+                                    struct ArrowError* error) {
   ns(Int_table_t) type = (ns(Int_table_t))type_generic;
 
   int is_signed = ns(Int_is_signed_get(type));
@@ -118,9 +103,9 @@ static int ArrowIpcReaderSetTypeInt(struct ArrowSchema* schema,
         nanoarrow_type = NANOARROW_TYPE_INT64;
         break;
       default:
-        ArrowIpcErrorSet(error,
-                         "Expected signed int bitwidth of 8, 16, 32, or 64 but got %d",
-                         (int)bitwidth);
+        ArrowErrorSet(error,
+                      "Expected signed int bitwidth of 8, 16, 32, or 64 but got %d",
+                      (int)bitwidth);
         return EINVAL;
     }
   } else {
@@ -138,9 +123,9 @@ static int ArrowIpcReaderSetTypeInt(struct ArrowSchema* schema,
         nanoarrow_type = NANOARROW_TYPE_UINT64;
         break;
       default:
-        ArrowIpcErrorSet(error,
-                         "Expected unsigned int bitwidth of 8, 16, 32, or 64 but got %d",
-                         (int)bitwidth);
+        ArrowErrorSet(error,
+                      "Expected unsigned int bitwidth of 8, 16, 32, or 64 but got %d",
+                      (int)bitwidth);
         return EINVAL;
     }
   }
@@ -149,7 +134,7 @@ static int ArrowIpcReaderSetTypeInt(struct ArrowSchema* schema,
 }
 
 static int ArrowIpcReaderSetField(struct ArrowSchema* schema, ns(Field_table_t) field,
-                                  struct ArrowIpcError* error) {
+                                  struct ArrowError* error) {
   int result;
   if (ns(Field_name_is_present(field))) {
     result = ArrowSchemaSetName(schema, ns(Field_name_get(field)));
@@ -158,7 +143,7 @@ static int ArrowIpcReaderSetField(struct ArrowSchema* schema, ns(Field_table_t)
   }
 
   if (result != NANOARROW_OK) {
-    ArrowIpcErrorSet(error, "ArrowSchemaSetName() failed");
+    ArrowErrorSet(error, "ArrowSchemaSetName() failed");
     return result;
   }
 
@@ -173,7 +158,7 @@ static int ArrowIpcReaderSetField(struct ArrowSchema* schema, ns(Field_table_t)
           ArrowIpcReaderSetTypeInt(schema, ns(Field_type_get(field)), error));
       break;
     default:
-      ArrowIpcErrorSet(error, "Unrecognized Field type with value %d", (int)type_type);
+      ArrowErrorSet(error, "Unrecognized Field type with value %d", (int)type_type);
       return EINVAL;
   }
 
@@ -181,7 +166,7 @@ static int ArrowIpcReaderSetField(struct ArrowSchema* schema, ns(Field_table_t)
 }
 
 static int ArrowIpcReaderSetChildren(struct ArrowSchema* schema, ns(Field_vec_t) fields,
-                                     struct ArrowIpcError* error) {
+                                     struct ArrowError* error) {
   int64_t n_fields = ns(Schema_vec_len(fields));
 
   for (int64_t i = 0; i < n_fields; i++) {
@@ -194,7 +179,7 @@ static int ArrowIpcReaderSetChildren(struct ArrowSchema* schema, ns(Field_vec_t)
 
 static int ArrowIpcReaderDecodeSchema(struct ArrowIpcReader* reader,
                                       flatbuffers_generic_t message_header,
-                                      struct ArrowIpcError* error) {
+                                      struct ArrowError* error) {
   ns(Schema_table_t) schema = (ns(Schema_table_t))message_header;
   int endianness = ns(Schema_endianness(schema));
   switch (endianness) {
@@ -205,9 +190,9 @@ static int ArrowIpcReaderDecodeSchema(struct ArrowIpcReader* reader,
       reader->endianness = NANOARROW_IPC_ENDIANNESS_BIG;
       break;
     default:
-      ArrowIpcErrorSet(error,
-                       "Expected Schema endianness of 0 (little) or 1 (big) but got %d",
-                       (int)endianness);
+      ArrowErrorSet(error,
+                    "Expected Schema endianness of 0 (little) or 1 (big) but got %d",
+                    (int)endianness);
       return EINVAL;
   }
 
@@ -216,7 +201,7 @@ static int ArrowIpcReaderDecodeSchema(struct ArrowIpcReader* reader,
   reader->features = 0;
 
   for (int64_t i = 0; i < n_features; i++) {
-    int feature = ns(Feature_vec_at(features, i));
+    ns(Feature_enum_t) feature = ns(Feature_vec_at(features, i));
     switch (feature) {
       case ns(Feature_COMPRESSED_BODY):
         reader->features |= NANOARROW_IPC_FEATURE_COMPRESSED_BODY;
@@ -225,8 +210,7 @@ static int ArrowIpcReaderDecodeSchema(struct ArrowIpcReader* reader,
         reader->features |= NANOARROW_IPC_FEATURE_DICTIONARY_REPLACEMENT;
         break;
       default:
-        ArrowIpcErrorSet(error, "Unrecognized Schema feature with value %d",
-                         (int)feature);
+        ArrowErrorSet(error, "Unrecognized Schema feature with value %d", (int)feature);
         return EINVAL;
     }
   }
@@ -240,8 +224,8 @@ static int ArrowIpcReaderDecodeSchema(struct ArrowIpcReader* reader,
   ArrowSchemaInit(&reader->schema);
   int result = ArrowSchemaSetTypeStruct(&reader->schema, n_fields);
   if (result != NANOARROW_OK) {
-    ArrowIpcErrorSet(error, "Failed to allocate struct schema with %ld children",
-                     (long)n_fields);
+    ArrowErrorSet(error, "Failed to allocate struct schema with %ld children",
+                  (long)n_fields);
     return result;
   }
 
@@ -249,45 +233,45 @@ static int ArrowIpcReaderDecodeSchema(struct ArrowIpcReader* reader,
 }
 
 static inline int ArrowIpcReaderCheckHeader(struct ArrowIpcReader* reader,
-                                            struct ArrowIpcBufferView* data_mut,
+                                            struct ArrowBufferView* data_mut,
                                             int32_t* message_size_bytes,
-                                            struct ArrowIpcError* error) {
+                                            struct ArrowError* error) {
   if (data_mut->size_bytes < 8) {
-    ArrowIpcErrorSet(error, "Expected data of at least 8 bytes but only %ld bytes remain",
-                     (long)data_mut->size_bytes);
+    ArrowErrorSet(error, "Expected data of at least 8 bytes but only %ld bytes remain",
+                  (long)data_mut->size_bytes);
     return EINVAL;
   }
 
   uint32_t continuation = ArrowIpcReadUint32LE(data_mut);
   if (continuation != 0xFFFFFFFF) {
-    ArrowIpcErrorSet(error, "Expected 0xFFFFFFFF at start of message but found 0x%08X",
-                     (unsigned int)continuation);
+    ArrowErrorSet(error, "Expected 0xFFFFFFFF at start of message but found 0x%08X",
+                  (unsigned int)continuation);
     return EINVAL;
   }
 
   *message_size_bytes = ArrowIpcReadInt32LE(data_mut);
   if ((*message_size_bytes) > data_mut->size_bytes || (*message_size_bytes) < 0) {
-    ArrowIpcErrorSet(error,
-                     "Expected 0 <= message body size <= %ld bytes but found message "
-                     "body size of %ld bytes",
-                     (long)data_mut->size_bytes, (long)(*message_size_bytes));
+    ArrowErrorSet(error,
+                  "Expected 0 <= message body size <= %ld bytes but found message "
+                  "body size of %ld bytes",
+                  (long)data_mut->size_bytes, (long)(*message_size_bytes));
     return EINVAL;
   }
 
   return NANOARROW_OK;
 }
 
-static void ArrowIpcReaderAdvanceData(struct ArrowIpcBufferView* data,
+static void ArrowIpcReaderAdvanceData(struct ArrowBufferView* data,
                                       int32_t message_size_bytes) {
   message_size_bytes += (message_size_bytes + 8) % 8;
-  data->data += message_size_bytes;
+  data->data.as_uint8 += message_size_bytes;
   data->size_bytes -= message_size_bytes;
 }
 
-ArrowIpcErrorCode ArrowIpcReaderPeek(struct ArrowIpcReader* reader,
-                                     struct ArrowIpcBufferView* data,
-                                     struct ArrowIpcError* error) {
-  struct ArrowIpcBufferView data_mut = *data;
+ArrowErrorCode ArrowIpcReaderPeek(struct ArrowIpcReader* reader,
+                                  struct ArrowBufferView* data,
+                                  struct ArrowError* error) {
+  struct ArrowBufferView data_mut = *data;
   int32_t message_size_bytes;
   NANOARROW_RETURN_NOT_OK(
       ArrowIpcReaderCheckHeader(reader, &data_mut, &message_size_bytes, error));
@@ -297,36 +281,36 @@ ArrowIpcErrorCode ArrowIpcReaderPeek(struct ArrowIpcReader* reader,
   return NANOARROW_OK;
 }
 
-ArrowIpcErrorCode ArrowIpcReaderVerify(struct ArrowIpcReader* reader,
-                                       struct ArrowIpcBufferView* data,
-                                       struct ArrowIpcError* error) {
-  struct ArrowIpcBufferView data_mut = *data;
+ArrowErrorCode ArrowIpcReaderVerify(struct ArrowIpcReader* reader,
+                                    struct ArrowBufferView* data,
+                                    struct ArrowError* error) {
+  struct ArrowBufferView data_mut = *data;
   int32_t message_size_bytes;
   NANOARROW_RETURN_NOT_OK(
       ArrowIpcReaderCheckHeader(reader, &data_mut, &message_size_bytes, error));
 
-  if (ns(Message_verify_as_root(data_mut.data, data_mut.size_bytes)) ==
+  if (ns(Message_verify_as_root(data_mut.data.as_uint8, data_mut.size_bytes)) ==
       flatcc_verify_ok) {
     ArrowIpcReaderAdvanceData(&data_mut, message_size_bytes);
     *data = data_mut;
     return NANOARROW_OK;
   } else {
-    ArrowIpcErrorSet(error, "Message flatbuffer verification failed");
+    ArrowErrorSet(error, "Message flatbuffer verification failed");
     return EINVAL;
   }
 }
 
-ArrowIpcErrorCode ArrowIpcReaderDecode(struct ArrowIpcReader* reader,
-                                       struct ArrowIpcBufferView* data,
-                                       struct ArrowIpcError* error) {
+ArrowErrorCode ArrowIpcReaderDecode(struct ArrowIpcReader* reader,
+                                    struct ArrowBufferView* data,
+                                    struct ArrowError* error) {
   reader->message_type = NANOARROW_IPC_MESSAGE_TYPE_UNINITIALIZED;
-  struct ArrowIpcBufferView data_mut = *data;
+  struct ArrowBufferView data_mut = *data;
 
   int32_t message_size_bytes;
   NANOARROW_RETURN_NOT_OK(
       ArrowIpcReaderCheckHeader(reader, &data_mut, &message_size_bytes, error));
 
-  ns(Message_table_t) message = ns(Message_as_root(data_mut.data));
+  ns(Message_table_t) message = ns(Message_as_root(data_mut.data.as_uint8));
   if (!message) {
     return EINVAL;
   }
@@ -339,11 +323,11 @@ ArrowIpcErrorCode ArrowIpcReaderDecode(struct ArrowIpcReader* reader,
     case ns(MetadataVersion_V1):
     case ns(MetadataVersion_V2):
     case ns(MetadataVersion_V3):
-      ArrowIpcErrorSet(error, "Expected metadata version V4 or V5 but found %s",
-                       ns(MetadataVersion_name(version)));
+      ArrowErrorSet(error, "Expected metadata version V4 or V5 but found %s",
+                    ns(MetadataVersion_name(version)));
       break;
     default:
-      ArrowIpcErrorSet(error, "Unexpected value for Message metadata version (%d)", version);
+      ArrowErrorSet(error, "Unexpected value for Message metadata version (%d)", version);
       return EINVAL;
   }
 
@@ -358,11 +342,11 @@ ArrowIpcErrorCode ArrowIpcReaderDecode(struct ArrowIpcReader* reader,
     case ns(MessageHeader_RecordBatch):
     case ns(MessageHeader_Tensor):
     case ns(MessageHeader_SparseTensor):
-      ArrowIpcErrorSet(error, "Unsupported message type: '%s'",
-                       ns(MessageHeader_type_name(reader->message_type)));
+      ArrowErrorSet(error, "Unsupported message type: '%s'",
+                    ns(MessageHeader_type_name(reader->message_type)));
       return ENOTSUP;
     default:
-      ArrowIpcErrorSet(error, "Unnown message type: %d", (int)(reader->message_type));
+      ArrowErrorSet(error, "Unnown message type: %d", (int)(reader->message_type));
       return EINVAL;
   }
 
diff --git a/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.h b/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.h
new file mode 100644
index 0000000..d5736a6
--- /dev/null
+++ b/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc.h
@@ -0,0 +1,85 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#ifndef NANOARROW_IPC_H_INCLUDED
+#define NANOARROW_IPC_H_INCLUDED
+
+#include "nanoarrow.h"
+
+#ifdef NANOARROW_NAMESPACE
+
+#define ArrowIpcCheckRuntime NANOARROW_SYMBOL(NANOARROW_NAMESPACE, ArrowIpcCheckRuntime)
+#define ArrowIpcReaderInit NANOARROW_SYMBOL(NANOARROW_NAMESPACE, ArrowIpcReaderInit)
+#define ArrowIpcReaderReset NANOARROW_SYMBOL(NANOARROW_NAMESPACE, ArrowIpcReaderReset)
+#define ArrowIpcReaderPeek NANOARROW_SYMBOL(NANOARROW_NAMESPACE, ArrowIpcReaderPeek)
+#define ArrowIpcReaderVerify NANOARROW_SYMBOL(NANOARROW_NAMESPACE, ArrowIpcReaderVerify)
+#define ArrowIpcReaderDecode NANOARROW_SYMBOL(NANOARROW_NAMESPACE, ArrowIpcReaderDecode)
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum ArrowIpcMessageType {
+  NANOARROW_IPC_MESSAGE_TYPE_UNINITIALIZED,
+  NANOARROW_IPC_MESSAGE_TYPE_SCHEMA,
+  NANOARROW_IPC_MESSAGE_TYPE_DICTIONARY_BATCH,
+  NANOARROW_IPC_MESSAGE_TYPE_RECORD_BATCH,
+  NANOARROW_IPC_MESSAGE_TYPE_TENSOR,
+  NANOARROW_IPC_MESSAGE_TYPE_SPARSE_TENSOR
+};
+
+enum ArrowIpcEndianness {
+  NANOARROW_IPC_ENDIANNESS_UNINITIALIZED,
+  NANOARROW_IPC_ENDIANNESS_LITTLE,
+  NANOARROW_IPC_ENDIANNESS_BIG
+};
+
+#define NANOARROW_IPC_FEATURE_DICTIONARY_REPLACEMENT 1
+#define NANOARROW_IPC_FEATURE_COMPRESSED_BODY 2
+
+ArrowErrorCode ArrowIpcCheckRuntime(struct ArrowError* error);
+
+struct ArrowIpcReader {
+  int32_t metadata_version;
+  int32_t message_type;
+  int32_t endianness;
+  int32_t features;
+  struct ArrowSchema schema;
+};
+
+void ArrowIpcReaderInit(struct ArrowIpcReader* reader);
+
+void ArrowIpcReaderReset(struct ArrowIpcReader* reader);
+
+ArrowErrorCode ArrowIpcReaderPeek(struct ArrowIpcReader* reader,
+                                  struct ArrowBufferView* data, struct ArrowError* error);
+
+ArrowErrorCode ArrowIpcReaderVerify(struct ArrowIpcReader* reader,
+                                    struct ArrowBufferView* data,
+                                    struct ArrowError* error);
+
+ArrowErrorCode ArrowIpcReaderDecode(struct ArrowIpcReader* reader,
+                                    struct ArrowBufferView* data,
+                                    struct ArrowError* error);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc_flatcc_generated.h b/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc_flatcc_generated.h
new file mode 100644
index 0000000..cbaef37
--- /dev/null
+++ b/extensions/nanoarrow_ipc/src/nanoarrow/nanoarrow_ipc_flatcc_generated.h
@@ -0,0 +1,20271 @@
+#ifndef FLATBUFFERS_COMMON_READER_H
+#define FLATBUFFERS_COMMON_READER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+/* Common FlatBuffers read functionality for C. */
+
+#include "flatcc/flatcc_prologue.h"
+#include "flatcc/flatcc_flatbuffers.h"
+
+
+#define __flatbuffers_read_scalar_at_byteoffset(N, p, o) N ## _read_from_pe((uint8_t *)(p) + (o))
+#define __flatbuffers_read_scalar(N, p) N ## _read_from_pe(p)
+#define __flatbuffers_read_vt(ID, offset, t)\
+flatbuffers_voffset_t offset = 0;\
+{   flatbuffers_voffset_t id__tmp, *vt__tmp;\
+    FLATCC_ASSERT(t != 0 && "null pointer table access");\
+    id__tmp = ID;\
+    vt__tmp = (flatbuffers_voffset_t *)((uint8_t *)(t) -\
+        __flatbuffers_soffset_read_from_pe(t));\
+    if (__flatbuffers_voffset_read_from_pe(vt__tmp) >= sizeof(vt__tmp[0]) * (id__tmp + 3u)) {\
+        offset = __flatbuffers_voffset_read_from_pe(vt__tmp + id__tmp + 2);\
+    }\
+}
+#define __flatbuffers_field_present(ID, t) { __flatbuffers_read_vt(ID, offset__tmp, t) return offset__tmp != 0; }
+#define __flatbuffers_scalar_field(T, ID, t)\
+{\
+    __flatbuffers_read_vt(ID, offset__tmp, t)\
+    if (offset__tmp) {\
+        return (const T *)((uint8_t *)(t) + offset__tmp);\
+    }\
+    return 0;\
+}
+#define __flatbuffers_define_scalar_field(ID, N, NK, TK, T, V)\
+static inline T N ## _ ## NK ## _get(N ## _table_t t__tmp)\
+{ __flatbuffers_read_vt(ID, offset__tmp, t__tmp)\
+  return offset__tmp ? __flatbuffers_read_scalar_at_byteoffset(TK, t__tmp, offset__tmp) : V;\
+}\
+static inline T N ## _ ## NK(N ## _table_t t__tmp)\
+{ __flatbuffers_read_vt(ID, offset__tmp, t__tmp)\
+  return offset__tmp ? __flatbuffers_read_scalar_at_byteoffset(TK, t__tmp, offset__tmp) : V;\
+}\
+static inline const T *N ## _ ## NK ## _get_ptr(N ## _table_t t__tmp)\
+__flatbuffers_scalar_field(T, ID, t__tmp)\
+static inline int N ## _ ## NK ## _is_present(N ## _table_t t__tmp)\
+__flatbuffers_field_present(ID, t__tmp)\
+__flatbuffers_define_scan_by_scalar_field(N, NK, T)
+#define __flatbuffers_define_scalar_optional_field(ID, N, NK, TK, T, V)\
+__flatbuffers_define_scalar_field(ID, N, NK, TK, T, V)\
+static inline TK ## _option_t N ## _ ## NK ## _option(N ## _table_t t__tmp)\
+{ TK ## _option_t ret; __flatbuffers_read_vt(ID, offset__tmp, t__tmp)\
+  ret.is_null = offset__tmp == 0; ret.value = offset__tmp ?\
+  __flatbuffers_read_scalar_at_byteoffset(TK, t__tmp, offset__tmp) : V;\
+  return ret; }
+#define __flatbuffers_struct_field(T, ID, t, r)\
+{\
+    __flatbuffers_read_vt(ID, offset__tmp, t)\
+    if (offset__tmp) {\
+        return (T)((uint8_t *)(t) + offset__tmp);\
+    }\
+    FLATCC_ASSERT(!(r) && "required field missing");\
+    return 0;\
+}
+#define __flatbuffers_offset_field(T, ID, t, r, adjust)\
+{\
+    flatbuffers_uoffset_t *elem__tmp;\
+    __flatbuffers_read_vt(ID, offset__tmp, t)\
+    if (offset__tmp) {\
+        elem__tmp = (flatbuffers_uoffset_t *)((uint8_t *)(t) + offset__tmp);\
+        /* Add sizeof so C api can have raw access past header field. */\
+        return (T)((uint8_t *)(elem__tmp) + adjust +\
+              __flatbuffers_uoffset_read_from_pe(elem__tmp));\
+    }\
+    FLATCC_ASSERT(!(r) && "required field missing");\
+    return 0;\
+}
+#define __flatbuffers_vector_field(T, ID, t, r) __flatbuffers_offset_field(T, ID, t, r, sizeof(flatbuffers_uoffset_t))
+#define __flatbuffers_table_field(T, ID, t, r) __flatbuffers_offset_field(T, ID, t, r, 0)
+#define __flatbuffers_define_struct_field(ID, N, NK, T, r)\
+static inline T N ## _ ## NK ## _get(N ## _table_t t__tmp)\
+__flatbuffers_struct_field(T, ID, t__tmp, r)\
+static inline T N ## _ ## NK(N ## _table_t t__tmp)\
+__flatbuffers_struct_field(T, ID, t__tmp, r)\
+static inline int N ## _ ## NK ## _is_present(N ## _table_t t__tmp)\
+__flatbuffers_field_present(ID, t__tmp)
+#define __flatbuffers_define_vector_field(ID, N, NK, T, r)\
+static inline T N ## _ ## NK ## _get(N ## _table_t t__tmp)\
+__flatbuffers_vector_field(T, ID, t__tmp, r)\
+static inline T N ## _ ## NK(N ## _table_t t__tmp)\
+__flatbuffers_vector_field(T, ID, t__tmp, r)\
+static inline int N ## _ ## NK ## _is_present(N ## _table_t t__tmp)\
+__flatbuffers_field_present(ID, t__tmp)
+#define __flatbuffers_define_table_field(ID, N, NK, T, r)\
+static inline T N ## _ ## NK ## _get(N ## _table_t t__tmp)\
+__flatbuffers_table_field(T, ID, t__tmp, r)\
+static inline T N ## _ ## NK(N ## _table_t t__tmp)\
+__flatbuffers_table_field(T, ID, t__tmp, r)\
+static inline int N ## _ ## NK ## _is_present(N ## _table_t t__tmp)\
+__flatbuffers_field_present(ID, t__tmp)
+#define __flatbuffers_define_string_field(ID, N, NK, r)\
+static inline flatbuffers_string_t N ## _ ## NK ## _get(N ## _table_t t__tmp)\
+__flatbuffers_vector_field(flatbuffers_string_t, ID, t__tmp, r)\
+static inline flatbuffers_string_t N ## _ ## NK(N ## _table_t t__tmp)\
+__flatbuffers_vector_field(flatbuffers_string_t, ID, t__tmp, r)\
+static inline int N ## _ ## NK ## _is_present(N ## _table_t t__tmp)\
+__flatbuffers_field_present(ID, t__tmp)\
+__flatbuffers_define_scan_by_string_field(N, NK)
+#define __flatbuffers_vec_len(vec)\
+{ return (vec) ? (size_t)__flatbuffers_uoffset_read_from_pe((flatbuffers_uoffset_t *)vec - 1) : 0; }
+#define __flatbuffers_string_len(s) __flatbuffers_vec_len(s)
+static inline size_t flatbuffers_vec_len(const void *vec)
+__flatbuffers_vec_len(vec)
+#define __flatbuffers_scalar_vec_at(N, vec, i)\
+{ FLATCC_ASSERT(flatbuffers_vec_len(vec) > (i) && "index out of range");\
+  return __flatbuffers_read_scalar(N, &(vec)[i]); }
+#define __flatbuffers_struct_vec_at(vec, i)\
+{ FLATCC_ASSERT(flatbuffers_vec_len(vec) > (i) && "index out of range"); return (vec) + (i); }
+/* `adjust` skips past the header for string vectors. */
+#define __flatbuffers_offset_vec_at(T, vec, i, adjust)\
+{ const flatbuffers_uoffset_t *elem__tmp = (vec) + (i);\
+  FLATCC_ASSERT(flatbuffers_vec_len(vec) > (i) && "index out of range");\
+  return (T)((uint8_t *)(elem__tmp) + (size_t)__flatbuffers_uoffset_read_from_pe(elem__tmp) + (adjust)); }
+#define __flatbuffers_define_scalar_vec_len(N)\
+static inline size_t N ## _vec_len(N ##_vec_t vec__tmp)\
+{ return flatbuffers_vec_len(vec__tmp); }
+#define __flatbuffers_define_scalar_vec_at(N, T) \
+static inline T N ## _vec_at(N ## _vec_t vec__tmp, size_t i__tmp)\
+__flatbuffers_scalar_vec_at(N, vec__tmp, i__tmp)
+typedef const char *flatbuffers_string_t;
+static inline size_t flatbuffers_string_len(flatbuffers_string_t s)
+__flatbuffers_string_len(s)
+typedef const flatbuffers_uoffset_t *flatbuffers_string_vec_t;
+typedef flatbuffers_uoffset_t *flatbuffers_string_mutable_vec_t;
+static inline size_t flatbuffers_string_vec_len(flatbuffers_string_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline flatbuffers_string_t flatbuffers_string_vec_at(flatbuffers_string_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(flatbuffers_string_t, vec, i, sizeof(vec[0]))
+typedef const void *flatbuffers_generic_t;
+typedef void *flatbuffers_mutable_generic_t;
+static inline flatbuffers_string_t flatbuffers_string_cast_from_generic(const flatbuffers_generic_t p)
+{ return p ? ((const char *)p) + __flatbuffers_uoffset__size() : 0; }
+typedef const flatbuffers_uoffset_t *flatbuffers_generic_vec_t;
+typedef flatbuffers_uoffset_t *flatbuffers_generic_table_mutable_vec_t;
+static inline size_t flatbuffers_generic_vec_len(flatbuffers_generic_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline flatbuffers_generic_t flatbuffers_generic_vec_at(flatbuffers_generic_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(flatbuffers_generic_t, vec, i, 0)
+static inline flatbuffers_generic_t flatbuffers_generic_vec_at_as_string(flatbuffers_generic_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(flatbuffers_generic_t, vec, i, sizeof(vec[0]))
+typedef struct flatbuffers_union {
+    flatbuffers_union_type_t type;
+    flatbuffers_generic_t value;
+} flatbuffers_union_t;
+typedef struct flatbuffers_union_vec {
+    const flatbuffers_union_type_t *type;
+    const flatbuffers_uoffset_t *value;
+} flatbuffers_union_vec_t;
+typedef struct flatbuffers_mutable_union {
+    flatbuffers_union_type_t type;
+    flatbuffers_mutable_generic_t value;
+} flatbuffers_mutable_union_t;
+typedef struct flatbuffers_mutable_union_vec {
+    flatbuffers_union_type_t *type;
+    flatbuffers_uoffset_t *value;
+} flatbuffers_mutable_union_vec_t;
+static inline flatbuffers_mutable_union_t flatbuffers_mutable_union_cast(flatbuffers_union_t u__tmp)\
+{ flatbuffers_mutable_union_t mu = { u__tmp.type, (flatbuffers_mutable_generic_t)u__tmp.value };\
+  return mu; }
+static inline flatbuffers_mutable_union_vec_t flatbuffers_mutable_union_vec_cast(flatbuffers_union_vec_t uv__tmp)\
+{ flatbuffers_mutable_union_vec_t muv =\
+  { (flatbuffers_union_type_t *)uv__tmp.type, (flatbuffers_uoffset_t *)uv__tmp.value }; return muv; }
+#define __flatbuffers_union_type_field(ID, t)\
+{\
+    __flatbuffers_read_vt(ID, offset__tmp, t)\
+    return offset__tmp ? __flatbuffers_read_scalar_at_byteoffset(__flatbuffers_utype, t, offset__tmp) : 0;\
+}
+static inline flatbuffers_string_t flatbuffers_string_cast_from_union(const flatbuffers_union_t u__tmp)\
+{ return flatbuffers_string_cast_from_generic(u__tmp.value); }
+#define __flatbuffers_define_union_field(NS, ID, N, NK, T, r)\
+static inline T ## _union_type_t N ## _ ## NK ## _type_get(N ## _table_t t__tmp)\
+__## NS ## union_type_field(((ID) - 1), t__tmp)\
+static inline NS ## generic_t N ## _ ## NK ## _get(N ## _table_t t__tmp)\
+__## NS ## table_field(NS ## generic_t, ID, t__tmp, r)\
+static inline T ## _union_type_t N ## _ ## NK ## _type(N ## _table_t t__tmp)\
+__## NS ## union_type_field(((ID) - 1), t__tmp)\
+static inline NS ## generic_t N ## _ ## NK(N ## _table_t t__tmp)\
+__## NS ## table_field(NS ## generic_t, ID, t__tmp, r)\
+static inline int N ## _ ## NK ## _is_present(N ## _table_t t__tmp)\
+__## NS ## field_present(ID, t__tmp)\
+static inline T ## _union_t N ## _ ## NK ## _union(N ## _table_t t__tmp)\
+{ T ## _union_t u__tmp = { 0, 0 }; u__tmp.type = N ## _ ## NK ## _type_get(t__tmp);\
+  if (u__tmp.type == 0) return u__tmp; u__tmp.value = N ## _ ## NK ## _get(t__tmp); return u__tmp; }\
+static inline NS ## string_t N ## _ ## NK ## _as_string(N ## _table_t t__tmp)\
+{ return NS ## string_cast_from_generic(N ## _ ## NK ## _get(t__tmp)); }\
+
+#define __flatbuffers_define_union_vector_ops(NS, T)\
+static inline size_t T ## _union_vec_len(T ## _union_vec_t uv__tmp)\
+{ return NS ## vec_len(uv__tmp.type); }\
+static inline T ## _union_t T ## _union_vec_at(T ## _union_vec_t uv__tmp, size_t i__tmp)\
+{ T ## _union_t u__tmp = { 0, 0 }; size_t n__tmp = NS ## vec_len(uv__tmp.type);\
+  FLATCC_ASSERT(n__tmp > (i__tmp) && "index out of range"); u__tmp.type = uv__tmp.type[i__tmp];\
+  /* Unknown type is treated as NONE for schema evolution. */\
+  if (u__tmp.type == 0) return u__tmp;\
+  u__tmp.value = NS ## generic_vec_at(uv__tmp.value, i__tmp); return u__tmp; }\
+static inline NS ## string_t T ## _union_vec_at_as_string(T ## _union_vec_t uv__tmp, size_t i__tmp)\
+{ return (NS ## string_t) NS ## generic_vec_at_as_string(uv__tmp.value, i__tmp); }\
+
+#define __flatbuffers_define_union_vector(NS, T)\
+typedef NS ## union_vec_t T ## _union_vec_t;\
+typedef NS ## mutable_union_vec_t T ## _mutable_union_vec_t;\
+static inline T ## _mutable_union_vec_t T ## _mutable_union_vec_cast(T ## _union_vec_t u__tmp)\
+{ return NS ## mutable_union_vec_cast(u__tmp); }\
+__## NS ## define_union_vector_ops(NS, T)
+#define __flatbuffers_define_union(NS, T)\
+typedef NS ## union_t T ## _union_t;\
+typedef NS ## mutable_union_t T ## _mutable_union_t;\
+static inline T ## _mutable_union_t T ## _mutable_union_cast(T ## _union_t u__tmp)\
+{ return NS ## mutable_union_cast(u__tmp); }\
+__## NS ## define_union_vector(NS, T)
+#define __flatbuffers_define_union_vector_field(NS, ID, N, NK, T, r)\
+__## NS ## define_vector_field(ID - 1, N, NK ## _type, T ## _vec_t, r)\
+__## NS ## define_vector_field(ID, N, NK, flatbuffers_generic_vec_t, r)\
+static inline T ## _union_vec_t N ## _ ## NK ## _union(N ## _table_t t__tmp)\
+{ T ## _union_vec_t uv__tmp; uv__tmp.type = N ## _ ## NK ## _type_get(t__tmp);\
+  uv__tmp.value = N ## _ ## NK(t__tmp);\
+  FLATCC_ASSERT(NS ## vec_len(uv__tmp.type) == NS ## vec_len(uv__tmp.value)\
+  && "union vector type length mismatch"); return uv__tmp; }
+#include <string.h>
+static const size_t flatbuffers_not_found = (size_t)-1;
+static const size_t flatbuffers_end = (size_t)-1;
+#define __flatbuffers_identity(n) (n)
+#define __flatbuffers_min(a, b) ((a) < (b) ? (a) : (b))
+/* Subtraction doesn't work for unsigned types. */
+#define __flatbuffers_scalar_cmp(x, y, n) ((x) < (y) ? -1 : (x) > (y))
+static inline int __flatbuffers_string_n_cmp(flatbuffers_string_t v, const char *s, size_t n)
+{ size_t nv = flatbuffers_string_len(v); int x = strncmp(v, s, nv < n ? nv : n);
+  return x != 0 ? x : nv < n ? -1 : nv > n; }
+/* `n` arg unused, but needed by string find macro expansion. */
+static inline int __flatbuffers_string_cmp(flatbuffers_string_t v, const char *s, size_t n) { (void)n; return strcmp(v, s); }
+/* A = identity if searching scalar vectors rather than key fields. */
+/* Returns lowest matching index or not_found. */
+#define __flatbuffers_find_by_field(A, V, E, L, K, Kn, T, D)\
+{ T v__tmp; size_t a__tmp = 0, b__tmp, m__tmp; if (!(b__tmp = L(V))) { return flatbuffers_not_found; }\
+  --b__tmp;\
+  while (a__tmp < b__tmp) {\
+    m__tmp = a__tmp + ((b__tmp - a__tmp) >> 1);\
+    v__tmp = A(E(V, m__tmp));\
+    if ((D(v__tmp, (K), (Kn))) < 0) {\
+      a__tmp = m__tmp + 1;\
+    } else {\
+      b__tmp = m__tmp;\
+    }\
+  }\
+  if (a__tmp == b__tmp) {\
+    v__tmp = A(E(V, a__tmp));\
+    if (D(v__tmp, (K), (Kn)) == 0) {\
+       return a__tmp;\
+    }\
+  }\
+  return flatbuffers_not_found;\
+}
+#define __flatbuffers_find_by_scalar_field(A, V, E, L, K, T)\
+__flatbuffers_find_by_field(A, V, E, L, K, 0, T, __flatbuffers_scalar_cmp)
+#define __flatbuffers_find_by_string_field(A, V, E, L, K)\
+__flatbuffers_find_by_field(A, V, E, L, K, 0, flatbuffers_string_t, __flatbuffers_string_cmp)
+#define __flatbuffers_find_by_string_n_field(A, V, E, L, K, Kn)\
+__flatbuffers_find_by_field(A, V, E, L, K, Kn, flatbuffers_string_t, __flatbuffers_string_n_cmp)
+#define __flatbuffers_define_find_by_scalar_field(N, NK, TK)\
+static inline size_t N ## _vec_find_by_ ## NK(N ## _vec_t vec__tmp, TK key__tmp)\
+__flatbuffers_find_by_scalar_field(N ## _ ## NK, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, TK)
+#define __flatbuffers_define_scalar_find(N, T)\
+static inline size_t N ## _vec_find(N ## _vec_t vec__tmp, T key__tmp)\
+__flatbuffers_find_by_scalar_field(__flatbuffers_identity, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)
+#define __flatbuffers_define_find_by_string_field(N, NK) \
+/* Note: find only works on vectors sorted by this field. */\
+static inline size_t N ## _vec_find_by_ ## NK(N ## _vec_t vec__tmp, const char *s__tmp)\
+__flatbuffers_find_by_string_field(N ## _ ## NK, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp)\
+static inline size_t N ## _vec_find_n_by_ ## NK(N ## _vec_t vec__tmp, const char *s__tmp, size_t n__tmp)\
+__flatbuffers_find_by_string_n_field(N ## _ ## NK, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp, n__tmp)
+#define __flatbuffers_define_default_find_by_scalar_field(N, NK, TK)\
+static inline size_t N ## _vec_find(N ## _vec_t vec__tmp, TK key__tmp)\
+{ return N ## _vec_find_by_ ## NK(vec__tmp, key__tmp); }
+#define __flatbuffers_define_default_find_by_string_field(N, NK) \
+static inline size_t N ## _vec_find(N ## _vec_t vec__tmp, const char *s__tmp)\
+{ return N ## _vec_find_by_ ## NK(vec__tmp, s__tmp); }\
+static inline size_t N ## _vec_find_n(N ## _vec_t vec__tmp, const char *s__tmp, size_t n__tmp)\
+{ return N ## _vec_find_n_by_ ## NK(vec__tmp, s__tmp, n__tmp); }
+/* A = identity if searching scalar vectors rather than key fields. */
+/* Returns lowest matching index or not_found. */
+#define __flatbuffers_scan_by_field(b, e, A, V, E, L, K, Kn, T, D)\
+{ T v__tmp; size_t i__tmp;\
+  for (i__tmp = b; i__tmp < e; ++i__tmp) {\
+    v__tmp = A(E(V, i__tmp));\
+    if (D(v__tmp, (K), (Kn)) == 0) {\
+       return i__tmp;\
+    }\
+  }\
+  return flatbuffers_not_found;\
+}
+#define __flatbuffers_rscan_by_field(b, e, A, V, E, L, K, Kn, T, D)\
+{ T v__tmp; size_t i__tmp = e;\
+  while (i__tmp-- > b) {\
+    v__tmp = A(E(V, i__tmp));\
+    if (D(v__tmp, (K), (Kn)) == 0) {\
+       return i__tmp;\
+    }\
+  }\
+  return flatbuffers_not_found;\
+}
+#define __flatbuffers_scan_by_scalar_field(b, e, A, V, E, L, K, T)\
+__flatbuffers_scan_by_field(b, e, A, V, E, L, K, 0, T, __flatbuffers_scalar_cmp)
+#define __flatbuffers_scan_by_string_field(b, e, A, V, E, L, K)\
+__flatbuffers_scan_by_field(b, e, A, V, E, L, K, 0, flatbuffers_string_t, __flatbuffers_string_cmp)
+#define __flatbuffers_scan_by_string_n_field(b, e, A, V, E, L, K, Kn)\
+__flatbuffers_scan_by_field(b, e, A, V, E, L, K, Kn, flatbuffers_string_t, __flatbuffers_string_n_cmp)
+#define __flatbuffers_rscan_by_scalar_field(b, e, A, V, E, L, K, T)\
+__flatbuffers_rscan_by_field(b, e, A, V, E, L, K, 0, T, __flatbuffers_scalar_cmp)
+#define __flatbuffers_rscan_by_string_field(b, e, A, V, E, L, K)\
+__flatbuffers_rscan_by_field(b, e, A, V, E, L, K, 0, flatbuffers_string_t, __flatbuffers_string_cmp)
+#define __flatbuffers_rscan_by_string_n_field(b, e, A, V, E, L, K, Kn)\
+__flatbuffers_rscan_by_field(b, e, A, V, E, L, K, Kn, flatbuffers_string_t, __flatbuffers_string_n_cmp)
+#define __flatbuffers_define_scan_by_scalar_field(N, NK, T)\
+static inline size_t N ## _vec_scan_by_ ## NK(N ## _vec_t vec__tmp, T key__tmp)\
+__flatbuffers_scan_by_scalar_field(0, N ## _vec_len(vec__tmp), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)\
+static inline size_t N ## _vec_scan_ex_by_ ## NK(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, T key__tmp)\
+__flatbuffers_scan_by_scalar_field(begin__tmp, __flatbuffers_min(end__tmp, N ## _vec_len(vec__tmp)), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)\
+static inline size_t N ## _vec_rscan_by_ ## NK(N ## _vec_t vec__tmp, T key__tmp)\
+__flatbuffers_rscan_by_scalar_field(0, N ## _vec_len(vec__tmp), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)\
+static inline size_t N ## _vec_rscan_ex_by_ ## NK(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, T key__tmp)\
+__flatbuffers_rscan_by_scalar_field(begin__tmp, __flatbuffers_min(end__tmp, N ## _vec_len(vec__tmp)), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)
+#define __flatbuffers_define_scalar_scan(N, T)\
+static inline size_t N ## _vec_scan(N ## _vec_t vec__tmp, T key__tmp)\
+__flatbuffers_scan_by_scalar_field(0, N ## _vec_len(vec__tmp), __flatbuffers_identity, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)\
+static inline size_t N ## _vec_scan_ex(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, T key__tmp)\
+__flatbuffers_scan_by_scalar_field(begin__tmp, __flatbuffers_min(end__tmp, N ## _vec_len(vec__tmp)), __flatbuffers_identity, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)\
+static inline size_t N ## _vec_rscan(N ## _vec_t vec__tmp, T key__tmp)\
+__flatbuffers_rscan_by_scalar_field(0, N ## _vec_len(vec__tmp), __flatbuffers_identity, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)\
+static inline size_t N ## _vec_rscan_ex(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, T key__tmp)\
+__flatbuffers_rscan_by_scalar_field(begin__tmp, __flatbuffers_min(end__tmp, N ## _vec_len(vec__tmp)), __flatbuffers_identity, vec__tmp, N ## _vec_at, N ## _vec_len, key__tmp, T)
+#define __flatbuffers_define_scan_by_string_field(N, NK) \
+static inline size_t N ## _vec_scan_by_ ## NK(N ## _vec_t vec__tmp, const char *s__tmp)\
+__flatbuffers_scan_by_string_field(0, N ## _vec_len(vec__tmp), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp)\
+static inline size_t N ## _vec_scan_n_by_ ## NK(N ## _vec_t vec__tmp, const char *s__tmp, size_t n__tmp)\
+__flatbuffers_scan_by_string_n_field(0, N ## _vec_len(vec__tmp), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp, n__tmp)\
+static inline size_t N ## _vec_scan_ex_by_ ## NK(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp)\
+__flatbuffers_scan_by_string_field(begin__tmp, __flatbuffers_min(end__tmp, N ## _vec_len(vec__tmp)), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp)\
+static inline size_t N ## _vec_scan_ex_n_by_ ## NK(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp, size_t n__tmp)\
+__flatbuffers_scan_by_string_n_field(begin__tmp, __flatbuffers_min( end__tmp, N ## _vec_len(vec__tmp)), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp, n__tmp)\
+static inline size_t N ## _vec_rscan_by_ ## NK(N ## _vec_t vec__tmp, const char *s__tmp)\
+__flatbuffers_rscan_by_string_field(0, N ## _vec_len(vec__tmp), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp)\
+static inline size_t N ## _vec_rscan_n_by_ ## NK(N ## _vec_t vec__tmp, const char *s__tmp, size_t n__tmp)\
+__flatbuffers_rscan_by_string_n_field(0, N ## _vec_len(vec__tmp), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp, n__tmp)\
+static inline size_t N ## _vec_rscan_ex_by_ ## NK(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp)\
+__flatbuffers_rscan_by_string_field(begin__tmp, __flatbuffers_min(end__tmp, N ## _vec_len(vec__tmp)), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp)\
+static inline size_t N ## _vec_rscan_ex_n_by_ ## NK(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp, size_t n__tmp)\
+__flatbuffers_rscan_by_string_n_field(begin__tmp, __flatbuffers_min( end__tmp, N ## _vec_len(vec__tmp)), N ## _ ## NK ## _get, vec__tmp, N ## _vec_at, N ## _vec_len, s__tmp, n__tmp)
+#define __flatbuffers_define_default_scan_by_scalar_field(N, NK, TK)\
+static inline size_t N ## _vec_scan(N ## _vec_t vec__tmp, TK key__tmp)\
+{ return N ## _vec_scan_by_ ## NK(vec__tmp, key__tmp); }\
+static inline size_t N ## _vec_scan_ex(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, TK key__tmp)\
+{ return N ## _vec_scan_ex_by_ ## NK(vec__tmp, begin__tmp, end__tmp, key__tmp); }\
+static inline size_t N ## _vec_rscan(N ## _vec_t vec__tmp, TK key__tmp)\
+{ return N ## _vec_rscan_by_ ## NK(vec__tmp, key__tmp); }\
+static inline size_t N ## _vec_rscan_ex(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, TK key__tmp)\
+{ return N ## _vec_rscan_ex_by_ ## NK(vec__tmp, begin__tmp, end__tmp, key__tmp); }
+#define __flatbuffers_define_default_scan_by_string_field(N, NK) \
+static inline size_t N ## _vec_scan(N ## _vec_t vec__tmp, const char *s__tmp)\
+{ return N ## _vec_scan_by_ ## NK(vec__tmp, s__tmp); }\
+static inline size_t N ## _vec_scan_n(N ## _vec_t vec__tmp, const char *s__tmp, size_t n__tmp)\
+{ return N ## _vec_scan_n_by_ ## NK(vec__tmp, s__tmp, n__tmp); }\
+static inline size_t N ## _vec_scan_ex(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp)\
+{ return N ## _vec_scan_ex_by_ ## NK(vec__tmp, begin__tmp, end__tmp, s__tmp); }\
+static inline size_t N ## _vec_scan_ex_n(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp, size_t n__tmp)\
+{ return N ## _vec_scan_ex_n_by_ ## NK(vec__tmp, begin__tmp, end__tmp, s__tmp, n__tmp); }\
+static inline size_t N ## _vec_rscan(N ## _vec_t vec__tmp, const char *s__tmp)\
+{ return N ## _vec_rscan_by_ ## NK(vec__tmp, s__tmp); }\
+static inline size_t N ## _vec_rscan_n(N ## _vec_t vec__tmp, const char *s__tmp, size_t n__tmp)\
+{ return N ## _vec_rscan_n_by_ ## NK(vec__tmp, s__tmp, n__tmp); }\
+static inline size_t N ## _vec_rscan_ex(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp)\
+{ return N ## _vec_rscan_ex_by_ ## NK(vec__tmp, begin__tmp, end__tmp, s__tmp); }\
+static inline size_t N ## _vec_rscan_ex_n(N ## _vec_t vec__tmp, size_t begin__tmp, size_t end__tmp, const char *s__tmp, size_t n__tmp)\
+{ return N ## _vec_rscan_ex_n_by_ ## NK(vec__tmp, begin__tmp, end__tmp, s__tmp, n__tmp); }
+#define __flatbuffers_heap_sort(N, X, A, E, L, TK, TE, D, S)\
+static inline void __ ## N ## X ## __heap_sift_down(\
+        N ## _mutable_vec_t vec__tmp, size_t start__tmp, size_t end__tmp)\
+{ size_t child__tmp, root__tmp; TK v1__tmp, v2__tmp, vroot__tmp;\
+  root__tmp = start__tmp;\
+  while ((root__tmp << 1) <= end__tmp) {\
+    child__tmp = root__tmp << 1;\
+    if (child__tmp < end__tmp) {\
+      v1__tmp = A(E(vec__tmp, child__tmp));\
+      v2__tmp = A(E(vec__tmp, child__tmp + 1));\
+      if (D(v1__tmp, v2__tmp) < 0) {\
+        child__tmp++;\
+      }\
+    }\
+    vroot__tmp = A(E(vec__tmp, root__tmp));\
+    v1__tmp = A(E(vec__tmp, child__tmp));\
+    if (D(vroot__tmp, v1__tmp) < 0) {\
+      S(vec__tmp, root__tmp, child__tmp, TE);\
+      root__tmp = child__tmp;\
+    } else {\
+      return;\
+    }\
+  }\
+}\
+static inline void __ ## N ## X ## __heap_sort(N ## _mutable_vec_t vec__tmp)\
+{ size_t start__tmp, end__tmp, size__tmp;\
+  size__tmp = L(vec__tmp); if (size__tmp == 0) return; end__tmp = size__tmp - 1; start__tmp = size__tmp >> 1;\
+  do { __ ## N ## X ## __heap_sift_down(vec__tmp, start__tmp, end__tmp); } while (start__tmp--);\
+  while (end__tmp > 0) { \
+    S(vec__tmp, 0, end__tmp, TE);\
+    __ ## N ## X ## __heap_sift_down(vec__tmp, 0, --end__tmp); } }
+#define __flatbuffers_define_sort_by_field(N, NK, TK, TE, D, S)\
+  __flatbuffers_heap_sort(N, _sort_by_ ## NK, N ## _ ## NK ## _get, N ## _vec_at, N ## _vec_len, TK, TE, D, S)\
+static inline void N ## _vec_sort_by_ ## NK(N ## _mutable_vec_t vec__tmp)\
+{ __ ## N ## _sort_by_ ## NK ## __heap_sort(vec__tmp); }
+#define __flatbuffers_define_sort(N, TK, TE, D, S)\
+__flatbuffers_heap_sort(N, , __flatbuffers_identity, N ## _vec_at, N ## _vec_len, TK, TE, D, S)\
+static inline void N ## _vec_sort(N ## _mutable_vec_t vec__tmp) { __ ## N ## __heap_sort(vec__tmp); }
+#define __flatbuffers_scalar_diff(x, y) ((x) < (y) ? -1 : (x) > (y))
+#define __flatbuffers_string_diff(x, y) __flatbuffers_string_n_cmp((x), (const char *)(y), flatbuffers_string_len(y))
+#define __flatbuffers_value_swap(vec, a, b, TE) { TE x__tmp = vec[b]; vec[b] = vec[a]; vec[a] = x__tmp; }
+#define __flatbuffers_uoffset_swap(vec, a, b, TE)\
+{ TE ta__tmp, tb__tmp, d__tmp;\
+  d__tmp = (TE)((a - b) * sizeof(vec[0]));\
+  ta__tmp =  __flatbuffers_uoffset_read_from_pe(vec + b) - d__tmp;\
+  tb__tmp =  __flatbuffers_uoffset_read_from_pe(vec + a) + d__tmp;\
+  __flatbuffers_uoffset_write_to_pe(vec + a, ta__tmp);\
+  __flatbuffers_uoffset_write_to_pe(vec + b, tb__tmp); }
+#define __flatbuffers_scalar_swap(vec, a, b, TE) __flatbuffers_value_swap(vec, a, b, TE)
+#define __flatbuffers_string_swap(vec, a, b, TE) __flatbuffers_uoffset_swap(vec, a, b, TE)
+#define __flatbuffers_struct_swap(vec, a, b, TE) __flatbuffers_value_swap(vec, a, b, TE)
+#define __flatbuffers_table_swap(vec, a, b, TE) __flatbuffers_uoffset_swap(vec, a, b, TE)
+#define __flatbuffers_define_struct_sort_by_scalar_field(N, NK, TK, TE)\
+  __flatbuffers_define_sort_by_field(N, NK, TK, TE, __flatbuffers_scalar_diff, __flatbuffers_struct_swap)
+#define __flatbuffers_define_table_sort_by_scalar_field(N, NK, TK)\
+  __flatbuffers_define_sort_by_field(N, NK, TK, flatbuffers_uoffset_t, __flatbuffers_scalar_diff, __flatbuffers_table_swap)
+#define __flatbuffers_define_table_sort_by_string_field(N, NK)\
+  __flatbuffers_define_sort_by_field(N, NK, flatbuffers_string_t, flatbuffers_uoffset_t, __flatbuffers_string_diff, __flatbuffers_table_swap)
+#define __flatbuffers_define_scalar_sort(N, T) __flatbuffers_define_sort(N, T, T, __flatbuffers_scalar_diff, __flatbuffers_scalar_swap)
+#define __flatbuffers_define_string_sort() __flatbuffers_define_sort(flatbuffers_string, flatbuffers_string_t, flatbuffers_uoffset_t, __flatbuffers_string_diff, __flatbuffers_string_swap)
+#define __flatbuffers_sort_vector_field(N, NK, T, t)\
+{ T ## _mutable_vec_t v__tmp = (T ## _mutable_vec_t) N ## _ ## NK ## _get(t);\
+  if (v__tmp) T ## _vec_sort(v__tmp); }
+#define __flatbuffers_sort_table_field(N, NK, T, t)\
+{ T ## _sort((T ## _mutable_table_t)N ## _ ## NK ## _get(t)); }
+#define __flatbuffers_sort_union_field(N, NK, T, t)\
+{ T ## _sort(T ## _mutable_union_cast(N ## _ ## NK ## _union(t))); }
+#define __flatbuffers_sort_table_vector_field_elements(N, NK, T, t)\
+{ T ## _vec_t v__tmp = N ## _ ## NK ## _get(t); size_t i__tmp, n__tmp;\
+  n__tmp = T ## _vec_len(v__tmp); for (i__tmp = 0; i__tmp < n__tmp; ++i__tmp) {\
+  T ## _sort((T ## _mutable_table_t)T ## _vec_at(v__tmp, i__tmp)); }}
+#define __flatbuffers_sort_union_vector_field_elements(N, NK, T, t)\
+{ T ## _union_vec_t v__tmp = N ## _ ## NK ## _union(t); size_t i__tmp, n__tmp;\
+  n__tmp = T ## _union_vec_len(v__tmp); for (i__tmp = 0; i__tmp < n__tmp; ++i__tmp) {\
+  T ## _sort(T ## _mutable_union_cast(T ## _union_vec_at(v__tmp, i__tmp))); }}
+#define __flatbuffers_define_scalar_vector(N, T)\
+typedef const T *N ## _vec_t;\
+typedef T *N ## _mutable_vec_t;\
+__flatbuffers_define_scalar_vec_len(N)\
+__flatbuffers_define_scalar_vec_at(N, T)\
+__flatbuffers_define_scalar_find(N, T)\
+__flatbuffers_define_scalar_scan(N, T)\
+__flatbuffers_define_scalar_sort(N, T)
+
+#define __flatbuffers_define_integer_type(N, T, W)\
+__flatcc_define_integer_accessors(N, T, W, flatbuffers_endian)\
+__flatbuffers_define_scalar_vector(N, T)
+__flatbuffers_define_scalar_vector(flatbuffers_bool, flatbuffers_bool_t)
+__flatbuffers_define_scalar_vector(flatbuffers_char, char)
+__flatbuffers_define_scalar_vector(flatbuffers_uint8, uint8_t)
+__flatbuffers_define_scalar_vector(flatbuffers_int8, int8_t)
+__flatbuffers_define_scalar_vector(flatbuffers_uint16, uint16_t)
+__flatbuffers_define_scalar_vector(flatbuffers_int16, int16_t)
+__flatbuffers_define_scalar_vector(flatbuffers_uint32, uint32_t)
+__flatbuffers_define_scalar_vector(flatbuffers_int32, int32_t)
+__flatbuffers_define_scalar_vector(flatbuffers_uint64, uint64_t)
+__flatbuffers_define_scalar_vector(flatbuffers_int64, int64_t)
+__flatbuffers_define_scalar_vector(flatbuffers_float, float)
+__flatbuffers_define_scalar_vector(flatbuffers_double, double)
+__flatbuffers_define_scalar_vector(flatbuffers_union_type, flatbuffers_union_type_t)
+static inline size_t flatbuffers_string_vec_find(flatbuffers_string_vec_t vec, const char *s)
+__flatbuffers_find_by_string_field(__flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s)
+static inline size_t flatbuffers_string_vec_find_n(flatbuffers_string_vec_t vec, const char *s, size_t n)
+__flatbuffers_find_by_string_n_field(__flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s, n)
+static inline size_t flatbuffers_string_vec_scan(flatbuffers_string_vec_t vec, const char *s)
+__flatbuffers_scan_by_string_field(0, flatbuffers_string_vec_len(vec), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s)
+static inline size_t flatbuffers_string_vec_scan_n(flatbuffers_string_vec_t vec, const char *s, size_t n)
+__flatbuffers_scan_by_string_n_field(0, flatbuffers_string_vec_len(vec), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s, n)
+static inline size_t flatbuffers_string_vec_scan_ex(flatbuffers_string_vec_t vec, size_t begin, size_t end, const char *s)
+__flatbuffers_scan_by_string_field(begin, __flatbuffers_min(end, flatbuffers_string_vec_len(vec)), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s)
+static inline size_t flatbuffers_string_vec_scan_ex_n(flatbuffers_string_vec_t vec, size_t begin, size_t end, const char *s, size_t n)
+__flatbuffers_scan_by_string_n_field(begin, __flatbuffers_min(end, flatbuffers_string_vec_len(vec)), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s, n)
+static inline size_t flatbuffers_string_vec_rscan(flatbuffers_string_vec_t vec, const char *s)
+__flatbuffers_rscan_by_string_field(0, flatbuffers_string_vec_len(vec), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s)
+static inline size_t flatbuffers_string_vec_rscan_n(flatbuffers_string_vec_t vec, const char *s, size_t n)
+__flatbuffers_rscan_by_string_n_field(0, flatbuffers_string_vec_len(vec), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s, n)
+static inline size_t flatbuffers_string_vec_rscan_ex(flatbuffers_string_vec_t vec, size_t begin, size_t end, const char *s)
+__flatbuffers_rscan_by_string_field(begin, __flatbuffers_min(end, flatbuffers_string_vec_len(vec)), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s)
+static inline size_t flatbuffers_string_vec_rscan_ex_n(flatbuffers_string_vec_t vec, size_t begin, size_t end, const char *s, size_t n)
+__flatbuffers_rscan_by_string_n_field(begin, __flatbuffers_min(end, flatbuffers_string_vec_len(vec)), __flatbuffers_identity, vec, flatbuffers_string_vec_at, flatbuffers_string_vec_len, s, n)
+__flatbuffers_define_string_sort()
+#define __flatbuffers_define_struct_scalar_fixed_array_field(N, NK, TK, T, L)\
+static inline T N ## _ ## NK ## _get(N ## _struct_t t__tmp, size_t i__tmp)\
+{ if (!t__tmp || i__tmp >= L) return 0;\
+  return __flatbuffers_read_scalar(TK, &(t__tmp->NK[i__tmp])); }\
+static inline const T *N ## _ ## NK ## _get_ptr(N ## _struct_t t__tmp)\
+{ return t__tmp ? t__tmp->NK : 0; }\
+static inline size_t N ## _ ## NK ## _get_len(void) { return L; }\
+static inline T N ## _ ## NK (N ## _struct_t t__tmp, size_t i__tmp)\
+{ return N ## _ ## NK ## _get(t__tmp, i__tmp); }
+#define __flatbuffers_define_struct_struct_fixed_array_field(N, NK, T, L)\
+static inline T N ## _ ## NK ## _get(N ## _struct_t t__tmp, size_t i__tmp)\
+{ if (!t__tmp || i__tmp >= L) return 0; return t__tmp->NK + i__tmp; }static inline T N ## _ ## NK ## _get_ptr(N ## _struct_t t__tmp)\
+{ return t__tmp ? t__tmp->NK : 0; }\
+static inline size_t N ## _ ## NK ## _get_len(void) { return L; }\
+static inline T N ## _ ## NK(N ## _struct_t t__tmp, size_t i__tmp)\
+{ if (!t__tmp || i__tmp >= L) return 0; return t__tmp->NK + i__tmp; }
+#define __flatbuffers_define_struct_scalar_field(N, NK, TK, T)\
+static inline T N ## _ ## NK ## _get(N ## _struct_t t__tmp)\
+{ return t__tmp ? __flatbuffers_read_scalar(TK, &(t__tmp->NK)) : 0; }\
+static inline const T *N ## _ ## NK ## _get_ptr(N ## _struct_t t__tmp)\
+{ return t__tmp ? &(t__tmp->NK) : 0; }\
+static inline T N ## _ ## NK (N ## _struct_t t__tmp)\
+{ return t__tmp ? __flatbuffers_read_scalar(TK, &(t__tmp->NK)) : 0; }\
+__flatbuffers_define_scan_by_scalar_field(N, NK, T)
+#define __flatbuffers_define_struct_struct_field(N, NK, T)\
+static inline T N ## _ ## NK ## _get(N ## _struct_t t__tmp) { return t__tmp ? &(t__tmp->NK) : 0; }\
+static inline T N ## _ ## NK (N ## _struct_t t__tmp) { return t__tmp ? &(t__tmp->NK) : 0; }
+/* If fid is null, the function returns true without testing as buffer is not expected to have any id. */
+static inline int flatbuffers_has_identifier(const void *buffer, const char *fid)
+{ flatbuffers_thash_t id, id2 = 0; if (fid == 0) { return 1; };
+  id2 = flatbuffers_type_hash_from_string(fid);
+  id = __flatbuffers_thash_read_from_pe(((flatbuffers_uoffset_t *)buffer) + 1);
+  return id2 == 0 || id == id2; }
+static inline int flatbuffers_has_type_hash(const void *buffer, flatbuffers_thash_t thash)
+{ return thash == 0 || (__flatbuffers_thash_read_from_pe((flatbuffers_uoffset_t *)buffer + 1) == thash); }
+
+static inline flatbuffers_thash_t flatbuffers_get_type_hash(const void *buffer)
+{ return __flatbuffers_thash_read_from_pe((flatbuffers_uoffset_t *)buffer + 1); }
+
+#define flatbuffers_verify_endian() flatbuffers_has_identifier("\x00\x00\x00\x00" "1234", "1234")
+static inline void *flatbuffers_read_size_prefix(void *b, size_t *size_out)
+{ if (size_out) { *size_out = (size_t)__flatbuffers_uoffset_read_from_pe(b); }
+  return (uint8_t *)b + sizeof(flatbuffers_uoffset_t); }
+/* Null file identifier accepts anything, otherwise fid should be 4 characters. */
+#define __flatbuffers_read_root(T, K, buffer, fid)\
+  ((!buffer || !flatbuffers_has_identifier(buffer, fid)) ? 0 :\
+  ((T ## _ ## K ## t)(((uint8_t *)buffer) +\
+    __flatbuffers_uoffset_read_from_pe(buffer))))
+#define __flatbuffers_read_typed_root(T, K, buffer, thash)\
+  ((!buffer || !flatbuffers_has_type_hash(buffer, thash)) ? 0 :\
+  ((T ## _ ## K ## t)(((uint8_t *)buffer) +\
+    __flatbuffers_uoffset_read_from_pe(buffer))))
+#define __flatbuffers_nested_buffer_as_root(C, N, T, K)\
+static inline T ## _ ## K ## t C ## _ ## N ## _as_root_with_identifier(C ## _ ## table_t t__tmp, const char *fid__tmp)\
+{ const uint8_t *buffer__tmp = C ## _ ## N(t__tmp); return __flatbuffers_read_root(T, K, buffer__tmp, fid__tmp); }\
+static inline T ## _ ## K ## t C ## _ ## N ## _as_typed_root(C ## _ ## table_t t__tmp)\
+{ const uint8_t *buffer__tmp = C ## _ ## N(t__tmp); return __flatbuffers_read_root(T, K, buffer__tmp, C ## _ ## type_identifier); }\
+static inline T ## _ ## K ## t C ## _ ## N ## _as_root(C ## _ ## table_t t__tmp)\
+{ const char *fid__tmp = T ## _file_identifier;\
+  const uint8_t *buffer__tmp = C ## _ ## N(t__tmp); return __flatbuffers_read_root(T, K, buffer__tmp, fid__tmp); }
+#define __flatbuffers_buffer_as_root(N, K)\
+static inline N ## _ ## K ## t N ## _as_root_with_identifier(const void *buffer__tmp, const char *fid__tmp)\
+{ return __flatbuffers_read_root(N, K, buffer__tmp, fid__tmp); }\
+static inline N ## _ ## K ## t N ## _as_root_with_type_hash(const void *buffer__tmp, flatbuffers_thash_t thash__tmp)\
+{ return __flatbuffers_read_typed_root(N, K, buffer__tmp, thash__tmp); }\
+static inline N ## _ ## K ## t N ## _as_root(const void *buffer__tmp)\
+{ const char *fid__tmp = N ## _file_identifier;\
+  return __flatbuffers_read_root(N, K, buffer__tmp, fid__tmp); }\
+static inline N ## _ ## K ## t N ## _as_typed_root(const void *buffer__tmp)\
+{ return __flatbuffers_read_typed_root(N, K, buffer__tmp, N ## _type_hash); }
+#define __flatbuffers_struct_as_root(N) __flatbuffers_buffer_as_root(N, struct_)
+#define __flatbuffers_table_as_root(N) __flatbuffers_buffer_as_root(N, table_)
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* FLATBUFFERS_COMMON_H */
+#ifndef FLATBUFFERS_COMMON_BUILDER_H
+#define FLATBUFFERS_COMMON_BUILDER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+/* Common FlatBuffers build functionality for C. */
+
+#include "flatcc/flatcc_prologue.h"
+#ifndef FLATBUILDER_H
+#include "flatcc/flatcc_builder.h"
+#endif
+typedef flatcc_builder_t flatbuffers_builder_t;
+typedef flatcc_builder_ref_t flatbuffers_ref_t;
+typedef flatcc_builder_ref_t flatbuffers_vec_ref_t;
+typedef flatcc_builder_union_ref_t flatbuffers_union_ref_t;
+typedef flatcc_builder_union_vec_ref_t flatbuffers_union_vec_ref_t;
+/* integer return code (ref and ptr always fail on 0) */
+#define flatbuffers_failed(x) ((x) < 0)
+typedef flatbuffers_ref_t flatbuffers_root_t;
+#define flatbuffers_root(ref) ((flatbuffers_root_t)(ref))
+
+#define __flatbuffers_memoize_begin(B, src)\
+do { flatcc_builder_ref_t _ref; if ((_ref = flatcc_builder_refmap_find((B), (src)))) return _ref; } while (0)
+#define __flatbuffers_memoize_end(B, src, op) do { return flatcc_builder_refmap_insert((B), (src), (op)); } while (0)
+#define __flatbuffers_memoize(B, src, op) do { __flatbuffers_memoize_begin(B, src); __flatbuffers_memoize_end(B, src, op); } while (0)
+
+#define __flatbuffers_build_buffer(NS)\
+typedef NS ## ref_t NS ## buffer_ref_t;\
+static inline int NS ## buffer_start(NS ## builder_t *B, const NS ##fid_t fid)\
+{ return flatcc_builder_start_buffer(B, fid, 0, 0); }\
+static inline int NS ## buffer_start_with_size(NS ## builder_t *B, const NS ##fid_t fid)\
+{ return flatcc_builder_start_buffer(B, fid, 0, flatcc_builder_with_size); }\
+static inline int NS ## buffer_start_aligned(NS ## builder_t *B, NS ##fid_t fid, uint16_t block_align)\
+{ return flatcc_builder_start_buffer(B, fid, block_align, 0); }\
+static inline int NS ## buffer_start_aligned_with_size(NS ## builder_t *B, NS ##fid_t fid, uint16_t block_align)\
+{ return flatcc_builder_start_buffer(B, fid, block_align, flatcc_builder_with_size); }\
+static inline NS ## buffer_ref_t NS ## buffer_end(NS ## builder_t *B, NS ## ref_t root)\
+{ return flatcc_builder_end_buffer(B, root); }
+
+#define __flatbuffers_build_table_root(NS, N, FID, TFID)\
+static inline int N ## _start_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, FID) ? -1 : N ## _start(B); }\
+static inline int N ## _start_as_root_with_size(NS ## builder_t *B)\
+{ return NS ## buffer_start_with_size(B, FID) ? -1 : N ## _start(B); }\
+static inline int N ## _start_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, TFID) ? -1 : N ## _start(B); }\
+static inline int N ## _start_as_typed_root_with_size(NS ## builder_t *B)\
+{ return NS ## buffer_start_with_size(B, TFID) ? -1 : N ## _start(B); }\
+static inline NS ## buffer_ref_t N ## _end_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_end(B, N ## _end(B)); }\
+static inline NS ## buffer_ref_t N ## _end_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_end(B, N ## _end(B)); }\
+static inline NS ## buffer_ref_t N ## _create_as_root(NS ## builder_t *B __ ## N ## _formal_args)\
+{ if (NS ## buffer_start(B, FID)) return 0; return NS ## buffer_end(B, N ## _create(B __ ## N ## _call_args)); }\
+static inline NS ## buffer_ref_t N ## _create_as_root_with_size(NS ## builder_t *B __ ## N ## _formal_args)\
+{ if (NS ## buffer_start_with_size(B, FID)) return 0; return NS ## buffer_end(B, N ## _create(B __ ## N ## _call_args)); }\
+static inline NS ## buffer_ref_t N ## _create_as_typed_root(NS ## builder_t *B __ ## N ## _formal_args)\
+{ if (NS ## buffer_start(B, TFID)) return 0; return NS ## buffer_end(B, N ## _create(B __ ## N ## _call_args)); }\
+static inline NS ## buffer_ref_t N ## _create_as_typed_root_with_size(NS ## builder_t *B __ ## N ## _formal_args)\
+{ if (NS ## buffer_start_with_size(B, TFID)) return 0; return NS ## buffer_end(B, N ## _create(B __ ## N ## _call_args)); }\
+static inline NS ## buffer_ref_t N ## _clone_as_root(NS ## builder_t *B, N ## _table_t t)\
+{ if (NS ## buffer_start(B, FID)) return 0; return NS ## buffer_end(B, N ## _clone(B, t)); }\
+static inline NS ## buffer_ref_t N ## _clone_as_root_with_size(NS ## builder_t *B, N ## _table_t t)\
+{ if (NS ## buffer_start_with_size(B, FID)) return 0; return NS ## buffer_end(B, N ## _clone(B, t)); }\
+static inline NS ## buffer_ref_t N ## _clone_as_typed_root(NS ## builder_t *B, N ## _table_t t)\
+{ if (NS ## buffer_start(B, TFID)) return 0;return NS ## buffer_end(B, N ## _clone(B, t)); }\
+static inline NS ## buffer_ref_t N ## _clone_as_typed_root_with_size(NS ## builder_t *B, N ## _table_t t)\
+{ if (NS ## buffer_start_with_size(B, TFID)) return 0; return NS ## buffer_end(B, N ## _clone(B, t)); }
+
+#define __flatbuffers_build_table_prolog(NS, N, FID, TFID)\
+__flatbuffers_build_table_vector_ops(NS, N ## _vec, N)\
+__flatbuffers_build_table_root(NS, N, FID, TFID)
+
+#define __flatbuffers_build_struct_root(NS, N, A, FID, TFID)\
+static inline N ## _t *N ## _start_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, FID) ? 0 : N ## _start(B); }\
+static inline N ## _t *N ## _start_as_root_with_size(NS ## builder_t *B)\
+{ return NS ## buffer_start_with_size(B, FID) ? 0 : N ## _start(B); }\
+static inline N ## _t *N ## _start_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, TFID) ? 0 : N ## _start(B); }\
+static inline N ## _t *N ## _start_as_typed_root_with_size(NS ## builder_t *B)\
+{ return NS ## buffer_start_with_size(B, TFID) ? 0 : N ## _start(B); }\
+static inline NS ## buffer_ref_t N ## _end_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_end(B, N ## _end(B)); }\
+static inline NS ## buffer_ref_t N ## _end_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_end(B, N ## _end(B)); }\
+static inline NS ## buffer_ref_t N ## _end_pe_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_end(B, N ## _end_pe(B)); }\
+static inline NS ## buffer_ref_t N ## _end_pe_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_end(B, N ## _end_pe(B)); }\
+static inline NS ## buffer_ref_t N ## _create_as_root(NS ## builder_t *B __ ## N ## _formal_args)\
+{ return flatcc_builder_create_buffer(B, FID, 0,\
+  N ## _create(B __ ## N ## _call_args), A, 0); }\
+static inline NS ## buffer_ref_t N ## _create_as_root_with_size(NS ## builder_t *B __ ## N ## _formal_args)\
+{ return flatcc_builder_create_buffer(B, FID, 0,\
+  N ## _create(B __ ## N ## _call_args), A, flatcc_builder_with_size); }\
+static inline NS ## buffer_ref_t N ## _create_as_typed_root(NS ## builder_t *B __ ## N ## _formal_args)\
+{ return flatcc_builder_create_buffer(B, TFID, 0,\
+  N ## _create(B __ ## N ## _call_args), A, 0); }\
+static inline NS ## buffer_ref_t N ## _create_as_typed_root_with_size(NS ## builder_t *B __ ## N ## _formal_args)\
+{ return flatcc_builder_create_buffer(B, TFID, 0,\
+  N ## _create(B __ ## N ## _call_args), A, flatcc_builder_with_size); }\
+static inline NS ## buffer_ref_t N ## _clone_as_root(NS ## builder_t *B, N ## _struct_t p)\
+{ return flatcc_builder_create_buffer(B, FID, 0, N ## _clone(B, p), A, 0); }\
+static inline NS ## buffer_ref_t N ## _clone_as_root_with_size(NS ## builder_t *B, N ## _struct_t p)\
+{ return flatcc_builder_create_buffer(B, FID, 0, N ## _clone(B, p), A, flatcc_builder_with_size); }\
+static inline NS ## buffer_ref_t N ## _clone_as_typed_root(NS ## builder_t *B, N ## _struct_t p)\
+{ return flatcc_builder_create_buffer(B, TFID, 0, N ## _clone(B, p), A, 0); }\
+static inline NS ## buffer_ref_t N ## _clone_as_typed_root_with_size(NS ## builder_t *B, N ## _struct_t p)\
+{ return flatcc_builder_create_buffer(B, TFID, 0, N ## _clone(B, p), A, flatcc_builder_with_size); }
+
+#define __flatbuffers_build_nested_table_root(NS, N, TN, FID, TFID)\
+static inline int N ## _start_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, FID) ? -1 : TN ## _start(B); }\
+static inline int N ## _start_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, TFID) ? -1 : TN ## _start(B); }\
+static inline int N ## _end_as_root(NS ## builder_t *B)\
+{ return N ## _add(B, NS ## buffer_end(B, TN ## _end(B))); }\
+static inline int N ## _end_as_typed_root(NS ## builder_t *B)\
+{ return N ## _add(B, NS ## buffer_end(B, TN ## _end(B))); }\
+static inline int N ## _nest(NS ## builder_t *B, void *data, size_t size, uint16_t align)\
+{ return N ## _add(B, flatcc_builder_create_vector(B, data, size, 1,\
+  align ? align : 8, FLATBUFFERS_COUNT_MAX(1))); }\
+static inline int N ## _typed_nest(NS ## builder_t *B, void *data, size_t size, uint16_t align)\
+{ return N ## _add(B, flatcc_builder_create_vector(B, data, size, 1,\
+  align ? align : 8, FLATBUFFERS_COUNT_MAX(1))); }\
+static inline int N ## _clone_as_root(NS ## builder_t *B, TN ## _table_t t)\
+{ return N ## _add(B, TN ## _clone_as_root(B, t)); }\
+static inline int N ## _clone_as_typed_root(NS ## builder_t *B, TN ## _table_t t)\
+{ return N ## _add(B, TN ## _clone_as_typed_root(B, t)); }
+
+#define __flatbuffers_build_nested_struct_root(NS, N, TN, A, FID, TFID)\
+static inline TN ## _t *N ## _start_as_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, FID) ? 0 : TN ## _start(B); }\
+static inline TN ## _t *N ## _start_as_typed_root(NS ## builder_t *B)\
+{ return NS ## buffer_start(B, FID) ? 0 : TN ## _start(B); }\
+static inline int N ## _end_as_root(NS ## builder_t *B)\
+{ return N ## _add(B, NS ## buffer_end(B, TN ## _end(B))); }\
+static inline int N ## _end_as_typed_root(NS ## builder_t *B)\
+{ return N ## _add(B, NS ## buffer_end(B, TN ## _end(B))); }\
+static inline int N ## _end_pe_as_root(NS ## builder_t *B)\
+{ return N ## _add(B, NS ## buffer_end(B, TN ## _end_pe(B))); }\
+static inline int N ## _create_as_root(NS ## builder_t *B __ ## TN ## _formal_args)\
+{ return N ## _add(B, flatcc_builder_create_buffer(B, FID, 0,\
+  TN ## _create(B __ ## TN ## _call_args), A, flatcc_builder_is_nested)); }\
+static inline int N ## _create_as_typed_root(NS ## builder_t *B __ ## TN ## _formal_args)\
+{ return N ## _add(B, flatcc_builder_create_buffer(B, TFID, 0,\
+  TN ## _create(B __ ## TN ## _call_args), A, flatcc_builder_is_nested)); }\
+static inline int N ## _nest(NS ## builder_t *B, void *data, size_t size, uint16_t align)\
+{ return N ## _add(B, flatcc_builder_create_vector(B, data, size, 1,\
+  align < A ? A : align, FLATBUFFERS_COUNT_MAX(1))); }\
+static inline int N ## _typed_nest(NS ## builder_t *B, void *data, size_t size, uint16_t align)\
+{ return N ## _add(B, flatcc_builder_create_vector(B, data, size, 1,\
+  align < A ? A : align, FLATBUFFERS_COUNT_MAX(1))); }\
+static inline int N ## _clone_as_root(NS ## builder_t *B, TN ## _struct_t p)\
+{ return N ## _add(B, TN ## _clone_as_root(B, p)); }\
+static inline int N ## _clone_as_typed_root(NS ## builder_t *B, TN ## _struct_t p)\
+{ return N ## _add(B, TN ## _clone_as_typed_root(B, p)); }
+
+#define __flatbuffers_build_vector_ops(NS, V, N, TN, T)\
+static inline T *V ## _extend(NS ## builder_t *B, size_t len)\
+{ return (T *)flatcc_builder_extend_vector(B, len); }\
+static inline T *V ## _append(NS ## builder_t *B, const T *data, size_t len)\
+{ return (T *)flatcc_builder_append_vector(B, data, len); }\
+static inline int V ## _truncate(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_truncate_vector(B, len); }\
+static inline T *V ## _edit(NS ## builder_t *B)\
+{ return (T *)flatcc_builder_vector_edit(B); }\
+static inline size_t V ## _reserved_len(NS ## builder_t *B)\
+{ return flatcc_builder_vector_count(B); }\
+static inline T *V ## _push(NS ## builder_t *B, const T *p)\
+{ T *_p; return (_p = (T *)flatcc_builder_extend_vector(B, 1)) ? (memcpy(_p, p, TN ## __size()), _p) : 0; }\
+static inline T *V ## _push_copy(NS ## builder_t *B, const T *p)\
+{ T *_p; return (_p = (T *)flatcc_builder_extend_vector(B, 1)) ? TN ## _copy(_p, p) : 0; }\
+static inline T *V ## _push_clone(NS ## builder_t *B, const T *p)\
+{ T *_p; return (_p = (T *)flatcc_builder_extend_vector(B, 1)) ? TN ## _copy(_p, p) : 0; }\
+static inline T *V ## _push_create(NS ## builder_t *B __ ## TN ## _formal_args)\
+{ T *_p; return (_p = (T *)flatcc_builder_extend_vector(B, 1)) ? TN ## _assign(_p __ ## TN ## _call_args) : 0; }
+
+#define __flatbuffers_build_vector(NS, N, T, S, A)\
+typedef NS ## ref_t N ## _vec_ref_t;\
+static inline int N ## _vec_start(NS ## builder_t *B)\
+{ return flatcc_builder_start_vector(B, S, A, FLATBUFFERS_COUNT_MAX(S)); }\
+static inline N ## _vec_ref_t N ## _vec_end_pe(NS ## builder_t *B)\
+{ return flatcc_builder_end_vector(B); }\
+static inline N ## _vec_ref_t N ## _vec_end(NS ## builder_t *B)\
+{ if (!NS ## is_native_pe()) { size_t i, n; T *p = (T *)flatcc_builder_vector_edit(B);\
+    for (i = 0, n = flatcc_builder_vector_count(B); i < n; ++i)\
+    { N ## _to_pe(N ## __ptr_add(p, i)); }} return flatcc_builder_end_vector(B); }\
+static inline N ## _vec_ref_t N ## _vec_create_pe(NS ## builder_t *B, const T *data, size_t len)\
+{ return flatcc_builder_create_vector(B, data, len, S, A, FLATBUFFERS_COUNT_MAX(S)); }\
+static inline N ## _vec_ref_t N ## _vec_create(NS ## builder_t *B, const T *data, size_t len)\
+{ if (!NS ## is_native_pe()) { size_t i; T *p; int ret = flatcc_builder_start_vector(B, S, A, FLATBUFFERS_COUNT_MAX(S)); if (ret) { return ret; }\
+  p = (T *)flatcc_builder_extend_vector(B, len); if (!p) return 0;\
+  for (i = 0; i < len; ++i) { N ## _copy_to_pe(N ## __ptr_add(p, i), N ## __const_ptr_add(data, i)); }\
+  return flatcc_builder_end_vector(B); } else return flatcc_builder_create_vector(B, data, len, S, A, FLATBUFFERS_COUNT_MAX(S)); }\
+static inline N ## _vec_ref_t N ## _vec_clone(NS ## builder_t *B, N ##_vec_t vec)\
+{ __flatbuffers_memoize(B, vec, flatcc_builder_create_vector(B, vec, N ## _vec_len(vec), S, A, FLATBUFFERS_COUNT_MAX(S))); }\
+static inline N ## _vec_ref_t N ## _vec_slice(NS ## builder_t *B, N ##_vec_t vec, size_t index, size_t len)\
+{ size_t n = N ## _vec_len(vec); if (index >= n) index = n; n -= index; if (len > n) len = n;\
+  return flatcc_builder_create_vector(B, N ## __const_ptr_add(vec, index), len, S, A, FLATBUFFERS_COUNT_MAX(S)); }\
+__flatbuffers_build_vector_ops(NS, N ## _vec, N, N, T)
+
+#define __flatbuffers_build_union_vector_ops(NS, V, N, TN)\
+static inline TN ## _union_ref_t *V ## _extend(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_extend_union_vector(B, len); }\
+static inline TN ## _union_ref_t *V ## _append(NS ## builder_t *B, const TN ## _union_ref_t *data, size_t len)\
+{ return flatcc_builder_append_union_vector(B, data, len); }\
+static inline int V ## _truncate(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_truncate_union_vector(B, len); }\
+static inline TN ## _union_ref_t *V ## _edit(NS ## builder_t *B)\
+{ return (TN ## _union_ref_t *) flatcc_builder_union_vector_edit(B); }\
+static inline size_t V ## _reserved_len(NS ## builder_t *B)\
+{ return flatcc_builder_union_vector_count(B); }\
+static inline TN ## _union_ref_t *V ## _push(NS ## builder_t *B, const TN ## _union_ref_t ref)\
+{ return flatcc_builder_union_vector_push(B, ref); }\
+static inline TN ## _union_ref_t *V ## _push_clone(NS ## builder_t *B, TN ## _union_t u)\
+{ return TN ## _vec_push(B, TN ## _clone(B, u)); }
+
+#define __flatbuffers_build_union_vector(NS, N)\
+static inline int N ## _vec_start(NS ## builder_t *B)\
+{ return flatcc_builder_start_union_vector(B); }\
+static inline N ## _union_vec_ref_t N ## _vec_end(NS ## builder_t *B)\
+{ return flatcc_builder_end_union_vector(B); }\
+static inline N ## _union_vec_ref_t N ## _vec_create(NS ## builder_t *B, const N ## _union_ref_t *data, size_t len)\
+{ return flatcc_builder_create_union_vector(B, data, len); }\
+__flatbuffers_build_union_vector_ops(NS, N ## _vec, N, N)\
+/* Preserves DAG structure separately for type and value vector, so a type vector could be shared for many value vectors. */\
+static inline N ## _union_vec_ref_t N ## _vec_clone(NS ## builder_t *B, N ##_union_vec_t vec)\
+{ N ## _union_vec_ref_t _uvref, _ret = { 0, 0 }; NS ## union_ref_t _uref; size_t _i, _len;\
+  if (vec.type == 0) return _ret;\
+  _uvref.type = flatcc_builder_refmap_find(B, vec.type); _uvref.value = flatcc_builder_refmap_find(B, vec.value);\
+  _len = N ## _union_vec_len(vec); if (_uvref.type == 0) {\
+  _uvref.type = flatcc_builder_refmap_insert(B, vec.type, (flatcc_builder_create_type_vector(B, vec.type, _len))); }\
+  if (_uvref.type == 0) return _ret; if (_uvref.value == 0) {\
+  if (flatcc_builder_start_offset_vector(B)) return _ret;\
+  for (_i = 0; _i < _len; ++_i) { _uref = N ## _clone(B, N ## _union_vec_at(vec, _i));\
+    if (!_uref.value || !(flatcc_builder_offset_vector_push(B, _uref.value))) return _ret; }\
+  _uvref.value = flatcc_builder_refmap_insert(B, vec.value, flatcc_builder_end_offset_vector(B));\
+  if (_uvref.value == 0) return _ret; } return _uvref; }
+
+#define __flatbuffers_build_string_vector_ops(NS, N)\
+static inline int N ## _push_start(NS ## builder_t *B)\
+{ return NS ## string_start(B); }\
+static inline NS ## string_ref_t *N ## _push_end(NS ## builder_t *B)\
+{ return NS ## string_vec_push(B, NS ## string_end(B)); }\
+static inline NS ## string_ref_t *N ## _push_create(NS ## builder_t *B, const char *s, size_t len)\
+{ return NS ## string_vec_push(B, NS ## string_create(B, s, len)); }\
+static inline NS ## string_ref_t *N ## _push_create_str(NS ## builder_t *B, const char *s)\
+{ return NS ## string_vec_push(B, NS ## string_create_str(B, s)); }\
+static inline NS ## string_ref_t *N ## _push_create_strn(NS ## builder_t *B, const char *s, size_t max_len)\
+{ return NS ## string_vec_push(B, NS ## string_create_strn(B, s, max_len)); }\
+static inline NS ## string_ref_t *N ## _push_clone(NS ## builder_t *B, NS ## string_t string)\
+{ return NS ## string_vec_push(B, NS ## string_clone(B, string)); }\
+static inline NS ## string_ref_t *N ## _push_slice(NS ## builder_t *B, NS ## string_t string, size_t index, size_t len)\
+{ return NS ## string_vec_push(B, NS ## string_slice(B, string, index, len)); }
+
+#define __flatbuffers_build_table_vector_ops(NS, N, TN)\
+static inline int N ## _push_start(NS ## builder_t *B)\
+{ return TN ## _start(B); }\
+static inline TN ## _ref_t *N ## _push_end(NS ## builder_t *B)\
+{ return N ## _push(B, TN ## _end(B)); }\
+static inline TN ## _ref_t *N ## _push_create(NS ## builder_t *B __ ## TN ##_formal_args)\
+{ return N ## _push(B, TN ## _create(B __ ## TN ## _call_args)); }
+
+#define __flatbuffers_build_offset_vector_ops(NS, V, N, TN)\
+static inline TN ## _ref_t *V ## _extend(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_extend_offset_vector(B, len); }\
+static inline TN ## _ref_t *V ## _append(NS ## builder_t *B, const TN ## _ref_t *data, size_t len)\
+{ return flatcc_builder_append_offset_vector(B, data, len); }\
+static inline int V ## _truncate(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_truncate_offset_vector(B, len); }\
+static inline TN ## _ref_t *V ## _edit(NS ## builder_t *B)\
+{ return (TN ## _ref_t *)flatcc_builder_offset_vector_edit(B); }\
+static inline size_t V ## _reserved_len(NS ## builder_t *B)\
+{ return flatcc_builder_offset_vector_count(B); }\
+static inline TN ## _ref_t *V ## _push(NS ## builder_t *B, const TN ## _ref_t ref)\
+{ return ref ? flatcc_builder_offset_vector_push(B, ref) : 0; }
+
+#define __flatbuffers_build_offset_vector(NS, N)\
+typedef NS ## ref_t N ## _vec_ref_t;\
+static inline int N ## _vec_start(NS ## builder_t *B)\
+{ return flatcc_builder_start_offset_vector(B); }\
+static inline N ## _vec_ref_t N ## _vec_end(NS ## builder_t *B)\
+{ return flatcc_builder_end_offset_vector(B); }\
+static inline N ## _vec_ref_t N ## _vec_create(NS ## builder_t *B, const N ## _ref_t *data, size_t len)\
+{ return flatcc_builder_create_offset_vector(B, data, len); }\
+__flatbuffers_build_offset_vector_ops(NS, N ## _vec, N, N)\
+static inline N ## _vec_ref_t N ## _vec_clone(NS ## builder_t *B, N ##_vec_t vec)\
+{ int _ret; N ## _ref_t _e; size_t _i, _len; __flatbuffers_memoize_begin(B, vec);\
+ _len = N ## _vec_len(vec); if (flatcc_builder_start_offset_vector(B)) return 0;\
+  for (_i = 0; _i < _len; ++_i) { if (!(_e = N ## _clone(B, N ## _vec_at(vec, _i)))) return 0;\
+    if (!flatcc_builder_offset_vector_push(B, _e)) return 0; }\
+  __flatbuffers_memoize_end(B, vec, flatcc_builder_end_offset_vector(B)); }\
+
+#define __flatbuffers_build_string_ops(NS, N)\
+static inline char *N ## _append(NS ## builder_t *B, const char *s, size_t len)\
+{ return flatcc_builder_append_string(B, s, len); }\
+static inline char *N ## _append_str(NS ## builder_t *B, const char *s)\
+{ return flatcc_builder_append_string_str(B, s); }\
+static inline char *N ## _append_strn(NS ## builder_t *B, const char *s, size_t len)\
+{ return flatcc_builder_append_string_strn(B, s, len); }\
+static inline size_t N ## _reserved_len(NS ## builder_t *B)\
+{ return flatcc_builder_string_len(B); }\
+static inline char *N ## _extend(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_extend_string(B, len); }\
+static inline char *N ## _edit(NS ## builder_t *B)\
+{ return flatcc_builder_string_edit(B); }\
+static inline int N ## _truncate(NS ## builder_t *B, size_t len)\
+{ return flatcc_builder_truncate_string(B, len); }
+
+#define __flatbuffers_build_string(NS)\
+typedef NS ## ref_t NS ## string_ref_t;\
+static inline int NS ## string_start(NS ## builder_t *B)\
+{ return flatcc_builder_start_string(B); }\
+static inline NS ## string_ref_t NS ## string_end(NS ## builder_t *B)\
+{ return flatcc_builder_end_string(B); }\
+static inline NS ## ref_t NS ## string_create(NS ## builder_t *B, const char *s, size_t len)\
+{ return flatcc_builder_create_string(B, s, len); }\
+static inline NS ## ref_t NS ## string_create_str(NS ## builder_t *B, const char *s)\
+{ return flatcc_builder_create_string_str(B, s); }\
+static inline NS ## ref_t NS ## string_create_strn(NS ## builder_t *B, const char *s, size_t len)\
+{ return flatcc_builder_create_string_strn(B, s, len); }\
+static inline NS ## string_ref_t NS ## string_clone(NS ## builder_t *B, NS ## string_t string)\
+{ __flatbuffers_memoize(B, string, flatcc_builder_create_string(B, string, NS ## string_len(string))); }\
+static inline NS ## string_ref_t NS ## string_slice(NS ## builder_t *B, NS ## string_t string, size_t index, size_t len)\
+{ size_t n = NS ## string_len(string); if (index >= n) index = n; n -= index; if (len > n) len = n;\
+  return flatcc_builder_create_string(B, string + index, len); }\
+__flatbuffers_build_string_ops(NS, NS ## string)\
+__flatbuffers_build_offset_vector(NS, NS ## string)
+
+#define __flatbuffers_copy_from_pe(P, P2, N) (*(P) = N ## _read_from_pe(P2), (P))
+#define __flatbuffers_from_pe(P, N) (*(P) = N ## _read_from_pe(P), (P))
+#define __flatbuffers_copy_to_pe(P, P2, N) (N ## _write_to_pe((P), *(P2)), (P))
+#define __flatbuffers_to_pe(P, N) (N ## _write_to_pe((P), *(P)), (P))
+#define __flatbuffers_define_fixed_array_primitives(NS, N, T)\
+static inline T *N ## _array_copy(T *p, const T *p2, size_t n)\
+{ memcpy(p, p2, n * sizeof(T)); return p; }\
+static inline T *N ## _array_copy_from_pe(T *p, const T *p2, size_t n)\
+{ size_t i; if (NS ## is_native_pe()) memcpy(p, p2, n * sizeof(T)); else\
+  for (i = 0; i < n; ++i) N ## _copy_from_pe(&p[i], &p2[i]); return p; }\
+static inline T *N ## _array_copy_to_pe(T *p, const T *p2, size_t n)\
+{ size_t i; if (NS ## is_native_pe()) memcpy(p, p2, n * sizeof(T)); else\
+  for (i = 0; i < n; ++i) N ## _copy_to_pe(&p[i], &p2[i]); return p; }
+#define __flatbuffers_define_scalar_primitives(NS, N, T)\
+static inline T *N ## _from_pe(T *p) { return __ ## NS ## from_pe(p, N); }\
+static inline T *N ## _to_pe(T *p) { return __ ## NS ## to_pe(p, N); }\
+static inline T *N ## _copy(T *p, const T *p2) { *p = *p2; return p; }\
+static inline T *N ## _copy_from_pe(T *p, const T *p2)\
+{ return __ ## NS ## copy_from_pe(p, p2, N); }\
+static inline T *N ## _copy_to_pe(T *p, const T *p2) \
+{ return __ ## NS ## copy_to_pe(p, p2, N); }\
+static inline T *N ## _assign(T *p, const T v0) { *p = v0; return p; }\
+static inline T *N ## _assign_from_pe(T *p, T v0)\
+{ *p = N ## _read_from_pe(&v0); return p; }\
+static inline T *N ## _assign_to_pe(T *p, T v0)\
+{ N ## _write_to_pe(p, v0); return p; }
+#define __flatbuffers_build_scalar(NS, N, T)\
+__ ## NS ## define_scalar_primitives(NS, N, T)\
+__ ## NS ## define_fixed_array_primitives(NS, N, T)\
+__ ## NS ## build_vector(NS, N, T, sizeof(T), sizeof(T))
+/* Depends on generated copy_to/from_pe functions, and the type. */
+#define __flatbuffers_define_struct_primitives(NS, N)\
+static inline N ## _t *N ##_to_pe(N ## _t *p)\
+{ if (!NS ## is_native_pe()) { N ## _copy_to_pe(p, p); }; return p; }\
+static inline N ## _t *N ##_from_pe(N ## _t *p)\
+{ if (!NS ## is_native_pe()) { N ## _copy_from_pe(p, p); }; return p; }\
+static inline N ## _t *N ## _clear(N ## _t *p) { return (N ## _t *)memset(p, 0, N ## __size()); }
+
+/* Depends on generated copy/assign_to/from_pe functions, and the type. */
+#define __flatbuffers_build_struct(NS, N, S, A, FID, TFID)\
+__ ## NS ## define_struct_primitives(NS, N)\
+typedef NS ## ref_t N ## _ref_t;\
+static inline N ## _t *N ## _start(NS ## builder_t *B)\
+{ return (N ## _t *)flatcc_builder_start_struct(B, S, A); }\
+static inline N ## _ref_t N ## _end(NS ## builder_t *B)\
+{ if (!NS ## is_native_pe()) { N ## _to_pe((N ## _t *)flatcc_builder_struct_edit(B)); }\
+  return flatcc_builder_end_struct(B); }\
+static inline N ## _ref_t N ## _end_pe(NS ## builder_t *B)\
+{ return flatcc_builder_end_struct(B); }\
+static inline N ## _ref_t N ## _create(NS ## builder_t *B __ ## N ## _formal_args)\
+{ N ## _t *_p = N ## _start(B); if (!_p) return 0; N ##_assign_to_pe(_p __ ## N ## _call_args);\
+  return N ## _end_pe(B); }\
+static inline N ## _ref_t N ## _clone(NS ## builder_t *B, N ## _struct_t p)\
+{ N ## _t *_p; __flatbuffers_memoize_begin(B, p); _p = N ## _start(B); if (!_p) return 0;\
+  N ## _copy(_p, p); __flatbuffers_memoize_end(B, p, N ##_end_pe(B)); }\
+__flatbuffers_build_vector(NS, N, N ## _t, S, A)\
+__flatbuffers_build_struct_root(NS, N, A, FID, TFID)\
+
+#define __flatbuffers_struct_clear_field(p) memset((p), 0, sizeof(*(p)))
+#define __flatbuffers_build_table(NS, N, K)\
+static inline int N ## _start(NS ## builder_t *B)\
+{ return flatcc_builder_start_table(B, K); }\
+static inline N ## _ref_t N ## _end(NS ## builder_t *B)\
+{ FLATCC_ASSERT(flatcc_builder_check_required(B, __ ## N ## _required,\
+  sizeof(__ ## N ## _required) / sizeof(__ ## N ## _required[0]) - 1));\
+  return flatcc_builder_end_table(B); }\
+__flatbuffers_build_offset_vector(NS, N)
+
+#define __flatbuffers_build_table_field(ID, NS, N, TN, TT)\
+static inline int N ## _add(NS ## builder_t *B, TN ## _ref_t ref)\
+{ TN ## _ref_t *_p; return (ref && (_p = flatcc_builder_table_add_offset(B, ID))) ?\
+  ((*_p = ref), 0) : -1; }\
+static inline int N ## _start(NS ## builder_t *B)\
+{ return TN ## _start(B); }\
+static inline int N ## _end(NS ## builder_t *B)\
+{ return N ## _add(B, TN ## _end(B)); }\
+static inline TN ## _ref_t N ## _create(NS ## builder_t *B __ ## TN ##_formal_args)\
+{ return N ## _add(B, TN ## _create(B __ ## TN ## _call_args)); }\
+static inline int N ## _clone(NS ## builder_t *B, TN ## _table_t p)\
+{ return N ## _add(B, TN ## _clone(B, p)); }\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ TN ## _table_t _p = N ## _get(t); return _p ? N ## _clone(B, _p) : 0; }
+
+#define __flatbuffers_build_union_field(ID, NS, N, TN, TT)\
+static inline int N ## _add(NS ## builder_t *B, TN ## _union_ref_t uref)\
+{ NS ## ref_t *_p; TN ## _union_type_t *_pt; if (uref.type == TN ## _NONE) return 0; if (uref.value == 0) return -1;\
+  if (!(_pt = (TN ## _union_type_t *)flatcc_builder_table_add(B, ID - 1, sizeof(*_pt), sizeof(*_pt)))) return -1;\
+  *_pt = uref.type; if (!(_p = flatcc_builder_table_add_offset(B, ID))) return -1; *_p = uref.value; return 0; }\
+static inline int N ## _add_type(NS ## builder_t *B, TN ## _union_type_t type)\
+{ TN ## _union_type_t *_pt; if (type == TN ## _NONE) return 0; return (_pt = (TN ## _union_type_t *)flatcc_builder_table_add(B, ID - 1,\
+  sizeof(*_pt), sizeof(*_pt))) ? ((*_pt = type), 0) : -1; }\
+static inline int N ## _add_value(NS ## builder_t *B, TN ## _union_ref_t uref)\
+{ NS ## ref_t *p; if (uref.type == TN ## _NONE) return 0; return (p = flatcc_builder_table_add_offset(B, ID)) ?\
+  ((*p = uref.value), 0) : -1; }\
+static inline int N ## _clone(NS ## builder_t *B, TN ## _union_t p)\
+{ return N ## _add(B, TN ## _clone(B, p)); }\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ TN ## _union_t _p = N ## _union(t); return _p.type ? N ## _clone(B, _p) : 0; }
+
+/* M is the union value name and T is its type, i.e. the qualified name. */
+#define __flatbuffers_build_union_table_value_field(NS, N, NU, M, T)\
+static inline int N ## _ ## M ## _add(NS ## builder_t *B, T ## _ref_t ref)\
+{ return N ## _add(B, NU ## _as_ ## M (ref)); }\
+static inline int N ## _ ## M ## _start(NS ## builder_t *B)\
+{ return T ## _start(B); }\
+static inline int N ## _ ## M ## _end(NS ## builder_t *B)\
+{ T ## _ref_t ref = T ## _end(B);\
+  return ref ? N ## _ ## M ## _add(B, ref) : -1; }\
+static inline int N ## _ ## M ## _create(NS ## builder_t *B __ ## T ##_formal_args)\
+{ T ## _ref_t ref = T ## _create(B __ ## T ## _call_args);\
+  return ref ? N ## _add(B, NU ## _as_ ## M(ref)) : -1; }\
+static inline int N ## _ ## M ## _clone(NS ## builder_t *B, T ## _table_t t)\
+{ T ## _ref_t ref = T ## _clone(B, t);\
+  return ref ? N ## _add(B, NU ## _as_ ## M(ref)) : -1; }
+
+/* M is the union value name and T is its type, i.e. the qualified name. */
+#define __flatbuffers_build_union_struct_value_field(NS, N, NU, M, T)\
+static inline int N ## _ ## M ## _add(NS ## builder_t *B, T ## _ref_t ref)\
+{ return N ## _add(B, NU ## _as_ ## M (ref)); }\
+static inline T ## _t *N ## _ ## M ## _start(NS ## builder_t *B)\
+{ return T ## _start(B); }\
+static inline int N ## _ ## M ## _end(NS ## builder_t *B)\
+{ T ## _ref_t ref = T ## _end(B);\
+  return ref ? N ## _ ## M ## _add(B, ref) : -1; }\
+static inline int N ## _ ## M ## _create(NS ## builder_t *B __ ## T ##_formal_args)\
+{ T ## _ref_t ref = T ## _create(B __ ## T ## _call_args);\
+  return ref ? N ## _add(B, NU ## _as_ ## M(ref)) : -1; }\
+static inline int N ## _ ## M ## _end_pe(NS ## builder_t *B)\
+{ T ## _ref_t ref = T ## _end_pe(B);\
+  return ref ? N ## _add(B, NU ## _as_ ## M(ref)) : -1; }\
+static inline int N ## _ ## M ## _clone(NS ## builder_t *B, T ## _struct_t p)\
+{ T ## _ref_t ref = T ## _clone(B, p);\
+  return ref ? N ## _add(B, NU ## _as_ ## M(ref)) : -1; }
+#define __flatbuffers_build_union_string_value_field(NS, N, NU, M)\
+static inline int N ## _ ## M ## _add(NS ## builder_t *B, NS ## string_ref_t ref)\
+{ return N ## _add(B, NU ## _as_ ## M (ref)); }\
+__flatbuffers_build_string_field_ops(NS, N ## _ ## M)
+
+/* NS: common namespace, ID: table field id (not offset), TN: name of type T, TT: name of table type
+ * S: sizeof of scalar type, A: alignment of type T, default value V of type T. */
+#define __flatbuffers_build_scalar_field(ID, NS, N, TN, T, S, A, V, TT)\
+static inline int N ## _add(NS ## builder_t *B, const T v)\
+{ T *_p; if (v == V) return 0; if (!(_p = (T *)flatcc_builder_table_add(B, ID, S, A))) return -1;\
+  TN ## _assign_to_pe(_p, v); return 0; }\
+static inline int N ## _force_add(NS ## builder_t *B, const T v)\
+{ T *_p; if (!(_p = (T *)flatcc_builder_table_add(B, ID, S, A))) return -1;\
+  TN ## _assign_to_pe(_p, v); return 0; }\
+/* Clone does not skip default values and expects pe endian content. */\
+static inline int N ## _clone(NS ## builder_t *B, const T *p)\
+{ return 0 == flatcc_builder_table_add_copy(B, ID, p, S, A) ? -1 : 0; }\
+/* Transferring a missing field is a nop success with 0 as result. */\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ const T *_p = N ## _get_ptr(t); return _p ? N ## _clone(B, _p) : 0; }
+
+/* NS: common namespace, ID: table field id (not offset), TN: name of type T, TT: name of table type
+ * S: sizeof of scalar type, A: alignment of type T. */
+#define __flatbuffers_build_scalar_optional_field(ID, NS, N, TN, T, S, A, TT)\
+static inline int N ## _add(NS ## builder_t *B, const T v)\
+{ T *_p; if (!(_p = (T *)flatcc_builder_table_add(B, ID, S, A))) return -1;\
+  TN ## _assign_to_pe(_p, v); return 0; }\
+/* Clone does not skip default values and expects pe endian content. */\
+static inline int N ## _clone(NS ## builder_t *B, const T *p)\
+{ return 0 == flatcc_builder_table_add_copy(B, ID, p, S, A) ? -1 : 0; }\
+/* Transferring a missing field is a nop success with 0 as result. */\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ const T *_p = N ## _get_ptr(t); return _p ? N ## _clone(B, _p) : 0; }
+
+#define __flatbuffers_build_struct_field(ID, NS, N, TN, S, A, TT)\
+static inline TN ## _t *N ## _start(NS ## builder_t *B)\
+{ return (TN ## _t *)flatcc_builder_table_add(B, ID, S, A); }\
+static inline int N ## _end(NS ## builder_t *B)\
+{ if (!NS ## is_native_pe()) { TN ## _to_pe((TN ## _t *)flatcc_builder_table_edit(B, S)); } return 0; }\
+static inline int N ## _end_pe(NS ## builder_t *B) { return 0; }\
+static inline int N ## _create(NS ## builder_t *B __ ## TN ## _formal_args)\
+{ TN ## _t *_p = N ## _start(B); if (!_p) return -1; TN ##_assign_to_pe(_p __ ## TN ## _call_args);\
+  return 0; }\
+static inline int N ## _add(NS ## builder_t *B, const TN ## _t *p)\
+{ TN ## _t *_p = N ## _start(B); if (!_p) return -1; TN ##_copy_to_pe(_p, p); return 0; }\
+static inline int N ## _clone(NS ## builder_t *B, TN ## _struct_t p)\
+{ return 0 == flatcc_builder_table_add_copy(B, ID, p, S, A) ? -1 : 0; }\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ TN ## _struct_t _p = N ## _get(t); return _p ? N ## _clone(B, _p) : 0; }
+
+#define __flatbuffers_build_vector_field(ID, NS, N, TN, T, TT)\
+static inline int N ## _add(NS ## builder_t *B, TN ## _vec_ref_t ref)\
+{ TN ## _vec_ref_t *_p; return (ref && (_p = flatcc_builder_table_add_offset(B, ID))) ? ((*_p = ref), 0) : -1; }\
+static inline int N ## _start(NS ## builder_t *B)\
+{ return TN ## _vec_start(B); }\
+static inline int N ## _end_pe(NS ## builder_t *B)\
+{ return N ## _add(B, TN ## _vec_end_pe(B)); }\
+static inline int N ## _end(NS ## builder_t *B)\
+{ return N ## _add(B, TN ## _vec_end(B)); }\
+static inline int N ## _create_pe(NS ## builder_t *B, const T *data, size_t len)\
+{ return N ## _add(B, TN ## _vec_create_pe(B, data, len)); }\
+static inline int N ## _create(NS ## builder_t *B, const T *data, size_t len)\
+{ return N ## _add(B, TN ## _vec_create(B, data, len)); }\
+static inline int N ## _slice(NS ## builder_t *B, TN ## _vec_t vec, size_t index, size_t len)\
+{ return N ## _add(B, TN ## _vec_slice(B, vec, index, len)); }\
+static inline int N ## _clone(NS ## builder_t *B, TN ## _vec_t vec)\
+{ return N ## _add(B, TN ## _vec_clone(B, vec)); }\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ TN ## _vec_t _p = N ## _get(t); return _p ? N ## _clone(B, _p) : 0; }\
+__flatbuffers_build_vector_ops(NS, N, N, TN, T)\
+
+#define __flatbuffers_build_offset_vector_field(ID, NS, N, TN, TT)\
+static inline int N ## _add(NS ## builder_t *B, TN ## _vec_ref_t ref)\
+{ TN ## _vec_ref_t *_p; return (ref && (_p = flatcc_builder_table_add_offset(B, ID))) ? ((*_p = ref), 0) : -1; }\
+static inline int N ## _start(NS ## builder_t *B)\
+{ return flatcc_builder_start_offset_vector(B); }\
+static inline int N ## _end(NS ## builder_t *B)\
+{ return N ## _add(B, flatcc_builder_end_offset_vector(B)); }\
+static inline int N ## _create(NS ## builder_t *B, const TN ## _ref_t *data, size_t len)\
+{ return N ## _add(B, flatcc_builder_create_offset_vector(B, data, len)); }\
+__flatbuffers_build_offset_vector_ops(NS, N, N, TN)\
+static inline int N ## _clone(NS ## builder_t *B, TN ## _vec_t vec)\
+{ return N ## _add(B, TN ## _vec_clone(B, vec)); }\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ TN ## _vec_t _p = N ## _get(t); return _p ? N ## _clone(B, _p) : 0; }
+
+/* depends on N ## _add which differs for union member fields and ordinary fields */\
+#define __flatbuffers_build_string_field_ops(NS, N)\
+static inline int N ## _start(NS ## builder_t *B)\
+{ return flatcc_builder_start_string(B); }\
+static inline int N ## _end(NS ## builder_t *B)\
+{ return N ## _add(B, flatcc_builder_end_string(B)); }\
+static inline int N ## _create(NS ## builder_t *B, const char *s, size_t len)\
+{ return N ## _add(B, flatcc_builder_create_string(B, s, len)); }\
+static inline int N ## _create_str(NS ## builder_t *B, const char *s)\
+{ return N ## _add(B, flatcc_builder_create_string_str(B, s)); }\
+static inline int N ## _create_strn(NS ## builder_t *B, const char *s, size_t max_len)\
+{ return N ## _add(B, flatcc_builder_create_string_strn(B, s, max_len)); }\
+static inline int N ## _clone(NS ## builder_t *B, NS ## string_t string)\
+{ return N ## _add(B, NS ## string_clone(B, string)); }\
+static inline int N ## _slice(NS ## builder_t *B, NS ## string_t string, size_t index, size_t len)\
+{ return N ## _add(B, NS ## string_slice(B, string, index, len)); }\
+__flatbuffers_build_string_ops(NS, N)
+
+#define __flatbuffers_build_string_field(ID, NS, N, TT)\
+static inline int N ## _add(NS ## builder_t *B, NS ## string_ref_t ref)\
+{ NS ## string_ref_t *_p; return (ref && (_p = flatcc_builder_table_add_offset(B, ID))) ? ((*_p = ref), 0) : -1; }\
+__flatbuffers_build_string_field_ops(NS, N)\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ NS ## string_t _p = N ## _get(t); return _p ? N ## _clone(B, _p) : 0; }
+
+#define __flatbuffers_build_table_vector_field(ID, NS, N, TN, TT)\
+__flatbuffers_build_offset_vector_field(ID, NS, N, TN, TT)\
+__flatbuffers_build_table_vector_ops(NS, N, TN)
+
+#define __flatbuffers_build_union_vector_field(ID, NS, N, TN, TT)\
+static inline int N ## _add(NS ## builder_t *B, TN ## _union_vec_ref_t uvref)\
+{ NS ## vec_ref_t *_p; if (!uvref.type || !uvref.value) return uvref.type == uvref.value ? 0 : -1;\
+  if (!(_p = flatcc_builder_table_add_offset(B, ID - 1))) return -1; *_p = uvref.type;\
+  if (!(_p = flatcc_builder_table_add_offset(B, ID))) return -1; *_p = uvref.value; return 0; }\
+static inline int N ## _start(NS ## builder_t *B)\
+{ return flatcc_builder_start_union_vector(B); }\
+static inline int N ## _end(NS ## builder_t *B)\
+{ return N ## _add(B, flatcc_builder_end_union_vector(B)); }\
+static inline int N ## _create(NS ## builder_t *B, const TN ## _union_ref_t *data, size_t len)\
+{ return N ## _add(B, flatcc_builder_create_union_vector(B, data, len)); }\
+__flatbuffers_build_union_vector_ops(NS, N, N, TN)\
+static inline int N ## _clone(NS ## builder_t *B, TN ## _union_vec_t vec)\
+{ return N ## _add(B, TN ## _vec_clone(B, vec)); }\
+static inline int N ## _pick(NS ## builder_t *B, TT ## _table_t t)\
+{ TN ## _union_vec_t _p = N ## _union(t); return _p.type ? N ## _clone(B, _p) : 0; }
+
+#define __flatbuffers_build_union_table_vector_value_field(NS, N, NU, M, T)\
+static inline int N ## _ ## M ## _push_start(NS ## builder_t *B)\
+{ return T ## _start(B); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_end(NS ## builder_t *B)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M (T ## _end(B))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push(NS ## builder_t *B, T ## _ref_t ref)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M (ref)); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_create(NS ## builder_t *B __ ## T ##_formal_args)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(T ## _create(B __ ## T ## _call_args))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_clone(NS ## builder_t *B, T ## _table_t t)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(T ## _clone(B, t))); }
+
+#define __flatbuffers_build_union_struct_vector_value_field(NS, N, NU, M, T)\
+static inline T ## _t *N ## _ ## M ## _push_start(NS ## builder_t *B)\
+{ return T ## _start(B); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_end(NS ## builder_t *B)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M (T ## _end(B))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push(NS ## builder_t *B, T ## _ref_t ref)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M (ref)); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_create(NS ## builder_t *B __ ## T ##_formal_args)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(T ## _create(B __ ## T ## _call_args))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_clone(NS ## builder_t *B, T ## _struct_t p)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(T ## _clone(B, p))); }
+
+#define __flatbuffers_build_union_string_vector_value_field(NS, N, NU, M)\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push(NS ## builder_t *B, NS ## string_ref_t ref)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M (ref)); }\
+static inline int N ## _ ## M ## _push_start(NS ## builder_t *B)\
+{ return NS ## string_start(B); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_end(NS ## builder_t *B)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(NS ## string_end(B))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_create(NS ## builder_t *B, const char *s, size_t len)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(NS ## string_create(B, s, len))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_create_str(NS ## builder_t *B, const char *s)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(NS ## string_create_str(B, s))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_create_strn(NS ## builder_t *B, const char *s, size_t max_len)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(NS ## string_create_strn(B, s, max_len))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_clone(NS ## builder_t *B, NS ## string_t string)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(NS ## string_clone(B, string))); }\
+static inline NU ## _union_ref_t *N ## _ ## M ## _push_slice(NS ## builder_t *B, NS ## string_t string, size_t index, size_t len)\
+{ return NU ## _vec_push(B, NU ## _as_ ## M(NS ## string_slice(B, string, index, len))); }
+
+#define __flatbuffers_build_string_vector_field(ID, NS, N, TT)\
+__flatbuffers_build_offset_vector_field(ID, NS, N, NS ## string, TT)\
+__flatbuffers_build_string_vector_ops(NS, N)
+
+#define __flatbuffers_char_formal_args , char v0
+#define __flatbuffers_char_call_args , v0
+#define __flatbuffers_uint8_formal_args , uint8_t v0
+#define __flatbuffers_uint8_call_args , v0
+#define __flatbuffers_int8_formal_args , int8_t v0
+#define __flatbuffers_int8_call_args , v0
+#define __flatbuffers_bool_formal_args , flatbuffers_bool_t v0
+#define __flatbuffers_bool_call_args , v0
+#define __flatbuffers_uint16_formal_args , uint16_t v0
+#define __flatbuffers_uint16_call_args , v0
+#define __flatbuffers_uint32_formal_args , uint32_t v0
+#define __flatbuffers_uint32_call_args , v0
+#define __flatbuffers_uint64_formal_args , uint64_t v0
+#define __flatbuffers_uint64_call_args , v0
+#define __flatbuffers_int16_formal_args , int16_t v0
+#define __flatbuffers_int16_call_args , v0
+#define __flatbuffers_int32_formal_args , int32_t v0
+#define __flatbuffers_int32_call_args , v0
+#define __flatbuffers_int64_formal_args , int64_t v0
+#define __flatbuffers_int64_call_args , v0
+#define __flatbuffers_float_formal_args , float v0
+#define __flatbuffers_float_call_args , v0
+#define __flatbuffers_double_formal_args , double v0
+#define __flatbuffers_double_call_args , v0
+
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_char, char)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_uint8, uint8_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_int8, int8_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_bool, flatbuffers_bool_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_uint16, uint16_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_uint32, uint32_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_uint64, uint64_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_int16, int16_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_int32, int32_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_int64, int64_t)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_float, float)
+__flatbuffers_build_scalar(flatbuffers_, flatbuffers_double, double)
+
+__flatbuffers_build_string(flatbuffers_)
+
+__flatbuffers_build_buffer(flatbuffers_)
+#include "flatcc/flatcc_epilogue.h"
+#endif /* FLATBUFFERS_COMMON_BUILDER_H */
+#ifndef SCHEMA_READER_H
+#define SCHEMA_READER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef FLATBUFFERS_COMMON_READER_H
+#include "flatbuffers_common_reader.h"
+#endif
+#include "flatcc/flatcc_flatbuffers.h"
+#ifndef __alignas_is_defined
+#include <stdalign.h>
+#endif
+#include "flatcc/flatcc_prologue.h"
+#ifndef flatbuffers_identifier
+#define flatbuffers_identifier 0
+#endif
+#ifndef flatbuffers_extension
+#define flatbuffers_extension "bin"
+#endif
+
+typedef struct org_apache_arrow_flatbuf_Buffer org_apache_arrow_flatbuf_Buffer_t;
+typedef const org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_struct_t;
+typedef org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_mutable_struct_t;
+typedef const org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_vec_t;
+typedef org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_mutable_vec_t;
+
+typedef const struct org_apache_arrow_flatbuf_Null_table *org_apache_arrow_flatbuf_Null_table_t;
+typedef struct org_apache_arrow_flatbuf_Null_table *org_apache_arrow_flatbuf_Null_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Null_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Null_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Struct__table *org_apache_arrow_flatbuf_Struct__table_t;
+typedef struct org_apache_arrow_flatbuf_Struct__table *org_apache_arrow_flatbuf_Struct__mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Struct__vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Struct__mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_List_table *org_apache_arrow_flatbuf_List_table_t;
+typedef struct org_apache_arrow_flatbuf_List_table *org_apache_arrow_flatbuf_List_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_List_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_List_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_LargeList_table *org_apache_arrow_flatbuf_LargeList_table_t;
+typedef struct org_apache_arrow_flatbuf_LargeList_table *org_apache_arrow_flatbuf_LargeList_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeList_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeList_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_FixedSizeList_table *org_apache_arrow_flatbuf_FixedSizeList_table_t;
+typedef struct org_apache_arrow_flatbuf_FixedSizeList_table *org_apache_arrow_flatbuf_FixedSizeList_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeList_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeList_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Map_table *org_apache_arrow_flatbuf_Map_table_t;
+typedef struct org_apache_arrow_flatbuf_Map_table *org_apache_arrow_flatbuf_Map_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Map_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Map_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Union_table *org_apache_arrow_flatbuf_Union_table_t;
+typedef struct org_apache_arrow_flatbuf_Union_table *org_apache_arrow_flatbuf_Union_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Union_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Union_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Int_table *org_apache_arrow_flatbuf_Int_table_t;
+typedef struct org_apache_arrow_flatbuf_Int_table *org_apache_arrow_flatbuf_Int_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Int_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Int_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_FloatingPoint_table *org_apache_arrow_flatbuf_FloatingPoint_table_t;
+typedef struct org_apache_arrow_flatbuf_FloatingPoint_table *org_apache_arrow_flatbuf_FloatingPoint_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FloatingPoint_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FloatingPoint_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Utf8_table *org_apache_arrow_flatbuf_Utf8_table_t;
+typedef struct org_apache_arrow_flatbuf_Utf8_table *org_apache_arrow_flatbuf_Utf8_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Utf8_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Utf8_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Binary_table *org_apache_arrow_flatbuf_Binary_table_t;
+typedef struct org_apache_arrow_flatbuf_Binary_table *org_apache_arrow_flatbuf_Binary_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Binary_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Binary_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_LargeUtf8_table *org_apache_arrow_flatbuf_LargeUtf8_table_t;
+typedef struct org_apache_arrow_flatbuf_LargeUtf8_table *org_apache_arrow_flatbuf_LargeUtf8_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeUtf8_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeUtf8_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_LargeBinary_table *org_apache_arrow_flatbuf_LargeBinary_table_t;
+typedef struct org_apache_arrow_flatbuf_LargeBinary_table *org_apache_arrow_flatbuf_LargeBinary_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeBinary_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeBinary_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_FixedSizeBinary_table *org_apache_arrow_flatbuf_FixedSizeBinary_table_t;
+typedef struct org_apache_arrow_flatbuf_FixedSizeBinary_table *org_apache_arrow_flatbuf_FixedSizeBinary_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeBinary_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeBinary_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Bool_table *org_apache_arrow_flatbuf_Bool_table_t;
+typedef struct org_apache_arrow_flatbuf_Bool_table *org_apache_arrow_flatbuf_Bool_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Bool_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Bool_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_RunEndEncoded_table *org_apache_arrow_flatbuf_RunEndEncoded_table_t;
+typedef struct org_apache_arrow_flatbuf_RunEndEncoded_table *org_apache_arrow_flatbuf_RunEndEncoded_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_RunEndEncoded_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_RunEndEncoded_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Decimal_table *org_apache_arrow_flatbuf_Decimal_table_t;
+typedef struct org_apache_arrow_flatbuf_Decimal_table *org_apache_arrow_flatbuf_Decimal_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Decimal_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Decimal_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Date_table *org_apache_arrow_flatbuf_Date_table_t;
+typedef struct org_apache_arrow_flatbuf_Date_table *org_apache_arrow_flatbuf_Date_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Date_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Date_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Time_table *org_apache_arrow_flatbuf_Time_table_t;
+typedef struct org_apache_arrow_flatbuf_Time_table *org_apache_arrow_flatbuf_Time_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Time_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Time_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Timestamp_table *org_apache_arrow_flatbuf_Timestamp_table_t;
+typedef struct org_apache_arrow_flatbuf_Timestamp_table *org_apache_arrow_flatbuf_Timestamp_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Timestamp_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Timestamp_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Interval_table *org_apache_arrow_flatbuf_Interval_table_t;
+typedef struct org_apache_arrow_flatbuf_Interval_table *org_apache_arrow_flatbuf_Interval_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Interval_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Interval_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Duration_table *org_apache_arrow_flatbuf_Duration_table_t;
+typedef struct org_apache_arrow_flatbuf_Duration_table *org_apache_arrow_flatbuf_Duration_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Duration_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Duration_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_KeyValue_table *org_apache_arrow_flatbuf_KeyValue_table_t;
+typedef struct org_apache_arrow_flatbuf_KeyValue_table *org_apache_arrow_flatbuf_KeyValue_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_KeyValue_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_KeyValue_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_DictionaryEncoding_table *org_apache_arrow_flatbuf_DictionaryEncoding_table_t;
+typedef struct org_apache_arrow_flatbuf_DictionaryEncoding_table *org_apache_arrow_flatbuf_DictionaryEncoding_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_DictionaryEncoding_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_DictionaryEncoding_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Field_table *org_apache_arrow_flatbuf_Field_table_t;
+typedef struct org_apache_arrow_flatbuf_Field_table *org_apache_arrow_flatbuf_Field_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Field_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Field_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Schema_table *org_apache_arrow_flatbuf_Schema_table_t;
+typedef struct org_apache_arrow_flatbuf_Schema_table *org_apache_arrow_flatbuf_Schema_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Schema_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Schema_mutable_vec_t;
+#ifndef org_apache_arrow_flatbuf_Null_file_identifier
+#define org_apache_arrow_flatbuf_Null_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Null_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Null_identifier
+#define org_apache_arrow_flatbuf_Null_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Null_type_hash ((flatbuffers_thash_t)0x7b36a4dd)
+#define org_apache_arrow_flatbuf_Null_type_identifier "\xdd\xa4\x36\x7b"
+#ifndef org_apache_arrow_flatbuf_Null_file_extension
+#define org_apache_arrow_flatbuf_Null_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Struct__file_identifier
+#define org_apache_arrow_flatbuf_Struct__file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Struct__file_identifier */
+#ifndef org_apache_arrow_flatbuf_Struct__identifier
+#define org_apache_arrow_flatbuf_Struct__identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Struct__type_hash ((flatbuffers_thash_t)0x6310f362)
+#define org_apache_arrow_flatbuf_Struct__type_identifier "\x62\xf3\x10\x63"
+#ifndef org_apache_arrow_flatbuf_Struct__file_extension
+#define org_apache_arrow_flatbuf_Struct__file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_List_file_identifier
+#define org_apache_arrow_flatbuf_List_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_List_file_identifier */
+#ifndef org_apache_arrow_flatbuf_List_identifier
+#define org_apache_arrow_flatbuf_List_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_List_type_hash ((flatbuffers_thash_t)0xd4ce5878)
+#define org_apache_arrow_flatbuf_List_type_identifier "\x78\x58\xce\xd4"
+#ifndef org_apache_arrow_flatbuf_List_file_extension
+#define org_apache_arrow_flatbuf_List_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_LargeList_file_identifier
+#define org_apache_arrow_flatbuf_LargeList_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_LargeList_file_identifier */
+#ifndef org_apache_arrow_flatbuf_LargeList_identifier
+#define org_apache_arrow_flatbuf_LargeList_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_LargeList_type_hash ((flatbuffers_thash_t)0x38aa7e27)
+#define org_apache_arrow_flatbuf_LargeList_type_identifier "\x27\x7e\xaa\x38"
+#ifndef org_apache_arrow_flatbuf_LargeList_file_extension
+#define org_apache_arrow_flatbuf_LargeList_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_FixedSizeList_file_identifier
+#define org_apache_arrow_flatbuf_FixedSizeList_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_FixedSizeList_file_identifier */
+#ifndef org_apache_arrow_flatbuf_FixedSizeList_identifier
+#define org_apache_arrow_flatbuf_FixedSizeList_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_FixedSizeList_type_hash ((flatbuffers_thash_t)0xcef245bb)
+#define org_apache_arrow_flatbuf_FixedSizeList_type_identifier "\xbb\x45\xf2\xce"
+#ifndef org_apache_arrow_flatbuf_FixedSizeList_file_extension
+#define org_apache_arrow_flatbuf_FixedSizeList_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Map_file_identifier
+#define org_apache_arrow_flatbuf_Map_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Map_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Map_identifier
+#define org_apache_arrow_flatbuf_Map_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Map_type_hash ((flatbuffers_thash_t)0xcebef8e6)
+#define org_apache_arrow_flatbuf_Map_type_identifier "\xe6\xf8\xbe\xce"
+#ifndef org_apache_arrow_flatbuf_Map_file_extension
+#define org_apache_arrow_flatbuf_Map_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Union_file_identifier
+#define org_apache_arrow_flatbuf_Union_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Union_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Union_identifier
+#define org_apache_arrow_flatbuf_Union_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Union_type_hash ((flatbuffers_thash_t)0x896bda57)
+#define org_apache_arrow_flatbuf_Union_type_identifier "\x57\xda\x6b\x89"
+#ifndef org_apache_arrow_flatbuf_Union_file_extension
+#define org_apache_arrow_flatbuf_Union_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Int_file_identifier
+#define org_apache_arrow_flatbuf_Int_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Int_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Int_identifier
+#define org_apache_arrow_flatbuf_Int_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Int_type_hash ((flatbuffers_thash_t)0x30789001)
+#define org_apache_arrow_flatbuf_Int_type_identifier "\x01\x90\x78\x30"
+#ifndef org_apache_arrow_flatbuf_Int_file_extension
+#define org_apache_arrow_flatbuf_Int_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_FloatingPoint_file_identifier
+#define org_apache_arrow_flatbuf_FloatingPoint_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_FloatingPoint_file_identifier */
+#ifndef org_apache_arrow_flatbuf_FloatingPoint_identifier
+#define org_apache_arrow_flatbuf_FloatingPoint_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_FloatingPoint_type_hash ((flatbuffers_thash_t)0xf7d06268)
+#define org_apache_arrow_flatbuf_FloatingPoint_type_identifier "\x68\x62\xd0\xf7"
+#ifndef org_apache_arrow_flatbuf_FloatingPoint_file_extension
+#define org_apache_arrow_flatbuf_FloatingPoint_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Utf8_file_identifier
+#define org_apache_arrow_flatbuf_Utf8_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Utf8_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Utf8_identifier
+#define org_apache_arrow_flatbuf_Utf8_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Utf8_type_hash ((flatbuffers_thash_t)0x8fe60d37)
+#define org_apache_arrow_flatbuf_Utf8_type_identifier "\x37\x0d\xe6\x8f"
+#ifndef org_apache_arrow_flatbuf_Utf8_file_extension
+#define org_apache_arrow_flatbuf_Utf8_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Binary_file_identifier
+#define org_apache_arrow_flatbuf_Binary_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Binary_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Binary_identifier
+#define org_apache_arrow_flatbuf_Binary_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Binary_type_hash ((flatbuffers_thash_t)0x8e21a795)
+#define org_apache_arrow_flatbuf_Binary_type_identifier "\x95\xa7\x21\x8e"
+#ifndef org_apache_arrow_flatbuf_Binary_file_extension
+#define org_apache_arrow_flatbuf_Binary_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_LargeUtf8_file_identifier
+#define org_apache_arrow_flatbuf_LargeUtf8_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_LargeUtf8_file_identifier */
+#ifndef org_apache_arrow_flatbuf_LargeUtf8_identifier
+#define org_apache_arrow_flatbuf_LargeUtf8_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_LargeUtf8_type_hash ((flatbuffers_thash_t)0x24ed2fb0)
+#define org_apache_arrow_flatbuf_LargeUtf8_type_identifier "\xb0\x2f\xed\x24"
+#ifndef org_apache_arrow_flatbuf_LargeUtf8_file_extension
+#define org_apache_arrow_flatbuf_LargeUtf8_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_LargeBinary_file_identifier
+#define org_apache_arrow_flatbuf_LargeBinary_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_LargeBinary_file_identifier */
+#ifndef org_apache_arrow_flatbuf_LargeBinary_identifier
+#define org_apache_arrow_flatbuf_LargeBinary_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_LargeBinary_type_hash ((flatbuffers_thash_t)0xbd437872)
+#define org_apache_arrow_flatbuf_LargeBinary_type_identifier "\x72\x78\x43\xbd"
+#ifndef org_apache_arrow_flatbuf_LargeBinary_file_extension
+#define org_apache_arrow_flatbuf_LargeBinary_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier
+#define org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier */
+#ifndef org_apache_arrow_flatbuf_FixedSizeBinary_identifier
+#define org_apache_arrow_flatbuf_FixedSizeBinary_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_FixedSizeBinary_type_hash ((flatbuffers_thash_t)0x80d0f4ce)
+#define org_apache_arrow_flatbuf_FixedSizeBinary_type_identifier "\xce\xf4\xd0\x80"
+#ifndef org_apache_arrow_flatbuf_FixedSizeBinary_file_extension
+#define org_apache_arrow_flatbuf_FixedSizeBinary_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Bool_file_identifier
+#define org_apache_arrow_flatbuf_Bool_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Bool_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Bool_identifier
+#define org_apache_arrow_flatbuf_Bool_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Bool_type_hash ((flatbuffers_thash_t)0x96bf83f0)
+#define org_apache_arrow_flatbuf_Bool_type_identifier "\xf0\x83\xbf\x96"
+#ifndef org_apache_arrow_flatbuf_Bool_file_extension
+#define org_apache_arrow_flatbuf_Bool_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_RunEndEncoded_file_identifier
+#define org_apache_arrow_flatbuf_RunEndEncoded_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_RunEndEncoded_file_identifier */
+#ifndef org_apache_arrow_flatbuf_RunEndEncoded_identifier
+#define org_apache_arrow_flatbuf_RunEndEncoded_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_RunEndEncoded_type_hash ((flatbuffers_thash_t)0x5a98bcc)
+#define org_apache_arrow_flatbuf_RunEndEncoded_type_identifier "\xcc\x8b\xa9\x05"
+#ifndef org_apache_arrow_flatbuf_RunEndEncoded_file_extension
+#define org_apache_arrow_flatbuf_RunEndEncoded_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Decimal_file_identifier
+#define org_apache_arrow_flatbuf_Decimal_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Decimal_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Decimal_identifier
+#define org_apache_arrow_flatbuf_Decimal_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Decimal_type_hash ((flatbuffers_thash_t)0x91d1beb7)
+#define org_apache_arrow_flatbuf_Decimal_type_identifier "\xb7\xbe\xd1\x91"
+#ifndef org_apache_arrow_flatbuf_Decimal_file_extension
+#define org_apache_arrow_flatbuf_Decimal_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Date_file_identifier
+#define org_apache_arrow_flatbuf_Date_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Date_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Date_identifier
+#define org_apache_arrow_flatbuf_Date_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Date_type_hash ((flatbuffers_thash_t)0xe0ccf624)
+#define org_apache_arrow_flatbuf_Date_type_identifier "\x24\xf6\xcc\xe0"
+#ifndef org_apache_arrow_flatbuf_Date_file_extension
+#define org_apache_arrow_flatbuf_Date_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Time_file_identifier
+#define org_apache_arrow_flatbuf_Time_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Time_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Time_identifier
+#define org_apache_arrow_flatbuf_Time_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Time_type_hash ((flatbuffers_thash_t)0x2442a489)
+#define org_apache_arrow_flatbuf_Time_type_identifier "\x89\xa4\x42\x24"
+#ifndef org_apache_arrow_flatbuf_Time_file_extension
+#define org_apache_arrow_flatbuf_Time_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Timestamp_file_identifier
+#define org_apache_arrow_flatbuf_Timestamp_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Timestamp_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Timestamp_identifier
+#define org_apache_arrow_flatbuf_Timestamp_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Timestamp_type_hash ((flatbuffers_thash_t)0x1fddf080)
+#define org_apache_arrow_flatbuf_Timestamp_type_identifier "\x80\xf0\xdd\x1f"
+#ifndef org_apache_arrow_flatbuf_Timestamp_file_extension
+#define org_apache_arrow_flatbuf_Timestamp_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Interval_file_identifier
+#define org_apache_arrow_flatbuf_Interval_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Interval_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Interval_identifier
+#define org_apache_arrow_flatbuf_Interval_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Interval_type_hash ((flatbuffers_thash_t)0x1e2d6809)
+#define org_apache_arrow_flatbuf_Interval_type_identifier "\x09\x68\x2d\x1e"
+#ifndef org_apache_arrow_flatbuf_Interval_file_extension
+#define org_apache_arrow_flatbuf_Interval_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Duration_file_identifier
+#define org_apache_arrow_flatbuf_Duration_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Duration_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Duration_identifier
+#define org_apache_arrow_flatbuf_Duration_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Duration_type_hash ((flatbuffers_thash_t)0x1ecea6b0)
+#define org_apache_arrow_flatbuf_Duration_type_identifier "\xb0\xa6\xce\x1e"
+#ifndef org_apache_arrow_flatbuf_Duration_file_extension
+#define org_apache_arrow_flatbuf_Duration_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_KeyValue_file_identifier
+#define org_apache_arrow_flatbuf_KeyValue_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_KeyValue_file_identifier */
+#ifndef org_apache_arrow_flatbuf_KeyValue_identifier
+#define org_apache_arrow_flatbuf_KeyValue_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_KeyValue_type_hash ((flatbuffers_thash_t)0x3b264744)
+#define org_apache_arrow_flatbuf_KeyValue_type_identifier "\x44\x47\x26\x3b"
+#ifndef org_apache_arrow_flatbuf_KeyValue_file_extension
+#define org_apache_arrow_flatbuf_KeyValue_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier
+#define org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier */
+#ifndef org_apache_arrow_flatbuf_DictionaryEncoding_identifier
+#define org_apache_arrow_flatbuf_DictionaryEncoding_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_DictionaryEncoding_type_hash ((flatbuffers_thash_t)0x8c703261)
+#define org_apache_arrow_flatbuf_DictionaryEncoding_type_identifier "\x61\x32\x70\x8c"
+#ifndef org_apache_arrow_flatbuf_DictionaryEncoding_file_extension
+#define org_apache_arrow_flatbuf_DictionaryEncoding_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Field_file_identifier
+#define org_apache_arrow_flatbuf_Field_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Field_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Field_identifier
+#define org_apache_arrow_flatbuf_Field_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Field_type_hash ((flatbuffers_thash_t)0xd981525c)
+#define org_apache_arrow_flatbuf_Field_type_identifier "\x5c\x52\x81\xd9"
+#ifndef org_apache_arrow_flatbuf_Field_file_extension
+#define org_apache_arrow_flatbuf_Field_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Buffer_file_identifier
+#define org_apache_arrow_flatbuf_Buffer_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Buffer_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Buffer_identifier
+#define org_apache_arrow_flatbuf_Buffer_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Buffer_type_hash ((flatbuffers_thash_t)0x519d7fea)
+#define org_apache_arrow_flatbuf_Buffer_type_identifier "\xea\x7f\x9d\x51"
+#ifndef org_apache_arrow_flatbuf_Buffer_file_extension
+#define org_apache_arrow_flatbuf_Buffer_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Schema_file_identifier
+#define org_apache_arrow_flatbuf_Schema_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Schema_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Schema_identifier
+#define org_apache_arrow_flatbuf_Schema_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Schema_type_hash ((flatbuffers_thash_t)0x406570b)
+#define org_apache_arrow_flatbuf_Schema_type_identifier "\x0b\x57\x06\x04"
+#ifndef org_apache_arrow_flatbuf_Schema_file_extension
+#define org_apache_arrow_flatbuf_Schema_file_extension "bin"
+#endif
+
+typedef int16_t org_apache_arrow_flatbuf_MetadataVersion_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_MetadataVersion, org_apache_arrow_flatbuf_MetadataVersion_enum_t, 16)
+/**  0.1.0 (October 2016). */
+#define org_apache_arrow_flatbuf_MetadataVersion_V1 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_MetadataVersion_V2 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_MetadataVersion_V3 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(2))
+#define org_apache_arrow_flatbuf_MetadataVersion_V4 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(3))
+#define org_apache_arrow_flatbuf_MetadataVersion_V5 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(4))
+
+static inline const char *org_apache_arrow_flatbuf_MetadataVersion_name(org_apache_arrow_flatbuf_MetadataVersion_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_MetadataVersion_V1: return "V1";
+    case org_apache_arrow_flatbuf_MetadataVersion_V2: return "V2";
+    case org_apache_arrow_flatbuf_MetadataVersion_V3: return "V3";
+    case org_apache_arrow_flatbuf_MetadataVersion_V4: return "V4";
+    case org_apache_arrow_flatbuf_MetadataVersion_V5: return "V5";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_MetadataVersion_is_known_value(org_apache_arrow_flatbuf_MetadataVersion_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_MetadataVersion_V1: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V2: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V3: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V4: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V5: return 1;
+    default: return 0;
+    }
+}
+
+/**  Represents Arrow Features that might not have full support
+ *  within implementations. This is intended to be used in
+ *  two scenarios:
+ *   1.  A mechanism for readers of Arrow Streams
+ *       and files to understand that the stream or file makes
+ *       use of a feature that isn't supported or unknown to
+ *       the implementation (and therefore can meet the Arrow
+ *       forward compatibility guarantees).
+ *   2.  A means of negotiating between a client and server
+ *       what features a stream is allowed to use. The enums
+ *       values here are intented to represent higher level
+ *       features, additional details maybe negotiated
+ *       with key-value pairs specific to the protocol.
+ * 
+ *  Enums added to this list should be assigned power-of-two values
+ *  to facilitate exchanging and comparing bitmaps for supported
+ *  features. */
+typedef int64_t org_apache_arrow_flatbuf_Feature_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Feature, org_apache_arrow_flatbuf_Feature_enum_t, 64)
+/**  Needed to make flatbuffers happy. */
+#define org_apache_arrow_flatbuf_Feature_UNUSED ((org_apache_arrow_flatbuf_Feature_enum_t)INT64_C(0))
+#define org_apache_arrow_flatbuf_Feature_DICTIONARY_REPLACEMENT ((org_apache_arrow_flatbuf_Feature_enum_t)INT64_C(1))
+#define org_apache_arrow_flatbuf_Feature_COMPRESSED_BODY ((org_apache_arrow_flatbuf_Feature_enum_t)INT64_C(2))
+
+static inline const char *org_apache_arrow_flatbuf_Feature_name(org_apache_arrow_flatbuf_Feature_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Feature_UNUSED: return "UNUSED";
+    case org_apache_arrow_flatbuf_Feature_DICTIONARY_REPLACEMENT: return "DICTIONARY_REPLACEMENT";
+    case org_apache_arrow_flatbuf_Feature_COMPRESSED_BODY: return "COMPRESSED_BODY";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Feature_is_known_value(org_apache_arrow_flatbuf_Feature_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Feature_UNUSED: return 1;
+    case org_apache_arrow_flatbuf_Feature_DICTIONARY_REPLACEMENT: return 1;
+    case org_apache_arrow_flatbuf_Feature_COMPRESSED_BODY: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_UnionMode_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t, 16)
+#define org_apache_arrow_flatbuf_UnionMode_Sparse ((org_apache_arrow_flatbuf_UnionMode_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_UnionMode_Dense ((org_apache_arrow_flatbuf_UnionMode_enum_t)INT16_C(1))
+
+static inline const char *org_apache_arrow_flatbuf_UnionMode_name(org_apache_arrow_flatbuf_UnionMode_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_UnionMode_Sparse: return "Sparse";
+    case org_apache_arrow_flatbuf_UnionMode_Dense: return "Dense";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_UnionMode_is_known_value(org_apache_arrow_flatbuf_UnionMode_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_UnionMode_Sparse: return 1;
+    case org_apache_arrow_flatbuf_UnionMode_Dense: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_Precision_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t, 16)
+#define org_apache_arrow_flatbuf_Precision_HALF ((org_apache_arrow_flatbuf_Precision_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_Precision_SINGLE ((org_apache_arrow_flatbuf_Precision_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_Precision_DOUBLE ((org_apache_arrow_flatbuf_Precision_enum_t)INT16_C(2))
+
+static inline const char *org_apache_arrow_flatbuf_Precision_name(org_apache_arrow_flatbuf_Precision_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Precision_HALF: return "HALF";
+    case org_apache_arrow_flatbuf_Precision_SINGLE: return "SINGLE";
+    case org_apache_arrow_flatbuf_Precision_DOUBLE: return "DOUBLE";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Precision_is_known_value(org_apache_arrow_flatbuf_Precision_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Precision_HALF: return 1;
+    case org_apache_arrow_flatbuf_Precision_SINGLE: return 1;
+    case org_apache_arrow_flatbuf_Precision_DOUBLE: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_DateUnit_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t, 16)
+#define org_apache_arrow_flatbuf_DateUnit_DAY ((org_apache_arrow_flatbuf_DateUnit_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_DateUnit_MILLISECOND ((org_apache_arrow_flatbuf_DateUnit_enum_t)INT16_C(1))
+
+static inline const char *org_apache_arrow_flatbuf_DateUnit_name(org_apache_arrow_flatbuf_DateUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DateUnit_DAY: return "DAY";
+    case org_apache_arrow_flatbuf_DateUnit_MILLISECOND: return "MILLISECOND";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_DateUnit_is_known_value(org_apache_arrow_flatbuf_DateUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DateUnit_DAY: return 1;
+    case org_apache_arrow_flatbuf_DateUnit_MILLISECOND: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_TimeUnit_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, 16)
+#define org_apache_arrow_flatbuf_TimeUnit_SECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_TimeUnit_MILLISECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_TimeUnit_MICROSECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(2))
+#define org_apache_arrow_flatbuf_TimeUnit_NANOSECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(3))
+
+static inline const char *org_apache_arrow_flatbuf_TimeUnit_name(org_apache_arrow_flatbuf_TimeUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_TimeUnit_SECOND: return "SECOND";
+    case org_apache_arrow_flatbuf_TimeUnit_MILLISECOND: return "MILLISECOND";
+    case org_apache_arrow_flatbuf_TimeUnit_MICROSECOND: return "MICROSECOND";
+    case org_apache_arrow_flatbuf_TimeUnit_NANOSECOND: return "NANOSECOND";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_TimeUnit_is_known_value(org_apache_arrow_flatbuf_TimeUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_TimeUnit_SECOND: return 1;
+    case org_apache_arrow_flatbuf_TimeUnit_MILLISECOND: return 1;
+    case org_apache_arrow_flatbuf_TimeUnit_MICROSECOND: return 1;
+    case org_apache_arrow_flatbuf_TimeUnit_NANOSECOND: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_IntervalUnit_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t, 16)
+#define org_apache_arrow_flatbuf_IntervalUnit_YEAR_MONTH ((org_apache_arrow_flatbuf_IntervalUnit_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_IntervalUnit_DAY_TIME ((org_apache_arrow_flatbuf_IntervalUnit_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_IntervalUnit_MONTH_DAY_NANO ((org_apache_arrow_flatbuf_IntervalUnit_enum_t)INT16_C(2))
+
+static inline const char *org_apache_arrow_flatbuf_IntervalUnit_name(org_apache_arrow_flatbuf_IntervalUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_IntervalUnit_YEAR_MONTH: return "YEAR_MONTH";
+    case org_apache_arrow_flatbuf_IntervalUnit_DAY_TIME: return "DAY_TIME";
+    case org_apache_arrow_flatbuf_IntervalUnit_MONTH_DAY_NANO: return "MONTH_DAY_NANO";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_IntervalUnit_is_known_value(org_apache_arrow_flatbuf_IntervalUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_IntervalUnit_YEAR_MONTH: return 1;
+    case org_apache_arrow_flatbuf_IntervalUnit_DAY_TIME: return 1;
+    case org_apache_arrow_flatbuf_IntervalUnit_MONTH_DAY_NANO: return 1;
+    default: return 0;
+    }
+}
+
+/**  ----------------------------------------------------------------------
+ *  Dictionary encoding metadata
+ *  Maintained for forwards compatibility, in the future
+ *  Dictionaries might be explicit maps between integers and values
+ *  allowing for non-contiguous index values */
+typedef int16_t org_apache_arrow_flatbuf_DictionaryKind_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t, 16)
+#define org_apache_arrow_flatbuf_DictionaryKind_DenseArray ((org_apache_arrow_flatbuf_DictionaryKind_enum_t)INT16_C(0))
+
+static inline const char *org_apache_arrow_flatbuf_DictionaryKind_name(org_apache_arrow_flatbuf_DictionaryKind_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DictionaryKind_DenseArray: return "DenseArray";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_DictionaryKind_is_known_value(org_apache_arrow_flatbuf_DictionaryKind_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DictionaryKind_DenseArray: return 1;
+    default: return 0;
+    }
+}
+
+/**  ----------------------------------------------------------------------
+ *  Endianness of the platform producing the data */
+typedef int16_t org_apache_arrow_flatbuf_Endianness_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t, 16)
+#define org_apache_arrow_flatbuf_Endianness_Little ((org_apache_arrow_flatbuf_Endianness_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_Endianness_Big ((org_apache_arrow_flatbuf_Endianness_enum_t)INT16_C(1))
+
+static inline const char *org_apache_arrow_flatbuf_Endianness_name(org_apache_arrow_flatbuf_Endianness_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Endianness_Little: return "Little";
+    case org_apache_arrow_flatbuf_Endianness_Big: return "Big";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Endianness_is_known_value(org_apache_arrow_flatbuf_Endianness_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Endianness_Little: return 1;
+    case org_apache_arrow_flatbuf_Endianness_Big: return 1;
+    default: return 0;
+    }
+}
+
+
+/**  ----------------------------------------------------------------------
+ *  A Buffer represents a single contiguous memory segment */
+struct org_apache_arrow_flatbuf_Buffer {
+    /**  The relative offset into the shared memory page where the bytes for this
+     *  buffer starts */
+    alignas(8) int64_t offset;
+    /**  The absolute length (in bytes) of the memory buffer. The memory is found
+     *  from offset (inclusive) to offset + length (non-inclusive). When building
+     *  messages using the encapsulated IPC message, padding bytes may be written
+     *  after a buffer, but such padding bytes do not need to be accounted for in
+     *  the size here. */
+    alignas(8) int64_t length;
+};
+static_assert(sizeof(org_apache_arrow_flatbuf_Buffer_t) == 16, "struct size mismatch");
+
+static inline const org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer__const_ptr_add(const org_apache_arrow_flatbuf_Buffer_t *p, size_t i) { return p + i; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer__ptr_add(org_apache_arrow_flatbuf_Buffer_t *p, size_t i) { return p + i; }
+static inline org_apache_arrow_flatbuf_Buffer_struct_t org_apache_arrow_flatbuf_Buffer_vec_at(org_apache_arrow_flatbuf_Buffer_vec_t vec, size_t i)
+__flatbuffers_struct_vec_at(vec, i)
+static inline size_t org_apache_arrow_flatbuf_Buffer__size(void) { return 16; }
+static inline size_t org_apache_arrow_flatbuf_Buffer_vec_len(org_apache_arrow_flatbuf_Buffer_vec_t vec)
+__flatbuffers_vec_len(vec)
+__flatbuffers_struct_as_root(org_apache_arrow_flatbuf_Buffer)
+
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Buffer, offset, flatbuffers_int64, int64_t)
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Buffer, length, flatbuffers_int64, int64_t)
+
+
+/**  These are stored in the flatbuffer in the Type union below */
+struct org_apache_arrow_flatbuf_Null_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Null_vec_len(org_apache_arrow_flatbuf_Null_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Null_table_t org_apache_arrow_flatbuf_Null_vec_at(org_apache_arrow_flatbuf_Null_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Null_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Null)
+
+
+/**  A Struct_ in the flatbuffer metadata is the same as an Arrow Struct
+ *  (according to the physical memory layout). We used Struct_ here as
+ *  Struct is a reserved word in Flatbuffers */
+struct org_apache_arrow_flatbuf_Struct__table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Struct__vec_len(org_apache_arrow_flatbuf_Struct__vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Struct__table_t org_apache_arrow_flatbuf_Struct__vec_at(org_apache_arrow_flatbuf_Struct__vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Struct__table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Struct_)
+
+
+struct org_apache_arrow_flatbuf_List_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_List_vec_len(org_apache_arrow_flatbuf_List_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_List_table_t org_apache_arrow_flatbuf_List_vec_at(org_apache_arrow_flatbuf_List_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_List_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_List)
+
+
+/**  Same as List, but with 64-bit offsets, allowing to represent
+ *  extremely large data values. */
+struct org_apache_arrow_flatbuf_LargeList_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_LargeList_vec_len(org_apache_arrow_flatbuf_LargeList_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_LargeList_table_t org_apache_arrow_flatbuf_LargeList_vec_at(org_apache_arrow_flatbuf_LargeList_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_LargeList_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_LargeList)
+
+
+struct org_apache_arrow_flatbuf_FixedSizeList_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_FixedSizeList_vec_len(org_apache_arrow_flatbuf_FixedSizeList_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_FixedSizeList_table_t org_apache_arrow_flatbuf_FixedSizeList_vec_at(org_apache_arrow_flatbuf_FixedSizeList_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_FixedSizeList_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_FixedSizeList)
+
+/**  Number of list items per value */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_FixedSizeList, listSize, flatbuffers_int32, int32_t, INT32_C(0))
+
+/**  A Map is a logical nested type that is represented as
+ * 
+ *  List<entries: Struct<key: K, value: V>>
+ * 
+ *  In this layout, the keys and values are each respectively contiguous. We do
+ *  not constrain the key and value types, so the application is responsible
+ *  for ensuring that the keys are hashable and unique. Whether the keys are sorted
+ *  may be set in the metadata for this field.
+ * 
+ *  In a field with Map type, the field has a child Struct field, which then
+ *  has two children: key type and the second the value type. The names of the
+ *  child fields may be respectively "entries", "key", and "value", but this is
+ *  not enforced.
+ * 
+ *  Map
+ *  ```text
+ *    - child[0] entries: Struct
+ *      - child[0] key: K
+ *      - child[1] value: V
+ *  ```
+ *  Neither the "entries" field nor the "key" field may be nullable.
+ * 
+ *  The metadata is structured so that Arrow systems without special handling
+ *  for Map can make Map an alias for List. The "layout" attribute for the Map
+ *  field must have the same contents as a List. */
+struct org_apache_arrow_flatbuf_Map_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Map_vec_len(org_apache_arrow_flatbuf_Map_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Map_table_t org_apache_arrow_flatbuf_Map_vec_at(org_apache_arrow_flatbuf_Map_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Map_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Map)
+
+/**  Set to true if the keys within each value are sorted */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Map, keysSorted, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+
+/**  A union is a complex type with children in Field
+ *  By default ids in the type vector refer to the offsets in the children
+ *  optionally typeIds provides an indirection between the child offset and the type id
+ *  for each child `typeIds[offset]` is the id used in the type vector */
+struct org_apache_arrow_flatbuf_Union_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Union_vec_len(org_apache_arrow_flatbuf_Union_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Union_table_t org_apache_arrow_flatbuf_Union_vec_at(org_apache_arrow_flatbuf_Union_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Union_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Union)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Union, mode, org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t, INT16_C(0))
+__flatbuffers_define_vector_field(1, org_apache_arrow_flatbuf_Union, typeIds, flatbuffers_int32_vec_t, 0)
+
+struct org_apache_arrow_flatbuf_Int_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Int_vec_len(org_apache_arrow_flatbuf_Int_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Int_table_t org_apache_arrow_flatbuf_Int_vec_at(org_apache_arrow_flatbuf_Int_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Int_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Int)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Int, bitWidth, flatbuffers_int32, int32_t, INT32_C(0))
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Int, is_signed, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+
+struct org_apache_arrow_flatbuf_FloatingPoint_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_FloatingPoint_vec_len(org_apache_arrow_flatbuf_FloatingPoint_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_FloatingPoint_table_t org_apache_arrow_flatbuf_FloatingPoint_vec_at(org_apache_arrow_flatbuf_FloatingPoint_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_FloatingPoint_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_FloatingPoint)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_FloatingPoint, precision, org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t, INT16_C(0))
+
+/**  Unicode with UTF-8 encoding */
+struct org_apache_arrow_flatbuf_Utf8_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Utf8_vec_len(org_apache_arrow_flatbuf_Utf8_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Utf8_table_t org_apache_arrow_flatbuf_Utf8_vec_at(org_apache_arrow_flatbuf_Utf8_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Utf8_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Utf8)
+
+
+/**  Opaque binary data */
+struct org_apache_arrow_flatbuf_Binary_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Binary_vec_len(org_apache_arrow_flatbuf_Binary_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Binary_table_t org_apache_arrow_flatbuf_Binary_vec_at(org_apache_arrow_flatbuf_Binary_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Binary_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Binary)
+
+
+/**  Same as Utf8, but with 64-bit offsets, allowing to represent
+ *  extremely large data values. */
+struct org_apache_arrow_flatbuf_LargeUtf8_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_LargeUtf8_vec_len(org_apache_arrow_flatbuf_LargeUtf8_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_LargeUtf8_table_t org_apache_arrow_flatbuf_LargeUtf8_vec_at(org_apache_arrow_flatbuf_LargeUtf8_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_LargeUtf8_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_LargeUtf8)
+
+
+/**  Same as Binary, but with 64-bit offsets, allowing to represent
+ *  extremely large data values. */
+struct org_apache_arrow_flatbuf_LargeBinary_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_LargeBinary_vec_len(org_apache_arrow_flatbuf_LargeBinary_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_LargeBinary_table_t org_apache_arrow_flatbuf_LargeBinary_vec_at(org_apache_arrow_flatbuf_LargeBinary_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_LargeBinary_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_LargeBinary)
+
+
+struct org_apache_arrow_flatbuf_FixedSizeBinary_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_FixedSizeBinary_vec_len(org_apache_arrow_flatbuf_FixedSizeBinary_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_FixedSizeBinary_table_t org_apache_arrow_flatbuf_FixedSizeBinary_vec_at(org_apache_arrow_flatbuf_FixedSizeBinary_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_FixedSizeBinary_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_FixedSizeBinary)
+
+/**  Number of bytes per value */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_FixedSizeBinary, byteWidth, flatbuffers_int32, int32_t, INT32_C(0))
+
+struct org_apache_arrow_flatbuf_Bool_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Bool_vec_len(org_apache_arrow_flatbuf_Bool_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Bool_table_t org_apache_arrow_flatbuf_Bool_vec_at(org_apache_arrow_flatbuf_Bool_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Bool_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Bool)
+
+
+/**  Contains two child arrays, run_ends and values.
+ *  The run_ends child array must be a 16/32/64-bit integer array
+ *  which encodes the indices at which the run with the value in 
+ *  each corresponding index in the values child array ends.
+ *  Like list/struct types, the value array can be of any type. */
+struct org_apache_arrow_flatbuf_RunEndEncoded_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_RunEndEncoded_vec_len(org_apache_arrow_flatbuf_RunEndEncoded_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_RunEndEncoded_table_t org_apache_arrow_flatbuf_RunEndEncoded_vec_at(org_apache_arrow_flatbuf_RunEndEncoded_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_RunEndEncoded_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_RunEndEncoded)
+
+
+/**  Exact decimal value represented as an integer value in two's
+ *  complement. Currently only 128-bit (16-byte) and 256-bit (32-byte) integers
+ *  are used. The representation uses the endianness indicated
+ *  in the Schema. */
+struct org_apache_arrow_flatbuf_Decimal_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Decimal_vec_len(org_apache_arrow_flatbuf_Decimal_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Decimal_table_t org_apache_arrow_flatbuf_Decimal_vec_at(org_apache_arrow_flatbuf_Decimal_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Decimal_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Decimal)
+
+/**  Total number of decimal digits */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Decimal, precision, flatbuffers_int32, int32_t, INT32_C(0))
+/**  Number of digits after the decimal point "." */
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Decimal, scale, flatbuffers_int32, int32_t, INT32_C(0))
+/**  Number of bits per value. The only accepted widths are 128 and 256.
+ *  We use bitWidth for consistency with Int::bitWidth. */
+__flatbuffers_define_scalar_field(2, org_apache_arrow_flatbuf_Decimal, bitWidth, flatbuffers_int32, int32_t, INT32_C(128))
+
+/**  Date is either a 32-bit or 64-bit signed integer type representing an
+ *  elapsed time since UNIX epoch (1970-01-01), stored in either of two units:
+ * 
+ *  * Milliseconds (64 bits) indicating UNIX time elapsed since the epoch (no
+ *    leap seconds), where the values are evenly divisible by 86400000
+ *  * Days (32 bits) since the UNIX epoch */
+struct org_apache_arrow_flatbuf_Date_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Date_vec_len(org_apache_arrow_flatbuf_Date_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Date_table_t org_apache_arrow_flatbuf_Date_vec_at(org_apache_arrow_flatbuf_Date_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Date_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Date)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Date, unit, org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t, INT16_C(1))
+
+/**  Time is either a 32-bit or 64-bit signed integer type representing an
+ *  elapsed time since midnight, stored in either of four units: seconds,
+ *  milliseconds, microseconds or nanoseconds.
+ * 
+ *  The integer `bitWidth` depends on the `unit` and must be one of the following:
+ *  * SECOND and MILLISECOND: 32 bits
+ *  * MICROSECOND and NANOSECOND: 64 bits
+ * 
+ *  The allowed values are between 0 (inclusive) and 86400 (=24*60*60) seconds
+ *  (exclusive), adjusted for the time unit (for example, up to 86400000
+ *  exclusive for the MILLISECOND unit).
+ *  This definition doesn't allow for leap seconds. Time values from
+ *  measurements with leap seconds will need to be corrected when ingesting
+ *  into Arrow (for example by replacing the value 86400 with 86399). */
+struct org_apache_arrow_flatbuf_Time_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Time_vec_len(org_apache_arrow_flatbuf_Time_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Time_table_t org_apache_arrow_flatbuf_Time_vec_at(org_apache_arrow_flatbuf_Time_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Time_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Time)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Time, unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, INT16_C(1))
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Time, bitWidth, flatbuffers_int32, int32_t, INT32_C(32))
+
+/**  Timestamp is a 64-bit signed integer representing an elapsed time since a
+ *  fixed epoch, stored in either of four units: seconds, milliseconds,
+ *  microseconds or nanoseconds, and is optionally annotated with a timezone.
+ * 
+ *  Timestamp values do not include any leap seconds (in other words, all
+ *  days are considered 86400 seconds long).
+ * 
+ *  Timestamps with a non-empty timezone
+ *  ------------------------------------
+ * 
+ *  If a Timestamp column has a non-empty timezone value, its epoch is
+ *  1970-01-01 00:00:00 (January 1st 1970, midnight) in the *UTC* timezone
+ *  (the Unix epoch), regardless of the Timestamp's own timezone.
+ * 
+ *  Therefore, timestamp values with a non-empty timezone correspond to
+ *  physical points in time together with some additional information about
+ *  how the data was obtained and/or how to display it (the timezone).
+ * 
+ *    For example, the timestamp value 0 with the timezone string "Europe/Paris"
+ *    corresponds to "January 1st 1970, 00h00" in the UTC timezone, but the
+ *    application may prefer to display it as "January 1st 1970, 01h00" in
+ *    the Europe/Paris timezone (which is the same physical point in time).
+ * 
+ *  One consequence is that timestamp values with a non-empty timezone
+ *  can be compared and ordered directly, since they all share the same
+ *  well-known point of reference (the Unix epoch).
+ * 
+ *  Timestamps with an unset / empty timezone
+ *  -----------------------------------------
+ * 
+ *  If a Timestamp column has no timezone value, its epoch is
+ *  1970-01-01 00:00:00 (January 1st 1970, midnight) in an *unknown* timezone.
+ * 
+ *  Therefore, timestamp values without a timezone cannot be meaningfully
+ *  interpreted as physical points in time, but only as calendar / clock
+ *  indications ("wall clock time") in an unspecified timezone.
+ * 
+ *    For example, the timestamp value 0 with an empty timezone string
+ *    corresponds to "January 1st 1970, 00h00" in an unknown timezone: there
+ *    is not enough information to interpret it as a well-defined physical
+ *    point in time.
+ * 
+ *  One consequence is that timestamp values without a timezone cannot
+ *  be reliably compared or ordered, since they may have different points of
+ *  reference.  In particular, it is *not* possible to interpret an unset
+ *  or empty timezone as the same as "UTC".
+ * 
+ *  Conversion between timezones
+ *  ----------------------------
+ * 
+ *  If a Timestamp column has a non-empty timezone, changing the timezone
+ *  to a different non-empty value is a metadata-only operation:
+ *  the timestamp values need not change as their point of reference remains
+ *  the same (the Unix epoch).
+ * 
+ *  However, if a Timestamp column has no timezone value, changing it to a
+ *  non-empty value requires to think about the desired semantics.
+ *  One possibility is to assume that the original timestamp values are
+ *  relative to the epoch of the timezone being set; timestamp values should
+ *  then adjusted to the Unix epoch (for example, changing the timezone from
+ *  empty to "Europe/Paris" would require converting the timestamp values
+ *  from "Europe/Paris" to "UTC", which seems counter-intuitive but is
+ *  nevertheless correct).
+ * 
+ *  Guidelines for encoding data from external libraries
+ *  ----------------------------------------------------
+ * 
+ *  Date & time libraries often have multiple different data types for temporal
+ *  data. In order to ease interoperability between different implementations the
+ *  Arrow project has some recommendations for encoding these types into a Timestamp
+ *  column.
+ * 
+ *  An "instant" represents a physical point in time that has no relevant timezone
+ *  (for example, astronomical data). To encode an instant, use a Timestamp with
+ *  the timezone string set to "UTC", and make sure the Timestamp values
+ *  are relative to the UTC epoch (January 1st 1970, midnight).
+ * 
+ *  A "zoned date-time" represents a physical point in time annotated with an
+ *  informative timezone (for example, the timezone in which the data was
+ *  recorded).  To encode a zoned date-time, use a Timestamp with the timezone
+ *  string set to the name of the timezone, and make sure the Timestamp values
+ *  are relative to the UTC epoch (January 1st 1970, midnight).
+ * 
+ *   (There is some ambiguity between an instant and a zoned date-time with the
+ *    UTC timezone.  Both of these are stored the same in Arrow.  Typically,
+ *    this distinction does not matter.  If it does, then an application should
+ *    use custom metadata or an extension type to distinguish between the two cases.)
+ * 
+ *  An "offset date-time" represents a physical point in time combined with an
+ *  explicit offset from UTC.  To encode an offset date-time, use a Timestamp
+ *  with the timezone string set to the numeric timezone offset string
+ *  (e.g. "+03:00"), and make sure the Timestamp values are relative to
+ *  the UTC epoch (January 1st 1970, midnight).
+ * 
+ *  A "naive date-time" (also called "local date-time" in some libraries)
+ *  represents a wall clock time combined with a calendar date, but with
+ *  no indication of how to map this information to a physical point in time.
+ *  Naive date-times must be handled with care because of this missing
+ *  information, and also because daylight saving time (DST) may make
+ *  some values ambiguous or non-existent. A naive date-time may be
+ *  stored as a struct with Date and Time fields. However, it may also be
+ *  encoded into a Timestamp column with an empty timezone. The timestamp
+ *  values should be computed "as if" the timezone of the date-time values
+ *  was UTC; for example, the naive date-time "January 1st 1970, 00h00" would
+ *  be encoded as timestamp value 0. */
+struct org_apache_arrow_flatbuf_Timestamp_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Timestamp_vec_len(org_apache_arrow_flatbuf_Timestamp_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Timestamp_table_t org_apache_arrow_flatbuf_Timestamp_vec_at(org_apache_arrow_flatbuf_Timestamp_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Timestamp_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Timestamp)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Timestamp, unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, INT16_C(0))
+/**  The timezone is an optional string indicating the name of a timezone,
+ *  one of:
+ * 
+ *  * As used in the Olson timezone database (the "tz database" or
+ *    "tzdata"), such as "America/New_York".
+ *  * An absolute timezone offset of the form "+XX:XX" or "-XX:XX",
+ *    such as "+07:30".
+ * 
+ *  Whether a timezone string is present indicates different semantics about
+ *  the data (see above). */
+__flatbuffers_define_string_field(1, org_apache_arrow_flatbuf_Timestamp, timezone, 0)
+
+struct org_apache_arrow_flatbuf_Interval_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Interval_vec_len(org_apache_arrow_flatbuf_Interval_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Interval_table_t org_apache_arrow_flatbuf_Interval_vec_at(org_apache_arrow_flatbuf_Interval_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Interval_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Interval)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Interval, unit, org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t, INT16_C(0))
+
+struct org_apache_arrow_flatbuf_Duration_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Duration_vec_len(org_apache_arrow_flatbuf_Duration_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Duration_table_t org_apache_arrow_flatbuf_Duration_vec_at(org_apache_arrow_flatbuf_Duration_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Duration_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Duration)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Duration, unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, INT16_C(1))
+/**  ----------------------------------------------------------------------
+ *  Top-level Type value, enabling extensible type-specific metadata. We can
+ *  add new logical types to Type without breaking backwards compatibility */
+typedef uint8_t org_apache_arrow_flatbuf_Type_union_type_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Type, org_apache_arrow_flatbuf_Type_union_type_t, 8)
+__flatbuffers_define_union(flatbuffers_, org_apache_arrow_flatbuf_Type)
+/**  ----------------------------------------------------------------------
+ *  user defined key value pairs to add custom metadata to arrow
+ *  key namespacing is the responsibility of the user */
+#define org_apache_arrow_flatbuf_Type_NONE ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(0))
+#define org_apache_arrow_flatbuf_Type_Null ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(1))
+#define org_apache_arrow_flatbuf_Type_Int ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(2))
+#define org_apache_arrow_flatbuf_Type_FloatingPoint ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(3))
+#define org_apache_arrow_flatbuf_Type_Binary ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(4))
+#define org_apache_arrow_flatbuf_Type_Utf8 ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(5))
+#define org_apache_arrow_flatbuf_Type_Bool ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(6))
+#define org_apache_arrow_flatbuf_Type_Decimal ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(7))
+#define org_apache_arrow_flatbuf_Type_Date ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(8))
+#define org_apache_arrow_flatbuf_Type_Time ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(9))
+#define org_apache_arrow_flatbuf_Type_Timestamp ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(10))
+#define org_apache_arrow_flatbuf_Type_Interval ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(11))
+#define org_apache_arrow_flatbuf_Type_List ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(12))
+#define org_apache_arrow_flatbuf_Type_Struct_ ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(13))
+#define org_apache_arrow_flatbuf_Type_Union ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(14))
+#define org_apache_arrow_flatbuf_Type_FixedSizeBinary ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(15))
+#define org_apache_arrow_flatbuf_Type_FixedSizeList ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(16))
+#define org_apache_arrow_flatbuf_Type_Map ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(17))
+#define org_apache_arrow_flatbuf_Type_Duration ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(18))
+#define org_apache_arrow_flatbuf_Type_LargeBinary ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(19))
+#define org_apache_arrow_flatbuf_Type_LargeUtf8 ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(20))
+#define org_apache_arrow_flatbuf_Type_LargeList ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(21))
+#define org_apache_arrow_flatbuf_Type_RunEndEncoded ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(22))
+
+static inline const char *org_apache_arrow_flatbuf_Type_type_name(org_apache_arrow_flatbuf_Type_union_type_t type)
+{
+    switch (type) {
+    case org_apache_arrow_flatbuf_Type_NONE: return "NONE";
+    case org_apache_arrow_flatbuf_Type_Null: return "Null";
+    case org_apache_arrow_flatbuf_Type_Int: return "Int";
+    case org_apache_arrow_flatbuf_Type_FloatingPoint: return "FloatingPoint";
+    case org_apache_arrow_flatbuf_Type_Binary: return "Binary";
+    case org_apache_arrow_flatbuf_Type_Utf8: return "Utf8";
+    case org_apache_arrow_flatbuf_Type_Bool: return "Bool";
+    case org_apache_arrow_flatbuf_Type_Decimal: return "Decimal";
+    case org_apache_arrow_flatbuf_Type_Date: return "Date";
+    case org_apache_arrow_flatbuf_Type_Time: return "Time";
+    case org_apache_arrow_flatbuf_Type_Timestamp: return "Timestamp";
+    case org_apache_arrow_flatbuf_Type_Interval: return "Interval";
+    case org_apache_arrow_flatbuf_Type_List: return "List";
+    case org_apache_arrow_flatbuf_Type_Struct_: return "Struct_";
+    case org_apache_arrow_flatbuf_Type_Union: return "Union";
+    case org_apache_arrow_flatbuf_Type_FixedSizeBinary: return "FixedSizeBinary";
+    case org_apache_arrow_flatbuf_Type_FixedSizeList: return "FixedSizeList";
+    case org_apache_arrow_flatbuf_Type_Map: return "Map";
+    case org_apache_arrow_flatbuf_Type_Duration: return "Duration";
+    case org_apache_arrow_flatbuf_Type_LargeBinary: return "LargeBinary";
+    case org_apache_arrow_flatbuf_Type_LargeUtf8: return "LargeUtf8";
+    case org_apache_arrow_flatbuf_Type_LargeList: return "LargeList";
+    case org_apache_arrow_flatbuf_Type_RunEndEncoded: return "RunEndEncoded";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Type_is_known_type(org_apache_arrow_flatbuf_Type_union_type_t type)
+{
+    switch (type) {
+    case org_apache_arrow_flatbuf_Type_NONE: return 1;
+    case org_apache_arrow_flatbuf_Type_Null: return 1;
+    case org_apache_arrow_flatbuf_Type_Int: return 1;
+    case org_apache_arrow_flatbuf_Type_FloatingPoint: return 1;
+    case org_apache_arrow_flatbuf_Type_Binary: return 1;
+    case org_apache_arrow_flatbuf_Type_Utf8: return 1;
+    case org_apache_arrow_flatbuf_Type_Bool: return 1;
+    case org_apache_arrow_flatbuf_Type_Decimal: return 1;
+    case org_apache_arrow_flatbuf_Type_Date: return 1;
+    case org_apache_arrow_flatbuf_Type_Time: return 1;
+    case org_apache_arrow_flatbuf_Type_Timestamp: return 1;
+    case org_apache_arrow_flatbuf_Type_Interval: return 1;
+    case org_apache_arrow_flatbuf_Type_List: return 1;
+    case org_apache_arrow_flatbuf_Type_Struct_: return 1;
+    case org_apache_arrow_flatbuf_Type_Union: return 1;
+    case org_apache_arrow_flatbuf_Type_FixedSizeBinary: return 1;
+    case org_apache_arrow_flatbuf_Type_FixedSizeList: return 1;
+    case org_apache_arrow_flatbuf_Type_Map: return 1;
+    case org_apache_arrow_flatbuf_Type_Duration: return 1;
+    case org_apache_arrow_flatbuf_Type_LargeBinary: return 1;
+    case org_apache_arrow_flatbuf_Type_LargeUtf8: return 1;
+    case org_apache_arrow_flatbuf_Type_LargeList: return 1;
+    case org_apache_arrow_flatbuf_Type_RunEndEncoded: return 1;
+    default: return 0;
+    }
+}
+
+
+struct org_apache_arrow_flatbuf_KeyValue_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_KeyValue_vec_len(org_apache_arrow_flatbuf_KeyValue_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_KeyValue_table_t org_apache_arrow_flatbuf_KeyValue_vec_at(org_apache_arrow_flatbuf_KeyValue_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_KeyValue_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_KeyValue)
+
+__flatbuffers_define_string_field(0, org_apache_arrow_flatbuf_KeyValue, key, 0)
+__flatbuffers_define_string_field(1, org_apache_arrow_flatbuf_KeyValue, value, 0)
+
+struct org_apache_arrow_flatbuf_DictionaryEncoding_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_DictionaryEncoding_vec_len(org_apache_arrow_flatbuf_DictionaryEncoding_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_DictionaryEncoding_table_t org_apache_arrow_flatbuf_DictionaryEncoding_vec_at(org_apache_arrow_flatbuf_DictionaryEncoding_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_DictionaryEncoding_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_DictionaryEncoding)
+
+/**  The known dictionary id in the application where this data is used. In
+ *  the file or streaming formats, the dictionary ids are found in the
+ *  DictionaryBatch messages */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_DictionaryEncoding, id, flatbuffers_int64, int64_t, INT64_C(0))
+/**  The dictionary indices are constrained to be non-negative integers. If
+ *  this field is null, the indices must be signed int32. To maximize
+ *  cross-language compatibility and performance, implementations are
+ *  recommended to prefer signed integer types over unsigned integer types
+ *  and to avoid uint64 indices unless they are required by an application. */
+__flatbuffers_define_table_field(1, org_apache_arrow_flatbuf_DictionaryEncoding, indexType, org_apache_arrow_flatbuf_Int_table_t, 0)
+/**  By default, dictionaries are not ordered, or the order does not have
+ *  semantic meaning. In some statistical, applications, dictionary-encoding
+ *  is used to represent ordered categorical data, and we provide a way to
+ *  preserve that metadata here */
+__flatbuffers_define_scalar_field(2, org_apache_arrow_flatbuf_DictionaryEncoding, isOrdered, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+__flatbuffers_define_scalar_field(3, org_apache_arrow_flatbuf_DictionaryEncoding, dictionaryKind, org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t, INT16_C(0))
+
+/**  ----------------------------------------------------------------------
+ *  A field represents a named column in a record / row batch or child of a
+ *  nested type. */
+struct org_apache_arrow_flatbuf_Field_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Field_vec_len(org_apache_arrow_flatbuf_Field_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Field_table_t org_apache_arrow_flatbuf_Field_vec_at(org_apache_arrow_flatbuf_Field_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Field_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Field)
+
+/**  Name is not required, in i.e. a List */
+__flatbuffers_define_string_field(0, org_apache_arrow_flatbuf_Field, name, 0)
+/**  Whether or not this field can contain nulls. Should be true in general. */
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Field, nullable, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+/**  This is the type of the decoded value if the field is dictionary encoded. */
+__flatbuffers_define_union_field(flatbuffers_, 3, org_apache_arrow_flatbuf_Field, type, org_apache_arrow_flatbuf_Type, 0)
+/**  Present only if the field is dictionary encoded. */
+__flatbuffers_define_table_field(4, org_apache_arrow_flatbuf_Field, dictionary, org_apache_arrow_flatbuf_DictionaryEncoding_table_t, 0)
+/**  children apply only to nested data types like Struct, List and Union. For
+ *  primitive types children will have length 0. */
+__flatbuffers_define_vector_field(5, org_apache_arrow_flatbuf_Field, children, org_apache_arrow_flatbuf_Field_vec_t, 0)
+/**  User-defined metadata */
+__flatbuffers_define_vector_field(6, org_apache_arrow_flatbuf_Field, custom_metadata, org_apache_arrow_flatbuf_KeyValue_vec_t, 0)
+
+/**  ----------------------------------------------------------------------
+ *  A Schema describes the columns in a row batch */
+struct org_apache_arrow_flatbuf_Schema_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Schema_vec_len(org_apache_arrow_flatbuf_Schema_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Schema_table_t org_apache_arrow_flatbuf_Schema_vec_at(org_apache_arrow_flatbuf_Schema_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Schema_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Schema)
+
+/**  endianness of the buffer
+ *  it is Little Endian by default
+ *  if endianness doesn't match the underlying system then the vectors need to be converted */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Schema, endianness, org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t, INT16_C(0))
+__flatbuffers_define_vector_field(1, org_apache_arrow_flatbuf_Schema, fields, org_apache_arrow_flatbuf_Field_vec_t, 0)
+__flatbuffers_define_vector_field(2, org_apache_arrow_flatbuf_Schema, custom_metadata, org_apache_arrow_flatbuf_KeyValue_vec_t, 0)
+/**  Features used in the stream/file. */
+__flatbuffers_define_vector_field(3, org_apache_arrow_flatbuf_Schema, features, org_apache_arrow_flatbuf_Feature_vec_t, 0)
+
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* SCHEMA_READER_H */
+#ifndef SCHEMA_BUILDER_H
+#define SCHEMA_BUILDER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef SCHEMA_READER_H
+#include "Schema_reader.h"
+#endif
+#ifndef FLATBUFFERS_COMMON_BUILDER_H
+#include "flatbuffers_common_builder.h"
+#endif
+#include "flatcc/flatcc_prologue.h"
+#ifndef flatbuffers_identifier
+#define flatbuffers_identifier 0
+#endif
+#ifndef flatbuffers_extension
+#define flatbuffers_extension "bin"
+#endif
+
+#define __org_apache_arrow_flatbuf_MetadataVersion_formal_args , org_apache_arrow_flatbuf_MetadataVersion_enum_t v0
+#define __org_apache_arrow_flatbuf_MetadataVersion_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_MetadataVersion, org_apache_arrow_flatbuf_MetadataVersion_enum_t)
+#define __org_apache_arrow_flatbuf_Feature_formal_args , org_apache_arrow_flatbuf_Feature_enum_t v0
+#define __org_apache_arrow_flatbuf_Feature_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_Feature, org_apache_arrow_flatbuf_Feature_enum_t)
+#define __org_apache_arrow_flatbuf_UnionMode_formal_args , org_apache_arrow_flatbuf_UnionMode_enum_t v0
+#define __org_apache_arrow_flatbuf_UnionMode_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t)
+#define __org_apache_arrow_flatbuf_Precision_formal_args , org_apache_arrow_flatbuf_Precision_enum_t v0
+#define __org_apache_arrow_flatbuf_Precision_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t)
+#define __org_apache_arrow_flatbuf_DateUnit_formal_args , org_apache_arrow_flatbuf_DateUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_DateUnit_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t)
+#define __org_apache_arrow_flatbuf_TimeUnit_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_TimeUnit_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t)
+#define __org_apache_arrow_flatbuf_IntervalUnit_formal_args , org_apache_arrow_flatbuf_IntervalUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_IntervalUnit_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t)
+#define __org_apache_arrow_flatbuf_DictionaryKind_formal_args , org_apache_arrow_flatbuf_DictionaryKind_enum_t v0
+#define __org_apache_arrow_flatbuf_DictionaryKind_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t)
+#define __org_apache_arrow_flatbuf_Endianness_formal_args , org_apache_arrow_flatbuf_Endianness_enum_t v0
+#define __org_apache_arrow_flatbuf_Endianness_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t)
+
+#define __org_apache_arrow_flatbuf_Buffer_formal_args , int64_t v0, int64_t v1
+#define __org_apache_arrow_flatbuf_Buffer_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_assign(org_apache_arrow_flatbuf_Buffer_t *p, int64_t v0, int64_t v1)
+{ p->offset = v0; p->length = v1;
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_copy(org_apache_arrow_flatbuf_Buffer_t *p, const org_apache_arrow_flatbuf_Buffer_t *p2)
+{ p->offset = p2->offset; p->length = p2->length;
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_assign_to_pe(org_apache_arrow_flatbuf_Buffer_t *p, int64_t v0, int64_t v1)
+{ flatbuffers_int64_assign_to_pe(&p->offset, v0); flatbuffers_int64_assign_to_pe(&p->length, v1);
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_copy_to_pe(org_apache_arrow_flatbuf_Buffer_t *p, const org_apache_arrow_flatbuf_Buffer_t *p2)
+{ flatbuffers_int64_copy_to_pe(&p->offset, &p2->offset); flatbuffers_int64_copy_to_pe(&p->length, &p2->length);
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_assign_from_pe(org_apache_arrow_flatbuf_Buffer_t *p, int64_t v0, int64_t v1)
+{ flatbuffers_int64_assign_from_pe(&p->offset, v0); flatbuffers_int64_assign_from_pe(&p->length, v1);
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_copy_from_pe(org_apache_arrow_flatbuf_Buffer_t *p, const org_apache_arrow_flatbuf_Buffer_t *p2)
+{ flatbuffers_int64_copy_from_pe(&p->offset, &p2->offset); flatbuffers_int64_copy_from_pe(&p->length, &p2->length);
+  return p; }
+__flatbuffers_build_struct(flatbuffers_, org_apache_arrow_flatbuf_Buffer, 16, 8, org_apache_arrow_flatbuf_Buffer_file_identifier, org_apache_arrow_flatbuf_Buffer_type_identifier)
+__flatbuffers_define_fixed_array_primitives(flatbuffers_, org_apache_arrow_flatbuf_Buffer, org_apache_arrow_flatbuf_Buffer_t)
+
+typedef flatbuffers_union_ref_t org_apache_arrow_flatbuf_Type_union_ref_t;
+typedef flatbuffers_union_vec_ref_t org_apache_arrow_flatbuf_Type_union_vec_ref_t;
+static org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Type_union_t t);
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Null_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Null_ref_t;
+static org_apache_arrow_flatbuf_Null_ref_t org_apache_arrow_flatbuf_Null_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Null_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Null, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Struct__required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Struct__ref_t;
+static org_apache_arrow_flatbuf_Struct__ref_t org_apache_arrow_flatbuf_Struct__clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Struct__table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Struct_, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_List_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_List_ref_t;
+static org_apache_arrow_flatbuf_List_ref_t org_apache_arrow_flatbuf_List_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_List_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_List, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_LargeList_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_LargeList_ref_t;
+static org_apache_arrow_flatbuf_LargeList_ref_t org_apache_arrow_flatbuf_LargeList_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeList_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_LargeList, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_FixedSizeList_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_FixedSizeList_ref_t;
+static org_apache_arrow_flatbuf_FixedSizeList_ref_t org_apache_arrow_flatbuf_FixedSizeList_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FixedSizeList_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeList, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Map_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Map_ref_t;
+static org_apache_arrow_flatbuf_Map_ref_t org_apache_arrow_flatbuf_Map_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Map_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Map, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Union_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Union_ref_t;
+static org_apache_arrow_flatbuf_Union_ref_t org_apache_arrow_flatbuf_Union_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Union_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Union, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Int_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Int_ref_t;
+static org_apache_arrow_flatbuf_Int_ref_t org_apache_arrow_flatbuf_Int_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Int_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Int, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_FloatingPoint_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_FloatingPoint_ref_t;
+static org_apache_arrow_flatbuf_FloatingPoint_ref_t org_apache_arrow_flatbuf_FloatingPoint_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FloatingPoint_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_FloatingPoint, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Utf8_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Utf8_ref_t;
+static org_apache_arrow_flatbuf_Utf8_ref_t org_apache_arrow_flatbuf_Utf8_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Utf8_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Utf8, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Binary_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Binary_ref_t;
+static org_apache_arrow_flatbuf_Binary_ref_t org_apache_arrow_flatbuf_Binary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Binary_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Binary, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_LargeUtf8_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_LargeUtf8_ref_t;
+static org_apache_arrow_flatbuf_LargeUtf8_ref_t org_apache_arrow_flatbuf_LargeUtf8_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeUtf8_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_LargeUtf8, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_LargeBinary_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_LargeBinary_ref_t;
+static org_apache_arrow_flatbuf_LargeBinary_ref_t org_apache_arrow_flatbuf_LargeBinary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeBinary_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_LargeBinary, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_FixedSizeBinary_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_ref_t;
+static org_apache_arrow_flatbuf_FixedSizeBinary_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FixedSizeBinary_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeBinary, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Bool_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Bool_ref_t;
+static org_apache_arrow_flatbuf_Bool_ref_t org_apache_arrow_flatbuf_Bool_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Bool_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Bool, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_RunEndEncoded_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_RunEndEncoded_ref_t;
+static org_apache_arrow_flatbuf_RunEndEncoded_ref_t org_apache_arrow_flatbuf_RunEndEncoded_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_RunEndEncoded_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_RunEndEncoded, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Decimal_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Decimal_ref_t;
+static org_apache_arrow_flatbuf_Decimal_ref_t org_apache_arrow_flatbuf_Decimal_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Decimal_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Decimal, 3)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Date_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Date_ref_t;
+static org_apache_arrow_flatbuf_Date_ref_t org_apache_arrow_flatbuf_Date_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Date_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Date, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Time_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Time_ref_t;
+static org_apache_arrow_flatbuf_Time_ref_t org_apache_arrow_flatbuf_Time_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Time_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Time, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Timestamp_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Timestamp_ref_t;
+static org_apache_arrow_flatbuf_Timestamp_ref_t org_apache_arrow_flatbuf_Timestamp_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Timestamp_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Timestamp, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Interval_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Interval_ref_t;
+static org_apache_arrow_flatbuf_Interval_ref_t org_apache_arrow_flatbuf_Interval_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Interval_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Interval, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Duration_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Duration_ref_t;
+static org_apache_arrow_flatbuf_Duration_ref_t org_apache_arrow_flatbuf_Duration_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Duration_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Duration, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_KeyValue_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_KeyValue_ref_t;
+static org_apache_arrow_flatbuf_KeyValue_ref_t org_apache_arrow_flatbuf_KeyValue_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_KeyValue_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_KeyValue, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_DictionaryEncoding_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_ref_t;
+static org_apache_arrow_flatbuf_DictionaryEncoding_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_DictionaryEncoding_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding, 4)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Field_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Field_ref_t;
+static org_apache_arrow_flatbuf_Field_ref_t org_apache_arrow_flatbuf_Field_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Field_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Field, 7)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Schema_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Schema_ref_t;
+static org_apache_arrow_flatbuf_Schema_ref_t org_apache_arrow_flatbuf_Schema_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Schema_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Schema, 4)
+
+#define __org_apache_arrow_flatbuf_Null_formal_args 
+#define __org_apache_arrow_flatbuf_Null_call_args 
+static inline org_apache_arrow_flatbuf_Null_ref_t org_apache_arrow_flatbuf_Null_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Null_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Null, org_apache_arrow_flatbuf_Null_file_identifier, org_apache_arrow_flatbuf_Null_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Struct__formal_args 
+#define __org_apache_arrow_flatbuf_Struct__call_args 
+static inline org_apache_arrow_flatbuf_Struct__ref_t org_apache_arrow_flatbuf_Struct__create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Struct__formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Struct_, org_apache_arrow_flatbuf_Struct__file_identifier, org_apache_arrow_flatbuf_Struct__type_identifier)
+
+#define __org_apache_arrow_flatbuf_List_formal_args 
+#define __org_apache_arrow_flatbuf_List_call_args 
+static inline org_apache_arrow_flatbuf_List_ref_t org_apache_arrow_flatbuf_List_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_List_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_List, org_apache_arrow_flatbuf_List_file_identifier, org_apache_arrow_flatbuf_List_type_identifier)
+
+#define __org_apache_arrow_flatbuf_LargeList_formal_args 
+#define __org_apache_arrow_flatbuf_LargeList_call_args 
+static inline org_apache_arrow_flatbuf_LargeList_ref_t org_apache_arrow_flatbuf_LargeList_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeList_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_LargeList, org_apache_arrow_flatbuf_LargeList_file_identifier, org_apache_arrow_flatbuf_LargeList_type_identifier)
+
+#define __org_apache_arrow_flatbuf_FixedSizeList_formal_args , int32_t v0
+#define __org_apache_arrow_flatbuf_FixedSizeList_call_args , v0
+static inline org_apache_arrow_flatbuf_FixedSizeList_ref_t org_apache_arrow_flatbuf_FixedSizeList_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FixedSizeList_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeList, org_apache_arrow_flatbuf_FixedSizeList_file_identifier, org_apache_arrow_flatbuf_FixedSizeList_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Map_formal_args , flatbuffers_bool_t v0
+#define __org_apache_arrow_flatbuf_Map_call_args , v0
+static inline org_apache_arrow_flatbuf_Map_ref_t org_apache_arrow_flatbuf_Map_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Map_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Map, org_apache_arrow_flatbuf_Map_file_identifier, org_apache_arrow_flatbuf_Map_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Union_formal_args , org_apache_arrow_flatbuf_UnionMode_enum_t v0, flatbuffers_int32_vec_ref_t v1
+#define __org_apache_arrow_flatbuf_Union_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Union_ref_t org_apache_arrow_flatbuf_Union_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Union_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Union, org_apache_arrow_flatbuf_Union_file_identifier, org_apache_arrow_flatbuf_Union_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Int_formal_args , int32_t v0, flatbuffers_bool_t v1
+#define __org_apache_arrow_flatbuf_Int_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Int_ref_t org_apache_arrow_flatbuf_Int_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Int_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Int, org_apache_arrow_flatbuf_Int_file_identifier, org_apache_arrow_flatbuf_Int_type_identifier)
+
+#define __org_apache_arrow_flatbuf_FloatingPoint_formal_args , org_apache_arrow_flatbuf_Precision_enum_t v0
+#define __org_apache_arrow_flatbuf_FloatingPoint_call_args , v0
+static inline org_apache_arrow_flatbuf_FloatingPoint_ref_t org_apache_arrow_flatbuf_FloatingPoint_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FloatingPoint_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_FloatingPoint, org_apache_arrow_flatbuf_FloatingPoint_file_identifier, org_apache_arrow_flatbuf_FloatingPoint_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Utf8_formal_args 
+#define __org_apache_arrow_flatbuf_Utf8_call_args 
+static inline org_apache_arrow_flatbuf_Utf8_ref_t org_apache_arrow_flatbuf_Utf8_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Utf8_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Utf8, org_apache_arrow_flatbuf_Utf8_file_identifier, org_apache_arrow_flatbuf_Utf8_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Binary_formal_args 
+#define __org_apache_arrow_flatbuf_Binary_call_args 
+static inline org_apache_arrow_flatbuf_Binary_ref_t org_apache_arrow_flatbuf_Binary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Binary_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Binary, org_apache_arrow_flatbuf_Binary_file_identifier, org_apache_arrow_flatbuf_Binary_type_identifier)
+
+#define __org_apache_arrow_flatbuf_LargeUtf8_formal_args 
+#define __org_apache_arrow_flatbuf_LargeUtf8_call_args 
+static inline org_apache_arrow_flatbuf_LargeUtf8_ref_t org_apache_arrow_flatbuf_LargeUtf8_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeUtf8_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_LargeUtf8, org_apache_arrow_flatbuf_LargeUtf8_file_identifier, org_apache_arrow_flatbuf_LargeUtf8_type_identifier)
+
+#define __org_apache_arrow_flatbuf_LargeBinary_formal_args 
+#define __org_apache_arrow_flatbuf_LargeBinary_call_args 
+static inline org_apache_arrow_flatbuf_LargeBinary_ref_t org_apache_arrow_flatbuf_LargeBinary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeBinary_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_LargeBinary, org_apache_arrow_flatbuf_LargeBinary_file_identifier, org_apache_arrow_flatbuf_LargeBinary_type_identifier)
+
+#define __org_apache_arrow_flatbuf_FixedSizeBinary_formal_args , int32_t v0
+#define __org_apache_arrow_flatbuf_FixedSizeBinary_call_args , v0
+static inline org_apache_arrow_flatbuf_FixedSizeBinary_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FixedSizeBinary_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeBinary, org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier, org_apache_arrow_flatbuf_FixedSizeBinary_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Bool_formal_args 
+#define __org_apache_arrow_flatbuf_Bool_call_args 
+static inline org_apache_arrow_flatbuf_Bool_ref_t org_apache_arrow_flatbuf_Bool_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Bool_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Bool, org_apache_arrow_flatbuf_Bool_file_identifier, org_apache_arrow_flatbuf_Bool_type_identifier)
+
+#define __org_apache_arrow_flatbuf_RunEndEncoded_formal_args 
+#define __org_apache_arrow_flatbuf_RunEndEncoded_call_args 
+static inline org_apache_arrow_flatbuf_RunEndEncoded_ref_t org_apache_arrow_flatbuf_RunEndEncoded_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_RunEndEncoded_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_RunEndEncoded, org_apache_arrow_flatbuf_RunEndEncoded_file_identifier, org_apache_arrow_flatbuf_RunEndEncoded_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Decimal_formal_args , int32_t v0, int32_t v1, int32_t v2
+#define __org_apache_arrow_flatbuf_Decimal_call_args , v0, v1, v2
+static inline org_apache_arrow_flatbuf_Decimal_ref_t org_apache_arrow_flatbuf_Decimal_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Decimal_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Decimal, org_apache_arrow_flatbuf_Decimal_file_identifier, org_apache_arrow_flatbuf_Decimal_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Date_formal_args , org_apache_arrow_flatbuf_DateUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_Date_call_args , v0
+static inline org_apache_arrow_flatbuf_Date_ref_t org_apache_arrow_flatbuf_Date_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Date_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Date, org_apache_arrow_flatbuf_Date_file_identifier, org_apache_arrow_flatbuf_Date_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Time_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0, int32_t v1
+#define __org_apache_arrow_flatbuf_Time_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Time_ref_t org_apache_arrow_flatbuf_Time_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Time_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Time, org_apache_arrow_flatbuf_Time_file_identifier, org_apache_arrow_flatbuf_Time_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Timestamp_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0, flatbuffers_string_ref_t v1
+#define __org_apache_arrow_flatbuf_Timestamp_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Timestamp_ref_t org_apache_arrow_flatbuf_Timestamp_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Timestamp_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Timestamp, org_apache_arrow_flatbuf_Timestamp_file_identifier, org_apache_arrow_flatbuf_Timestamp_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Interval_formal_args , org_apache_arrow_flatbuf_IntervalUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_Interval_call_args , v0
+static inline org_apache_arrow_flatbuf_Interval_ref_t org_apache_arrow_flatbuf_Interval_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Interval_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Interval, org_apache_arrow_flatbuf_Interval_file_identifier, org_apache_arrow_flatbuf_Interval_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Duration_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_Duration_call_args , v0
+static inline org_apache_arrow_flatbuf_Duration_ref_t org_apache_arrow_flatbuf_Duration_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Duration_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Duration, org_apache_arrow_flatbuf_Duration_file_identifier, org_apache_arrow_flatbuf_Duration_type_identifier)
+
+#define __org_apache_arrow_flatbuf_KeyValue_formal_args , flatbuffers_string_ref_t v0, flatbuffers_string_ref_t v1
+#define __org_apache_arrow_flatbuf_KeyValue_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_KeyValue_ref_t org_apache_arrow_flatbuf_KeyValue_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_KeyValue_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_KeyValue, org_apache_arrow_flatbuf_KeyValue_file_identifier, org_apache_arrow_flatbuf_KeyValue_type_identifier)
+
+#define __org_apache_arrow_flatbuf_DictionaryEncoding_formal_args , int64_t v0, org_apache_arrow_flatbuf_Int_ref_t v1, flatbuffers_bool_t v2, org_apache_arrow_flatbuf_DictionaryKind_enum_t v3
+#define __org_apache_arrow_flatbuf_DictionaryEncoding_call_args , v0, v1, v2, v3
+static inline org_apache_arrow_flatbuf_DictionaryEncoding_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_DictionaryEncoding_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding, org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier, org_apache_arrow_flatbuf_DictionaryEncoding_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Field_formal_args ,\
+  flatbuffers_string_ref_t v0, flatbuffers_bool_t v1, org_apache_arrow_flatbuf_Type_union_ref_t v3, org_apache_arrow_flatbuf_DictionaryEncoding_ref_t v4, org_apache_arrow_flatbuf_Field_vec_ref_t v5, org_apache_arrow_flatbuf_KeyValue_vec_ref_t v6
+#define __org_apache_arrow_flatbuf_Field_call_args ,\
+  v0, v1, v3, v4, v5, v6
+static inline org_apache_arrow_flatbuf_Field_ref_t org_apache_arrow_flatbuf_Field_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Field_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Field, org_apache_arrow_flatbuf_Field_file_identifier, org_apache_arrow_flatbuf_Field_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Schema_formal_args , org_apache_arrow_flatbuf_Endianness_enum_t v0, org_apache_arrow_flatbuf_Field_vec_ref_t v1, org_apache_arrow_flatbuf_KeyValue_vec_ref_t v2, org_apache_arrow_flatbuf_Feature_vec_ref_t v3
+#define __org_apache_arrow_flatbuf_Schema_call_args , v0, v1, v2, v3
+static inline org_apache_arrow_flatbuf_Schema_ref_t org_apache_arrow_flatbuf_Schema_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Schema_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Schema, org_apache_arrow_flatbuf_Schema_file_identifier, org_apache_arrow_flatbuf_Schema_type_identifier)
+
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_NONE(void)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_NONE; uref.value = 0; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Null(org_apache_arrow_flatbuf_Null_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Null; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Int(org_apache_arrow_flatbuf_Int_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Int; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_FloatingPoint(org_apache_arrow_flatbuf_FloatingPoint_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_FloatingPoint; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Binary(org_apache_arrow_flatbuf_Binary_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Binary; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Utf8(org_apache_arrow_flatbuf_Utf8_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Utf8; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Bool(org_apache_arrow_flatbuf_Bool_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Bool; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Decimal(org_apache_arrow_flatbuf_Decimal_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Decimal; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Date(org_apache_arrow_flatbuf_Date_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Date; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Time(org_apache_arrow_flatbuf_Time_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Time; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Timestamp(org_apache_arrow_flatbuf_Timestamp_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Timestamp; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Interval(org_apache_arrow_flatbuf_Interval_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Interval; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_List(org_apache_arrow_flatbuf_List_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_List; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Struct_(org_apache_arrow_flatbuf_Struct__ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Struct_; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Union(org_apache_arrow_flatbuf_Union_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Union; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_FixedSizeBinary(org_apache_arrow_flatbuf_FixedSizeBinary_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_FixedSizeBinary; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_FixedSizeList(org_apache_arrow_flatbuf_FixedSizeList_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_FixedSizeList; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Map(org_apache_arrow_flatbuf_Map_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Map; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Duration(org_apache_arrow_flatbuf_Duration_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Duration; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_LargeBinary(org_apache_arrow_flatbuf_LargeBinary_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_LargeBinary; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_LargeUtf8(org_apache_arrow_flatbuf_LargeUtf8_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_LargeUtf8; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_LargeList(org_apache_arrow_flatbuf_LargeList_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_LargeList; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_RunEndEncoded(org_apache_arrow_flatbuf_RunEndEncoded_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_RunEndEncoded; uref.value = ref; return uref; }
+__flatbuffers_build_union_vector(flatbuffers_, org_apache_arrow_flatbuf_Type)
+
+static org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Type_union_t u)
+{
+    switch (u.type) {
+    case 1: return org_apache_arrow_flatbuf_Type_as_Null(org_apache_arrow_flatbuf_Null_clone(B, (org_apache_arrow_flatbuf_Null_table_t)u.value));
+    case 2: return org_apache_arrow_flatbuf_Type_as_Int(org_apache_arrow_flatbuf_Int_clone(B, (org_apache_arrow_flatbuf_Int_table_t)u.value));
+    case 3: return org_apache_arrow_flatbuf_Type_as_FloatingPoint(org_apache_arrow_flatbuf_FloatingPoint_clone(B, (org_apache_arrow_flatbuf_FloatingPoint_table_t)u.value));
+    case 4: return org_apache_arrow_flatbuf_Type_as_Binary(org_apache_arrow_flatbuf_Binary_clone(B, (org_apache_arrow_flatbuf_Binary_table_t)u.value));
+    case 5: return org_apache_arrow_flatbuf_Type_as_Utf8(org_apache_arrow_flatbuf_Utf8_clone(B, (org_apache_arrow_flatbuf_Utf8_table_t)u.value));
+    case 6: return org_apache_arrow_flatbuf_Type_as_Bool(org_apache_arrow_flatbuf_Bool_clone(B, (org_apache_arrow_flatbuf_Bool_table_t)u.value));
+    case 7: return org_apache_arrow_flatbuf_Type_as_Decimal(org_apache_arrow_flatbuf_Decimal_clone(B, (org_apache_arrow_flatbuf_Decimal_table_t)u.value));
+    case 8: return org_apache_arrow_flatbuf_Type_as_Date(org_apache_arrow_flatbuf_Date_clone(B, (org_apache_arrow_flatbuf_Date_table_t)u.value));
+    case 9: return org_apache_arrow_flatbuf_Type_as_Time(org_apache_arrow_flatbuf_Time_clone(B, (org_apache_arrow_flatbuf_Time_table_t)u.value));
+    case 10: return org_apache_arrow_flatbuf_Type_as_Timestamp(org_apache_arrow_flatbuf_Timestamp_clone(B, (org_apache_arrow_flatbuf_Timestamp_table_t)u.value));
+    case 11: return org_apache_arrow_flatbuf_Type_as_Interval(org_apache_arrow_flatbuf_Interval_clone(B, (org_apache_arrow_flatbuf_Interval_table_t)u.value));
+    case 12: return org_apache_arrow_flatbuf_Type_as_List(org_apache_arrow_flatbuf_List_clone(B, (org_apache_arrow_flatbuf_List_table_t)u.value));
+    case 13: return org_apache_arrow_flatbuf_Type_as_Struct_(org_apache_arrow_flatbuf_Struct__clone(B, (org_apache_arrow_flatbuf_Struct__table_t)u.value));
+    case 14: return org_apache_arrow_flatbuf_Type_as_Union(org_apache_arrow_flatbuf_Union_clone(B, (org_apache_arrow_flatbuf_Union_table_t)u.value));
+    case 15: return org_apache_arrow_flatbuf_Type_as_FixedSizeBinary(org_apache_arrow_flatbuf_FixedSizeBinary_clone(B, (org_apache_arrow_flatbuf_FixedSizeBinary_table_t)u.value));
+    case 16: return org_apache_arrow_flatbuf_Type_as_FixedSizeList(org_apache_arrow_flatbuf_FixedSizeList_clone(B, (org_apache_arrow_flatbuf_FixedSizeList_table_t)u.value));
+    case 17: return org_apache_arrow_flatbuf_Type_as_Map(org_apache_arrow_flatbuf_Map_clone(B, (org_apache_arrow_flatbuf_Map_table_t)u.value));
+    case 18: return org_apache_arrow_flatbuf_Type_as_Duration(org_apache_arrow_flatbuf_Duration_clone(B, (org_apache_arrow_flatbuf_Duration_table_t)u.value));
+    case 19: return org_apache_arrow_flatbuf_Type_as_LargeBinary(org_apache_arrow_flatbuf_LargeBinary_clone(B, (org_apache_arrow_flatbuf_LargeBinary_table_t)u.value));
+    case 20: return org_apache_arrow_flatbuf_Type_as_LargeUtf8(org_apache_arrow_flatbuf_LargeUtf8_clone(B, (org_apache_arrow_flatbuf_LargeUtf8_table_t)u.value));
+    case 21: return org_apache_arrow_flatbuf_Type_as_LargeList(org_apache_arrow_flatbuf_LargeList_clone(B, (org_apache_arrow_flatbuf_LargeList_table_t)u.value));
+    case 22: return org_apache_arrow_flatbuf_Type_as_RunEndEncoded(org_apache_arrow_flatbuf_RunEndEncoded_clone(B, (org_apache_arrow_flatbuf_RunEndEncoded_table_t)u.value));
+    default: return org_apache_arrow_flatbuf_Type_as_NONE();
+    }
+}
+
+
+static inline org_apache_arrow_flatbuf_Null_ref_t org_apache_arrow_flatbuf_Null_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Null_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Null_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Null_end(B);
+}
+
+static org_apache_arrow_flatbuf_Null_ref_t org_apache_arrow_flatbuf_Null_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Null_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Null_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Null_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_Struct__ref_t org_apache_arrow_flatbuf_Struct__create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Struct__formal_args)
+{
+    if (org_apache_arrow_flatbuf_Struct__start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Struct__end(B);
+}
+
+static org_apache_arrow_flatbuf_Struct__ref_t org_apache_arrow_flatbuf_Struct__clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Struct__table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Struct__start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Struct__end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_List_ref_t org_apache_arrow_flatbuf_List_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_List_formal_args)
+{
+    if (org_apache_arrow_flatbuf_List_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_List_end(B);
+}
+
+static org_apache_arrow_flatbuf_List_ref_t org_apache_arrow_flatbuf_List_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_List_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_List_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_List_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_LargeList_ref_t org_apache_arrow_flatbuf_LargeList_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeList_formal_args)
+{
+    if (org_apache_arrow_flatbuf_LargeList_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_LargeList_end(B);
+}
+
+static org_apache_arrow_flatbuf_LargeList_ref_t org_apache_arrow_flatbuf_LargeList_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeList_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_LargeList_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_LargeList_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_FixedSizeList_listSize, flatbuffers_int32, int32_t, 4, 4, INT32_C(0), org_apache_arrow_flatbuf_FixedSizeList)
+
+static inline org_apache_arrow_flatbuf_FixedSizeList_ref_t org_apache_arrow_flatbuf_FixedSizeList_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FixedSizeList_formal_args)
+{
+    if (org_apache_arrow_flatbuf_FixedSizeList_start(B)
+        || org_apache_arrow_flatbuf_FixedSizeList_listSize_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_FixedSizeList_end(B);
+}
+
+static org_apache_arrow_flatbuf_FixedSizeList_ref_t org_apache_arrow_flatbuf_FixedSizeList_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FixedSizeList_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_FixedSizeList_start(B)
+        || org_apache_arrow_flatbuf_FixedSizeList_listSize_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_FixedSizeList_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Map_keysSorted, flatbuffers_bool, flatbuffers_bool_t, 1, 1, UINT8_C(0), org_apache_arrow_flatbuf_Map)
+
+static inline org_apache_arrow_flatbuf_Map_ref_t org_apache_arrow_flatbuf_Map_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Map_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Map_start(B)
+        || org_apache_arrow_flatbuf_Map_keysSorted_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Map_end(B);
+}
+
+static org_apache_arrow_flatbuf_Map_ref_t org_apache_arrow_flatbuf_Map_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Map_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Map_start(B)
+        || org_apache_arrow_flatbuf_Map_keysSorted_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Map_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Union_mode, org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_Union)
+__flatbuffers_build_vector_field(1, flatbuffers_, org_apache_arrow_flatbuf_Union_typeIds, flatbuffers_int32, int32_t, org_apache_arrow_flatbuf_Union)
+
+static inline org_apache_arrow_flatbuf_Union_ref_t org_apache_arrow_flatbuf_Union_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Union_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Union_start(B)
+        || org_apache_arrow_flatbuf_Union_typeIds_add(B, v1)
+        || org_apache_arrow_flatbuf_Union_mode_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Union_end(B);
+}
+
+static org_apache_arrow_flatbuf_Union_ref_t org_apache_arrow_flatbuf_Union_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Union_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Union_start(B)
+        || org_apache_arrow_flatbuf_Union_typeIds_pick(B, t)
+        || org_apache_arrow_flatbuf_Union_mode_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Union_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Int_bitWidth, flatbuffers_int32, int32_t, 4, 4, INT32_C(0), org_apache_arrow_flatbuf_Int)
+__flatbuffers_build_scalar_field(1, flatbuffers_, org_apache_arrow_flatbuf_Int_is_signed, flatbuffers_bool, flatbuffers_bool_t, 1, 1, UINT8_C(0), org_apache_arrow_flatbuf_Int)
+
+static inline org_apache_arrow_flatbuf_Int_ref_t org_apache_arrow_flatbuf_Int_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Int_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Int_start(B)
+        || org_apache_arrow_flatbuf_Int_bitWidth_add(B, v0)
+        || org_apache_arrow_flatbuf_Int_is_signed_add(B, v1)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Int_end(B);
+}
+
+static org_apache_arrow_flatbuf_Int_ref_t org_apache_arrow_flatbuf_Int_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Int_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Int_start(B)
+        || org_apache_arrow_flatbuf_Int_bitWidth_pick(B, t)
+        || org_apache_arrow_flatbuf_Int_is_signed_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Int_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_FloatingPoint_precision, org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_FloatingPoint)
+
+static inline org_apache_arrow_flatbuf_FloatingPoint_ref_t org_apache_arrow_flatbuf_FloatingPoint_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FloatingPoint_formal_args)
+{
+    if (org_apache_arrow_flatbuf_FloatingPoint_start(B)
+        || org_apache_arrow_flatbuf_FloatingPoint_precision_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_FloatingPoint_end(B);
+}
+
+static org_apache_arrow_flatbuf_FloatingPoint_ref_t org_apache_arrow_flatbuf_FloatingPoint_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FloatingPoint_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_FloatingPoint_start(B)
+        || org_apache_arrow_flatbuf_FloatingPoint_precision_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_FloatingPoint_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_Utf8_ref_t org_apache_arrow_flatbuf_Utf8_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Utf8_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Utf8_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Utf8_end(B);
+}
+
+static org_apache_arrow_flatbuf_Utf8_ref_t org_apache_arrow_flatbuf_Utf8_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Utf8_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Utf8_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Utf8_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_Binary_ref_t org_apache_arrow_flatbuf_Binary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Binary_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Binary_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Binary_end(B);
+}
+
+static org_apache_arrow_flatbuf_Binary_ref_t org_apache_arrow_flatbuf_Binary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Binary_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Binary_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Binary_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_LargeUtf8_ref_t org_apache_arrow_flatbuf_LargeUtf8_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeUtf8_formal_args)
+{
+    if (org_apache_arrow_flatbuf_LargeUtf8_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_LargeUtf8_end(B);
+}
+
+static org_apache_arrow_flatbuf_LargeUtf8_ref_t org_apache_arrow_flatbuf_LargeUtf8_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeUtf8_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_LargeUtf8_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_LargeUtf8_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_LargeBinary_ref_t org_apache_arrow_flatbuf_LargeBinary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeBinary_formal_args)
+{
+    if (org_apache_arrow_flatbuf_LargeBinary_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_LargeBinary_end(B);
+}
+
+static org_apache_arrow_flatbuf_LargeBinary_ref_t org_apache_arrow_flatbuf_LargeBinary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeBinary_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_LargeBinary_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_LargeBinary_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_FixedSizeBinary_byteWidth, flatbuffers_int32, int32_t, 4, 4, INT32_C(0), org_apache_arrow_flatbuf_FixedSizeBinary)
+
+static inline org_apache_arrow_flatbuf_FixedSizeBinary_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FixedSizeBinary_formal_args)
+{
+    if (org_apache_arrow_flatbuf_FixedSizeBinary_start(B)
+        || org_apache_arrow_flatbuf_FixedSizeBinary_byteWidth_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_FixedSizeBinary_end(B);
+}
+
+static org_apache_arrow_flatbuf_FixedSizeBinary_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FixedSizeBinary_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_FixedSizeBinary_start(B)
+        || org_apache_arrow_flatbuf_FixedSizeBinary_byteWidth_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_FixedSizeBinary_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_Bool_ref_t org_apache_arrow_flatbuf_Bool_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Bool_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Bool_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Bool_end(B);
+}
+
+static org_apache_arrow_flatbuf_Bool_ref_t org_apache_arrow_flatbuf_Bool_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Bool_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Bool_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Bool_end(B));
+}
+
+
+static inline org_apache_arrow_flatbuf_RunEndEncoded_ref_t org_apache_arrow_flatbuf_RunEndEncoded_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_RunEndEncoded_formal_args)
+{
+    if (org_apache_arrow_flatbuf_RunEndEncoded_start(B)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_RunEndEncoded_end(B);
+}
+
+static org_apache_arrow_flatbuf_RunEndEncoded_ref_t org_apache_arrow_flatbuf_RunEndEncoded_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_RunEndEncoded_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_RunEndEncoded_start(B)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_RunEndEncoded_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Decimal_precision, flatbuffers_int32, int32_t, 4, 4, INT32_C(0), org_apache_arrow_flatbuf_Decimal)
+__flatbuffers_build_scalar_field(1, flatbuffers_, org_apache_arrow_flatbuf_Decimal_scale, flatbuffers_int32, int32_t, 4, 4, INT32_C(0), org_apache_arrow_flatbuf_Decimal)
+__flatbuffers_build_scalar_field(2, flatbuffers_, org_apache_arrow_flatbuf_Decimal_bitWidth, flatbuffers_int32, int32_t, 4, 4, INT32_C(128), org_apache_arrow_flatbuf_Decimal)
+
+static inline org_apache_arrow_flatbuf_Decimal_ref_t org_apache_arrow_flatbuf_Decimal_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Decimal_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Decimal_start(B)
+        || org_apache_arrow_flatbuf_Decimal_precision_add(B, v0)
+        || org_apache_arrow_flatbuf_Decimal_scale_add(B, v1)
+        || org_apache_arrow_flatbuf_Decimal_bitWidth_add(B, v2)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Decimal_end(B);
+}
+
+static org_apache_arrow_flatbuf_Decimal_ref_t org_apache_arrow_flatbuf_Decimal_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Decimal_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Decimal_start(B)
+        || org_apache_arrow_flatbuf_Decimal_precision_pick(B, t)
+        || org_apache_arrow_flatbuf_Decimal_scale_pick(B, t)
+        || org_apache_arrow_flatbuf_Decimal_bitWidth_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Decimal_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Date_unit, org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t, 2, 2, INT16_C(1), org_apache_arrow_flatbuf_Date)
+
+static inline org_apache_arrow_flatbuf_Date_ref_t org_apache_arrow_flatbuf_Date_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Date_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Date_start(B)
+        || org_apache_arrow_flatbuf_Date_unit_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Date_end(B);
+}
+
+static org_apache_arrow_flatbuf_Date_ref_t org_apache_arrow_flatbuf_Date_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Date_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Date_start(B)
+        || org_apache_arrow_flatbuf_Date_unit_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Date_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Time_unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, 2, 2, INT16_C(1), org_apache_arrow_flatbuf_Time)
+__flatbuffers_build_scalar_field(1, flatbuffers_, org_apache_arrow_flatbuf_Time_bitWidth, flatbuffers_int32, int32_t, 4, 4, INT32_C(32), org_apache_arrow_flatbuf_Time)
+
+static inline org_apache_arrow_flatbuf_Time_ref_t org_apache_arrow_flatbuf_Time_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Time_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Time_start(B)
+        || org_apache_arrow_flatbuf_Time_bitWidth_add(B, v1)
+        || org_apache_arrow_flatbuf_Time_unit_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Time_end(B);
+}
+
+static org_apache_arrow_flatbuf_Time_ref_t org_apache_arrow_flatbuf_Time_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Time_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Time_start(B)
+        || org_apache_arrow_flatbuf_Time_bitWidth_pick(B, t)
+        || org_apache_arrow_flatbuf_Time_unit_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Time_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Timestamp_unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_Timestamp)
+__flatbuffers_build_string_field(1, flatbuffers_, org_apache_arrow_flatbuf_Timestamp_timezone, org_apache_arrow_flatbuf_Timestamp)
+
+static inline org_apache_arrow_flatbuf_Timestamp_ref_t org_apache_arrow_flatbuf_Timestamp_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Timestamp_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Timestamp_start(B)
+        || org_apache_arrow_flatbuf_Timestamp_timezone_add(B, v1)
+        || org_apache_arrow_flatbuf_Timestamp_unit_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Timestamp_end(B);
+}
+
+static org_apache_arrow_flatbuf_Timestamp_ref_t org_apache_arrow_flatbuf_Timestamp_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Timestamp_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Timestamp_start(B)
+        || org_apache_arrow_flatbuf_Timestamp_timezone_pick(B, t)
+        || org_apache_arrow_flatbuf_Timestamp_unit_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Timestamp_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Interval_unit, org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_Interval)
+
+static inline org_apache_arrow_flatbuf_Interval_ref_t org_apache_arrow_flatbuf_Interval_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Interval_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Interval_start(B)
+        || org_apache_arrow_flatbuf_Interval_unit_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Interval_end(B);
+}
+
+static org_apache_arrow_flatbuf_Interval_ref_t org_apache_arrow_flatbuf_Interval_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Interval_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Interval_start(B)
+        || org_apache_arrow_flatbuf_Interval_unit_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Interval_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Duration_unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, 2, 2, INT16_C(1), org_apache_arrow_flatbuf_Duration)
+
+static inline org_apache_arrow_flatbuf_Duration_ref_t org_apache_arrow_flatbuf_Duration_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Duration_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Duration_start(B)
+        || org_apache_arrow_flatbuf_Duration_unit_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Duration_end(B);
+}
+
+static org_apache_arrow_flatbuf_Duration_ref_t org_apache_arrow_flatbuf_Duration_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Duration_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Duration_start(B)
+        || org_apache_arrow_flatbuf_Duration_unit_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Duration_end(B));
+}
+
+__flatbuffers_build_string_field(0, flatbuffers_, org_apache_arrow_flatbuf_KeyValue_key, org_apache_arrow_flatbuf_KeyValue)
+__flatbuffers_build_string_field(1, flatbuffers_, org_apache_arrow_flatbuf_KeyValue_value, org_apache_arrow_flatbuf_KeyValue)
+
+static inline org_apache_arrow_flatbuf_KeyValue_ref_t org_apache_arrow_flatbuf_KeyValue_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_KeyValue_formal_args)
+{
+    if (org_apache_arrow_flatbuf_KeyValue_start(B)
+        || org_apache_arrow_flatbuf_KeyValue_key_add(B, v0)
+        || org_apache_arrow_flatbuf_KeyValue_value_add(B, v1)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_KeyValue_end(B);
+}
+
+static org_apache_arrow_flatbuf_KeyValue_ref_t org_apache_arrow_flatbuf_KeyValue_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_KeyValue_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_KeyValue_start(B)
+        || org_apache_arrow_flatbuf_KeyValue_key_pick(B, t)
+        || org_apache_arrow_flatbuf_KeyValue_value_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_KeyValue_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding_id, flatbuffers_int64, int64_t, 8, 8, INT64_C(0), org_apache_arrow_flatbuf_DictionaryEncoding)
+__flatbuffers_build_table_field(1, flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding_indexType, org_apache_arrow_flatbuf_Int, org_apache_arrow_flatbuf_DictionaryEncoding)
+__flatbuffers_build_scalar_field(2, flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding_isOrdered, flatbuffers_bool, flatbuffers_bool_t, 1, 1, UINT8_C(0), org_apache_arrow_flatbuf_DictionaryEncoding)
+__flatbuffers_build_scalar_field(3, flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding_dictionaryKind, org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_DictionaryEncoding)
+
+static inline org_apache_arrow_flatbuf_DictionaryEncoding_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_DictionaryEncoding_formal_args)
+{
+    if (org_apache_arrow_flatbuf_DictionaryEncoding_start(B)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_id_add(B, v0)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_indexType_add(B, v1)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_dictionaryKind_add(B, v3)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_isOrdered_add(B, v2)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_DictionaryEncoding_end(B);
+}
+
+static org_apache_arrow_flatbuf_DictionaryEncoding_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_DictionaryEncoding_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_DictionaryEncoding_start(B)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_id_pick(B, t)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_indexType_pick(B, t)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_dictionaryKind_pick(B, t)
+        || org_apache_arrow_flatbuf_DictionaryEncoding_isOrdered_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_DictionaryEncoding_end(B));
+}
+
+__flatbuffers_build_string_field(0, flatbuffers_, org_apache_arrow_flatbuf_Field_name, org_apache_arrow_flatbuf_Field)
+__flatbuffers_build_scalar_field(1, flatbuffers_, org_apache_arrow_flatbuf_Field_nullable, flatbuffers_bool, flatbuffers_bool_t, 1, 1, UINT8_C(0), org_apache_arrow_flatbuf_Field)
+__flatbuffers_build_union_field(3, flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, org_apache_arrow_flatbuf_Field)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Null, org_apache_arrow_flatbuf_Null)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Int, org_apache_arrow_flatbuf_Int)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, FloatingPoint, org_apache_arrow_flatbuf_FloatingPoint)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Binary, org_apache_arrow_flatbuf_Binary)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Utf8, org_apache_arrow_flatbuf_Utf8)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Bool, org_apache_arrow_flatbuf_Bool)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Decimal, org_apache_arrow_flatbuf_Decimal)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Date, org_apache_arrow_flatbuf_Date)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Time, org_apache_arrow_flatbuf_Time)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Timestamp, org_apache_arrow_flatbuf_Timestamp)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Interval, org_apache_arrow_flatbuf_Interval)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, List, org_apache_arrow_flatbuf_List)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Struct_, org_apache_arrow_flatbuf_Struct_)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Union, org_apache_arrow_flatbuf_Union)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, FixedSizeBinary, org_apache_arrow_flatbuf_FixedSizeBinary)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, FixedSizeList, org_apache_arrow_flatbuf_FixedSizeList)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Map, org_apache_arrow_flatbuf_Map)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, Duration, org_apache_arrow_flatbuf_Duration)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, LargeBinary, org_apache_arrow_flatbuf_LargeBinary)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, LargeUtf8, org_apache_arrow_flatbuf_LargeUtf8)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, LargeList, org_apache_arrow_flatbuf_LargeList)
+__flatbuffers_build_union_table_value_field(flatbuffers_, org_apache_arrow_flatbuf_Field_type, org_apache_arrow_flatbuf_Type, RunEndEncoded, org_apache_arrow_flatbuf_RunEndEncoded)
+__flatbuffers_build_table_field(4, flatbuffers_, org_apache_arrow_flatbuf_Field_dictionary, org_apache_arrow_flatbuf_DictionaryEncoding, org_apache_arrow_flatbuf_Field)
+__flatbuffers_build_table_vector_field(5, flatbuffers_, org_apache_arrow_flatbuf_Field_children, org_apache_arrow_flatbuf_Field, org_apache_arrow_flatbuf_Field)
+__flatbuffers_build_table_vector_field(6, flatbuffers_, org_apache_arrow_flatbuf_Field_custom_metadata, org_apache_arrow_flatbuf_KeyValue, org_apache_arrow_flatbuf_Field)
+
+static inline org_apache_arrow_flatbuf_Field_ref_t org_apache_arrow_flatbuf_Field_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Field_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Field_start(B)
+        || org_apache_arrow_flatbuf_Field_name_add(B, v0)
+        || org_apache_arrow_flatbuf_Field_type_add_value(B, v3)
+        || org_apache_arrow_flatbuf_Field_dictionary_add(B, v4)
+        || org_apache_arrow_flatbuf_Field_children_add(B, v5)
+        || org_apache_arrow_flatbuf_Field_custom_metadata_add(B, v6)
+        || org_apache_arrow_flatbuf_Field_nullable_add(B, v1)
+        || org_apache_arrow_flatbuf_Field_type_add_type(B, v3.type)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Field_end(B);
+}
+
+static org_apache_arrow_flatbuf_Field_ref_t org_apache_arrow_flatbuf_Field_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Field_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Field_start(B)
+        || org_apache_arrow_flatbuf_Field_name_pick(B, t)
+        || org_apache_arrow_flatbuf_Field_type_pick(B, t)
+        || org_apache_arrow_flatbuf_Field_dictionary_pick(B, t)
+        || org_apache_arrow_flatbuf_Field_children_pick(B, t)
+        || org_apache_arrow_flatbuf_Field_custom_metadata_pick(B, t)
+        || org_apache_arrow_flatbuf_Field_nullable_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Field_end(B));
+}
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Schema_endianness, org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_Schema)
+__flatbuffers_build_table_vector_field(1, flatbuffers_, org_apache_arrow_flatbuf_Schema_fields, org_apache_arrow_flatbuf_Field, org_apache_arrow_flatbuf_Schema)
+__flatbuffers_build_table_vector_field(2, flatbuffers_, org_apache_arrow_flatbuf_Schema_custom_metadata, org_apache_arrow_flatbuf_KeyValue, org_apache_arrow_flatbuf_Schema)
+__flatbuffers_build_vector_field(3, flatbuffers_, org_apache_arrow_flatbuf_Schema_features, org_apache_arrow_flatbuf_Feature, org_apache_arrow_flatbuf_Feature_enum_t, org_apache_arrow_flatbuf_Schema)
+
+static inline org_apache_arrow_flatbuf_Schema_ref_t org_apache_arrow_flatbuf_Schema_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Schema_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Schema_start(B)
+        || org_apache_arrow_flatbuf_Schema_fields_add(B, v1)
+        || org_apache_arrow_flatbuf_Schema_custom_metadata_add(B, v2)
+        || org_apache_arrow_flatbuf_Schema_features_add(B, v3)
+        || org_apache_arrow_flatbuf_Schema_endianness_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Schema_end(B);
+}
+
+static org_apache_arrow_flatbuf_Schema_ref_t org_apache_arrow_flatbuf_Schema_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Schema_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Schema_start(B)
+        || org_apache_arrow_flatbuf_Schema_fields_pick(B, t)
+        || org_apache_arrow_flatbuf_Schema_custom_metadata_pick(B, t)
+        || org_apache_arrow_flatbuf_Schema_features_pick(B, t)
+        || org_apache_arrow_flatbuf_Schema_endianness_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Schema_end(B));
+}
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* SCHEMA_BUILDER_H */
+#ifndef SCHEMA_VERIFIER_H
+#define SCHEMA_VERIFIER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef SCHEMA_READER_H
+#include "Schema_reader.h"
+#endif
+#include "flatcc/flatcc_verifier.h"
+#include "flatcc/flatcc_prologue.h"
+
+static int org_apache_arrow_flatbuf_Null_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Struct__verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_List_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_LargeList_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_FixedSizeList_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Map_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Union_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Int_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_FloatingPoint_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Utf8_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Binary_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_LargeUtf8_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_LargeBinary_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_FixedSizeBinary_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Bool_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_RunEndEncoded_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Decimal_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Date_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Time_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Timestamp_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Interval_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Duration_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_KeyValue_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_DictionaryEncoding_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Field_verify_table(flatcc_table_verifier_descriptor_t *td);
+static int org_apache_arrow_flatbuf_Schema_verify_table(flatcc_table_verifier_descriptor_t *td);
+
+static int org_apache_arrow_flatbuf_Type_union_verifier(flatcc_union_verifier_descriptor_t *ud)
+{
+    switch (ud->type) {
+    case 1: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Null_verify_table); /* Null */
+    case 2: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Int_verify_table); /* Int */
+    case 3: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_FloatingPoint_verify_table); /* FloatingPoint */
+    case 4: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Binary_verify_table); /* Binary */
+    case 5: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Utf8_verify_table); /* Utf8 */
+    case 6: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Bool_verify_table); /* Bool */
+    case 7: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Decimal_verify_table); /* Decimal */
+    case 8: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Date_verify_table); /* Date */
+    case 9: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Time_verify_table); /* Time */
+    case 10: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Timestamp_verify_table); /* Timestamp */
+    case 11: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Interval_verify_table); /* Interval */
+    case 12: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_List_verify_table); /* List */
+    case 13: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Struct__verify_table); /* Struct_ */
+    case 14: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Union_verify_table); /* Union */
+    case 15: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_FixedSizeBinary_verify_table); /* FixedSizeBinary */
+    case 16: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_FixedSizeList_verify_table); /* FixedSizeList */
+    case 17: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Map_verify_table); /* Map */
+    case 18: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_Duration_verify_table); /* Duration */
+    case 19: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_LargeBinary_verify_table); /* LargeBinary */
+    case 20: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_LargeUtf8_verify_table); /* LargeUtf8 */
+    case 21: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_LargeList_verify_table); /* LargeList */
+    case 22: return flatcc_verify_union_table(ud, org_apache_arrow_flatbuf_RunEndEncoded_verify_table); /* RunEndEncoded */
+    default: return flatcc_verify_ok;
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Buffer_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_struct_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Buffer_identifier, 16, 8);
+}
+
+static inline int org_apache_arrow_flatbuf_Buffer_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_struct_as_typed_root(buf, bufsiz, org_apache_arrow_flatbuf_Buffer_type_hash, 16, 8);
+}
+
+static inline int org_apache_arrow_flatbuf_Buffer_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_struct_as_typed_root(buf, bufsiz, thash, 16, 8);
+}
+
+static inline int org_apache_arrow_flatbuf_Buffer_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_struct_as_root(buf, bufsiz, fid, 16, 8);
+}
+
+static int org_apache_arrow_flatbuf_Null_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Null_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Null_identifier, &org_apache_arrow_flatbuf_Null_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Null_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Null_type_identifier, &org_apache_arrow_flatbuf_Null_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Null_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Null_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Null_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Null_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Struct__verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Struct__verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Struct__identifier, &org_apache_arrow_flatbuf_Struct__verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Struct__verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Struct__type_identifier, &org_apache_arrow_flatbuf_Struct__verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Struct__verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Struct__verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Struct__verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Struct__verify_table);
+}
+
+static int org_apache_arrow_flatbuf_List_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_List_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_List_identifier, &org_apache_arrow_flatbuf_List_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_List_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_List_type_identifier, &org_apache_arrow_flatbuf_List_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_List_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_List_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_List_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_List_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_LargeList_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_LargeList_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_LargeList_identifier, &org_apache_arrow_flatbuf_LargeList_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeList_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_LargeList_type_identifier, &org_apache_arrow_flatbuf_LargeList_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeList_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_LargeList_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeList_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_LargeList_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_FixedSizeList_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 4, 4) /* listSize */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeList_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_FixedSizeList_identifier, &org_apache_arrow_flatbuf_FixedSizeList_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeList_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_FixedSizeList_type_identifier, &org_apache_arrow_flatbuf_FixedSizeList_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeList_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_FixedSizeList_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeList_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_FixedSizeList_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Map_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 1, 1) /* keysSorted */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Map_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Map_identifier, &org_apache_arrow_flatbuf_Map_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Map_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Map_type_identifier, &org_apache_arrow_flatbuf_Map_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Map_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Map_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Map_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Map_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Union_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* mode */)) return ret;
+    if ((ret = flatcc_verify_vector_field(td, 1, 0, 4, 4, INT64_C(1073741823)) /* typeIds */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Union_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Union_identifier, &org_apache_arrow_flatbuf_Union_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Union_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Union_type_identifier, &org_apache_arrow_flatbuf_Union_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Union_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Union_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Union_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Union_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Int_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 4, 4) /* bitWidth */)) return ret;
+    if ((ret = flatcc_verify_field(td, 1, 1, 1) /* is_signed */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Int_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Int_identifier, &org_apache_arrow_flatbuf_Int_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Int_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Int_type_identifier, &org_apache_arrow_flatbuf_Int_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Int_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Int_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Int_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Int_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_FloatingPoint_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* precision */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_FloatingPoint_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_FloatingPoint_identifier, &org_apache_arrow_flatbuf_FloatingPoint_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FloatingPoint_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_FloatingPoint_type_identifier, &org_apache_arrow_flatbuf_FloatingPoint_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FloatingPoint_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_FloatingPoint_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FloatingPoint_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_FloatingPoint_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Utf8_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Utf8_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Utf8_identifier, &org_apache_arrow_flatbuf_Utf8_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Utf8_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Utf8_type_identifier, &org_apache_arrow_flatbuf_Utf8_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Utf8_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Utf8_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Utf8_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Utf8_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Binary_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Binary_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Binary_identifier, &org_apache_arrow_flatbuf_Binary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Binary_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Binary_type_identifier, &org_apache_arrow_flatbuf_Binary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Binary_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Binary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Binary_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Binary_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_LargeUtf8_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_LargeUtf8_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_LargeUtf8_identifier, &org_apache_arrow_flatbuf_LargeUtf8_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeUtf8_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_LargeUtf8_type_identifier, &org_apache_arrow_flatbuf_LargeUtf8_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeUtf8_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_LargeUtf8_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeUtf8_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_LargeUtf8_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_LargeBinary_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_LargeBinary_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_LargeBinary_identifier, &org_apache_arrow_flatbuf_LargeBinary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeBinary_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_LargeBinary_type_identifier, &org_apache_arrow_flatbuf_LargeBinary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeBinary_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_LargeBinary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_LargeBinary_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_LargeBinary_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_FixedSizeBinary_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 4, 4) /* byteWidth */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeBinary_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_FixedSizeBinary_identifier, &org_apache_arrow_flatbuf_FixedSizeBinary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeBinary_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_FixedSizeBinary_type_identifier, &org_apache_arrow_flatbuf_FixedSizeBinary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeBinary_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_FixedSizeBinary_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_FixedSizeBinary_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_FixedSizeBinary_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Bool_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Bool_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Bool_identifier, &org_apache_arrow_flatbuf_Bool_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Bool_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Bool_type_identifier, &org_apache_arrow_flatbuf_Bool_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Bool_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Bool_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Bool_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Bool_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_RunEndEncoded_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_RunEndEncoded_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_RunEndEncoded_identifier, &org_apache_arrow_flatbuf_RunEndEncoded_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_RunEndEncoded_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_RunEndEncoded_type_identifier, &org_apache_arrow_flatbuf_RunEndEncoded_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_RunEndEncoded_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_RunEndEncoded_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_RunEndEncoded_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_RunEndEncoded_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Decimal_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 4, 4) /* precision */)) return ret;
+    if ((ret = flatcc_verify_field(td, 1, 4, 4) /* scale */)) return ret;
+    if ((ret = flatcc_verify_field(td, 2, 4, 4) /* bitWidth */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Decimal_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Decimal_identifier, &org_apache_arrow_flatbuf_Decimal_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Decimal_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Decimal_type_identifier, &org_apache_arrow_flatbuf_Decimal_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Decimal_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Decimal_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Decimal_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Decimal_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Date_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* unit */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Date_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Date_identifier, &org_apache_arrow_flatbuf_Date_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Date_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Date_type_identifier, &org_apache_arrow_flatbuf_Date_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Date_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Date_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Date_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Date_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Time_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* unit */)) return ret;
+    if ((ret = flatcc_verify_field(td, 1, 4, 4) /* bitWidth */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Time_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Time_identifier, &org_apache_arrow_flatbuf_Time_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Time_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Time_type_identifier, &org_apache_arrow_flatbuf_Time_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Time_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Time_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Time_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Time_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Timestamp_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* unit */)) return ret;
+    if ((ret = flatcc_verify_string_field(td, 1, 0) /* timezone */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Timestamp_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Timestamp_identifier, &org_apache_arrow_flatbuf_Timestamp_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Timestamp_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Timestamp_type_identifier, &org_apache_arrow_flatbuf_Timestamp_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Timestamp_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Timestamp_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Timestamp_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Timestamp_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Interval_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* unit */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Interval_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Interval_identifier, &org_apache_arrow_flatbuf_Interval_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Interval_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Interval_type_identifier, &org_apache_arrow_flatbuf_Interval_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Interval_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Interval_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Interval_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Interval_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Duration_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* unit */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Duration_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Duration_identifier, &org_apache_arrow_flatbuf_Duration_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Duration_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Duration_type_identifier, &org_apache_arrow_flatbuf_Duration_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Duration_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Duration_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Duration_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Duration_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_KeyValue_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_string_field(td, 0, 0) /* key */)) return ret;
+    if ((ret = flatcc_verify_string_field(td, 1, 0) /* value */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_KeyValue_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_KeyValue_identifier, &org_apache_arrow_flatbuf_KeyValue_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_KeyValue_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_KeyValue_type_identifier, &org_apache_arrow_flatbuf_KeyValue_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_KeyValue_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_KeyValue_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_KeyValue_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_KeyValue_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_DictionaryEncoding_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 8, 8) /* id */)) return ret;
+    if ((ret = flatcc_verify_table_field(td, 1, 0, &org_apache_arrow_flatbuf_Int_verify_table) /* indexType */)) return ret;
+    if ((ret = flatcc_verify_field(td, 2, 1, 1) /* isOrdered */)) return ret;
+    if ((ret = flatcc_verify_field(td, 3, 2, 2) /* dictionaryKind */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_DictionaryEncoding_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_DictionaryEncoding_identifier, &org_apache_arrow_flatbuf_DictionaryEncoding_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_DictionaryEncoding_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_DictionaryEncoding_type_identifier, &org_apache_arrow_flatbuf_DictionaryEncoding_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_DictionaryEncoding_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_DictionaryEncoding_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_DictionaryEncoding_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_DictionaryEncoding_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Field_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_string_field(td, 0, 0) /* name */)) return ret;
+    if ((ret = flatcc_verify_field(td, 1, 1, 1) /* nullable */)) return ret;
+    if ((ret = flatcc_verify_union_field(td, 3, 0, &org_apache_arrow_flatbuf_Type_union_verifier) /* type */)) return ret;
+    if ((ret = flatcc_verify_table_field(td, 4, 0, &org_apache_arrow_flatbuf_DictionaryEncoding_verify_table) /* dictionary */)) return ret;
+    if ((ret = flatcc_verify_table_vector_field(td, 5, 0, &org_apache_arrow_flatbuf_Field_verify_table) /* children */)) return ret;
+    if ((ret = flatcc_verify_table_vector_field(td, 6, 0, &org_apache_arrow_flatbuf_KeyValue_verify_table) /* custom_metadata */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Field_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Field_identifier, &org_apache_arrow_flatbuf_Field_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Field_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Field_type_identifier, &org_apache_arrow_flatbuf_Field_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Field_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Field_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Field_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Field_verify_table);
+}
+
+static int org_apache_arrow_flatbuf_Schema_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* endianness */)) return ret;
+    if ((ret = flatcc_verify_table_vector_field(td, 1, 0, &org_apache_arrow_flatbuf_Field_verify_table) /* fields */)) return ret;
+    if ((ret = flatcc_verify_table_vector_field(td, 2, 0, &org_apache_arrow_flatbuf_KeyValue_verify_table) /* custom_metadata */)) return ret;
+    if ((ret = flatcc_verify_vector_field(td, 3, 0, 8, 8, INT64_C(536870911)) /* features */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Schema_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Schema_identifier, &org_apache_arrow_flatbuf_Schema_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Schema_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Schema_type_identifier, &org_apache_arrow_flatbuf_Schema_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Schema_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Schema_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Schema_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Schema_verify_table);
+}
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* SCHEMA_VERIFIER_H */
+#ifndef FILE_READER_H
+#define FILE_READER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef FLATBUFFERS_COMMON_READER_H
+#include "flatbuffers_common_reader.h"
+#endif
+#ifndef SCHEMA_READER_H
+#include "Schema_reader.h"
+#endif
+#include "flatcc/flatcc_flatbuffers.h"
+#ifndef __alignas_is_defined
+#include <stdalign.h>
+#endif
+#include "flatcc/flatcc_prologue.h"
+#ifndef flatbuffers_identifier
+#define flatbuffers_identifier 0
+#endif
+#ifndef flatbuffers_extension
+#define flatbuffers_extension "bin"
+#endif
+
+typedef struct org_apache_arrow_flatbuf_Block org_apache_arrow_flatbuf_Block_t;
+typedef const org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_struct_t;
+typedef org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_mutable_struct_t;
+typedef const org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_vec_t;
+typedef org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_mutable_vec_t;
+
+typedef const struct org_apache_arrow_flatbuf_Footer_table *org_apache_arrow_flatbuf_Footer_table_t;
+typedef struct org_apache_arrow_flatbuf_Footer_table *org_apache_arrow_flatbuf_Footer_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Footer_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Footer_mutable_vec_t;
+#ifndef org_apache_arrow_flatbuf_Footer_file_identifier
+#define org_apache_arrow_flatbuf_Footer_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Footer_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Footer_identifier
+#define org_apache_arrow_flatbuf_Footer_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Footer_type_hash ((flatbuffers_thash_t)0x65df4be3)
+#define org_apache_arrow_flatbuf_Footer_type_identifier "\xe3\x4b\xdf\x65"
+#ifndef org_apache_arrow_flatbuf_Footer_file_extension
+#define org_apache_arrow_flatbuf_Footer_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Block_file_identifier
+#define org_apache_arrow_flatbuf_Block_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Block_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Block_identifier
+#define org_apache_arrow_flatbuf_Block_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Block_type_hash ((flatbuffers_thash_t)0xdc6d4841)
+#define org_apache_arrow_flatbuf_Block_type_identifier "\x41\x48\x6d\xdc"
+#ifndef org_apache_arrow_flatbuf_Block_file_extension
+#define org_apache_arrow_flatbuf_Block_file_extension "bin"
+#endif
+
+
+struct org_apache_arrow_flatbuf_Block {
+    /**  Index to the start of the RecordBlock (note this is past the Message header) */
+    alignas(8) int64_t offset;
+    /**  Length of the metadata */
+    alignas(4) int32_t metaDataLength;
+    /**  Length of the data (this is aligned so there can be a gap between this and
+     *  the metadata). */
+    alignas(8) int64_t bodyLength;
+};
+static_assert(sizeof(org_apache_arrow_flatbuf_Block_t) == 24, "struct size mismatch");
+
+static inline const org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block__const_ptr_add(const org_apache_arrow_flatbuf_Block_t *p, size_t i) { return p + i; }
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block__ptr_add(org_apache_arrow_flatbuf_Block_t *p, size_t i) { return p + i; }
+static inline org_apache_arrow_flatbuf_Block_struct_t org_apache_arrow_flatbuf_Block_vec_at(org_apache_arrow_flatbuf_Block_vec_t vec, size_t i)
+__flatbuffers_struct_vec_at(vec, i)
+static inline size_t org_apache_arrow_flatbuf_Block__size(void) { return 24; }
+static inline size_t org_apache_arrow_flatbuf_Block_vec_len(org_apache_arrow_flatbuf_Block_vec_t vec)
+__flatbuffers_vec_len(vec)
+__flatbuffers_struct_as_root(org_apache_arrow_flatbuf_Block)
+
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Block, offset, flatbuffers_int64, int64_t)
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Block, metaDataLength, flatbuffers_int32, int32_t)
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Block, bodyLength, flatbuffers_int64, int64_t)
+
+
+/**  ----------------------------------------------------------------------
+ *  Arrow File metadata
+ *  */
+struct org_apache_arrow_flatbuf_Footer_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Footer_vec_len(org_apache_arrow_flatbuf_Footer_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Footer_table_t org_apache_arrow_flatbuf_Footer_vec_at(org_apache_arrow_flatbuf_Footer_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Footer_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Footer)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Footer, version, org_apache_arrow_flatbuf_MetadataVersion, org_apache_arrow_flatbuf_MetadataVersion_enum_t, INT16_C(0))
+__flatbuffers_define_table_field(1, org_apache_arrow_flatbuf_Footer, schema, org_apache_arrow_flatbuf_Schema_table_t, 0)
+__flatbuffers_define_vector_field(2, org_apache_arrow_flatbuf_Footer, dictionaries, org_apache_arrow_flatbuf_Block_vec_t, 0)
+__flatbuffers_define_vector_field(3, org_apache_arrow_flatbuf_Footer, recordBatches, org_apache_arrow_flatbuf_Block_vec_t, 0)
+/**  User-defined metadata */
+__flatbuffers_define_vector_field(4, org_apache_arrow_flatbuf_Footer, custom_metadata, org_apache_arrow_flatbuf_KeyValue_vec_t, 0)
+
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* FILE_READER_H */
+#ifndef FILE_BUILDER_H
+#define FILE_BUILDER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef FILE_READER_H
+#include "File_reader.h"
+#endif
+#ifndef FLATBUFFERS_COMMON_BUILDER_H
+#include "flatbuffers_common_builder.h"
+#endif
+#ifndef SCHEMA_BUILDER_H
+#include "Schema_builder.h"
+#endif
+#include "flatcc/flatcc_prologue.h"
+#ifndef flatbuffers_identifier
+#define flatbuffers_identifier 0
+#endif
+#ifndef flatbuffers_extension
+#define flatbuffers_extension "bin"
+#endif
+
+#define __org_apache_arrow_flatbuf_Block_formal_args , int64_t v0, int32_t v1, int64_t v2
+#define __org_apache_arrow_flatbuf_Block_call_args , v0, v1, v2
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_assign(org_apache_arrow_flatbuf_Block_t *p, int64_t v0, int32_t v1, int64_t v2)
+{ p->offset = v0; p->metaDataLength = v1; p->bodyLength = v2;
+  return p; }
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_copy(org_apache_arrow_flatbuf_Block_t *p, const org_apache_arrow_flatbuf_Block_t *p2)
+{ p->offset = p2->offset; p->metaDataLength = p2->metaDataLength; p->bodyLength = p2->bodyLength;
+  return p; }
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_assign_to_pe(org_apache_arrow_flatbuf_Block_t *p, int64_t v0, int32_t v1, int64_t v2)
+{ flatbuffers_int64_assign_to_pe(&p->offset, v0); flatbuffers_int32_assign_to_pe(&p->metaDataLength, v1); flatbuffers_int64_assign_to_pe(&p->bodyLength, v2);
+  return p; }
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_copy_to_pe(org_apache_arrow_flatbuf_Block_t *p, const org_apache_arrow_flatbuf_Block_t *p2)
+{ flatbuffers_int64_copy_to_pe(&p->offset, &p2->offset); flatbuffers_int32_copy_to_pe(&p->metaDataLength, &p2->metaDataLength); flatbuffers_int64_copy_to_pe(&p->bodyLength, &p2->bodyLength);
+  return p; }
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_assign_from_pe(org_apache_arrow_flatbuf_Block_t *p, int64_t v0, int32_t v1, int64_t v2)
+{ flatbuffers_int64_assign_from_pe(&p->offset, v0); flatbuffers_int32_assign_from_pe(&p->metaDataLength, v1); flatbuffers_int64_assign_from_pe(&p->bodyLength, v2);
+  return p; }
+static inline org_apache_arrow_flatbuf_Block_t *org_apache_arrow_flatbuf_Block_copy_from_pe(org_apache_arrow_flatbuf_Block_t *p, const org_apache_arrow_flatbuf_Block_t *p2)
+{ flatbuffers_int64_copy_from_pe(&p->offset, &p2->offset); flatbuffers_int32_copy_from_pe(&p->metaDataLength, &p2->metaDataLength); flatbuffers_int64_copy_from_pe(&p->bodyLength, &p2->bodyLength);
+  return p; }
+__flatbuffers_build_struct(flatbuffers_, org_apache_arrow_flatbuf_Block, 24, 8, org_apache_arrow_flatbuf_Block_file_identifier, org_apache_arrow_flatbuf_Block_type_identifier)
+__flatbuffers_define_fixed_array_primitives(flatbuffers_, org_apache_arrow_flatbuf_Block, org_apache_arrow_flatbuf_Block_t)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Footer_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Footer_ref_t;
+static org_apache_arrow_flatbuf_Footer_ref_t org_apache_arrow_flatbuf_Footer_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Footer_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Footer, 5)
+
+#define __org_apache_arrow_flatbuf_Footer_formal_args ,\
+  org_apache_arrow_flatbuf_MetadataVersion_enum_t v0, org_apache_arrow_flatbuf_Schema_ref_t v1, org_apache_arrow_flatbuf_Block_vec_ref_t v2, org_apache_arrow_flatbuf_Block_vec_ref_t v3, org_apache_arrow_flatbuf_KeyValue_vec_ref_t v4
+#define __org_apache_arrow_flatbuf_Footer_call_args ,\
+  v0, v1, v2, v3, v4
+static inline org_apache_arrow_flatbuf_Footer_ref_t org_apache_arrow_flatbuf_Footer_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Footer_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Footer, org_apache_arrow_flatbuf_Footer_file_identifier, org_apache_arrow_flatbuf_Footer_type_identifier)
+
+__flatbuffers_build_scalar_field(0, flatbuffers_, org_apache_arrow_flatbuf_Footer_version, org_apache_arrow_flatbuf_MetadataVersion, org_apache_arrow_flatbuf_MetadataVersion_enum_t, 2, 2, INT16_C(0), org_apache_arrow_flatbuf_Footer)
+__flatbuffers_build_table_field(1, flatbuffers_, org_apache_arrow_flatbuf_Footer_schema, org_apache_arrow_flatbuf_Schema, org_apache_arrow_flatbuf_Footer)
+__flatbuffers_build_vector_field(2, flatbuffers_, org_apache_arrow_flatbuf_Footer_dictionaries, org_apache_arrow_flatbuf_Block, org_apache_arrow_flatbuf_Block_t, org_apache_arrow_flatbuf_Footer)
+__flatbuffers_build_vector_field(3, flatbuffers_, org_apache_arrow_flatbuf_Footer_recordBatches, org_apache_arrow_flatbuf_Block, org_apache_arrow_flatbuf_Block_t, org_apache_arrow_flatbuf_Footer)
+__flatbuffers_build_table_vector_field(4, flatbuffers_, org_apache_arrow_flatbuf_Footer_custom_metadata, org_apache_arrow_flatbuf_KeyValue, org_apache_arrow_flatbuf_Footer)
+
+static inline org_apache_arrow_flatbuf_Footer_ref_t org_apache_arrow_flatbuf_Footer_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Footer_formal_args)
+{
+    if (org_apache_arrow_flatbuf_Footer_start(B)
+        || org_apache_arrow_flatbuf_Footer_schema_add(B, v1)
+        || org_apache_arrow_flatbuf_Footer_dictionaries_add(B, v2)
+        || org_apache_arrow_flatbuf_Footer_recordBatches_add(B, v3)
+        || org_apache_arrow_flatbuf_Footer_custom_metadata_add(B, v4)
+        || org_apache_arrow_flatbuf_Footer_version_add(B, v0)) {
+        return 0;
+    }
+    return org_apache_arrow_flatbuf_Footer_end(B);
+}
+
+static org_apache_arrow_flatbuf_Footer_ref_t org_apache_arrow_flatbuf_Footer_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Footer_table_t t)
+{
+    __flatbuffers_memoize_begin(B, t);
+    if (org_apache_arrow_flatbuf_Footer_start(B)
+        || org_apache_arrow_flatbuf_Footer_schema_pick(B, t)
+        || org_apache_arrow_flatbuf_Footer_dictionaries_pick(B, t)
+        || org_apache_arrow_flatbuf_Footer_recordBatches_pick(B, t)
+        || org_apache_arrow_flatbuf_Footer_custom_metadata_pick(B, t)
+        || org_apache_arrow_flatbuf_Footer_version_pick(B, t)) {
+        return 0;
+    }
+    __flatbuffers_memoize_end(B, t, org_apache_arrow_flatbuf_Footer_end(B));
+}
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* FILE_BUILDER_H */
+#ifndef FILE_VERIFIER_H
+#define FILE_VERIFIER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef FILE_READER_H
+#include "File_reader.h"
+#endif
+#include "flatcc/flatcc_verifier.h"
+#ifndef SCHEMA_VERIFIER_H
+#include "Schema_verifier.h"
+#endif
+#include "flatcc/flatcc_prologue.h"
+
+static int org_apache_arrow_flatbuf_Footer_verify_table(flatcc_table_verifier_descriptor_t *td);
+
+static inline int org_apache_arrow_flatbuf_Block_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_struct_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Block_identifier, 24, 8);
+}
+
+static inline int org_apache_arrow_flatbuf_Block_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_struct_as_typed_root(buf, bufsiz, org_apache_arrow_flatbuf_Block_type_hash, 24, 8);
+}
+
+static inline int org_apache_arrow_flatbuf_Block_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_struct_as_typed_root(buf, bufsiz, thash, 24, 8);
+}
+
+static inline int org_apache_arrow_flatbuf_Block_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_struct_as_root(buf, bufsiz, fid, 24, 8);
+}
+
+static int org_apache_arrow_flatbuf_Footer_verify_table(flatcc_table_verifier_descriptor_t *td)
+{
+    int ret;
+    if ((ret = flatcc_verify_field(td, 0, 2, 2) /* version */)) return ret;
+    if ((ret = flatcc_verify_table_field(td, 1, 0, &org_apache_arrow_flatbuf_Schema_verify_table) /* schema */)) return ret;
+    if ((ret = flatcc_verify_vector_field(td, 2, 0, 24, 8, INT64_C(178956970)) /* dictionaries */)) return ret;
+    if ((ret = flatcc_verify_vector_field(td, 3, 0, 24, 8, INT64_C(178956970)) /* recordBatches */)) return ret;
+    if ((ret = flatcc_verify_table_vector_field(td, 4, 0, &org_apache_arrow_flatbuf_KeyValue_verify_table) /* custom_metadata */)) return ret;
+    return flatcc_verify_ok;
+}
+
+static inline int org_apache_arrow_flatbuf_Footer_verify_as_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Footer_identifier, &org_apache_arrow_flatbuf_Footer_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Footer_verify_as_typed_root(const void *buf, size_t bufsiz)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, org_apache_arrow_flatbuf_Footer_type_identifier, &org_apache_arrow_flatbuf_Footer_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Footer_verify_as_root_with_identifier(const void *buf, size_t bufsiz, const char *fid)
+{
+    return flatcc_verify_table_as_root(buf, bufsiz, fid, &org_apache_arrow_flatbuf_Footer_verify_table);
+}
+
+static inline int org_apache_arrow_flatbuf_Footer_verify_as_root_with_type_hash(const void *buf, size_t bufsiz, flatbuffers_thash_t thash)
+{
+    return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &org_apache_arrow_flatbuf_Footer_verify_table);
+}
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* FILE_VERIFIER_H */
+#ifndef SCHEMA_READER_H
+#define SCHEMA_READER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef FLATBUFFERS_COMMON_READER_H
+#include "flatbuffers_common_reader.h"
+#endif
+#include "flatcc/flatcc_flatbuffers.h"
+#ifndef __alignas_is_defined
+#include <stdalign.h>
+#endif
+#include "flatcc/flatcc_prologue.h"
+#ifndef flatbuffers_identifier
+#define flatbuffers_identifier 0
+#endif
+#ifndef flatbuffers_extension
+#define flatbuffers_extension "bin"
+#endif
+
+typedef struct org_apache_arrow_flatbuf_Buffer org_apache_arrow_flatbuf_Buffer_t;
+typedef const org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_struct_t;
+typedef org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_mutable_struct_t;
+typedef const org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_vec_t;
+typedef org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_mutable_vec_t;
+
+typedef const struct org_apache_arrow_flatbuf_Null_table *org_apache_arrow_flatbuf_Null_table_t;
+typedef struct org_apache_arrow_flatbuf_Null_table *org_apache_arrow_flatbuf_Null_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Null_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Null_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Struct__table *org_apache_arrow_flatbuf_Struct__table_t;
+typedef struct org_apache_arrow_flatbuf_Struct__table *org_apache_arrow_flatbuf_Struct__mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Struct__vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Struct__mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_List_table *org_apache_arrow_flatbuf_List_table_t;
+typedef struct org_apache_arrow_flatbuf_List_table *org_apache_arrow_flatbuf_List_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_List_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_List_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_LargeList_table *org_apache_arrow_flatbuf_LargeList_table_t;
+typedef struct org_apache_arrow_flatbuf_LargeList_table *org_apache_arrow_flatbuf_LargeList_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeList_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeList_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_FixedSizeList_table *org_apache_arrow_flatbuf_FixedSizeList_table_t;
+typedef struct org_apache_arrow_flatbuf_FixedSizeList_table *org_apache_arrow_flatbuf_FixedSizeList_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeList_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeList_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Map_table *org_apache_arrow_flatbuf_Map_table_t;
+typedef struct org_apache_arrow_flatbuf_Map_table *org_apache_arrow_flatbuf_Map_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Map_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Map_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Union_table *org_apache_arrow_flatbuf_Union_table_t;
+typedef struct org_apache_arrow_flatbuf_Union_table *org_apache_arrow_flatbuf_Union_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Union_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Union_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Int_table *org_apache_arrow_flatbuf_Int_table_t;
+typedef struct org_apache_arrow_flatbuf_Int_table *org_apache_arrow_flatbuf_Int_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Int_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Int_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_FloatingPoint_table *org_apache_arrow_flatbuf_FloatingPoint_table_t;
+typedef struct org_apache_arrow_flatbuf_FloatingPoint_table *org_apache_arrow_flatbuf_FloatingPoint_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FloatingPoint_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FloatingPoint_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Utf8_table *org_apache_arrow_flatbuf_Utf8_table_t;
+typedef struct org_apache_arrow_flatbuf_Utf8_table *org_apache_arrow_flatbuf_Utf8_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Utf8_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Utf8_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Binary_table *org_apache_arrow_flatbuf_Binary_table_t;
+typedef struct org_apache_arrow_flatbuf_Binary_table *org_apache_arrow_flatbuf_Binary_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Binary_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Binary_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_LargeUtf8_table *org_apache_arrow_flatbuf_LargeUtf8_table_t;
+typedef struct org_apache_arrow_flatbuf_LargeUtf8_table *org_apache_arrow_flatbuf_LargeUtf8_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeUtf8_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeUtf8_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_LargeBinary_table *org_apache_arrow_flatbuf_LargeBinary_table_t;
+typedef struct org_apache_arrow_flatbuf_LargeBinary_table *org_apache_arrow_flatbuf_LargeBinary_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeBinary_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_LargeBinary_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_FixedSizeBinary_table *org_apache_arrow_flatbuf_FixedSizeBinary_table_t;
+typedef struct org_apache_arrow_flatbuf_FixedSizeBinary_table *org_apache_arrow_flatbuf_FixedSizeBinary_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeBinary_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_FixedSizeBinary_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Bool_table *org_apache_arrow_flatbuf_Bool_table_t;
+typedef struct org_apache_arrow_flatbuf_Bool_table *org_apache_arrow_flatbuf_Bool_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Bool_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Bool_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_RunEndEncoded_table *org_apache_arrow_flatbuf_RunEndEncoded_table_t;
+typedef struct org_apache_arrow_flatbuf_RunEndEncoded_table *org_apache_arrow_flatbuf_RunEndEncoded_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_RunEndEncoded_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_RunEndEncoded_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Decimal_table *org_apache_arrow_flatbuf_Decimal_table_t;
+typedef struct org_apache_arrow_flatbuf_Decimal_table *org_apache_arrow_flatbuf_Decimal_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Decimal_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Decimal_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Date_table *org_apache_arrow_flatbuf_Date_table_t;
+typedef struct org_apache_arrow_flatbuf_Date_table *org_apache_arrow_flatbuf_Date_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Date_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Date_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Time_table *org_apache_arrow_flatbuf_Time_table_t;
+typedef struct org_apache_arrow_flatbuf_Time_table *org_apache_arrow_flatbuf_Time_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Time_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Time_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Timestamp_table *org_apache_arrow_flatbuf_Timestamp_table_t;
+typedef struct org_apache_arrow_flatbuf_Timestamp_table *org_apache_arrow_flatbuf_Timestamp_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Timestamp_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Timestamp_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Interval_table *org_apache_arrow_flatbuf_Interval_table_t;
+typedef struct org_apache_arrow_flatbuf_Interval_table *org_apache_arrow_flatbuf_Interval_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Interval_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Interval_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Duration_table *org_apache_arrow_flatbuf_Duration_table_t;
+typedef struct org_apache_arrow_flatbuf_Duration_table *org_apache_arrow_flatbuf_Duration_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Duration_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Duration_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_KeyValue_table *org_apache_arrow_flatbuf_KeyValue_table_t;
+typedef struct org_apache_arrow_flatbuf_KeyValue_table *org_apache_arrow_flatbuf_KeyValue_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_KeyValue_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_KeyValue_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_DictionaryEncoding_table *org_apache_arrow_flatbuf_DictionaryEncoding_table_t;
+typedef struct org_apache_arrow_flatbuf_DictionaryEncoding_table *org_apache_arrow_flatbuf_DictionaryEncoding_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_DictionaryEncoding_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_DictionaryEncoding_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Field_table *org_apache_arrow_flatbuf_Field_table_t;
+typedef struct org_apache_arrow_flatbuf_Field_table *org_apache_arrow_flatbuf_Field_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Field_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Field_mutable_vec_t;
+typedef const struct org_apache_arrow_flatbuf_Schema_table *org_apache_arrow_flatbuf_Schema_table_t;
+typedef struct org_apache_arrow_flatbuf_Schema_table *org_apache_arrow_flatbuf_Schema_mutable_table_t;
+typedef const flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Schema_vec_t;
+typedef flatbuffers_uoffset_t *org_apache_arrow_flatbuf_Schema_mutable_vec_t;
+#ifndef org_apache_arrow_flatbuf_Null_file_identifier
+#define org_apache_arrow_flatbuf_Null_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Null_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Null_identifier
+#define org_apache_arrow_flatbuf_Null_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Null_type_hash ((flatbuffers_thash_t)0x7b36a4dd)
+#define org_apache_arrow_flatbuf_Null_type_identifier "\xdd\xa4\x36\x7b"
+#ifndef org_apache_arrow_flatbuf_Null_file_extension
+#define org_apache_arrow_flatbuf_Null_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Struct__file_identifier
+#define org_apache_arrow_flatbuf_Struct__file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Struct__file_identifier */
+#ifndef org_apache_arrow_flatbuf_Struct__identifier
+#define org_apache_arrow_flatbuf_Struct__identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Struct__type_hash ((flatbuffers_thash_t)0x6310f362)
+#define org_apache_arrow_flatbuf_Struct__type_identifier "\x62\xf3\x10\x63"
+#ifndef org_apache_arrow_flatbuf_Struct__file_extension
+#define org_apache_arrow_flatbuf_Struct__file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_List_file_identifier
+#define org_apache_arrow_flatbuf_List_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_List_file_identifier */
+#ifndef org_apache_arrow_flatbuf_List_identifier
+#define org_apache_arrow_flatbuf_List_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_List_type_hash ((flatbuffers_thash_t)0xd4ce5878)
+#define org_apache_arrow_flatbuf_List_type_identifier "\x78\x58\xce\xd4"
+#ifndef org_apache_arrow_flatbuf_List_file_extension
+#define org_apache_arrow_flatbuf_List_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_LargeList_file_identifier
+#define org_apache_arrow_flatbuf_LargeList_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_LargeList_file_identifier */
+#ifndef org_apache_arrow_flatbuf_LargeList_identifier
+#define org_apache_arrow_flatbuf_LargeList_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_LargeList_type_hash ((flatbuffers_thash_t)0x38aa7e27)
+#define org_apache_arrow_flatbuf_LargeList_type_identifier "\x27\x7e\xaa\x38"
+#ifndef org_apache_arrow_flatbuf_LargeList_file_extension
+#define org_apache_arrow_flatbuf_LargeList_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_FixedSizeList_file_identifier
+#define org_apache_arrow_flatbuf_FixedSizeList_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_FixedSizeList_file_identifier */
+#ifndef org_apache_arrow_flatbuf_FixedSizeList_identifier
+#define org_apache_arrow_flatbuf_FixedSizeList_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_FixedSizeList_type_hash ((flatbuffers_thash_t)0xcef245bb)
+#define org_apache_arrow_flatbuf_FixedSizeList_type_identifier "\xbb\x45\xf2\xce"
+#ifndef org_apache_arrow_flatbuf_FixedSizeList_file_extension
+#define org_apache_arrow_flatbuf_FixedSizeList_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Map_file_identifier
+#define org_apache_arrow_flatbuf_Map_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Map_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Map_identifier
+#define org_apache_arrow_flatbuf_Map_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Map_type_hash ((flatbuffers_thash_t)0xcebef8e6)
+#define org_apache_arrow_flatbuf_Map_type_identifier "\xe6\xf8\xbe\xce"
+#ifndef org_apache_arrow_flatbuf_Map_file_extension
+#define org_apache_arrow_flatbuf_Map_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Union_file_identifier
+#define org_apache_arrow_flatbuf_Union_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Union_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Union_identifier
+#define org_apache_arrow_flatbuf_Union_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Union_type_hash ((flatbuffers_thash_t)0x896bda57)
+#define org_apache_arrow_flatbuf_Union_type_identifier "\x57\xda\x6b\x89"
+#ifndef org_apache_arrow_flatbuf_Union_file_extension
+#define org_apache_arrow_flatbuf_Union_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Int_file_identifier
+#define org_apache_arrow_flatbuf_Int_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Int_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Int_identifier
+#define org_apache_arrow_flatbuf_Int_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Int_type_hash ((flatbuffers_thash_t)0x30789001)
+#define org_apache_arrow_flatbuf_Int_type_identifier "\x01\x90\x78\x30"
+#ifndef org_apache_arrow_flatbuf_Int_file_extension
+#define org_apache_arrow_flatbuf_Int_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_FloatingPoint_file_identifier
+#define org_apache_arrow_flatbuf_FloatingPoint_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_FloatingPoint_file_identifier */
+#ifndef org_apache_arrow_flatbuf_FloatingPoint_identifier
+#define org_apache_arrow_flatbuf_FloatingPoint_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_FloatingPoint_type_hash ((flatbuffers_thash_t)0xf7d06268)
+#define org_apache_arrow_flatbuf_FloatingPoint_type_identifier "\x68\x62\xd0\xf7"
+#ifndef org_apache_arrow_flatbuf_FloatingPoint_file_extension
+#define org_apache_arrow_flatbuf_FloatingPoint_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Utf8_file_identifier
+#define org_apache_arrow_flatbuf_Utf8_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Utf8_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Utf8_identifier
+#define org_apache_arrow_flatbuf_Utf8_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Utf8_type_hash ((flatbuffers_thash_t)0x8fe60d37)
+#define org_apache_arrow_flatbuf_Utf8_type_identifier "\x37\x0d\xe6\x8f"
+#ifndef org_apache_arrow_flatbuf_Utf8_file_extension
+#define org_apache_arrow_flatbuf_Utf8_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Binary_file_identifier
+#define org_apache_arrow_flatbuf_Binary_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Binary_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Binary_identifier
+#define org_apache_arrow_flatbuf_Binary_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Binary_type_hash ((flatbuffers_thash_t)0x8e21a795)
+#define org_apache_arrow_flatbuf_Binary_type_identifier "\x95\xa7\x21\x8e"
+#ifndef org_apache_arrow_flatbuf_Binary_file_extension
+#define org_apache_arrow_flatbuf_Binary_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_LargeUtf8_file_identifier
+#define org_apache_arrow_flatbuf_LargeUtf8_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_LargeUtf8_file_identifier */
+#ifndef org_apache_arrow_flatbuf_LargeUtf8_identifier
+#define org_apache_arrow_flatbuf_LargeUtf8_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_LargeUtf8_type_hash ((flatbuffers_thash_t)0x24ed2fb0)
+#define org_apache_arrow_flatbuf_LargeUtf8_type_identifier "\xb0\x2f\xed\x24"
+#ifndef org_apache_arrow_flatbuf_LargeUtf8_file_extension
+#define org_apache_arrow_flatbuf_LargeUtf8_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_LargeBinary_file_identifier
+#define org_apache_arrow_flatbuf_LargeBinary_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_LargeBinary_file_identifier */
+#ifndef org_apache_arrow_flatbuf_LargeBinary_identifier
+#define org_apache_arrow_flatbuf_LargeBinary_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_LargeBinary_type_hash ((flatbuffers_thash_t)0xbd437872)
+#define org_apache_arrow_flatbuf_LargeBinary_type_identifier "\x72\x78\x43\xbd"
+#ifndef org_apache_arrow_flatbuf_LargeBinary_file_extension
+#define org_apache_arrow_flatbuf_LargeBinary_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier
+#define org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier */
+#ifndef org_apache_arrow_flatbuf_FixedSizeBinary_identifier
+#define org_apache_arrow_flatbuf_FixedSizeBinary_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_FixedSizeBinary_type_hash ((flatbuffers_thash_t)0x80d0f4ce)
+#define org_apache_arrow_flatbuf_FixedSizeBinary_type_identifier "\xce\xf4\xd0\x80"
+#ifndef org_apache_arrow_flatbuf_FixedSizeBinary_file_extension
+#define org_apache_arrow_flatbuf_FixedSizeBinary_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Bool_file_identifier
+#define org_apache_arrow_flatbuf_Bool_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Bool_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Bool_identifier
+#define org_apache_arrow_flatbuf_Bool_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Bool_type_hash ((flatbuffers_thash_t)0x96bf83f0)
+#define org_apache_arrow_flatbuf_Bool_type_identifier "\xf0\x83\xbf\x96"
+#ifndef org_apache_arrow_flatbuf_Bool_file_extension
+#define org_apache_arrow_flatbuf_Bool_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_RunEndEncoded_file_identifier
+#define org_apache_arrow_flatbuf_RunEndEncoded_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_RunEndEncoded_file_identifier */
+#ifndef org_apache_arrow_flatbuf_RunEndEncoded_identifier
+#define org_apache_arrow_flatbuf_RunEndEncoded_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_RunEndEncoded_type_hash ((flatbuffers_thash_t)0x5a98bcc)
+#define org_apache_arrow_flatbuf_RunEndEncoded_type_identifier "\xcc\x8b\xa9\x05"
+#ifndef org_apache_arrow_flatbuf_RunEndEncoded_file_extension
+#define org_apache_arrow_flatbuf_RunEndEncoded_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Decimal_file_identifier
+#define org_apache_arrow_flatbuf_Decimal_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Decimal_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Decimal_identifier
+#define org_apache_arrow_flatbuf_Decimal_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Decimal_type_hash ((flatbuffers_thash_t)0x91d1beb7)
+#define org_apache_arrow_flatbuf_Decimal_type_identifier "\xb7\xbe\xd1\x91"
+#ifndef org_apache_arrow_flatbuf_Decimal_file_extension
+#define org_apache_arrow_flatbuf_Decimal_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Date_file_identifier
+#define org_apache_arrow_flatbuf_Date_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Date_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Date_identifier
+#define org_apache_arrow_flatbuf_Date_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Date_type_hash ((flatbuffers_thash_t)0xe0ccf624)
+#define org_apache_arrow_flatbuf_Date_type_identifier "\x24\xf6\xcc\xe0"
+#ifndef org_apache_arrow_flatbuf_Date_file_extension
+#define org_apache_arrow_flatbuf_Date_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Time_file_identifier
+#define org_apache_arrow_flatbuf_Time_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Time_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Time_identifier
+#define org_apache_arrow_flatbuf_Time_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Time_type_hash ((flatbuffers_thash_t)0x2442a489)
+#define org_apache_arrow_flatbuf_Time_type_identifier "\x89\xa4\x42\x24"
+#ifndef org_apache_arrow_flatbuf_Time_file_extension
+#define org_apache_arrow_flatbuf_Time_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Timestamp_file_identifier
+#define org_apache_arrow_flatbuf_Timestamp_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Timestamp_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Timestamp_identifier
+#define org_apache_arrow_flatbuf_Timestamp_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Timestamp_type_hash ((flatbuffers_thash_t)0x1fddf080)
+#define org_apache_arrow_flatbuf_Timestamp_type_identifier "\x80\xf0\xdd\x1f"
+#ifndef org_apache_arrow_flatbuf_Timestamp_file_extension
+#define org_apache_arrow_flatbuf_Timestamp_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Interval_file_identifier
+#define org_apache_arrow_flatbuf_Interval_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Interval_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Interval_identifier
+#define org_apache_arrow_flatbuf_Interval_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Interval_type_hash ((flatbuffers_thash_t)0x1e2d6809)
+#define org_apache_arrow_flatbuf_Interval_type_identifier "\x09\x68\x2d\x1e"
+#ifndef org_apache_arrow_flatbuf_Interval_file_extension
+#define org_apache_arrow_flatbuf_Interval_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Duration_file_identifier
+#define org_apache_arrow_flatbuf_Duration_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Duration_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Duration_identifier
+#define org_apache_arrow_flatbuf_Duration_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Duration_type_hash ((flatbuffers_thash_t)0x1ecea6b0)
+#define org_apache_arrow_flatbuf_Duration_type_identifier "\xb0\xa6\xce\x1e"
+#ifndef org_apache_arrow_flatbuf_Duration_file_extension
+#define org_apache_arrow_flatbuf_Duration_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_KeyValue_file_identifier
+#define org_apache_arrow_flatbuf_KeyValue_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_KeyValue_file_identifier */
+#ifndef org_apache_arrow_flatbuf_KeyValue_identifier
+#define org_apache_arrow_flatbuf_KeyValue_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_KeyValue_type_hash ((flatbuffers_thash_t)0x3b264744)
+#define org_apache_arrow_flatbuf_KeyValue_type_identifier "\x44\x47\x26\x3b"
+#ifndef org_apache_arrow_flatbuf_KeyValue_file_extension
+#define org_apache_arrow_flatbuf_KeyValue_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier
+#define org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier */
+#ifndef org_apache_arrow_flatbuf_DictionaryEncoding_identifier
+#define org_apache_arrow_flatbuf_DictionaryEncoding_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_DictionaryEncoding_type_hash ((flatbuffers_thash_t)0x8c703261)
+#define org_apache_arrow_flatbuf_DictionaryEncoding_type_identifier "\x61\x32\x70\x8c"
+#ifndef org_apache_arrow_flatbuf_DictionaryEncoding_file_extension
+#define org_apache_arrow_flatbuf_DictionaryEncoding_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Field_file_identifier
+#define org_apache_arrow_flatbuf_Field_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Field_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Field_identifier
+#define org_apache_arrow_flatbuf_Field_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Field_type_hash ((flatbuffers_thash_t)0xd981525c)
+#define org_apache_arrow_flatbuf_Field_type_identifier "\x5c\x52\x81\xd9"
+#ifndef org_apache_arrow_flatbuf_Field_file_extension
+#define org_apache_arrow_flatbuf_Field_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Buffer_file_identifier
+#define org_apache_arrow_flatbuf_Buffer_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Buffer_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Buffer_identifier
+#define org_apache_arrow_flatbuf_Buffer_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Buffer_type_hash ((flatbuffers_thash_t)0x519d7fea)
+#define org_apache_arrow_flatbuf_Buffer_type_identifier "\xea\x7f\x9d\x51"
+#ifndef org_apache_arrow_flatbuf_Buffer_file_extension
+#define org_apache_arrow_flatbuf_Buffer_file_extension "bin"
+#endif
+#ifndef org_apache_arrow_flatbuf_Schema_file_identifier
+#define org_apache_arrow_flatbuf_Schema_file_identifier 0
+#endif
+/* deprecated, use org_apache_arrow_flatbuf_Schema_file_identifier */
+#ifndef org_apache_arrow_flatbuf_Schema_identifier
+#define org_apache_arrow_flatbuf_Schema_identifier 0
+#endif
+#define org_apache_arrow_flatbuf_Schema_type_hash ((flatbuffers_thash_t)0x406570b)
+#define org_apache_arrow_flatbuf_Schema_type_identifier "\x0b\x57\x06\x04"
+#ifndef org_apache_arrow_flatbuf_Schema_file_extension
+#define org_apache_arrow_flatbuf_Schema_file_extension "bin"
+#endif
+
+typedef int16_t org_apache_arrow_flatbuf_MetadataVersion_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_MetadataVersion, org_apache_arrow_flatbuf_MetadataVersion_enum_t, 16)
+/**  0.1.0 (October 2016). */
+#define org_apache_arrow_flatbuf_MetadataVersion_V1 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_MetadataVersion_V2 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_MetadataVersion_V3 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(2))
+#define org_apache_arrow_flatbuf_MetadataVersion_V4 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(3))
+#define org_apache_arrow_flatbuf_MetadataVersion_V5 ((org_apache_arrow_flatbuf_MetadataVersion_enum_t)INT16_C(4))
+
+static inline const char *org_apache_arrow_flatbuf_MetadataVersion_name(org_apache_arrow_flatbuf_MetadataVersion_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_MetadataVersion_V1: return "V1";
+    case org_apache_arrow_flatbuf_MetadataVersion_V2: return "V2";
+    case org_apache_arrow_flatbuf_MetadataVersion_V3: return "V3";
+    case org_apache_arrow_flatbuf_MetadataVersion_V4: return "V4";
+    case org_apache_arrow_flatbuf_MetadataVersion_V5: return "V5";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_MetadataVersion_is_known_value(org_apache_arrow_flatbuf_MetadataVersion_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_MetadataVersion_V1: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V2: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V3: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V4: return 1;
+    case org_apache_arrow_flatbuf_MetadataVersion_V5: return 1;
+    default: return 0;
+    }
+}
+
+/**  Represents Arrow Features that might not have full support
+ *  within implementations. This is intended to be used in
+ *  two scenarios:
+ *   1.  A mechanism for readers of Arrow Streams
+ *       and files to understand that the stream or file makes
+ *       use of a feature that isn't supported or unknown to
+ *       the implementation (and therefore can meet the Arrow
+ *       forward compatibility guarantees).
+ *   2.  A means of negotiating between a client and server
+ *       what features a stream is allowed to use. The enums
+ *       values here are intented to represent higher level
+ *       features, additional details maybe negotiated
+ *       with key-value pairs specific to the protocol.
+ * 
+ *  Enums added to this list should be assigned power-of-two values
+ *  to facilitate exchanging and comparing bitmaps for supported
+ *  features. */
+typedef int64_t org_apache_arrow_flatbuf_Feature_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Feature, org_apache_arrow_flatbuf_Feature_enum_t, 64)
+/**  Needed to make flatbuffers happy. */
+#define org_apache_arrow_flatbuf_Feature_UNUSED ((org_apache_arrow_flatbuf_Feature_enum_t)INT64_C(0))
+#define org_apache_arrow_flatbuf_Feature_DICTIONARY_REPLACEMENT ((org_apache_arrow_flatbuf_Feature_enum_t)INT64_C(1))
+#define org_apache_arrow_flatbuf_Feature_COMPRESSED_BODY ((org_apache_arrow_flatbuf_Feature_enum_t)INT64_C(2))
+
+static inline const char *org_apache_arrow_flatbuf_Feature_name(org_apache_arrow_flatbuf_Feature_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Feature_UNUSED: return "UNUSED";
+    case org_apache_arrow_flatbuf_Feature_DICTIONARY_REPLACEMENT: return "DICTIONARY_REPLACEMENT";
+    case org_apache_arrow_flatbuf_Feature_COMPRESSED_BODY: return "COMPRESSED_BODY";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Feature_is_known_value(org_apache_arrow_flatbuf_Feature_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Feature_UNUSED: return 1;
+    case org_apache_arrow_flatbuf_Feature_DICTIONARY_REPLACEMENT: return 1;
+    case org_apache_arrow_flatbuf_Feature_COMPRESSED_BODY: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_UnionMode_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t, 16)
+#define org_apache_arrow_flatbuf_UnionMode_Sparse ((org_apache_arrow_flatbuf_UnionMode_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_UnionMode_Dense ((org_apache_arrow_flatbuf_UnionMode_enum_t)INT16_C(1))
+
+static inline const char *org_apache_arrow_flatbuf_UnionMode_name(org_apache_arrow_flatbuf_UnionMode_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_UnionMode_Sparse: return "Sparse";
+    case org_apache_arrow_flatbuf_UnionMode_Dense: return "Dense";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_UnionMode_is_known_value(org_apache_arrow_flatbuf_UnionMode_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_UnionMode_Sparse: return 1;
+    case org_apache_arrow_flatbuf_UnionMode_Dense: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_Precision_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t, 16)
+#define org_apache_arrow_flatbuf_Precision_HALF ((org_apache_arrow_flatbuf_Precision_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_Precision_SINGLE ((org_apache_arrow_flatbuf_Precision_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_Precision_DOUBLE ((org_apache_arrow_flatbuf_Precision_enum_t)INT16_C(2))
+
+static inline const char *org_apache_arrow_flatbuf_Precision_name(org_apache_arrow_flatbuf_Precision_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Precision_HALF: return "HALF";
+    case org_apache_arrow_flatbuf_Precision_SINGLE: return "SINGLE";
+    case org_apache_arrow_flatbuf_Precision_DOUBLE: return "DOUBLE";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Precision_is_known_value(org_apache_arrow_flatbuf_Precision_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Precision_HALF: return 1;
+    case org_apache_arrow_flatbuf_Precision_SINGLE: return 1;
+    case org_apache_arrow_flatbuf_Precision_DOUBLE: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_DateUnit_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t, 16)
+#define org_apache_arrow_flatbuf_DateUnit_DAY ((org_apache_arrow_flatbuf_DateUnit_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_DateUnit_MILLISECOND ((org_apache_arrow_flatbuf_DateUnit_enum_t)INT16_C(1))
+
+static inline const char *org_apache_arrow_flatbuf_DateUnit_name(org_apache_arrow_flatbuf_DateUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DateUnit_DAY: return "DAY";
+    case org_apache_arrow_flatbuf_DateUnit_MILLISECOND: return "MILLISECOND";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_DateUnit_is_known_value(org_apache_arrow_flatbuf_DateUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DateUnit_DAY: return 1;
+    case org_apache_arrow_flatbuf_DateUnit_MILLISECOND: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_TimeUnit_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, 16)
+#define org_apache_arrow_flatbuf_TimeUnit_SECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_TimeUnit_MILLISECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_TimeUnit_MICROSECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(2))
+#define org_apache_arrow_flatbuf_TimeUnit_NANOSECOND ((org_apache_arrow_flatbuf_TimeUnit_enum_t)INT16_C(3))
+
+static inline const char *org_apache_arrow_flatbuf_TimeUnit_name(org_apache_arrow_flatbuf_TimeUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_TimeUnit_SECOND: return "SECOND";
+    case org_apache_arrow_flatbuf_TimeUnit_MILLISECOND: return "MILLISECOND";
+    case org_apache_arrow_flatbuf_TimeUnit_MICROSECOND: return "MICROSECOND";
+    case org_apache_arrow_flatbuf_TimeUnit_NANOSECOND: return "NANOSECOND";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_TimeUnit_is_known_value(org_apache_arrow_flatbuf_TimeUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_TimeUnit_SECOND: return 1;
+    case org_apache_arrow_flatbuf_TimeUnit_MILLISECOND: return 1;
+    case org_apache_arrow_flatbuf_TimeUnit_MICROSECOND: return 1;
+    case org_apache_arrow_flatbuf_TimeUnit_NANOSECOND: return 1;
+    default: return 0;
+    }
+}
+
+typedef int16_t org_apache_arrow_flatbuf_IntervalUnit_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t, 16)
+#define org_apache_arrow_flatbuf_IntervalUnit_YEAR_MONTH ((org_apache_arrow_flatbuf_IntervalUnit_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_IntervalUnit_DAY_TIME ((org_apache_arrow_flatbuf_IntervalUnit_enum_t)INT16_C(1))
+#define org_apache_arrow_flatbuf_IntervalUnit_MONTH_DAY_NANO ((org_apache_arrow_flatbuf_IntervalUnit_enum_t)INT16_C(2))
+
+static inline const char *org_apache_arrow_flatbuf_IntervalUnit_name(org_apache_arrow_flatbuf_IntervalUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_IntervalUnit_YEAR_MONTH: return "YEAR_MONTH";
+    case org_apache_arrow_flatbuf_IntervalUnit_DAY_TIME: return "DAY_TIME";
+    case org_apache_arrow_flatbuf_IntervalUnit_MONTH_DAY_NANO: return "MONTH_DAY_NANO";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_IntervalUnit_is_known_value(org_apache_arrow_flatbuf_IntervalUnit_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_IntervalUnit_YEAR_MONTH: return 1;
+    case org_apache_arrow_flatbuf_IntervalUnit_DAY_TIME: return 1;
+    case org_apache_arrow_flatbuf_IntervalUnit_MONTH_DAY_NANO: return 1;
+    default: return 0;
+    }
+}
+
+/**  ----------------------------------------------------------------------
+ *  Dictionary encoding metadata
+ *  Maintained for forwards compatibility, in the future
+ *  Dictionaries might be explicit maps between integers and values
+ *  allowing for non-contiguous index values */
+typedef int16_t org_apache_arrow_flatbuf_DictionaryKind_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t, 16)
+#define org_apache_arrow_flatbuf_DictionaryKind_DenseArray ((org_apache_arrow_flatbuf_DictionaryKind_enum_t)INT16_C(0))
+
+static inline const char *org_apache_arrow_flatbuf_DictionaryKind_name(org_apache_arrow_flatbuf_DictionaryKind_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DictionaryKind_DenseArray: return "DenseArray";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_DictionaryKind_is_known_value(org_apache_arrow_flatbuf_DictionaryKind_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_DictionaryKind_DenseArray: return 1;
+    default: return 0;
+    }
+}
+
+/**  ----------------------------------------------------------------------
+ *  Endianness of the platform producing the data */
+typedef int16_t org_apache_arrow_flatbuf_Endianness_enum_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t, 16)
+#define org_apache_arrow_flatbuf_Endianness_Little ((org_apache_arrow_flatbuf_Endianness_enum_t)INT16_C(0))
+#define org_apache_arrow_flatbuf_Endianness_Big ((org_apache_arrow_flatbuf_Endianness_enum_t)INT16_C(1))
+
+static inline const char *org_apache_arrow_flatbuf_Endianness_name(org_apache_arrow_flatbuf_Endianness_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Endianness_Little: return "Little";
+    case org_apache_arrow_flatbuf_Endianness_Big: return "Big";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Endianness_is_known_value(org_apache_arrow_flatbuf_Endianness_enum_t value)
+{
+    switch (value) {
+    case org_apache_arrow_flatbuf_Endianness_Little: return 1;
+    case org_apache_arrow_flatbuf_Endianness_Big: return 1;
+    default: return 0;
+    }
+}
+
+
+/**  ----------------------------------------------------------------------
+ *  A Buffer represents a single contiguous memory segment */
+struct org_apache_arrow_flatbuf_Buffer {
+    /**  The relative offset into the shared memory page where the bytes for this
+     *  buffer starts */
+    alignas(8) int64_t offset;
+    /**  The absolute length (in bytes) of the memory buffer. The memory is found
+     *  from offset (inclusive) to offset + length (non-inclusive). When building
+     *  messages using the encapsulated IPC message, padding bytes may be written
+     *  after a buffer, but such padding bytes do not need to be accounted for in
+     *  the size here. */
+    alignas(8) int64_t length;
+};
+static_assert(sizeof(org_apache_arrow_flatbuf_Buffer_t) == 16, "struct size mismatch");
+
+static inline const org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer__const_ptr_add(const org_apache_arrow_flatbuf_Buffer_t *p, size_t i) { return p + i; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer__ptr_add(org_apache_arrow_flatbuf_Buffer_t *p, size_t i) { return p + i; }
+static inline org_apache_arrow_flatbuf_Buffer_struct_t org_apache_arrow_flatbuf_Buffer_vec_at(org_apache_arrow_flatbuf_Buffer_vec_t vec, size_t i)
+__flatbuffers_struct_vec_at(vec, i)
+static inline size_t org_apache_arrow_flatbuf_Buffer__size(void) { return 16; }
+static inline size_t org_apache_arrow_flatbuf_Buffer_vec_len(org_apache_arrow_flatbuf_Buffer_vec_t vec)
+__flatbuffers_vec_len(vec)
+__flatbuffers_struct_as_root(org_apache_arrow_flatbuf_Buffer)
+
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Buffer, offset, flatbuffers_int64, int64_t)
+__flatbuffers_define_struct_scalar_field(org_apache_arrow_flatbuf_Buffer, length, flatbuffers_int64, int64_t)
+
+
+/**  These are stored in the flatbuffer in the Type union below */
+struct org_apache_arrow_flatbuf_Null_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Null_vec_len(org_apache_arrow_flatbuf_Null_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Null_table_t org_apache_arrow_flatbuf_Null_vec_at(org_apache_arrow_flatbuf_Null_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Null_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Null)
+
+
+/**  A Struct_ in the flatbuffer metadata is the same as an Arrow Struct
+ *  (according to the physical memory layout). We used Struct_ here as
+ *  Struct is a reserved word in Flatbuffers */
+struct org_apache_arrow_flatbuf_Struct__table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Struct__vec_len(org_apache_arrow_flatbuf_Struct__vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Struct__table_t org_apache_arrow_flatbuf_Struct__vec_at(org_apache_arrow_flatbuf_Struct__vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Struct__table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Struct_)
+
+
+struct org_apache_arrow_flatbuf_List_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_List_vec_len(org_apache_arrow_flatbuf_List_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_List_table_t org_apache_arrow_flatbuf_List_vec_at(org_apache_arrow_flatbuf_List_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_List_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_List)
+
+
+/**  Same as List, but with 64-bit offsets, allowing to represent
+ *  extremely large data values. */
+struct org_apache_arrow_flatbuf_LargeList_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_LargeList_vec_len(org_apache_arrow_flatbuf_LargeList_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_LargeList_table_t org_apache_arrow_flatbuf_LargeList_vec_at(org_apache_arrow_flatbuf_LargeList_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_LargeList_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_LargeList)
+
+
+struct org_apache_arrow_flatbuf_FixedSizeList_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_FixedSizeList_vec_len(org_apache_arrow_flatbuf_FixedSizeList_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_FixedSizeList_table_t org_apache_arrow_flatbuf_FixedSizeList_vec_at(org_apache_arrow_flatbuf_FixedSizeList_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_FixedSizeList_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_FixedSizeList)
+
+/**  Number of list items per value */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_FixedSizeList, listSize, flatbuffers_int32, int32_t, INT32_C(0))
+
+/**  A Map is a logical nested type that is represented as
+ * 
+ *  List<entries: Struct<key: K, value: V>>
+ * 
+ *  In this layout, the keys and values are each respectively contiguous. We do
+ *  not constrain the key and value types, so the application is responsible
+ *  for ensuring that the keys are hashable and unique. Whether the keys are sorted
+ *  may be set in the metadata for this field.
+ * 
+ *  In a field with Map type, the field has a child Struct field, which then
+ *  has two children: key type and the second the value type. The names of the
+ *  child fields may be respectively "entries", "key", and "value", but this is
+ *  not enforced.
+ * 
+ *  Map
+ *  ```text
+ *    - child[0] entries: Struct
+ *      - child[0] key: K
+ *      - child[1] value: V
+ *  ```
+ *  Neither the "entries" field nor the "key" field may be nullable.
+ * 
+ *  The metadata is structured so that Arrow systems without special handling
+ *  for Map can make Map an alias for List. The "layout" attribute for the Map
+ *  field must have the same contents as a List. */
+struct org_apache_arrow_flatbuf_Map_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Map_vec_len(org_apache_arrow_flatbuf_Map_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Map_table_t org_apache_arrow_flatbuf_Map_vec_at(org_apache_arrow_flatbuf_Map_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Map_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Map)
+
+/**  Set to true if the keys within each value are sorted */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Map, keysSorted, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+
+/**  A union is a complex type with children in Field
+ *  By default ids in the type vector refer to the offsets in the children
+ *  optionally typeIds provides an indirection between the child offset and the type id
+ *  for each child `typeIds[offset]` is the id used in the type vector */
+struct org_apache_arrow_flatbuf_Union_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Union_vec_len(org_apache_arrow_flatbuf_Union_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Union_table_t org_apache_arrow_flatbuf_Union_vec_at(org_apache_arrow_flatbuf_Union_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Union_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Union)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Union, mode, org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t, INT16_C(0))
+__flatbuffers_define_vector_field(1, org_apache_arrow_flatbuf_Union, typeIds, flatbuffers_int32_vec_t, 0)
+
+struct org_apache_arrow_flatbuf_Int_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Int_vec_len(org_apache_arrow_flatbuf_Int_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Int_table_t org_apache_arrow_flatbuf_Int_vec_at(org_apache_arrow_flatbuf_Int_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Int_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Int)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Int, bitWidth, flatbuffers_int32, int32_t, INT32_C(0))
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Int, is_signed, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+
+struct org_apache_arrow_flatbuf_FloatingPoint_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_FloatingPoint_vec_len(org_apache_arrow_flatbuf_FloatingPoint_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_FloatingPoint_table_t org_apache_arrow_flatbuf_FloatingPoint_vec_at(org_apache_arrow_flatbuf_FloatingPoint_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_FloatingPoint_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_FloatingPoint)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_FloatingPoint, precision, org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t, INT16_C(0))
+
+/**  Unicode with UTF-8 encoding */
+struct org_apache_arrow_flatbuf_Utf8_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Utf8_vec_len(org_apache_arrow_flatbuf_Utf8_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Utf8_table_t org_apache_arrow_flatbuf_Utf8_vec_at(org_apache_arrow_flatbuf_Utf8_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Utf8_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Utf8)
+
+
+/**  Opaque binary data */
+struct org_apache_arrow_flatbuf_Binary_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Binary_vec_len(org_apache_arrow_flatbuf_Binary_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Binary_table_t org_apache_arrow_flatbuf_Binary_vec_at(org_apache_arrow_flatbuf_Binary_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Binary_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Binary)
+
+
+/**  Same as Utf8, but with 64-bit offsets, allowing to represent
+ *  extremely large data values. */
+struct org_apache_arrow_flatbuf_LargeUtf8_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_LargeUtf8_vec_len(org_apache_arrow_flatbuf_LargeUtf8_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_LargeUtf8_table_t org_apache_arrow_flatbuf_LargeUtf8_vec_at(org_apache_arrow_flatbuf_LargeUtf8_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_LargeUtf8_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_LargeUtf8)
+
+
+/**  Same as Binary, but with 64-bit offsets, allowing to represent
+ *  extremely large data values. */
+struct org_apache_arrow_flatbuf_LargeBinary_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_LargeBinary_vec_len(org_apache_arrow_flatbuf_LargeBinary_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_LargeBinary_table_t org_apache_arrow_flatbuf_LargeBinary_vec_at(org_apache_arrow_flatbuf_LargeBinary_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_LargeBinary_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_LargeBinary)
+
+
+struct org_apache_arrow_flatbuf_FixedSizeBinary_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_FixedSizeBinary_vec_len(org_apache_arrow_flatbuf_FixedSizeBinary_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_FixedSizeBinary_table_t org_apache_arrow_flatbuf_FixedSizeBinary_vec_at(org_apache_arrow_flatbuf_FixedSizeBinary_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_FixedSizeBinary_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_FixedSizeBinary)
+
+/**  Number of bytes per value */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_FixedSizeBinary, byteWidth, flatbuffers_int32, int32_t, INT32_C(0))
+
+struct org_apache_arrow_flatbuf_Bool_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Bool_vec_len(org_apache_arrow_flatbuf_Bool_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Bool_table_t org_apache_arrow_flatbuf_Bool_vec_at(org_apache_arrow_flatbuf_Bool_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Bool_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Bool)
+
+
+/**  Contains two child arrays, run_ends and values.
+ *  The run_ends child array must be a 16/32/64-bit integer array
+ *  which encodes the indices at which the run with the value in 
+ *  each corresponding index in the values child array ends.
+ *  Like list/struct types, the value array can be of any type. */
+struct org_apache_arrow_flatbuf_RunEndEncoded_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_RunEndEncoded_vec_len(org_apache_arrow_flatbuf_RunEndEncoded_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_RunEndEncoded_table_t org_apache_arrow_flatbuf_RunEndEncoded_vec_at(org_apache_arrow_flatbuf_RunEndEncoded_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_RunEndEncoded_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_RunEndEncoded)
+
+
+/**  Exact decimal value represented as an integer value in two's
+ *  complement. Currently only 128-bit (16-byte) and 256-bit (32-byte) integers
+ *  are used. The representation uses the endianness indicated
+ *  in the Schema. */
+struct org_apache_arrow_flatbuf_Decimal_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Decimal_vec_len(org_apache_arrow_flatbuf_Decimal_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Decimal_table_t org_apache_arrow_flatbuf_Decimal_vec_at(org_apache_arrow_flatbuf_Decimal_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Decimal_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Decimal)
+
+/**  Total number of decimal digits */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Decimal, precision, flatbuffers_int32, int32_t, INT32_C(0))
+/**  Number of digits after the decimal point "." */
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Decimal, scale, flatbuffers_int32, int32_t, INT32_C(0))
+/**  Number of bits per value. The only accepted widths are 128 and 256.
+ *  We use bitWidth for consistency with Int::bitWidth. */
+__flatbuffers_define_scalar_field(2, org_apache_arrow_flatbuf_Decimal, bitWidth, flatbuffers_int32, int32_t, INT32_C(128))
+
+/**  Date is either a 32-bit or 64-bit signed integer type representing an
+ *  elapsed time since UNIX epoch (1970-01-01), stored in either of two units:
+ * 
+ *  * Milliseconds (64 bits) indicating UNIX time elapsed since the epoch (no
+ *    leap seconds), where the values are evenly divisible by 86400000
+ *  * Days (32 bits) since the UNIX epoch */
+struct org_apache_arrow_flatbuf_Date_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Date_vec_len(org_apache_arrow_flatbuf_Date_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Date_table_t org_apache_arrow_flatbuf_Date_vec_at(org_apache_arrow_flatbuf_Date_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Date_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Date)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Date, unit, org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t, INT16_C(1))
+
+/**  Time is either a 32-bit or 64-bit signed integer type representing an
+ *  elapsed time since midnight, stored in either of four units: seconds,
+ *  milliseconds, microseconds or nanoseconds.
+ * 
+ *  The integer `bitWidth` depends on the `unit` and must be one of the following:
+ *  * SECOND and MILLISECOND: 32 bits
+ *  * MICROSECOND and NANOSECOND: 64 bits
+ * 
+ *  The allowed values are between 0 (inclusive) and 86400 (=24*60*60) seconds
+ *  (exclusive), adjusted for the time unit (for example, up to 86400000
+ *  exclusive for the MILLISECOND unit).
+ *  This definition doesn't allow for leap seconds. Time values from
+ *  measurements with leap seconds will need to be corrected when ingesting
+ *  into Arrow (for example by replacing the value 86400 with 86399). */
+struct org_apache_arrow_flatbuf_Time_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Time_vec_len(org_apache_arrow_flatbuf_Time_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Time_table_t org_apache_arrow_flatbuf_Time_vec_at(org_apache_arrow_flatbuf_Time_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Time_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Time)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Time, unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, INT16_C(1))
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Time, bitWidth, flatbuffers_int32, int32_t, INT32_C(32))
+
+/**  Timestamp is a 64-bit signed integer representing an elapsed time since a
+ *  fixed epoch, stored in either of four units: seconds, milliseconds,
+ *  microseconds or nanoseconds, and is optionally annotated with a timezone.
+ * 
+ *  Timestamp values do not include any leap seconds (in other words, all
+ *  days are considered 86400 seconds long).
+ * 
+ *  Timestamps with a non-empty timezone
+ *  ------------------------------------
+ * 
+ *  If a Timestamp column has a non-empty timezone value, its epoch is
+ *  1970-01-01 00:00:00 (January 1st 1970, midnight) in the *UTC* timezone
+ *  (the Unix epoch), regardless of the Timestamp's own timezone.
+ * 
+ *  Therefore, timestamp values with a non-empty timezone correspond to
+ *  physical points in time together with some additional information about
+ *  how the data was obtained and/or how to display it (the timezone).
+ * 
+ *    For example, the timestamp value 0 with the timezone string "Europe/Paris"
+ *    corresponds to "January 1st 1970, 00h00" in the UTC timezone, but the
+ *    application may prefer to display it as "January 1st 1970, 01h00" in
+ *    the Europe/Paris timezone (which is the same physical point in time).
+ * 
+ *  One consequence is that timestamp values with a non-empty timezone
+ *  can be compared and ordered directly, since they all share the same
+ *  well-known point of reference (the Unix epoch).
+ * 
+ *  Timestamps with an unset / empty timezone
+ *  -----------------------------------------
+ * 
+ *  If a Timestamp column has no timezone value, its epoch is
+ *  1970-01-01 00:00:00 (January 1st 1970, midnight) in an *unknown* timezone.
+ * 
+ *  Therefore, timestamp values without a timezone cannot be meaningfully
+ *  interpreted as physical points in time, but only as calendar / clock
+ *  indications ("wall clock time") in an unspecified timezone.
+ * 
+ *    For example, the timestamp value 0 with an empty timezone string
+ *    corresponds to "January 1st 1970, 00h00" in an unknown timezone: there
+ *    is not enough information to interpret it as a well-defined physical
+ *    point in time.
+ * 
+ *  One consequence is that timestamp values without a timezone cannot
+ *  be reliably compared or ordered, since they may have different points of
+ *  reference.  In particular, it is *not* possible to interpret an unset
+ *  or empty timezone as the same as "UTC".
+ * 
+ *  Conversion between timezones
+ *  ----------------------------
+ * 
+ *  If a Timestamp column has a non-empty timezone, changing the timezone
+ *  to a different non-empty value is a metadata-only operation:
+ *  the timestamp values need not change as their point of reference remains
+ *  the same (the Unix epoch).
+ * 
+ *  However, if a Timestamp column has no timezone value, changing it to a
+ *  non-empty value requires to think about the desired semantics.
+ *  One possibility is to assume that the original timestamp values are
+ *  relative to the epoch of the timezone being set; timestamp values should
+ *  then adjusted to the Unix epoch (for example, changing the timezone from
+ *  empty to "Europe/Paris" would require converting the timestamp values
+ *  from "Europe/Paris" to "UTC", which seems counter-intuitive but is
+ *  nevertheless correct).
+ * 
+ *  Guidelines for encoding data from external libraries
+ *  ----------------------------------------------------
+ * 
+ *  Date & time libraries often have multiple different data types for temporal
+ *  data. In order to ease interoperability between different implementations the
+ *  Arrow project has some recommendations for encoding these types into a Timestamp
+ *  column.
+ * 
+ *  An "instant" represents a physical point in time that has no relevant timezone
+ *  (for example, astronomical data). To encode an instant, use a Timestamp with
+ *  the timezone string set to "UTC", and make sure the Timestamp values
+ *  are relative to the UTC epoch (January 1st 1970, midnight).
+ * 
+ *  A "zoned date-time" represents a physical point in time annotated with an
+ *  informative timezone (for example, the timezone in which the data was
+ *  recorded).  To encode a zoned date-time, use a Timestamp with the timezone
+ *  string set to the name of the timezone, and make sure the Timestamp values
+ *  are relative to the UTC epoch (January 1st 1970, midnight).
+ * 
+ *   (There is some ambiguity between an instant and a zoned date-time with the
+ *    UTC timezone.  Both of these are stored the same in Arrow.  Typically,
+ *    this distinction does not matter.  If it does, then an application should
+ *    use custom metadata or an extension type to distinguish between the two cases.)
+ * 
+ *  An "offset date-time" represents a physical point in time combined with an
+ *  explicit offset from UTC.  To encode an offset date-time, use a Timestamp
+ *  with the timezone string set to the numeric timezone offset string
+ *  (e.g. "+03:00"), and make sure the Timestamp values are relative to
+ *  the UTC epoch (January 1st 1970, midnight).
+ * 
+ *  A "naive date-time" (also called "local date-time" in some libraries)
+ *  represents a wall clock time combined with a calendar date, but with
+ *  no indication of how to map this information to a physical point in time.
+ *  Naive date-times must be handled with care because of this missing
+ *  information, and also because daylight saving time (DST) may make
+ *  some values ambiguous or non-existent. A naive date-time may be
+ *  stored as a struct with Date and Time fields. However, it may also be
+ *  encoded into a Timestamp column with an empty timezone. The timestamp
+ *  values should be computed "as if" the timezone of the date-time values
+ *  was UTC; for example, the naive date-time "January 1st 1970, 00h00" would
+ *  be encoded as timestamp value 0. */
+struct org_apache_arrow_flatbuf_Timestamp_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Timestamp_vec_len(org_apache_arrow_flatbuf_Timestamp_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Timestamp_table_t org_apache_arrow_flatbuf_Timestamp_vec_at(org_apache_arrow_flatbuf_Timestamp_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Timestamp_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Timestamp)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Timestamp, unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, INT16_C(0))
+/**  The timezone is an optional string indicating the name of a timezone,
+ *  one of:
+ * 
+ *  * As used in the Olson timezone database (the "tz database" or
+ *    "tzdata"), such as "America/New_York".
+ *  * An absolute timezone offset of the form "+XX:XX" or "-XX:XX",
+ *    such as "+07:30".
+ * 
+ *  Whether a timezone string is present indicates different semantics about
+ *  the data (see above). */
+__flatbuffers_define_string_field(1, org_apache_arrow_flatbuf_Timestamp, timezone, 0)
+
+struct org_apache_arrow_flatbuf_Interval_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Interval_vec_len(org_apache_arrow_flatbuf_Interval_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Interval_table_t org_apache_arrow_flatbuf_Interval_vec_at(org_apache_arrow_flatbuf_Interval_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Interval_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Interval)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Interval, unit, org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t, INT16_C(0))
+
+struct org_apache_arrow_flatbuf_Duration_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Duration_vec_len(org_apache_arrow_flatbuf_Duration_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Duration_table_t org_apache_arrow_flatbuf_Duration_vec_at(org_apache_arrow_flatbuf_Duration_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Duration_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Duration)
+
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Duration, unit, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t, INT16_C(1))
+/**  ----------------------------------------------------------------------
+ *  Top-level Type value, enabling extensible type-specific metadata. We can
+ *  add new logical types to Type without breaking backwards compatibility */
+typedef uint8_t org_apache_arrow_flatbuf_Type_union_type_t;
+__flatbuffers_define_integer_type(org_apache_arrow_flatbuf_Type, org_apache_arrow_flatbuf_Type_union_type_t, 8)
+__flatbuffers_define_union(flatbuffers_, org_apache_arrow_flatbuf_Type)
+/**  ----------------------------------------------------------------------
+ *  user defined key value pairs to add custom metadata to arrow
+ *  key namespacing is the responsibility of the user */
+#define org_apache_arrow_flatbuf_Type_NONE ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(0))
+#define org_apache_arrow_flatbuf_Type_Null ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(1))
+#define org_apache_arrow_flatbuf_Type_Int ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(2))
+#define org_apache_arrow_flatbuf_Type_FloatingPoint ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(3))
+#define org_apache_arrow_flatbuf_Type_Binary ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(4))
+#define org_apache_arrow_flatbuf_Type_Utf8 ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(5))
+#define org_apache_arrow_flatbuf_Type_Bool ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(6))
+#define org_apache_arrow_flatbuf_Type_Decimal ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(7))
+#define org_apache_arrow_flatbuf_Type_Date ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(8))
+#define org_apache_arrow_flatbuf_Type_Time ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(9))
+#define org_apache_arrow_flatbuf_Type_Timestamp ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(10))
+#define org_apache_arrow_flatbuf_Type_Interval ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(11))
+#define org_apache_arrow_flatbuf_Type_List ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(12))
+#define org_apache_arrow_flatbuf_Type_Struct_ ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(13))
+#define org_apache_arrow_flatbuf_Type_Union ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(14))
+#define org_apache_arrow_flatbuf_Type_FixedSizeBinary ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(15))
+#define org_apache_arrow_flatbuf_Type_FixedSizeList ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(16))
+#define org_apache_arrow_flatbuf_Type_Map ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(17))
+#define org_apache_arrow_flatbuf_Type_Duration ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(18))
+#define org_apache_arrow_flatbuf_Type_LargeBinary ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(19))
+#define org_apache_arrow_flatbuf_Type_LargeUtf8 ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(20))
+#define org_apache_arrow_flatbuf_Type_LargeList ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(21))
+#define org_apache_arrow_flatbuf_Type_RunEndEncoded ((org_apache_arrow_flatbuf_Type_union_type_t)UINT8_C(22))
+
+static inline const char *org_apache_arrow_flatbuf_Type_type_name(org_apache_arrow_flatbuf_Type_union_type_t type)
+{
+    switch (type) {
+    case org_apache_arrow_flatbuf_Type_NONE: return "NONE";
+    case org_apache_arrow_flatbuf_Type_Null: return "Null";
+    case org_apache_arrow_flatbuf_Type_Int: return "Int";
+    case org_apache_arrow_flatbuf_Type_FloatingPoint: return "FloatingPoint";
+    case org_apache_arrow_flatbuf_Type_Binary: return "Binary";
+    case org_apache_arrow_flatbuf_Type_Utf8: return "Utf8";
+    case org_apache_arrow_flatbuf_Type_Bool: return "Bool";
+    case org_apache_arrow_flatbuf_Type_Decimal: return "Decimal";
+    case org_apache_arrow_flatbuf_Type_Date: return "Date";
+    case org_apache_arrow_flatbuf_Type_Time: return "Time";
+    case org_apache_arrow_flatbuf_Type_Timestamp: return "Timestamp";
+    case org_apache_arrow_flatbuf_Type_Interval: return "Interval";
+    case org_apache_arrow_flatbuf_Type_List: return "List";
+    case org_apache_arrow_flatbuf_Type_Struct_: return "Struct_";
+    case org_apache_arrow_flatbuf_Type_Union: return "Union";
+    case org_apache_arrow_flatbuf_Type_FixedSizeBinary: return "FixedSizeBinary";
+    case org_apache_arrow_flatbuf_Type_FixedSizeList: return "FixedSizeList";
+    case org_apache_arrow_flatbuf_Type_Map: return "Map";
+    case org_apache_arrow_flatbuf_Type_Duration: return "Duration";
+    case org_apache_arrow_flatbuf_Type_LargeBinary: return "LargeBinary";
+    case org_apache_arrow_flatbuf_Type_LargeUtf8: return "LargeUtf8";
+    case org_apache_arrow_flatbuf_Type_LargeList: return "LargeList";
+    case org_apache_arrow_flatbuf_Type_RunEndEncoded: return "RunEndEncoded";
+    default: return "";
+    }
+}
+
+static inline int org_apache_arrow_flatbuf_Type_is_known_type(org_apache_arrow_flatbuf_Type_union_type_t type)
+{
+    switch (type) {
+    case org_apache_arrow_flatbuf_Type_NONE: return 1;
+    case org_apache_arrow_flatbuf_Type_Null: return 1;
+    case org_apache_arrow_flatbuf_Type_Int: return 1;
+    case org_apache_arrow_flatbuf_Type_FloatingPoint: return 1;
+    case org_apache_arrow_flatbuf_Type_Binary: return 1;
+    case org_apache_arrow_flatbuf_Type_Utf8: return 1;
+    case org_apache_arrow_flatbuf_Type_Bool: return 1;
+    case org_apache_arrow_flatbuf_Type_Decimal: return 1;
+    case org_apache_arrow_flatbuf_Type_Date: return 1;
+    case org_apache_arrow_flatbuf_Type_Time: return 1;
+    case org_apache_arrow_flatbuf_Type_Timestamp: return 1;
+    case org_apache_arrow_flatbuf_Type_Interval: return 1;
+    case org_apache_arrow_flatbuf_Type_List: return 1;
+    case org_apache_arrow_flatbuf_Type_Struct_: return 1;
+    case org_apache_arrow_flatbuf_Type_Union: return 1;
+    case org_apache_arrow_flatbuf_Type_FixedSizeBinary: return 1;
+    case org_apache_arrow_flatbuf_Type_FixedSizeList: return 1;
+    case org_apache_arrow_flatbuf_Type_Map: return 1;
+    case org_apache_arrow_flatbuf_Type_Duration: return 1;
+    case org_apache_arrow_flatbuf_Type_LargeBinary: return 1;
+    case org_apache_arrow_flatbuf_Type_LargeUtf8: return 1;
+    case org_apache_arrow_flatbuf_Type_LargeList: return 1;
+    case org_apache_arrow_flatbuf_Type_RunEndEncoded: return 1;
+    default: return 0;
+    }
+}
+
+
+struct org_apache_arrow_flatbuf_KeyValue_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_KeyValue_vec_len(org_apache_arrow_flatbuf_KeyValue_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_KeyValue_table_t org_apache_arrow_flatbuf_KeyValue_vec_at(org_apache_arrow_flatbuf_KeyValue_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_KeyValue_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_KeyValue)
+
+__flatbuffers_define_string_field(0, org_apache_arrow_flatbuf_KeyValue, key, 0)
+__flatbuffers_define_string_field(1, org_apache_arrow_flatbuf_KeyValue, value, 0)
+
+struct org_apache_arrow_flatbuf_DictionaryEncoding_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_DictionaryEncoding_vec_len(org_apache_arrow_flatbuf_DictionaryEncoding_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_DictionaryEncoding_table_t org_apache_arrow_flatbuf_DictionaryEncoding_vec_at(org_apache_arrow_flatbuf_DictionaryEncoding_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_DictionaryEncoding_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_DictionaryEncoding)
+
+/**  The known dictionary id in the application where this data is used. In
+ *  the file or streaming formats, the dictionary ids are found in the
+ *  DictionaryBatch messages */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_DictionaryEncoding, id, flatbuffers_int64, int64_t, INT64_C(0))
+/**  The dictionary indices are constrained to be non-negative integers. If
+ *  this field is null, the indices must be signed int32. To maximize
+ *  cross-language compatibility and performance, implementations are
+ *  recommended to prefer signed integer types over unsigned integer types
+ *  and to avoid uint64 indices unless they are required by an application. */
+__flatbuffers_define_table_field(1, org_apache_arrow_flatbuf_DictionaryEncoding, indexType, org_apache_arrow_flatbuf_Int_table_t, 0)
+/**  By default, dictionaries are not ordered, or the order does not have
+ *  semantic meaning. In some statistical, applications, dictionary-encoding
+ *  is used to represent ordered categorical data, and we provide a way to
+ *  preserve that metadata here */
+__flatbuffers_define_scalar_field(2, org_apache_arrow_flatbuf_DictionaryEncoding, isOrdered, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+__flatbuffers_define_scalar_field(3, org_apache_arrow_flatbuf_DictionaryEncoding, dictionaryKind, org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t, INT16_C(0))
+
+/**  ----------------------------------------------------------------------
+ *  A field represents a named column in a record / row batch or child of a
+ *  nested type. */
+struct org_apache_arrow_flatbuf_Field_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Field_vec_len(org_apache_arrow_flatbuf_Field_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Field_table_t org_apache_arrow_flatbuf_Field_vec_at(org_apache_arrow_flatbuf_Field_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Field_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Field)
+
+/**  Name is not required, in i.e. a List */
+__flatbuffers_define_string_field(0, org_apache_arrow_flatbuf_Field, name, 0)
+/**  Whether or not this field can contain nulls. Should be true in general. */
+__flatbuffers_define_scalar_field(1, org_apache_arrow_flatbuf_Field, nullable, flatbuffers_bool, flatbuffers_bool_t, UINT8_C(0))
+/**  This is the type of the decoded value if the field is dictionary encoded. */
+__flatbuffers_define_union_field(flatbuffers_, 3, org_apache_arrow_flatbuf_Field, type, org_apache_arrow_flatbuf_Type, 0)
+/**  Present only if the field is dictionary encoded. */
+__flatbuffers_define_table_field(4, org_apache_arrow_flatbuf_Field, dictionary, org_apache_arrow_flatbuf_DictionaryEncoding_table_t, 0)
+/**  children apply only to nested data types like Struct, List and Union. For
+ *  primitive types children will have length 0. */
+__flatbuffers_define_vector_field(5, org_apache_arrow_flatbuf_Field, children, org_apache_arrow_flatbuf_Field_vec_t, 0)
+/**  User-defined metadata */
+__flatbuffers_define_vector_field(6, org_apache_arrow_flatbuf_Field, custom_metadata, org_apache_arrow_flatbuf_KeyValue_vec_t, 0)
+
+/**  ----------------------------------------------------------------------
+ *  A Schema describes the columns in a row batch */
+struct org_apache_arrow_flatbuf_Schema_table { uint8_t unused__; };
+
+static inline size_t org_apache_arrow_flatbuf_Schema_vec_len(org_apache_arrow_flatbuf_Schema_vec_t vec)
+__flatbuffers_vec_len(vec)
+static inline org_apache_arrow_flatbuf_Schema_table_t org_apache_arrow_flatbuf_Schema_vec_at(org_apache_arrow_flatbuf_Schema_vec_t vec, size_t i)
+__flatbuffers_offset_vec_at(org_apache_arrow_flatbuf_Schema_table_t, vec, i, 0)
+__flatbuffers_table_as_root(org_apache_arrow_flatbuf_Schema)
+
+/**  endianness of the buffer
+ *  it is Little Endian by default
+ *  if endianness doesn't match the underlying system then the vectors need to be converted */
+__flatbuffers_define_scalar_field(0, org_apache_arrow_flatbuf_Schema, endianness, org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t, INT16_C(0))
+__flatbuffers_define_vector_field(1, org_apache_arrow_flatbuf_Schema, fields, org_apache_arrow_flatbuf_Field_vec_t, 0)
+__flatbuffers_define_vector_field(2, org_apache_arrow_flatbuf_Schema, custom_metadata, org_apache_arrow_flatbuf_KeyValue_vec_t, 0)
+/**  Features used in the stream/file. */
+__flatbuffers_define_vector_field(3, org_apache_arrow_flatbuf_Schema, features, org_apache_arrow_flatbuf_Feature_vec_t, 0)
+
+
+#include "flatcc/flatcc_epilogue.h"
+#endif /* SCHEMA_READER_H */
+#ifndef SCHEMA_BUILDER_H
+#define SCHEMA_BUILDER_H
+
+/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
+
+#ifndef SCHEMA_READER_H
+#include "Schema_reader.h"
+#endif
+#ifndef FLATBUFFERS_COMMON_BUILDER_H
+#include "flatbuffers_common_builder.h"
+#endif
+#include "flatcc/flatcc_prologue.h"
+#ifndef flatbuffers_identifier
+#define flatbuffers_identifier 0
+#endif
+#ifndef flatbuffers_extension
+#define flatbuffers_extension "bin"
+#endif
+
+#define __org_apache_arrow_flatbuf_MetadataVersion_formal_args , org_apache_arrow_flatbuf_MetadataVersion_enum_t v0
+#define __org_apache_arrow_flatbuf_MetadataVersion_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_MetadataVersion, org_apache_arrow_flatbuf_MetadataVersion_enum_t)
+#define __org_apache_arrow_flatbuf_Feature_formal_args , org_apache_arrow_flatbuf_Feature_enum_t v0
+#define __org_apache_arrow_flatbuf_Feature_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_Feature, org_apache_arrow_flatbuf_Feature_enum_t)
+#define __org_apache_arrow_flatbuf_UnionMode_formal_args , org_apache_arrow_flatbuf_UnionMode_enum_t v0
+#define __org_apache_arrow_flatbuf_UnionMode_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_UnionMode, org_apache_arrow_flatbuf_UnionMode_enum_t)
+#define __org_apache_arrow_flatbuf_Precision_formal_args , org_apache_arrow_flatbuf_Precision_enum_t v0
+#define __org_apache_arrow_flatbuf_Precision_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_Precision, org_apache_arrow_flatbuf_Precision_enum_t)
+#define __org_apache_arrow_flatbuf_DateUnit_formal_args , org_apache_arrow_flatbuf_DateUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_DateUnit_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_DateUnit, org_apache_arrow_flatbuf_DateUnit_enum_t)
+#define __org_apache_arrow_flatbuf_TimeUnit_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_TimeUnit_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_TimeUnit, org_apache_arrow_flatbuf_TimeUnit_enum_t)
+#define __org_apache_arrow_flatbuf_IntervalUnit_formal_args , org_apache_arrow_flatbuf_IntervalUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_IntervalUnit_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_IntervalUnit, org_apache_arrow_flatbuf_IntervalUnit_enum_t)
+#define __org_apache_arrow_flatbuf_DictionaryKind_formal_args , org_apache_arrow_flatbuf_DictionaryKind_enum_t v0
+#define __org_apache_arrow_flatbuf_DictionaryKind_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_DictionaryKind, org_apache_arrow_flatbuf_DictionaryKind_enum_t)
+#define __org_apache_arrow_flatbuf_Endianness_formal_args , org_apache_arrow_flatbuf_Endianness_enum_t v0
+#define __org_apache_arrow_flatbuf_Endianness_call_args , v0
+__flatbuffers_build_scalar(flatbuffers_, org_apache_arrow_flatbuf_Endianness, org_apache_arrow_flatbuf_Endianness_enum_t)
+
+#define __org_apache_arrow_flatbuf_Buffer_formal_args , int64_t v0, int64_t v1
+#define __org_apache_arrow_flatbuf_Buffer_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_assign(org_apache_arrow_flatbuf_Buffer_t *p, int64_t v0, int64_t v1)
+{ p->offset = v0; p->length = v1;
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_copy(org_apache_arrow_flatbuf_Buffer_t *p, const org_apache_arrow_flatbuf_Buffer_t *p2)
+{ p->offset = p2->offset; p->length = p2->length;
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_assign_to_pe(org_apache_arrow_flatbuf_Buffer_t *p, int64_t v0, int64_t v1)
+{ flatbuffers_int64_assign_to_pe(&p->offset, v0); flatbuffers_int64_assign_to_pe(&p->length, v1);
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_copy_to_pe(org_apache_arrow_flatbuf_Buffer_t *p, const org_apache_arrow_flatbuf_Buffer_t *p2)
+{ flatbuffers_int64_copy_to_pe(&p->offset, &p2->offset); flatbuffers_int64_copy_to_pe(&p->length, &p2->length);
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_assign_from_pe(org_apache_arrow_flatbuf_Buffer_t *p, int64_t v0, int64_t v1)
+{ flatbuffers_int64_assign_from_pe(&p->offset, v0); flatbuffers_int64_assign_from_pe(&p->length, v1);
+  return p; }
+static inline org_apache_arrow_flatbuf_Buffer_t *org_apache_arrow_flatbuf_Buffer_copy_from_pe(org_apache_arrow_flatbuf_Buffer_t *p, const org_apache_arrow_flatbuf_Buffer_t *p2)
+{ flatbuffers_int64_copy_from_pe(&p->offset, &p2->offset); flatbuffers_int64_copy_from_pe(&p->length, &p2->length);
+  return p; }
+__flatbuffers_build_struct(flatbuffers_, org_apache_arrow_flatbuf_Buffer, 16, 8, org_apache_arrow_flatbuf_Buffer_file_identifier, org_apache_arrow_flatbuf_Buffer_type_identifier)
+__flatbuffers_define_fixed_array_primitives(flatbuffers_, org_apache_arrow_flatbuf_Buffer, org_apache_arrow_flatbuf_Buffer_t)
+
+typedef flatbuffers_union_ref_t org_apache_arrow_flatbuf_Type_union_ref_t;
+typedef flatbuffers_union_vec_ref_t org_apache_arrow_flatbuf_Type_union_vec_ref_t;
+static org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Type_union_t t);
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Null_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Null_ref_t;
+static org_apache_arrow_flatbuf_Null_ref_t org_apache_arrow_flatbuf_Null_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Null_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Null, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Struct__required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Struct__ref_t;
+static org_apache_arrow_flatbuf_Struct__ref_t org_apache_arrow_flatbuf_Struct__clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Struct__table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Struct_, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_List_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_List_ref_t;
+static org_apache_arrow_flatbuf_List_ref_t org_apache_arrow_flatbuf_List_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_List_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_List, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_LargeList_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_LargeList_ref_t;
+static org_apache_arrow_flatbuf_LargeList_ref_t org_apache_arrow_flatbuf_LargeList_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeList_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_LargeList, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_FixedSizeList_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_FixedSizeList_ref_t;
+static org_apache_arrow_flatbuf_FixedSizeList_ref_t org_apache_arrow_flatbuf_FixedSizeList_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FixedSizeList_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeList, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Map_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Map_ref_t;
+static org_apache_arrow_flatbuf_Map_ref_t org_apache_arrow_flatbuf_Map_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Map_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Map, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Union_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Union_ref_t;
+static org_apache_arrow_flatbuf_Union_ref_t org_apache_arrow_flatbuf_Union_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Union_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Union, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Int_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Int_ref_t;
+static org_apache_arrow_flatbuf_Int_ref_t org_apache_arrow_flatbuf_Int_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Int_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Int, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_FloatingPoint_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_FloatingPoint_ref_t;
+static org_apache_arrow_flatbuf_FloatingPoint_ref_t org_apache_arrow_flatbuf_FloatingPoint_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FloatingPoint_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_FloatingPoint, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Utf8_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Utf8_ref_t;
+static org_apache_arrow_flatbuf_Utf8_ref_t org_apache_arrow_flatbuf_Utf8_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Utf8_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Utf8, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Binary_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Binary_ref_t;
+static org_apache_arrow_flatbuf_Binary_ref_t org_apache_arrow_flatbuf_Binary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Binary_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Binary, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_LargeUtf8_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_LargeUtf8_ref_t;
+static org_apache_arrow_flatbuf_LargeUtf8_ref_t org_apache_arrow_flatbuf_LargeUtf8_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeUtf8_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_LargeUtf8, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_LargeBinary_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_LargeBinary_ref_t;
+static org_apache_arrow_flatbuf_LargeBinary_ref_t org_apache_arrow_flatbuf_LargeBinary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_LargeBinary_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_LargeBinary, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_FixedSizeBinary_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_ref_t;
+static org_apache_arrow_flatbuf_FixedSizeBinary_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_FixedSizeBinary_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeBinary, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Bool_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Bool_ref_t;
+static org_apache_arrow_flatbuf_Bool_ref_t org_apache_arrow_flatbuf_Bool_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Bool_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Bool, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_RunEndEncoded_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_RunEndEncoded_ref_t;
+static org_apache_arrow_flatbuf_RunEndEncoded_ref_t org_apache_arrow_flatbuf_RunEndEncoded_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_RunEndEncoded_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_RunEndEncoded, 0)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Decimal_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Decimal_ref_t;
+static org_apache_arrow_flatbuf_Decimal_ref_t org_apache_arrow_flatbuf_Decimal_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Decimal_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Decimal, 3)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Date_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Date_ref_t;
+static org_apache_arrow_flatbuf_Date_ref_t org_apache_arrow_flatbuf_Date_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Date_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Date, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Time_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Time_ref_t;
+static org_apache_arrow_flatbuf_Time_ref_t org_apache_arrow_flatbuf_Time_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Time_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Time, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Timestamp_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Timestamp_ref_t;
+static org_apache_arrow_flatbuf_Timestamp_ref_t org_apache_arrow_flatbuf_Timestamp_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Timestamp_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Timestamp, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Interval_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Interval_ref_t;
+static org_apache_arrow_flatbuf_Interval_ref_t org_apache_arrow_flatbuf_Interval_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Interval_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Interval, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Duration_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Duration_ref_t;
+static org_apache_arrow_flatbuf_Duration_ref_t org_apache_arrow_flatbuf_Duration_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Duration_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Duration, 1)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_KeyValue_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_KeyValue_ref_t;
+static org_apache_arrow_flatbuf_KeyValue_ref_t org_apache_arrow_flatbuf_KeyValue_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_KeyValue_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_KeyValue, 2)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_DictionaryEncoding_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_ref_t;
+static org_apache_arrow_flatbuf_DictionaryEncoding_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_DictionaryEncoding_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding, 4)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Field_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Field_ref_t;
+static org_apache_arrow_flatbuf_Field_ref_t org_apache_arrow_flatbuf_Field_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Field_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Field, 7)
+
+static const flatbuffers_voffset_t __org_apache_arrow_flatbuf_Schema_required[] = { 0 };
+typedef flatbuffers_ref_t org_apache_arrow_flatbuf_Schema_ref_t;
+static org_apache_arrow_flatbuf_Schema_ref_t org_apache_arrow_flatbuf_Schema_clone(flatbuffers_builder_t *B, org_apache_arrow_flatbuf_Schema_table_t t);
+__flatbuffers_build_table(flatbuffers_, org_apache_arrow_flatbuf_Schema, 4)
+
+#define __org_apache_arrow_flatbuf_Null_formal_args 
+#define __org_apache_arrow_flatbuf_Null_call_args 
+static inline org_apache_arrow_flatbuf_Null_ref_t org_apache_arrow_flatbuf_Null_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Null_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Null, org_apache_arrow_flatbuf_Null_file_identifier, org_apache_arrow_flatbuf_Null_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Struct__formal_args 
+#define __org_apache_arrow_flatbuf_Struct__call_args 
+static inline org_apache_arrow_flatbuf_Struct__ref_t org_apache_arrow_flatbuf_Struct__create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Struct__formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Struct_, org_apache_arrow_flatbuf_Struct__file_identifier, org_apache_arrow_flatbuf_Struct__type_identifier)
+
+#define __org_apache_arrow_flatbuf_List_formal_args 
+#define __org_apache_arrow_flatbuf_List_call_args 
+static inline org_apache_arrow_flatbuf_List_ref_t org_apache_arrow_flatbuf_List_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_List_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_List, org_apache_arrow_flatbuf_List_file_identifier, org_apache_arrow_flatbuf_List_type_identifier)
+
+#define __org_apache_arrow_flatbuf_LargeList_formal_args 
+#define __org_apache_arrow_flatbuf_LargeList_call_args 
+static inline org_apache_arrow_flatbuf_LargeList_ref_t org_apache_arrow_flatbuf_LargeList_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeList_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_LargeList, org_apache_arrow_flatbuf_LargeList_file_identifier, org_apache_arrow_flatbuf_LargeList_type_identifier)
+
+#define __org_apache_arrow_flatbuf_FixedSizeList_formal_args , int32_t v0
+#define __org_apache_arrow_flatbuf_FixedSizeList_call_args , v0
+static inline org_apache_arrow_flatbuf_FixedSizeList_ref_t org_apache_arrow_flatbuf_FixedSizeList_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FixedSizeList_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeList, org_apache_arrow_flatbuf_FixedSizeList_file_identifier, org_apache_arrow_flatbuf_FixedSizeList_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Map_formal_args , flatbuffers_bool_t v0
+#define __org_apache_arrow_flatbuf_Map_call_args , v0
+static inline org_apache_arrow_flatbuf_Map_ref_t org_apache_arrow_flatbuf_Map_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Map_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Map, org_apache_arrow_flatbuf_Map_file_identifier, org_apache_arrow_flatbuf_Map_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Union_formal_args , org_apache_arrow_flatbuf_UnionMode_enum_t v0, flatbuffers_int32_vec_ref_t v1
+#define __org_apache_arrow_flatbuf_Union_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Union_ref_t org_apache_arrow_flatbuf_Union_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Union_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Union, org_apache_arrow_flatbuf_Union_file_identifier, org_apache_arrow_flatbuf_Union_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Int_formal_args , int32_t v0, flatbuffers_bool_t v1
+#define __org_apache_arrow_flatbuf_Int_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Int_ref_t org_apache_arrow_flatbuf_Int_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Int_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Int, org_apache_arrow_flatbuf_Int_file_identifier, org_apache_arrow_flatbuf_Int_type_identifier)
+
+#define __org_apache_arrow_flatbuf_FloatingPoint_formal_args , org_apache_arrow_flatbuf_Precision_enum_t v0
+#define __org_apache_arrow_flatbuf_FloatingPoint_call_args , v0
+static inline org_apache_arrow_flatbuf_FloatingPoint_ref_t org_apache_arrow_flatbuf_FloatingPoint_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FloatingPoint_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_FloatingPoint, org_apache_arrow_flatbuf_FloatingPoint_file_identifier, org_apache_arrow_flatbuf_FloatingPoint_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Utf8_formal_args 
+#define __org_apache_arrow_flatbuf_Utf8_call_args 
+static inline org_apache_arrow_flatbuf_Utf8_ref_t org_apache_arrow_flatbuf_Utf8_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Utf8_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Utf8, org_apache_arrow_flatbuf_Utf8_file_identifier, org_apache_arrow_flatbuf_Utf8_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Binary_formal_args 
+#define __org_apache_arrow_flatbuf_Binary_call_args 
+static inline org_apache_arrow_flatbuf_Binary_ref_t org_apache_arrow_flatbuf_Binary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Binary_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Binary, org_apache_arrow_flatbuf_Binary_file_identifier, org_apache_arrow_flatbuf_Binary_type_identifier)
+
+#define __org_apache_arrow_flatbuf_LargeUtf8_formal_args 
+#define __org_apache_arrow_flatbuf_LargeUtf8_call_args 
+static inline org_apache_arrow_flatbuf_LargeUtf8_ref_t org_apache_arrow_flatbuf_LargeUtf8_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeUtf8_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_LargeUtf8, org_apache_arrow_flatbuf_LargeUtf8_file_identifier, org_apache_arrow_flatbuf_LargeUtf8_type_identifier)
+
+#define __org_apache_arrow_flatbuf_LargeBinary_formal_args 
+#define __org_apache_arrow_flatbuf_LargeBinary_call_args 
+static inline org_apache_arrow_flatbuf_LargeBinary_ref_t org_apache_arrow_flatbuf_LargeBinary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_LargeBinary_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_LargeBinary, org_apache_arrow_flatbuf_LargeBinary_file_identifier, org_apache_arrow_flatbuf_LargeBinary_type_identifier)
+
+#define __org_apache_arrow_flatbuf_FixedSizeBinary_formal_args , int32_t v0
+#define __org_apache_arrow_flatbuf_FixedSizeBinary_call_args , v0
+static inline org_apache_arrow_flatbuf_FixedSizeBinary_ref_t org_apache_arrow_flatbuf_FixedSizeBinary_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_FixedSizeBinary_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_FixedSizeBinary, org_apache_arrow_flatbuf_FixedSizeBinary_file_identifier, org_apache_arrow_flatbuf_FixedSizeBinary_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Bool_formal_args 
+#define __org_apache_arrow_flatbuf_Bool_call_args 
+static inline org_apache_arrow_flatbuf_Bool_ref_t org_apache_arrow_flatbuf_Bool_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Bool_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Bool, org_apache_arrow_flatbuf_Bool_file_identifier, org_apache_arrow_flatbuf_Bool_type_identifier)
+
+#define __org_apache_arrow_flatbuf_RunEndEncoded_formal_args 
+#define __org_apache_arrow_flatbuf_RunEndEncoded_call_args 
+static inline org_apache_arrow_flatbuf_RunEndEncoded_ref_t org_apache_arrow_flatbuf_RunEndEncoded_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_RunEndEncoded_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_RunEndEncoded, org_apache_arrow_flatbuf_RunEndEncoded_file_identifier, org_apache_arrow_flatbuf_RunEndEncoded_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Decimal_formal_args , int32_t v0, int32_t v1, int32_t v2
+#define __org_apache_arrow_flatbuf_Decimal_call_args , v0, v1, v2
+static inline org_apache_arrow_flatbuf_Decimal_ref_t org_apache_arrow_flatbuf_Decimal_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Decimal_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Decimal, org_apache_arrow_flatbuf_Decimal_file_identifier, org_apache_arrow_flatbuf_Decimal_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Date_formal_args , org_apache_arrow_flatbuf_DateUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_Date_call_args , v0
+static inline org_apache_arrow_flatbuf_Date_ref_t org_apache_arrow_flatbuf_Date_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Date_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Date, org_apache_arrow_flatbuf_Date_file_identifier, org_apache_arrow_flatbuf_Date_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Time_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0, int32_t v1
+#define __org_apache_arrow_flatbuf_Time_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Time_ref_t org_apache_arrow_flatbuf_Time_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Time_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Time, org_apache_arrow_flatbuf_Time_file_identifier, org_apache_arrow_flatbuf_Time_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Timestamp_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0, flatbuffers_string_ref_t v1
+#define __org_apache_arrow_flatbuf_Timestamp_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_Timestamp_ref_t org_apache_arrow_flatbuf_Timestamp_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Timestamp_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Timestamp, org_apache_arrow_flatbuf_Timestamp_file_identifier, org_apache_arrow_flatbuf_Timestamp_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Interval_formal_args , org_apache_arrow_flatbuf_IntervalUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_Interval_call_args , v0
+static inline org_apache_arrow_flatbuf_Interval_ref_t org_apache_arrow_flatbuf_Interval_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Interval_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Interval, org_apache_arrow_flatbuf_Interval_file_identifier, org_apache_arrow_flatbuf_Interval_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Duration_formal_args , org_apache_arrow_flatbuf_TimeUnit_enum_t v0
+#define __org_apache_arrow_flatbuf_Duration_call_args , v0
+static inline org_apache_arrow_flatbuf_Duration_ref_t org_apache_arrow_flatbuf_Duration_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Duration_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Duration, org_apache_arrow_flatbuf_Duration_file_identifier, org_apache_arrow_flatbuf_Duration_type_identifier)
+
+#define __org_apache_arrow_flatbuf_KeyValue_formal_args , flatbuffers_string_ref_t v0, flatbuffers_string_ref_t v1
+#define __org_apache_arrow_flatbuf_KeyValue_call_args , v0, v1
+static inline org_apache_arrow_flatbuf_KeyValue_ref_t org_apache_arrow_flatbuf_KeyValue_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_KeyValue_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_KeyValue, org_apache_arrow_flatbuf_KeyValue_file_identifier, org_apache_arrow_flatbuf_KeyValue_type_identifier)
+
+#define __org_apache_arrow_flatbuf_DictionaryEncoding_formal_args , int64_t v0, org_apache_arrow_flatbuf_Int_ref_t v1, flatbuffers_bool_t v2, org_apache_arrow_flatbuf_DictionaryKind_enum_t v3
+#define __org_apache_arrow_flatbuf_DictionaryEncoding_call_args , v0, v1, v2, v3
+static inline org_apache_arrow_flatbuf_DictionaryEncoding_ref_t org_apache_arrow_flatbuf_DictionaryEncoding_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_DictionaryEncoding_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_DictionaryEncoding, org_apache_arrow_flatbuf_DictionaryEncoding_file_identifier, org_apache_arrow_flatbuf_DictionaryEncoding_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Field_formal_args ,\
+  flatbuffers_string_ref_t v0, flatbuffers_bool_t v1, org_apache_arrow_flatbuf_Type_union_ref_t v3, org_apache_arrow_flatbuf_DictionaryEncoding_ref_t v4, org_apache_arrow_flatbuf_Field_vec_ref_t v5, org_apache_arrow_flatbuf_KeyValue_vec_ref_t v6
+#define __org_apache_arrow_flatbuf_Field_call_args ,\
+  v0, v1, v3, v4, v5, v6
+static inline org_apache_arrow_flatbuf_Field_ref_t org_apache_arrow_flatbuf_Field_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Field_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Field, org_apache_arrow_flatbuf_Field_file_identifier, org_apache_arrow_flatbuf_Field_type_identifier)
+
+#define __org_apache_arrow_flatbuf_Schema_formal_args , org_apache_arrow_flatbuf_Endianness_enum_t v0, org_apache_arrow_flatbuf_Field_vec_ref_t v1, org_apache_arrow_flatbuf_KeyValue_vec_ref_t v2, org_apache_arrow_flatbuf_Feature_vec_ref_t v3
+#define __org_apache_arrow_flatbuf_Schema_call_args , v0, v1, v2, v3
+static inline org_apache_arrow_flatbuf_Schema_ref_t org_apache_arrow_flatbuf_Schema_create(flatbuffers_builder_t *B __org_apache_arrow_flatbuf_Schema_formal_args);
+__flatbuffers_build_table_prolog(flatbuffers_, org_apache_arrow_flatbuf_Schema, org_apache_arrow_flatbuf_Schema_file_identifier, org_apache_arrow_flatbuf_Schema_type_identifier)
+
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_NONE(void)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_NONE; uref.value = 0; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Null(org_apache_arrow_flatbuf_Null_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Null; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Int(org_apache_arrow_flatbuf_Int_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Int; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_FloatingPoint(org_apache_arrow_flatbuf_FloatingPoint_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_FloatingPoint; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Binary(org_apache_arrow_flatbuf_Binary_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Binary; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Utf8(org_apache_arrow_flatbuf_Utf8_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Utf8; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Bool(org_apache_arrow_flatbuf_Bool_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Bool; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Decimal(org_apache_arrow_flatbuf_Decimal_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Decimal; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Date(org_apache_arrow_flatbuf_Date_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Date; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Time(org_apache_arrow_flatbuf_Time_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Time; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Timestamp(org_apache_arrow_flatbuf_Timestamp_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Timestamp; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Interval(org_apache_arrow_flatbuf_Interval_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Interval; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_List(org_apache_arrow_flatbuf_List_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_List; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Struct_(org_apache_arrow_flatbuf_Struct__ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Struct_; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_Union(org_apache_arrow_flatbuf_Union_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_Union; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_FixedSizeBinary(org_apache_arrow_flatbuf_FixedSizeBinary_ref_t ref)
+{ org_apache_arrow_flatbuf_Type_union_ref_t uref; uref.type = org_apache_arrow_flatbuf_Type_FixedSizeBinary; uref.value = ref; return uref; }
+static inline org_apache_arrow_flatbuf_Type_union_ref_t org_apache_arrow_flatbuf_Type_as_FixedSizeList(org_apache_arrow_flatbuf_FixedSizeList_ref_t ref)
... 30016 lines suppressed ...