Compare commits

..

5 Commits

Author SHA1 Message Date
505ec2fb6a Fix CreateVector/CreateVectorOfStructs for non-std vector types (cpp_vec_type)
When cpp_vec_type is set to a non-std container, Pack methods for scalar,
bool, and plain-struct vectors now use the pointer+size overloads of
CreateVector/CreateVectorOfStructs instead of the std::vector-only overloads.
Extends the combined cpp_vec_type+native_type test to also cover scalar
(ubyte) vectors with a custom container type.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 20:48:32 +02:00
19aa2ce420 Fix CreateVectorOfNativeStructs for non-std vector types (cpp_vec_type + native_type)
When a field combines cpp_vec_type (e.g. eastl::vector) with native_type on a
struct, the generated Pack method now uses the pointer+size overload of
CreateVectorOfNativeStructs instead of the std::vector overload, which only
accepts std::vector. Adds a dedicated test covering the combined attribute case.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 20:35:36 +02:00
35665b5ae7 Add cpp_vec_type attribute for object API vector customization
Mirrors cpp_str_type and cpp_ptr_type: a per-field cpp_vec_type attribute
lets users substitute any std::vector-compatible container in generated
T-structs, and --cpp-vec-type sets the global default.

NativeVector() resolves the attribute (falling back to the global option,
then std::vector). Changes applied to GenTypeNative, GenMember, GenParam
(CreateDirect), and the CreateVectorOfStrings fast-path guard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 19:55:26 +02:00
9e9f5bbfcf Fix field-level native_type for vector pack and CreateTable args
Complete field-level native_type/native_type_pack_name support in C++
codegen by fixing two remaining locations that only checked struct-level
attributes: vector-of-structs packing and CreateTable argument passing.
Add tests with a struct lacking struct-level native_type to verify
field-level attributes work end-to-end.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 15:47:07 +02:00
4edfa03ffc native_type and native_inline on fields 2026-05-09 12:23:35 +02:00
229 changed files with 18006 additions and 22876 deletions

View File

@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@@ -42,7 +42,7 @@ jobs:
chmod +x flatc chmod +x flatc
./flatc --version ./flatc --version
- name: upload build artifacts - name: upload build artifacts
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: Linux flatc binary ${{ matrix.cxx }} name: Linux flatc binary ${{ matrix.cxx }}
path: flatc path: flatc
@@ -170,7 +170,7 @@ jobs:
- name: test - name: test
run: Release\flattests.exe run: Release\flattests.exe
- name: upload build artifacts - name: upload build artifacts
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: Windows flatc binary name: Windows flatc binary
path: Release\flatc.exe path: Release\flatc.exe
@@ -191,7 +191,7 @@ jobs:
build-dotnet-windows: build-dotnet-windows:
name: Build .NET Windows name: Build .NET Windows
runs-on: windows-2022 runs-on: windows-2022-64core
strategy: strategy:
matrix: matrix:
configuration: [ configuration: [
@@ -246,7 +246,7 @@ jobs:
chmod +x Release/flatc chmod +x Release/flatc
Release/flatc --version Release/flatc --version
- name: upload build artifacts - name: upload build artifacts
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: Mac flatc binary Intel name: Mac flatc binary Intel
path: Release/flatc path: Release/flatc
@@ -289,7 +289,7 @@ jobs:
chmod +x Release/flatc chmod +x Release/flatc
Release/flatc --version Release/flatc --version
- name: upload build artifacts - name: upload build artifacts
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: Mac flatc binary Universal name: Mac flatc binary Universal
path: Release/flatc path: Release/flatc
@@ -314,12 +314,12 @@ jobs:
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- name: set up Java - name: set up Java
uses: actions/setup-java@v5 uses: actions/setup-java@v4
with: with:
distribution: temurin distribution: temurin
java-version: 17 java-version: 17
- name: set up Gradle - name: set up Gradle
uses: gradle/actions/setup-gradle@v6 uses: gradle/actions/setup-gradle@v5
- name: set up flatc - name: set up flatc
run: | run: |
cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON . cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF -DFLATBUFFERS_STRICT_MODE=ON .
@@ -373,7 +373,7 @@ jobs:
- name: Run benchmarks - name: Run benchmarks
run: ./flatbenchmark --benchmark_repetitions=5 --benchmark_display_aggregates_only=true --benchmark_out_format=console --benchmark_out=benchmarks/results_${{matrix.cxx}} run: ./flatbenchmark --benchmark_repetitions=5 --benchmark_display_aggregates_only=true --benchmark_out_format=console --benchmark_out=benchmarks/results_${{matrix.cxx}}
- name: Upload benchmarks results - name: Upload benchmarks results
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
with: with:
name: Linux flatbenchmark results ${{matrix.cxx}} name: Linux flatbenchmark results ${{matrix.cxx}}
path: benchmarks/results_${{matrix.cxx}} path: benchmarks/results_${{matrix.cxx}}
@@ -394,12 +394,12 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v6 uses: actions/checkout@v6
- name: set up Java - name: set up Java
uses: actions/setup-java@v5 uses: actions/setup-java@v4
with: with:
distribution: temurin distribution: temurin
java-version: 17 java-version: 17
- name: set up Gradle - name: set up Gradle
uses: gradle/actions/setup-gradle@v6 uses: gradle/actions/setup-gradle@v5
- name: Build flatc - name: Build flatc
run: | run: |
cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF . cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF .
@@ -417,12 +417,12 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v6 uses: actions/checkout@v6
- name: set up Java - name: set up Java
uses: actions/setup-java@v5 uses: actions/setup-java@v4
with: with:
distribution: temurin distribution: temurin
java-version: 17 java-version: 17
- name: set up Gradle - name: set up Gradle
uses: gradle/actions/setup-gradle@v6 uses: gradle/actions/setup-gradle@v5
- name: Build flatc - name: Build flatc
run: | run: |
cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF . cmake -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF .
@@ -446,7 +446,7 @@ jobs:
build-rust-windows: build-rust-windows:
name: Build Rust Windows name: Build Rust Windows
runs-on: windows-2022 runs-on: windows-2022-64core
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- name: test - name: test
@@ -545,7 +545,7 @@ jobs:
# FIXME: make test script not rely on flatc # FIXME: make test script not rely on flatc
run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF . && make -j run: cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_INSTALL=OFF -DFLATBUFFERS_BUILD_FLATLIB=OFF -DFLATBUFFERS_BUILD_FLATHASH=OFF . && make -j
- name: pnpm - name: pnpm
run: npm install -g pnpm run: npm install -g pnpm esbuild
- name: deps - name: deps
run: pnpm i run: pnpm i
- name: compile - name: compile

View File

@@ -21,11 +21,11 @@ jobs:
run: | run: |
git config user.name github-actions[bot] git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- uses: actions/setup-python@v6 - uses: actions/setup-python@v5
with: with:
python-version: 3.x python-version: 3.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v5 - uses: actions/cache@v4
with: with:
key: mkdocs-material-${{ env.cache_id }} key: mkdocs-material-${{ env.cache_id }}
path: .cache path: .cache

View File

@@ -27,7 +27,7 @@ jobs:
language: c++ language: c++
fuzz-seconds: 60 fuzz-seconds: 60
- name: Upload Crash - name: Upload Crash
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success' if: failure() && steps.build.outcome == 'success'
with: with:
name: artifacts name: artifacts

View File

@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- uses: actions/setup-node@v6 - uses: actions/setup-node@v3
with: with:
node-version: '20.x' node-version: '20.x'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
@@ -30,7 +30,7 @@ jobs:
working-directory: ./python working-directory: ./python
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- uses: actions/setup-python@v6 - uses: actions/setup-python@v4
with: with:
python-version: '3.10' python-version: '3.10'

View File

@@ -240,6 +240,9 @@ set(FlatBuffers_Tests_SRCS
tests/vector_table_naked_ptr_test.cpp tests/vector_table_naked_ptr_test.cpp
tests/native_type_test_impl.h tests/native_type_test_impl.h
tests/native_type_test_impl.cpp tests/native_type_test_impl.cpp
tests/cpp_vec_type_test_impl.h
tests/cpp_vec_type_native_type_test_impl.h
tests/cpp_vec_type_native_type_test_impl.cpp
tests/alignment_test.h tests/alignment_test.h
tests/alignment_test.cpp tests/alignment_test.cpp
tests/64bit/offset64_test.h tests/64bit/offset64_test.h
@@ -554,12 +557,13 @@ if(FLATBUFFERS_BUILD_TESTS)
compile_schema_for_test(tests/arrays_test.fbs "${FLATC_OPT_SCOPED_ENUMS}") compile_schema_for_test(tests/arrays_test.fbs "${FLATC_OPT_SCOPED_ENUMS}")
compile_schema_for_test(tests/native_inline_table_test.fbs "${FLATC_OPT_COMP}") compile_schema_for_test(tests/native_inline_table_test.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/native_type_test.fbs "${FLATC_OPT_COMP}") compile_schema_for_test(tests/native_type_test.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/cpp_vec_type_test.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/cpp_vec_type_native_type_test.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/key_field/key_field_sample.fbs "${FLATC_OPT_COMP}") compile_schema_for_test(tests/key_field/key_field_sample.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/64bit/test_64bit.fbs "${FLATC_OPT_COMP};--bfbs-gen-embed") compile_schema_for_test(tests/64bit/test_64bit.fbs "${FLATC_OPT_COMP};--bfbs-gen-embed")
compile_schema_for_test(tests/64bit/evolution/v1.fbs "${FLATC_OPT_COMP}") compile_schema_for_test(tests/64bit/evolution/v1.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/64bit/evolution/v2.fbs "${FLATC_OPT_COMP}") compile_schema_for_test(tests/64bit/evolution/v2.fbs "${FLATC_OPT_COMP}")
compile_schema_for_test(tests/union_underlying_type_test.fbs "${FLATC_OPT_SCOPED_ENUMS}") compile_schema_for_test(tests/union_underlying_type_test.fbs "${FLATC_OPT_SCOPED_ENUMS}")
compile_schema_for_test(tests/cross_namespace_pack_test.fbs "${FLATC_OPT_COMP}")
if(FLATBUFFERS_CODE_SANITIZE) if(FLATBUFFERS_CODE_SANITIZE)
add_fsanitize_to_target(flattests ${FLATBUFFERS_CODE_SANITIZE}) add_fsanitize_to_target(flattests ${FLATBUFFERS_CODE_SANITIZE})

View File

@@ -23,7 +23,7 @@ bazel_dep(
) )
bazel_dep( bazel_dep(
name = "grpc", name = "grpc",
version = "1.76.0", version = "1.70.1",
repo_name = "com_github_grpc_grpc", repo_name = "com_github_grpc_grpc",
) )
bazel_dep( bazel_dep(
@@ -49,7 +49,7 @@ bazel_dep(
) )
bazel_dep( bazel_dep(
name = "rules_swift", name = "rules_swift",
version = "3.1.2", version = "2.1.1",
max_compatibility_level = 3, max_compatibility_level = 3,
repo_name = "build_bazel_rules_swift", repo_name = "build_bazel_rules_swift",
) )
@@ -63,6 +63,9 @@ npm.npm_translate_lock(
name = "flatbuffers_npm", name = "flatbuffers_npm",
npmrc = "//:.npmrc", npmrc = "//:.npmrc",
pnpm_lock = "//ts:pnpm-lock.yaml", pnpm_lock = "//ts:pnpm-lock.yaml",
# Override the Bazel package where pnpm-lock.yaml is located and link
# to the specified package instead.
root_package = "ts",
verify_node_modules_ignored = "//:.bazelignore", verify_node_modules_ignored = "//:.bazelignore",
) )
use_repo(npm, "flatbuffers_npm") use_repo(npm, "flatbuffers_npm")

View File

@@ -5,7 +5,7 @@ import 'types.dart';
/// The main builder class for creation of a FlexBuffer. /// The main builder class for creation of a FlexBuffer.
class Builder { class Builder {
ByteData _buffer; final ByteData _buffer;
List<_StackValue> _stack = []; List<_StackValue> _stack = [];
List<_StackPointer> _stackPointers = []; List<_StackPointer> _stackPointers = [];
int _offset = 0; int _offset = 0;
@@ -506,7 +506,6 @@ class Builder {
if (prevSize < size) { if (prevSize < size) {
final newBuf = ByteData(size); final newBuf = ByteData(size);
newBuf.buffer.asUint8List().setAll(0, _buffer.buffer.asUint8List()); newBuf.buffer.asUint8List().setAll(0, _buffer.buffer.asUint8List());
_buffer = newBuf;
} }
return newOffset; return newOffset;
} }

View File

@@ -318,21 +318,6 @@ void main() {
1, 1,
]); ]);
} }
{
// Default buffer is 2048 bytes, add 2300 bytes of strings that force it
// to grow.
final s1 = 'A' * 1000;
final s2 = 'B' * 800;
final s3 = 'C' * 500;
var flx = Builder()
..startVector()
..addString(s1)
..addString(s2)
..addString(s3)
..end();
expect(flx.finish().length, 2323);
}
}); });
test('build map', () { test('build map', () {

View File

@@ -205,47 +205,6 @@ And example of usage, for the time being, can be found in
- Safe getters in [SafeBuffer](https://docs.rs/flatbuffers-reflection/latest/flatbuffers_reflection/struct.SafeBuffer.html), - Safe getters in [SafeBuffer](https://docs.rs/flatbuffers-reflection/latest/flatbuffers_reflection/struct.SafeBuffer.html),
which does verification when constructed so you can use it for any data source which does verification when constructed so you can use it for any data source
## Buffer pre allocation in a latency-sensitive context
In latency-sensitive applications, dynamic memory allocations can introduce unpredictable latency spikes. The `FlatBufferBuilder` internally uses several `Vec`s that may reallocate during serialization:
- The backing buffer for the FlatBuffer data
- `field_locs` for tracking field locations within tables
- `written_vtable_revpos` for deduplicating vtables
- `strings_pool` for shared string interning
To avoid allocations during serialization, you can preallocate all internal vectors upfront using the `with_internal_capacity` constructor:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.rs}
// Preallocate: 1KB buffer, 8 field locations, 16 vtables, 32 shared strings
let mut builder = FlatBufferBuilder::with_internal_capacity(1024, 8, 16, 32);
// All subsequent operations will not allocate (if capacities are sufficient)
let name = builder.create_shared_string("MyMonster");
// ... build your FlatBuffer ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are three variants available:
- `with_internal_capacity(size, field_locs, vtables, strings)` - Creates a new builder with all capacities preallocated
- `from_vec_with_internal_capacity(buffer, field_locs, vtables, strings)` - Reuses an existing `Vec<u8>` as the backing buffer
- `new_in_with_internal_capacity(allocator, field_locs, vtables, strings)` - Uses a custom `Allocator` with preallocated internal vecs
When combined with `reset()`, you can reuse the same builder across multiple serializations without any allocations after the initial setup:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.rs}
let mut builder = FlatBufferBuilder::with_internal_capacity(1024, 8, 16, 32);
loop {
// Build a FlatBuffer (allocation-free if capacities are sufficient)
let data = build_message(&mut builder);
send(data);
// Reset for reuse - clears state but retains allocated capacity
builder.reset();
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
## Useful tools created by others ## Useful tools created by others
* [flatc-rust](https://github.com/frol/flatc-rust) - FlatBuffers compiler * [flatc-rust](https://github.com/frol/flatc-rust) - FlatBuffers compiler

View File

@@ -427,6 +427,9 @@ Current understood attributes:
it won't be accessible anymore by newer code. Note that if you deprecate a it won't be accessible anymore by newer code. Note that if you deprecate a
field that was previous required, old code may fail to validate new data (when field that was previous required, old code may fail to validate new data (when
using the optional verifier). using the optional verifier).
### `required`
- `required` (on a non-scalar table field): this field must always be set. By - `required` (on a non-scalar table field): this field must always be set. By
default, fields do not need to be present in the binary. This is desirable, as default, fields do not need to be present in the binary. This is desirable, as
it helps with forwards/backwards compatibility, and flexibility of data it helps with forwards/backwards compatibility, and flexibility of data

View File

@@ -26,7 +26,7 @@ Simple mutation | Yes | Yes | Yes | Yes | No | No
Reflection | Yes | No | No | No | No | No | No | Basic | No | No | No | No | No Reflection | Yes | No | No | No | No | No | No | Basic | No | No | No | No | No
Buffer verifier | Yes | No | No | No | No | No | No | Yes | No | No | No | No | Yes Buffer verifier | Yes | No | No | No | No | No | No | Yes | No | No | No | No | Yes
Native Object API | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No | No | Yes Native Object API | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No | No | Yes
Optional Scalars | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes Optional Scalars | Yes | Yes | Yes | No | No | Yes | Yes | Yes | No | No | Yes | Yes | Yes
Flexbuffers | Yes | Yes | ? | ? | ? | ? | ? | ? | ? | ? | ? | Yes | Yes Flexbuffers | Yes | Yes | ? | ? | ? | ? | ? | ? | ? | ? | ? | Yes | Yes
Testing: basic | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes Testing: basic | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | Yes
Testing: fuzz | Yes | No | No | Yes | Yes | No | No | No | ? | No | No | Yes | No Testing: fuzz | Yes | No | No | Yes | Yes | No | No | No | ? | No | No | Yes | No

View File

@@ -1,322 +1,297 @@
// automatically generated by the FlatBuffers compiler, do not modify // automatically generated by the FlatBuffers compiler, do not modify
// @generated // @generated
extern crate alloc; extern crate alloc;
#[allow(unused_imports, dead_code)] #[allow(unused_imports, dead_code)]
pub mod flatbuffers { pub mod flatbuffers {
extern crate alloc;
#[allow(unused_imports, dead_code)] extern crate alloc;
pub mod goldens { #[allow(unused_imports, dead_code)]
extern crate alloc; pub mod goldens {
pub enum GalaxyOffset {} extern crate alloc;
#[derive(Copy, Clone, PartialEq)] pub enum GalaxyOffset {}
pub struct Galaxy<'a> { #[derive(Copy, Clone, PartialEq)]
pub _tab: ::flatbuffers::Table<'a>,
}
impl<'a> ::flatbuffers::Follow<'a> for Galaxy<'a> { pub struct Galaxy<'a> {
type Inner = Galaxy<'a>; pub _tab: ::flatbuffers::Table<'a>,
}
#[inline] impl<'a> ::flatbuffers::Follow<'a> for Galaxy<'a> {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { type Inner = Galaxy<'a>;
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } #[inline]
} unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
} Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl<'a> Galaxy<'a> { impl<'a> Galaxy<'a> {
pub const VT_NUM_STARS: ::flatbuffers::VOffsetT = 4; pub const VT_NUM_STARS: ::flatbuffers::VOffsetT = 4;
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
Galaxy { _tab: table } Galaxy { _tab: table }
} }
#[allow(unused_mut)]
#[allow(unused_mut)] pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( _fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, args: &'args GalaxyArgs
args: &'args GalaxyArgs ) -> ::flatbuffers::WIPOffset<Galaxy<'bldr>> {
) -> ::flatbuffers::WIPOffset<Galaxy<'bldr>> { let mut builder = GalaxyBuilder::new(_fbb);
let mut builder = GalaxyBuilder::new(_fbb); builder.add_num_stars(args.num_stars);
builder.add_num_stars(args.num_stars); builder.finish()
builder.finish() }
}
#[inline] #[inline]
pub fn num_stars(&self) -> i64 { pub fn num_stars(&self) -> i64 {
// Safety: // Safety:
// Created from valid Table for this object // Created from valid Table for this object
// which contains a valid value in this slot // which contains a valid value in this slot
unsafe { self._tab.get::<i64>(Galaxy::VT_NUM_STARS, Some(0)).unwrap()} unsafe { self._tab.get::<i64>(Galaxy::VT_NUM_STARS, Some(0)).unwrap()}
} }
} }
impl ::flatbuffers::Verifiable for Galaxy<'_> { impl ::flatbuffers::Verifiable for Galaxy<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<i64>("num_stars", Self::VT_NUM_STARS, false)? .visit_field::<i64>("num_stars", Self::VT_NUM_STARS, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct GalaxyArgs {
pub num_stars: i64,
}
impl<'a> Default for GalaxyArgs {
#[inline]
fn default() -> Self {
GalaxyArgs {
num_stars: 0,
}
}
}
pub struct GalaxyArgs { pub struct GalaxyBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
pub num_stars: i64, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
} start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> GalaxyBuilder<'a, 'b, A> {
#[inline]
pub fn add_num_stars(&mut self, num_stars: i64) {
self.fbb_.push_slot::<i64>(Galaxy::VT_NUM_STARS, num_stars, 0);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> GalaxyBuilder<'a, 'b, A> {
let start = _fbb.start_table();
GalaxyBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Galaxy<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
impl<'a> Default for GalaxyArgs { impl ::core::fmt::Debug for Galaxy<'_> {
#[inline] fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
fn default() -> Self { let mut ds = f.debug_struct("Galaxy");
GalaxyArgs { ds.field("num_stars", &self.num_stars());
num_stars: 0, ds.finish()
} }
} }
} pub enum UniverseOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct GalaxyBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct Universe<'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, pub _tab: ::flatbuffers::Table<'a>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, }
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> GalaxyBuilder<'a, 'b, A> { impl<'a> ::flatbuffers::Follow<'a> for Universe<'a> {
#[inline] type Inner = Universe<'a>;
pub fn add_num_stars(&mut self, num_stars: i64) { #[inline]
self.fbb_.push_slot::<i64>(Galaxy::VT_NUM_STARS, num_stars, 0); unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
} Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
#[inline] impl<'a> Universe<'a> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> GalaxyBuilder<'a, 'b, A> { pub const VT_AGE: ::flatbuffers::VOffsetT = 4;
let start = _fbb.start_table(); pub const VT_GALAXIES: ::flatbuffers::VOffsetT = 6;
GalaxyBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline] #[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Galaxy<'a>> { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
let o = self.fbb_.end_table(self.start_); Universe { _tab: table }
::flatbuffers::WIPOffset::new(o.value()) }
} #[allow(unused_mut)]
} pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
impl ::core::fmt::Debug for Galaxy<'_> { args: &'args UniverseArgs<'args>
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { ) -> ::flatbuffers::WIPOffset<Universe<'bldr>> {
let mut ds = f.debug_struct("Galaxy"); let mut builder = UniverseBuilder::new(_fbb);
ds.field("num_stars", &self.num_stars()); builder.add_age(args.age);
ds.finish() if let Some(x) = args.galaxies { builder.add_galaxies(x); }
} builder.finish()
} }
pub enum UniverseOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct Universe<'a> {
pub _tab: ::flatbuffers::Table<'a>,
}
impl<'a> ::flatbuffers::Follow<'a> for Universe<'a> {
type Inner = Universe<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl<'a> Universe<'a> {
pub const VT_AGE: ::flatbuffers::VOffsetT = 4;
pub const VT_GALAXIES: ::flatbuffers::VOffsetT = 6;
#[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
Universe { _tab: table }
}
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args UniverseArgs<'args>
) -> ::flatbuffers::WIPOffset<Universe<'bldr>> {
let mut builder = UniverseBuilder::new(_fbb);
builder.add_age(args.age);
if let Some(x) = args.galaxies { builder.add_galaxies(x); }
builder.finish()
}
#[inline] #[inline]
pub fn age(&self) -> f64 { pub fn age(&self) -> f64 {
// Safety: // Safety:
// Created from valid Table for this object // Created from valid Table for this object
// which contains a valid value in this slot // which contains a valid value in this slot
unsafe { self._tab.get::<f64>(Universe::VT_AGE, Some(0.0)).unwrap()} unsafe { self._tab.get::<f64>(Universe::VT_AGE, Some(0.0)).unwrap()}
} }
#[inline]
pub fn galaxies(&self) -> Option<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Galaxy<'a>>>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Galaxy>>>>(Universe::VT_GALAXIES, None)}
}
}
#[inline] impl ::flatbuffers::Verifiable for Universe<'_> {
pub fn galaxies(&self) -> Option<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Galaxy<'a>>>> { #[inline]
// Safety: fn run_verifier(
// Created from valid Table for this object v: &mut ::flatbuffers::Verifier, pos: usize
// which contains a valid value in this slot ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Galaxy>>>>(Universe::VT_GALAXIES, None)} v.visit_table(pos)?
} .visit_field::<f64>("age", Self::VT_AGE, false)?
} .visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, ::flatbuffers::ForwardsUOffset<Galaxy>>>>("galaxies", Self::VT_GALAXIES, false)?
.finish();
Ok(())
}
}
pub struct UniverseArgs<'a> {
pub age: f64,
pub galaxies: Option<::flatbuffers::WIPOffset<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Galaxy<'a>>>>>,
}
impl<'a> Default for UniverseArgs<'a> {
#[inline]
fn default() -> Self {
UniverseArgs {
age: 0.0,
galaxies: None,
}
}
}
impl ::flatbuffers::Verifiable for Universe<'_> { pub struct UniverseBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
#[inline] fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
fn run_verifier( start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
v: &mut ::flatbuffers::Verifier, pos: usize }
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> UniverseBuilder<'a, 'b, A> {
v.visit_table(pos)? #[inline]
.visit_field::<f64>("age", Self::VT_AGE, false)? pub fn add_age(&mut self, age: f64) {
.visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, ::flatbuffers::ForwardsUOffset<Galaxy>>>>("galaxies", Self::VT_GALAXIES, false)? self.fbb_.push_slot::<f64>(Universe::VT_AGE, age, 0.0);
.finish(); }
Ok(()) #[inline]
} pub fn add_galaxies(&mut self, galaxies: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , ::flatbuffers::ForwardsUOffset<Galaxy<'b >>>>) {
} self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Universe::VT_GALAXIES, galaxies);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> UniverseBuilder<'a, 'b, A> {
let start = _fbb.start_table();
UniverseBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Universe<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
pub struct UniverseArgs<'a> { impl ::core::fmt::Debug for Universe<'_> {
pub age: f64, fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
pub galaxies: Option<::flatbuffers::WIPOffset<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Galaxy<'a>>>>>, let mut ds = f.debug_struct("Universe");
} ds.field("age", &self.age());
ds.field("galaxies", &self.galaxies());
ds.finish()
}
}
#[inline]
/// Verifies that a buffer of bytes contains a `Universe`
/// and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_universe_unchecked`.
pub fn root_as_universe(buf: &[u8]) -> Result<Universe<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root::<Universe>(buf)
}
#[inline]
/// Verifies that a buffer of bytes contains a size prefixed
/// `Universe` and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `size_prefixed_root_as_universe_unchecked`.
pub fn size_prefixed_root_as_universe(buf: &[u8]) -> Result<Universe<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root::<Universe>(buf)
}
#[inline]
/// Verifies, with the given options, that a buffer of bytes
/// contains a `Universe` and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_universe_unchecked`.
pub fn root_as_universe_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<Universe<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root_with_opts::<Universe<'b>>(opts, buf)
}
#[inline]
/// Verifies, with the given verifier options, that a buffer of
/// bytes contains a size prefixed `Universe` and returns
/// it. Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_universe_unchecked`.
pub fn size_prefixed_root_as_universe_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<Universe<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root_with_opts::<Universe<'b>>(opts, buf)
}
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a Universe and returns it.
/// # Safety
/// Callers must trust the given bytes do indeed contain a valid `Universe`.
pub unsafe fn root_as_universe_unchecked(buf: &[u8]) -> Universe<'_> {
unsafe { ::flatbuffers::root_unchecked::<Universe>(buf) }
}
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a size prefixed Universe and returns it.
/// # Safety
/// Callers must trust the given bytes do indeed contain a valid size prefixed `Universe`.
pub unsafe fn size_prefixed_root_as_universe_unchecked(buf: &[u8]) -> Universe<'_> {
unsafe { ::flatbuffers::size_prefixed_root_unchecked::<Universe>(buf) }
}
#[inline]
pub fn finish_universe_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
root: ::flatbuffers::WIPOffset<Universe<'a>>) {
fbb.finish(root, None);
}
impl<'a> Default for UniverseArgs<'a> { #[inline]
#[inline] pub fn finish_size_prefixed_universe_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, root: ::flatbuffers::WIPOffset<Universe<'a>>) {
fn default() -> Self { fbb.finish_size_prefixed(root, None);
UniverseArgs { }
age: 0.0, } // pub mod goldens
galaxies: None, } // pub mod flatbuffers
}
}
}
pub struct UniverseBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> UniverseBuilder<'a, 'b, A> {
#[inline]
pub fn add_age(&mut self, age: f64) {
self.fbb_.push_slot::<f64>(Universe::VT_AGE, age, 0.0);
}
#[inline]
pub fn add_galaxies(&mut self, galaxies: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , ::flatbuffers::ForwardsUOffset<Galaxy<'b >>>>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Universe::VT_GALAXIES, galaxies);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> UniverseBuilder<'a, 'b, A> {
let start = _fbb.start_table();
UniverseBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Universe<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
impl ::core::fmt::Debug for Universe<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("Universe");
ds.field("age", &self.age());
ds.field("galaxies", &self.galaxies());
ds.finish()
}
}
/// Verifies that a buffer of bytes contains a `Universe`
/// and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_universe_unchecked`.
#[inline]
pub fn root_as_universe(buf: &[u8]) -> Result<Universe<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root::<Universe>(buf)
}
/// Verifies that a buffer of bytes contains a size prefixed
/// `Universe` and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `size_prefixed_root_as_universe_unchecked`.
#[inline]
pub fn size_prefixed_root_as_universe(buf: &[u8]) -> Result<Universe<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root::<Universe>(buf)
}
/// Verifies, with the given options, that a buffer of bytes
/// contains a `Universe` and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_universe_unchecked`.
#[inline]
pub fn root_as_universe_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<Universe<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root_with_opts::<Universe<'b>>(opts, buf)
}
/// Verifies, with the given verifier options, that a buffer of
/// bytes contains a size prefixed `Universe` and returns
/// it. Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_universe_unchecked`.
#[inline]
pub fn size_prefixed_root_as_universe_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<Universe<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root_with_opts::<Universe<'b>>(opts, buf)
}
/// Assumes, without verification, that a buffer of bytes contains a Universe and returns it.
/// # Safety
/// Callers must trust the given bytes do indeed contain a valid `Universe`.
#[inline]
pub unsafe fn root_as_universe_unchecked(buf: &[u8]) -> Universe<'_> {
unsafe { ::flatbuffers::root_unchecked::<Universe>(buf) }
}
/// Assumes, without verification, that a buffer of bytes contains a size prefixed Universe and returns it.
/// # Safety
/// Callers must trust the given bytes do indeed contain a valid size prefixed `Universe`.
#[inline]
pub unsafe fn size_prefixed_root_as_universe_unchecked(buf: &[u8]) -> Universe<'_> {
unsafe { ::flatbuffers::size_prefixed_root_unchecked::<Universe>(buf) }
}
#[inline]
pub fn finish_universe_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
root: ::flatbuffers::WIPOffset<Universe<'a>>
) {
fbb.finish(root, None);
}
#[inline]
pub fn finish_size_prefixed_universe_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
root: ::flatbuffers::WIPOffset<Universe<'a>>
) {
fbb.finish_size_prefixed(root, None);
}
} // pub mod goldens
} // pub mod flatbuffers

View File

@@ -4,7 +4,7 @@
import * as flatbuffers from 'flatbuffers'; import * as flatbuffers from 'flatbuffers';
import { Galaxy } from './galaxy.js'; import { Galaxy } from '../../flatbuffers/goldens/galaxy.js';
export class Universe { export class Universe {

View File

@@ -17,14 +17,16 @@ public struct models_HelloReply: FlatBufferTable, FlatbuffersVectorInitializable
private init(_ t: Table) { _accessor = t } private init(_ t: Table) { _accessor = t }
public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) } public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) }
private struct VT { private enum VTOFFSET: VOffset {
static let message: VOffset = 4 case message = 4
var v: Int32 { Int32(self.rawValue) }
var p: VOffset { self.rawValue }
} }
public var message: String? { let o = _accessor.offset(VT.message); return o == 0 ? nil : _accessor.string(at: o) } public var message: String? { let o = _accessor.offset(VTOFFSET.message.v); return o == 0 ? nil : _accessor.string(at: o) }
public var messageSegmentArray: [UInt8]? { return _accessor.getVector(at: VT.message) } public var messageSegmentArray: [UInt8]? { return _accessor.getVector(at: VTOFFSET.message.v) }
public static func startHelloReply(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) } public static func startHelloReply(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
public static func add(message: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: message, at: VT.message) } public static func add(message: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: message, at: VTOFFSET.message.p) }
public static func endHelloReply(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } public static func endHelloReply(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end }
public static func createHelloReply( public static func createHelloReply(
_ fbb: inout FlatBufferBuilder, _ fbb: inout FlatBufferBuilder,
@@ -37,16 +39,16 @@ public struct models_HelloReply: FlatBufferTable, FlatbuffersVectorInitializable
public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable { public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable {
var _v = try verifier.visitTable(at: position) var _v = try verifier.visitTable(at: position)
try _v.visit(field: VT.message, fieldName: "message", required: false, type: ForwardOffset<String>.self) try _v.visit(field: VTOFFSET.message.p, fieldName: "message", required: false, type: ForwardOffset<String>.self)
_v.finish() _v.finish()
} }
} }
extension models_HelloReply: Encodable { extension models_HelloReply: Encodable {
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case message = "message" case message = "message"
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(message, forKey: .message) try container.encodeIfPresent(message, forKey: .message)
@@ -62,14 +64,16 @@ public struct models_HelloRequest: FlatBufferTable, FlatbuffersVectorInitializab
private init(_ t: Table) { _accessor = t } private init(_ t: Table) { _accessor = t }
public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) } public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) }
private struct VT { private enum VTOFFSET: VOffset {
static let name: VOffset = 4 case name = 4
var v: Int32 { Int32(self.rawValue) }
var p: VOffset { self.rawValue }
} }
public var name: String? { let o = _accessor.offset(VT.name); return o == 0 ? nil : _accessor.string(at: o) } public var name: String? { let o = _accessor.offset(VTOFFSET.name.v); return o == 0 ? nil : _accessor.string(at: o) }
public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VT.name) } public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VTOFFSET.name.v) }
public static func startHelloRequest(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) } public static func startHelloRequest(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VT.name) } public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) }
public static func endHelloRequest(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } public static func endHelloRequest(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end }
public static func createHelloRequest( public static func createHelloRequest(
_ fbb: inout FlatBufferBuilder, _ fbb: inout FlatBufferBuilder,
@@ -82,16 +86,16 @@ public struct models_HelloRequest: FlatBufferTable, FlatbuffersVectorInitializab
public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable { public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable {
var _v = try verifier.visitTable(at: position) var _v = try verifier.visitTable(at: position)
try _v.visit(field: VT.name, fieldName: "name", required: false, type: ForwardOffset<String>.self) try _v.visit(field: VTOFFSET.name.p, fieldName: "name", required: false, type: ForwardOffset<String>.self)
_v.finish() _v.finish()
} }
} }
extension models_HelloRequest: Encodable { extension models_HelloRequest: Encodable {
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case name = "name" case name = "name"
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(name, forKey: .name)

View File

@@ -1207,20 +1207,11 @@ class Builder FLATBUFFERS_FINAL_CLASS {
String(str); String(str);
} }
size_t AlignedBlob(const void* data, size_t len, BitWidth alignment) {
// The requested alignment must not be smaller than the one required to
// store the length.
return CreateAlignedBlob(data, len, 0, FBT_BLOB,
std::max(alignment, WidthU(len)));
}
size_t AlignedBlob(const std::vector<uint8_t>& v, BitWidth alignment) {
return AlignedBlob(v.data(), v.size(), alignment);
}
size_t Blob(const void* data, size_t len) { size_t Blob(const void* data, size_t len) {
return CreateBlob(data, len, 0, FBT_BLOB); return CreateBlob(data, len, 0, FBT_BLOB);
} }
size_t Blob(const std::vector<uint8_t>& v) { size_t Blob(const std::vector<uint8_t>& v) {
return Blob(v.data(), v.size()); return CreateBlob(v.data(), v.size(), 0, FBT_BLOB);
} }
void Blob(const char* key, const void* data, size_t len) { void Blob(const char* key, const void* data, size_t len) {
@@ -1702,16 +1693,11 @@ class Builder FLATBUFFERS_FINAL_CLASS {
size_t CreateBlob(const void* data, size_t len, size_t trailing, Type type) { size_t CreateBlob(const void* data, size_t len, size_t trailing, Type type) {
auto bit_width = WidthU(len); auto bit_width = WidthU(len);
return CreateAlignedBlob(data, len, trailing, type, bit_width); auto byte_width = Align(bit_width);
}
size_t CreateAlignedBlob(const void* data, size_t len, size_t trailing,
Type type, BitWidth alignment) {
auto byte_width = Align(alignment);
Write<uint64_t>(len, byte_width); Write<uint64_t>(len, byte_width);
auto sloc = buf_.size(); auto sloc = buf_.size();
WriteBytes(data, len + trailing); WriteBytes(data, len + trailing);
stack_.push_back(Value(static_cast<uint64_t>(sloc), type, alignment)); stack_.push_back(Value(static_cast<uint64_t>(sloc), type, bit_width));
return sloc; return sloc;
} }

View File

@@ -676,6 +676,7 @@ struct IDLOptions {
bool gen_absl_hash; bool gen_absl_hash;
std::string cpp_object_api_pointer_type; std::string cpp_object_api_pointer_type;
std::string cpp_object_api_string_type; std::string cpp_object_api_string_type;
std::string cpp_object_api_vector_type;
bool cpp_object_api_string_flexible_constructor; bool cpp_object_api_string_flexible_constructor;
CaseStyle cpp_object_api_field_case_style; CaseStyle cpp_object_api_field_case_style;
bool cpp_direct_copy; bool cpp_direct_copy;
@@ -1012,6 +1013,7 @@ class Parser : public ParserState {
known_attributes_["cpp_ptr_type_get"] = true; known_attributes_["cpp_ptr_type_get"] = true;
known_attributes_["cpp_str_type"] = true; known_attributes_["cpp_str_type"] = true;
known_attributes_["cpp_str_flex_ctor"] = true; known_attributes_["cpp_str_flex_ctor"] = true;
known_attributes_["cpp_vec_type"] = true;
known_attributes_["native_inline"] = true; known_attributes_["native_inline"] = true;
known_attributes_["native_custom_alloc"] = true; known_attributes_["native_custom_alloc"] = true;
known_attributes_["native_type"] = true; known_attributes_["native_type"] = true;

View File

@@ -30,52 +30,50 @@ namespace flatbuffers {
// ------------------------- GETTERS ------------------------- // ------------------------- GETTERS -------------------------
constexpr bool IsScalar(reflection::BaseType t) { inline bool IsScalar(reflection::BaseType t) {
return t >= reflection::UType && t <= reflection::Double; return t >= reflection::UType && t <= reflection::Double;
} }
constexpr bool IsInteger(reflection::BaseType t) { inline bool IsInteger(reflection::BaseType t) {
return t >= reflection::UType && t <= reflection::ULong; return t >= reflection::UType && t <= reflection::ULong;
} }
constexpr bool IsFloat(reflection::BaseType t) { inline bool IsFloat(reflection::BaseType t) {
return t == reflection::Float || t == reflection::Double; return t == reflection::Float || t == reflection::Double;
} }
constexpr bool IsLong(reflection::BaseType t) { inline bool IsLong(reflection::BaseType t) {
return t == reflection::Long || t == reflection::ULong; return t == reflection::Long || t == reflection::ULong;
} }
// This needs to correspond to the BaseType enum.
constexpr size_t kBaseTypeSize[] = {
0, // None
1, // UType
1, // Bool
1, // Byte
1, // UByte
2, // Short
2, // UShort
4, // Int
4, // UInt
8, // Long
8, // ULong
4, // Float
8, // Double
4, // String
4, // Vector
4, // Obj
4, // Union
0, // Array. Only used in structs. 0 was chosen to prevent out-of-bounds
// errors.
8, // Vector64
0 // MaxBaseType. This must be kept the last entry in this array.
};
static_assert(sizeof(kBaseTypeSize) / sizeof(size_t) ==
reflection::MaxBaseType + 1,
"Size of sizes[] array does not match the count of BaseType "
"enum values.");
// Size of a basic type, don't use with structs. // Size of a basic type, don't use with structs.
constexpr size_t GetTypeSize(reflection::BaseType base_type) { inline size_t GetTypeSize(reflection::BaseType base_type) {
return kBaseTypeSize[base_type]; // This needs to correspond to the BaseType enum.
static size_t sizes[] = {
0, // None
1, // UType
1, // Bool
1, // Byte
1, // UByte
2, // Short
2, // UShort
4, // Int
4, // UInt
8, // Long
8, // ULong
4, // Float
8, // Double
4, // String
4, // Vector
4, // Obj
4, // Union
0, // Array. Only used in structs. 0 was chosen to prevent out-of-bounds
// errors.
8, // Vector64
0 // MaxBaseType. This must be kept the last entry in this array.
};
static_assert(sizeof(sizes) / sizeof(size_t) == reflection::MaxBaseType + 1,
"Size of sizes[] array does not match the count of BaseType "
"enum values.");
return sizes[base_type];
} }
// Same as above, but now correctly returns the size of a struct if // Same as above, but now correctly returns the size of a struct if
@@ -422,7 +420,7 @@ pointer_inside_vector<T, U> piv(T* ptr, std::vector<U>& vec) {
return pointer_inside_vector<T, U>(ptr, vec); return pointer_inside_vector<T, U>(ptr, vec);
} }
constexpr const char* UnionTypeFieldSuffix() { return "_type"; } inline const char* UnionTypeFieldSuffix() { return "_type"; }
// Helper to figure out the actual table type a union refers to. // Helper to figure out the actual table type a union refers to.
inline const reflection::Object& GetUnionType( inline const reflection::Object& GetUnionType(

View File

@@ -438,7 +438,8 @@ namespace Google.FlatBuffers
if (off > Offset) if (off > Offset)
throw new ArgumentException(); throw new ArgumentException();
off = Offset - off + sizeof(int); if (off != 0)
off = Offset - off + sizeof(int);
PutInt(off); PutInt(off);
} }

View File

@@ -65,7 +65,11 @@ namespace Google.FlatBuffers
// Create a .NET String from UTF-8 data stored inside the flatbuffer. // Create a .NET String from UTF-8 data stored inside the flatbuffer.
public string __string(int offset) public string __string(int offset)
{ {
offset += bb.GetInt(offset); int stringOffset = bb.GetInt(offset);
if (stringOffset == 0)
return null;
offset += stringOffset;
var len = bb.GetInt(offset); var len = bb.GetInt(offset);
var startPos = offset + sizeof(int); var startPos = offset + sizeof(int);
return bb.GetStringUTF8(startPos, len); return bb.GetStringUTF8(startPos, len);

44
pnpm-lock.yaml generated
View File

@@ -33,12 +33,6 @@ importers:
specifier: ^8.34.1 specifier: ^8.34.1
version: 8.34.1(eslint@9.29.0)(typescript@5.8.3) version: 8.34.1(eslint@9.29.0)(typescript@5.8.3)
tests/ts:
dependencies:
flatbuffers:
specifier: workspace:*
version: link:../..
packages: packages:
'@esbuild/aix-ppc64@0.25.5': '@esbuild/aix-ppc64@0.25.5':
@@ -349,8 +343,8 @@ packages:
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
ajv@6.14.0: ajv@6.12.6:
resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ansi-styles@4.3.0: ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -489,8 +483,8 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'} engines: {node: '>=16'}
flatted@3.4.2: flatted@3.3.1:
resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
glob-parent@5.1.2: glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
@@ -577,11 +571,11 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
minimatch@3.1.5: minimatch@3.1.2:
resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@9.0.9: minimatch@9.0.5:
resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'} engines: {node: '>=16 || 14 >=14.17'}
ms@2.1.3: ms@2.1.3:
@@ -799,7 +793,7 @@ snapshots:
dependencies: dependencies:
'@eslint/object-schema': 2.1.6 '@eslint/object-schema': 2.1.6
debug: 4.3.7 debug: 4.3.7
minimatch: 3.1.5 minimatch: 3.1.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -815,14 +809,14 @@ snapshots:
'@eslint/eslintrc@3.3.1': '@eslint/eslintrc@3.3.1':
dependencies: dependencies:
ajv: 6.14.0 ajv: 6.12.6
debug: 4.3.7 debug: 4.3.7
espree: 10.4.0 espree: 10.4.0
globals: 14.0.0 globals: 14.0.0
ignore: 5.3.2 ignore: 5.3.2
import-fresh: 3.3.0 import-fresh: 3.3.0
js-yaml: 4.1.1 js-yaml: 4.1.1
minimatch: 3.1.5 minimatch: 3.1.2
strip-json-comments: 3.1.1 strip-json-comments: 3.1.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -938,7 +932,7 @@ snapshots:
debug: 4.3.7 debug: 4.3.7
fast-glob: 3.3.2 fast-glob: 3.3.2
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.9 minimatch: 9.0.5
semver: 7.6.3 semver: 7.6.3
ts-api-utils: 2.1.0(typescript@5.8.3) ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3 typescript: 5.8.3
@@ -967,7 +961,7 @@ snapshots:
acorn@8.15.0: {} acorn@8.15.0: {}
ajv@6.14.0: ajv@6.12.6:
dependencies: dependencies:
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0 fast-json-stable-stringify: 2.1.0
@@ -1076,7 +1070,7 @@ snapshots:
'@humanwhocodes/retry': 0.4.3 '@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8 '@types/estree': 1.0.8
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
ajv: 6.14.0 ajv: 6.12.6
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 4.3.7 debug: 4.3.7
@@ -1095,7 +1089,7 @@ snapshots:
is-glob: 4.0.3 is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1 json-stable-stringify-without-jsonify: 1.0.1
lodash.merge: 4.6.2 lodash.merge: 4.6.2
minimatch: 3.1.5 minimatch: 3.1.2
natural-compare: 1.4.0 natural-compare: 1.4.0
optionator: 0.9.4 optionator: 0.9.4
transitivePeerDependencies: transitivePeerDependencies:
@@ -1152,10 +1146,10 @@ snapshots:
flat-cache@4.0.1: flat-cache@4.0.1:
dependencies: dependencies:
flatted: 3.4.2 flatted: 3.3.1
keyv: 4.5.4 keyv: 4.5.4
flatted@3.4.2: {} flatted@3.3.1: {}
glob-parent@5.1.2: glob-parent@5.1.2:
dependencies: dependencies:
@@ -1224,11 +1218,11 @@ snapshots:
braces: 3.0.3 braces: 3.0.3
picomatch: 2.3.1 picomatch: 2.3.1
minimatch@3.1.5: minimatch@3.1.2:
dependencies: dependencies:
brace-expansion: 1.1.12 brace-expansion: 1.1.12
minimatch@9.0.9: minimatch@9.0.5:
dependencies: dependencies:
brace-expansion: 2.0.2 brace-expansion: 2.0.2

View File

@@ -1,2 +0,0 @@
packages:
- tests/ts

View File

@@ -159,7 +159,7 @@ def EnumCreateValuesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateValuesVector(builder, data): def CreateValuesVector(builder, data):
return EnumCreateValuesVector(builder, data) EnumCreateValuesVector(builder, data)
def EnumAddIsUnion(builder, isUnion): def EnumAddIsUnion(builder, isUnion):
builder.PrependBoolSlot(2, isUnion, 0) builder.PrependBoolSlot(2, isUnion, 0)
@@ -189,7 +189,7 @@ def EnumCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateAttributesVector(builder, data): def CreateAttributesVector(builder, data):
return EnumCreateAttributesVector(builder, data) EnumCreateAttributesVector(builder, data)
def EnumAddDocumentation(builder, documentation): def EnumAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0) builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -207,7 +207,7 @@ def EnumCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateDocumentationVector(builder, data): def CreateDocumentationVector(builder, data):
return EnumCreateDocumentationVector(builder, data) EnumCreateDocumentationVector(builder, data)
def EnumAddDeclarationFile(builder, declarationFile): def EnumAddDeclarationFile(builder, declarationFile):
builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0) builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)

View File

@@ -138,7 +138,7 @@ def EnumValCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateDocumentationVector(builder, data): def CreateDocumentationVector(builder, data):
return EnumValCreateDocumentationVector(builder, data) EnumValCreateDocumentationVector(builder, data)
def EnumValAddAttributes(builder, attributes): def EnumValAddAttributes(builder, attributes):
builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0) builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0)
@@ -156,7 +156,7 @@ def EnumValCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateAttributesVector(builder, data): def CreateAttributesVector(builder, data):
return EnumValCreateAttributesVector(builder, data) EnumValCreateAttributesVector(builder, data)
def EnumValEnd(builder): def EnumValEnd(builder):
return builder.EndObject() return builder.EndObject()

View File

@@ -239,7 +239,7 @@ def FieldCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateAttributesVector(builder, data): def CreateAttributesVector(builder, data):
return FieldCreateAttributesVector(builder, data) FieldCreateAttributesVector(builder, data)
def FieldAddDocumentation(builder, documentation): def FieldAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0) builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -257,7 +257,7 @@ def FieldCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateDocumentationVector(builder, data): def CreateDocumentationVector(builder, data):
return FieldCreateDocumentationVector(builder, data) FieldCreateDocumentationVector(builder, data)
def FieldAddOptional(builder, optional): def FieldAddOptional(builder, optional):
builder.PrependBoolSlot(11, optional, 0) builder.PrependBoolSlot(11, optional, 0)

View File

@@ -162,7 +162,7 @@ def ObjectCreateFieldsVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateFieldsVector(builder, data): def CreateFieldsVector(builder, data):
return ObjectCreateFieldsVector(builder, data) ObjectCreateFieldsVector(builder, data)
def ObjectAddIsStruct(builder, isStruct): def ObjectAddIsStruct(builder, isStruct):
builder.PrependBoolSlot(2, isStruct, 0) builder.PrependBoolSlot(2, isStruct, 0)
@@ -198,7 +198,7 @@ def ObjectCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateAttributesVector(builder, data): def CreateAttributesVector(builder, data):
return ObjectCreateAttributesVector(builder, data) ObjectCreateAttributesVector(builder, data)
def ObjectAddDocumentation(builder, documentation): def ObjectAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0) builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -216,7 +216,7 @@ def ObjectCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateDocumentationVector(builder, data): def CreateDocumentationVector(builder, data):
return ObjectCreateDocumentationVector(builder, data) ObjectCreateDocumentationVector(builder, data)
def ObjectAddDeclarationFile(builder, declarationFile): def ObjectAddDeclarationFile(builder, declarationFile):
builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0) builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)

View File

@@ -142,7 +142,7 @@ def RPCCallCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateAttributesVector(builder, data): def CreateAttributesVector(builder, data):
return RPCCallCreateAttributesVector(builder, data) RPCCallCreateAttributesVector(builder, data)
def RPCCallAddDocumentation(builder, documentation): def RPCCallAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0) builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -160,7 +160,7 @@ def RPCCallCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateDocumentationVector(builder, data): def CreateDocumentationVector(builder, data):
return RPCCallCreateDocumentationVector(builder, data) RPCCallCreateDocumentationVector(builder, data)
def RPCCallEnd(builder): def RPCCallEnd(builder):
return builder.EndObject() return builder.EndObject()

View File

@@ -184,7 +184,7 @@ def SchemaCreateObjectsVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateObjectsVector(builder, data): def CreateObjectsVector(builder, data):
return SchemaCreateObjectsVector(builder, data) SchemaCreateObjectsVector(builder, data)
def SchemaAddEnums(builder, enums): def SchemaAddEnums(builder, enums):
builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(enums), 0) builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(enums), 0)
@@ -202,7 +202,7 @@ def SchemaCreateEnumsVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateEnumsVector(builder, data): def CreateEnumsVector(builder, data):
return SchemaCreateEnumsVector(builder, data) SchemaCreateEnumsVector(builder, data)
def SchemaAddFileIdent(builder, fileIdent): def SchemaAddFileIdent(builder, fileIdent):
builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(fileIdent), 0) builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(fileIdent), 0)
@@ -238,7 +238,7 @@ def SchemaCreateServicesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateServicesVector(builder, data): def CreateServicesVector(builder, data):
return SchemaCreateServicesVector(builder, data) SchemaCreateServicesVector(builder, data)
def SchemaAddAdvancedFeatures(builder, advancedFeatures): def SchemaAddAdvancedFeatures(builder, advancedFeatures):
builder.PrependUint64Slot(6, advancedFeatures, 0) builder.PrependUint64Slot(6, advancedFeatures, 0)
@@ -262,7 +262,7 @@ def SchemaCreateFbsFilesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateFbsFilesVector(builder, data): def CreateFbsFilesVector(builder, data):
return SchemaCreateFbsFilesVector(builder, data) SchemaCreateFbsFilesVector(builder, data)
def SchemaEnd(builder): def SchemaEnd(builder):
return builder.EndObject() return builder.EndObject()

View File

@@ -88,7 +88,7 @@ def SchemaFileCreateIncludedFilenamesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateIncludedFilenamesVector(builder, data): def CreateIncludedFilenamesVector(builder, data):
return SchemaFileCreateIncludedFilenamesVector(builder, data) SchemaFileCreateIncludedFilenamesVector(builder, data)
def SchemaFileEnd(builder): def SchemaFileEnd(builder):
return builder.EndObject() return builder.EndObject()

View File

@@ -141,7 +141,7 @@ def ServiceCreateCallsVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateCallsVector(builder, data): def CreateCallsVector(builder, data):
return ServiceCreateCallsVector(builder, data) ServiceCreateCallsVector(builder, data)
def ServiceAddAttributes(builder, attributes): def ServiceAddAttributes(builder, attributes):
builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0) builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0)
@@ -159,7 +159,7 @@ def ServiceCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateAttributesVector(builder, data): def CreateAttributesVector(builder, data):
return ServiceCreateAttributesVector(builder, data) ServiceCreateAttributesVector(builder, data)
def ServiceAddDocumentation(builder, documentation): def ServiceAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0) builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -177,7 +177,7 @@ def ServiceCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateDocumentationVector(builder, data): def CreateDocumentationVector(builder, data):
return ServiceCreateDocumentationVector(builder, data) ServiceCreateDocumentationVector(builder, data)
def ServiceAddDeclarationFile(builder, declarationFile): def ServiceAddDeclarationFile(builder, declarationFile):
builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0) builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)

View File

@@ -1,2 +1,6 @@
[bdist_wheel]
universal=1
[metadata] [metadata]
license_files = LICENSE license_files =
../LICENSE

View File

@@ -32,8 +32,10 @@ setup(
description='The FlatBuffers serialization format for Python', description='The FlatBuffers serialization format for Python',
classifiers=[ classifiers=[
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'License :: OSI Approved :: Apache Software License',
'Operating System :: OS Independent', 'Operating System :: OS Independent',
'Programming Language :: Python', 'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3',
'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Software Development :: Libraries :: Python Modules',
], ],

View File

@@ -24,9 +24,6 @@ use core::marker::PhantomData;
use core::ops::{Add, AddAssign, Deref, DerefMut, Index, IndexMut, Sub, SubAssign}; use core::ops::{Add, AddAssign, Deref, DerefMut, Index, IndexMut, Sub, SubAssign};
use core::ptr::write_bytes; use core::ptr::write_bytes;
#[cfg(feature = "std")]
use std::collections::HashMap;
use crate::endian_scalar::emplace_scalar; use crate::endian_scalar::emplace_scalar;
use crate::primitives::*; use crate::primitives::*;
use crate::push::{Push, PushAlignment}; use crate::push::{Push, PushAlignment};
@@ -142,9 +139,6 @@ pub struct FlatBufferBuilder<'fbb, A: Allocator = DefaultAllocator> {
min_align: usize, min_align: usize,
force_defaults: bool, force_defaults: bool,
#[cfg(feature = "std")]
strings_pool: HashMap<String, WIPOffset<&'fbb str>>,
#[cfg(not(feature = "std"))]
strings_pool: Vec<WIPOffset<&'fbb str>>, strings_pool: Vec<WIPOffset<&'fbb str>>,
_phantom: PhantomData<&'fbb ()>, _phantom: PhantomData<&'fbb ()>,
@@ -166,60 +160,6 @@ impl<'fbb> FlatBufferBuilder<'fbb, DefaultAllocator> {
pub fn with_capacity(size: usize) -> Self { pub fn with_capacity(size: usize) -> Self {
Self::from_vec(vec![0; size]) Self::from_vec(vec![0; size])
} }
/// Create a FlatBufferBuilder that is ready for writing, with a
/// ready-to-use capacity of the provided size and preallocated internal vecs.
///
/// The maximum valid value for `size` is `FLATBUFFERS_MAX_BUFFER_SIZE`.
///
/// # Arguments
///
/// * `size` - The initial capacity of the backing buffer in bytes.
/// * `field_locs_capacity` - Preallocated capacity for the field locations vec.
/// * `written_vtable_revpos_capacity` - Preallocated capacity for the written vtable reverse positions vec.
/// * `strings_pool_capacity` - Preallocated capacity for the shared strings pool vec.
pub fn with_internal_capacity(
size: usize,
field_locs_capacity: usize,
written_vtable_revpos_capacity: usize,
strings_pool_capacity: usize,
) -> Self {
Self::from_vec_with_internal_capacity(
vec![0; size],
field_locs_capacity,
written_vtable_revpos_capacity,
strings_pool_capacity,
)
}
/// Create a FlatBufferBuilder that is ready for writing, reusing
/// an existing vector and preallocated internal vecs.
///
/// # Arguments
///
/// * `buffer` - An existing `Vec<u8>` to reuse as the backing buffer.
/// * `field_locs_capacity` - Preallocated capacity for the field locations vec.
/// * `written_vtable_revpos_capacity` - Preallocated capacity for the written vtable reverse positions vec.
/// * `strings_pool_capacity` - Preallocated capacity for the shared strings pool vec.
pub fn from_vec_with_internal_capacity(
buffer: Vec<u8>,
field_locs_capacity: usize,
written_vtable_revpos_capacity: usize,
strings_pool_capacity: usize,
) -> Self {
// we need to check the size here because we create the backing buffer
// directly, bypassing the typical way of using grow_allocator:
assert!(
buffer.len() <= FLATBUFFERS_MAX_BUFFER_SIZE,
"cannot initialize buffer bigger than 2 gigabytes"
);
let allocator = DefaultAllocator::from_vec(buffer);
Self::new_in_with_internal_capacity(
allocator,
field_locs_capacity,
written_vtable_revpos_capacity,
strings_pool_capacity,
)
}
/// Create a FlatBufferBuilder that is ready for writing, reusing /// Create a FlatBufferBuilder that is ready for writing, reusing
/// an existing vector. /// an existing vector.
pub fn from_vec(buffer: Vec<u8>) -> Self { pub fn from_vec(buffer: Vec<u8>) -> Self {
@@ -257,52 +197,12 @@ impl<'fbb, A: Allocator> FlatBufferBuilder<'fbb, A> {
min_align: 0, min_align: 0,
force_defaults: false, force_defaults: false,
#[cfg(feature = "std")]
strings_pool: HashMap::new(),
#[cfg(not(feature = "std"))]
strings_pool: Vec::new(), strings_pool: Vec::new(),
_phantom: PhantomData, _phantom: PhantomData,
} }
} }
/// Create a [`FlatBufferBuilder`] that is ready for writing with a custom [`Allocator`]
/// and preallocated internal vecs.
///
/// # Arguments
///
/// * `allocator` - A custom [`Allocator`] to use as the backing buffer.
/// * `field_locs_capacity` - Preallocated capacity for the field locations vec.
/// * `written_vtable_revpos_capacity` - Preallocated capacity for the written vtable reverse positions vec.
/// * `strings_pool_capacity` - Preallocated capacity for the shared strings pool vec.
pub fn new_in_with_internal_capacity(
allocator: A,
field_locs_capacity: usize,
written_vtable_revpos_capacity: usize,
strings_pool_capacity: usize,
) -> Self {
let head = ReverseIndex::end();
FlatBufferBuilder {
allocator,
head,
field_locs: Vec::with_capacity(field_locs_capacity),
written_vtable_revpos: Vec::with_capacity(written_vtable_revpos_capacity),
nested: false,
finished: false,
min_align: 0,
force_defaults: false,
#[cfg(feature = "std")]
strings_pool: HashMap::with_capacity(strings_pool_capacity),
#[cfg(not(feature = "std"))]
strings_pool: Vec::with_capacity(strings_pool_capacity),
_phantom: PhantomData,
}
}
/// Destroy the [`FlatBufferBuilder`], returning its [`Allocator`] and the index /// Destroy the [`FlatBufferBuilder`], returning its [`Allocator`] and the index
/// into it that represents the start of valid data. /// into it that represents the start of valid data.
pub fn collapse_in(self) -> (A, usize) { pub fn collapse_in(self) -> (A, usize) {
@@ -323,9 +223,7 @@ impl<'fbb, A: Allocator> FlatBufferBuilder<'fbb, A> {
/// new object. /// new object.
pub fn reset(&mut self) { pub fn reset(&mut self) {
// memset only the part of the buffer that could be dirty: // memset only the part of the buffer that could be dirty:
self.allocator[self.head.range_to_end()] self.allocator[self.head.range_to_end()].iter_mut().for_each(|x| *x = 0);
.iter_mut()
.for_each(|x| *x = 0);
self.head = ReverseIndex::end(); self.head = ReverseIndex::end();
self.written_vtable_revpos.clear(); self.written_vtable_revpos.clear();
@@ -445,31 +343,6 @@ impl<'fbb, A: Allocator> FlatBufferBuilder<'fbb, A> {
WIPOffset::new(o.value()) WIPOffset::new(o.value())
} }
/// Create a utf8 string, and de-duplicate if already created.
///
/// Uses a HashMap to track previously written strings, providing O(1)
/// amortized lookup and insertion.
#[cfg(feature = "std")]
#[inline]
pub fn create_shared_string<'a: 'b, 'b>(&'a mut self, s: &'b str) -> WIPOffset<&'fbb str> {
self.assert_not_nested(
"create_shared_string can not be called when a table or vector is under construction",
);
if let Some(&offset) = self.strings_pool.get(s) {
return offset;
}
let address = WIPOffset::new(self.create_byte_string(s.as_bytes()).value());
self.strings_pool.insert(s.to_owned(), address);
address
}
/// Create a utf8 string, and de-duplicate if already created.
///
/// Uses a sorted Vec with binary search to track previously written
/// strings when in `no_std` mode.
#[cfg(not(feature = "std"))]
#[inline] #[inline]
pub fn create_shared_string<'a: 'b, 'b>(&'a mut self, s: &'b str) -> WIPOffset<&'fbb str> { pub fn create_shared_string<'a: 'b, 'b>(&'a mut self, s: &'b str) -> WIPOffset<&'fbb str> {
self.assert_not_nested( self.assert_not_nested(
@@ -482,15 +355,19 @@ impl<'fbb, A: Allocator> FlatBufferBuilder<'fbb, A> {
let found = self.strings_pool.binary_search_by(|offset| { let found = self.strings_pool.binary_search_by(|offset| {
let ptr = offset.value() as usize; let ptr = offset.value() as usize;
// Gets The pointer to the size of the string
let str_memory = &buf[buf.len() - ptr..]; let str_memory = &buf[buf.len() - ptr..];
let size = u32::from_le_bytes([ // Gets the size of the written string from buffer
str_memory[0], let size =
str_memory[1], u32::from_le_bytes([str_memory[0], str_memory[1], str_memory[2], str_memory[3]])
str_memory[2], as usize;
str_memory[3], // Size of the string size
]) as usize; let string_size: usize = 4;
let stored = &str_memory[4..4 + size]; // Fetches actual string bytes from index of string after string size
stored.cmp(s.as_bytes()) // to the size of string plus string size
let iter = str_memory[string_size..size + string_size].iter();
// Compares bytes of fetched string and current writable string
iter.cloned().cmp(s.bytes())
}); });
match found { match found {
@@ -1054,33 +931,6 @@ impl<T> IndexMut<ReverseIndexRange> for [T] {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use core::sync::atomic::{AtomicUsize, Ordering};
use std::alloc::{GlobalAlloc, Layout, System};
static ALLOC_COUNT: AtomicUsize = AtomicUsize::new(0);
struct CountingAllocator;
unsafe impl GlobalAlloc for CountingAllocator {
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
ALLOC_COUNT.fetch_add(1, Ordering::Relaxed);
unsafe { System.alloc(layout) }
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
unsafe { System.dealloc(ptr, layout) }
}
}
#[global_allocator]
static GLOBAL: CountingAllocator = CountingAllocator;
fn reset_alloc_count() {
ALLOC_COUNT.store(0, Ordering::Relaxed);
}
fn alloc_count() -> usize {
ALLOC_COUNT.load(Ordering::Relaxed)
}
#[test] #[test]
fn reverse_index_test() { fn reverse_index_test() {
@@ -1090,43 +940,4 @@ mod tests {
assert_eq!(&buf[idx.range_to(idx + 1)], &[4]); assert_eq!(&buf[idx.range_to(idx + 1)], &[4]);
assert_eq!(idx.to_forward_index(&buf), 4); assert_eq!(idx.to_forward_index(&buf), 4);
} }
#[test]
fn with_internal_capacity_preallocates_vecs() {
let mut builder = FlatBufferBuilder::with_internal_capacity(64, 8, 16, 32);
assert!(builder.allocator.len() >= 64);
assert!(builder.field_locs.capacity() >= 8);
assert!(builder.written_vtable_revpos.capacity() >= 16);
assert!(builder.strings_pool.capacity() >= 32);
assert!(builder.field_locs.is_empty());
assert!(builder.written_vtable_revpos.is_empty());
assert!(builder.strings_pool.is_empty());
// Reset the allocation counter after builder construction
reset_alloc_count();
// Add a shared string and verify it lands in the pool
let s1 = builder.create_shared_string("hello");
assert_eq!(builder.strings_pool.len(), 1);
// Adding the same string again should reuse the pooled entry
let s2 = builder.create_shared_string("hello");
assert_eq!(builder.strings_pool.len(), 1);
assert_eq!(s1.value(), s2.value());
// A different string should add a new entry
let _s3 = builder.create_shared_string("world");
assert_eq!(builder.strings_pool.len(), 2);
// With sufficient preallocated capacity, no additional allocations
// should have occurred for the internal vecs during the operations above
let allocs = alloc_count();
assert_eq!(
allocs, 0,
"expected 0 allocations after builder construction, got {}",
allocs
);
}
} }

View File

@@ -107,20 +107,6 @@ impl<'a, T: Follow<'a> + 'a> Vector<'a, T> {
key: K, key: K,
f: fn(&<T as Follow<'a>>::Inner, &K) -> Ordering, f: fn(&<T as Follow<'a>>::Inner, &K) -> Ordering,
) -> Option<T::Inner> { ) -> Option<T::Inner> {
self.lookup_index_by_key(key, f).map(|idx| self.get(idx))
}
/// Binary search by key, returning the index of the matching element.
///
/// This is similar to `lookup_by_key`, but returns the index of the found
/// element rather than the element itself. This is useful when you need
/// to reference elements by their position in the vector.
#[inline(always)]
pub fn lookup_index_by_key<K: Ord>(
&self,
key: K,
f: fn(&<T as Follow<'a>>::Inner, &K) -> Ordering,
) -> Option<usize> {
if self.is_empty() { if self.is_empty() {
return None; return None;
} }
@@ -132,7 +118,7 @@ impl<'a, T: Follow<'a> + 'a> Vector<'a, T> {
let mid = (left + right) / 2; let mid = (left + right) / 2;
let value = self.get(mid); let value = self.get(mid);
match f(&value, &key) { match f(&value, &key) {
Ordering::Equal => return Some(mid), Ordering::Equal => return Some(value),
Ordering::Less => left = mid + 1, Ordering::Less => left = mid + 1,
Ordering::Greater => { Ordering::Greater => {
if mid == 0 { if mid == 0 {

View File

@@ -643,7 +643,7 @@ inline ::flatbuffers::Offset<Monster> Monster::Pack(::flatbuffers::FlatBufferBui
auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name); auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name);
auto _inventory = _o->inventory.size() ? _fbb.CreateVector(_o->inventory) : 0; auto _inventory = _o->inventory.size() ? _fbb.CreateVector(_o->inventory) : 0;
auto _color = _o->color; auto _color = _o->color;
auto _weapons = _o->weapons.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Sample::Weapon>> (_o->weapons.size(), [](size_t i, _VectorArgs *__va) { return MyGame::Sample::CreateWeapon(*__va->__fbb, __va->__o->weapons[i].get(), __va->__rehasher); }, &_va ) : 0; auto _weapons = _o->weapons.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Sample::Weapon>> (_o->weapons.size(), [](size_t i, _VectorArgs *__va) { return CreateWeapon(*__va->__fbb, __va->__o->weapons[i].get(), __va->__rehasher); }, &_va ) : 0;
auto _equipped_type = _o->equipped.type; auto _equipped_type = _o->equipped.type;
auto _equipped = _o->equipped.Pack(_fbb); auto _equipped = _o->equipped.Pack(_fbb);
auto _path = _o->path.size() ? _fbb.CreateVectorOfStructs(_o->path) : 0; auto _path = _o->path.size() ? _fbb.CreateVectorOfStructs(_o->path) : 0;

View File

@@ -113,12 +113,12 @@ public struct MyGame_Sample_Vec3: NativeStruct, FlatbuffersVectorInitializable,
} }
extension MyGame_Sample_Vec3: Encodable { extension MyGame_Sample_Vec3: Encodable {
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case x = "x" case x = "x"
case y = "y" case y = "y"
case z = "z" case z = "z"
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
if x != 0.0 { if x != 0.0 {
@@ -170,49 +170,51 @@ public struct MyGame_Sample_Monster: FlatBufferTable, FlatbuffersVectorInitializ
private init(_ t: Table) { _accessor = t } private init(_ t: Table) { _accessor = t }
public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) } public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) }
private struct VT { private enum VTOFFSET: VOffset {
static let pos: VOffset = 4 case pos = 4
static let mana: VOffset = 6 case mana = 6
static let hp: VOffset = 8 case hp = 8
static let name: VOffset = 10 case name = 10
static let inventory: VOffset = 14 case inventory = 14
static let color: VOffset = 16 case color = 16
static let weapons: VOffset = 18 case weapons = 18
static let equippedType: VOffset = 20 case equippedType = 20
static let equipped: VOffset = 22 case equipped = 22
static let path: VOffset = 24 case path = 24
var v: Int32 { Int32(self.rawValue) }
var p: VOffset { self.rawValue }
} }
public var pos: MyGame_Sample_Vec3? { let o = _accessor.offset(VT.pos); return o == 0 ? nil : _accessor.readBuffer(of: MyGame_Sample_Vec3.self, at: o) } public var pos: MyGame_Sample_Vec3? { let o = _accessor.offset(VTOFFSET.pos.v); return o == 0 ? nil : _accessor.readBuffer(of: MyGame_Sample_Vec3.self, at: o) }
public var mutablePos: MyGame_Sample_Vec3_Mutable? { let o = _accessor.offset(VT.pos); return o == 0 ? nil : MyGame_Sample_Vec3_Mutable(_accessor.bb, o: o + _accessor.position) } public var mutablePos: MyGame_Sample_Vec3_Mutable? { let o = _accessor.offset(VTOFFSET.pos.v); return o == 0 ? nil : MyGame_Sample_Vec3_Mutable(_accessor.bb, o: o + _accessor.position) }
public var mana: Int16 { let o = _accessor.offset(VT.mana); return o == 0 ? 150 : _accessor.readBuffer(of: Int16.self, at: o) } public var mana: Int16 { let o = _accessor.offset(VTOFFSET.mana.v); return o == 0 ? 150 : _accessor.readBuffer(of: Int16.self, at: o) }
@discardableResult public func mutate(mana: Int16) -> Bool {let o = _accessor.offset(VT.mana); return _accessor.mutate(mana, index: o) } @discardableResult public func mutate(mana: Int16) -> Bool {let o = _accessor.offset(VTOFFSET.mana.v); return _accessor.mutate(mana, index: o) }
public var hp: Int16 { let o = _accessor.offset(VT.hp); return o == 0 ? 100 : _accessor.readBuffer(of: Int16.self, at: o) } public var hp: Int16 { let o = _accessor.offset(VTOFFSET.hp.v); return o == 0 ? 100 : _accessor.readBuffer(of: Int16.self, at: o) }
@discardableResult public func mutate(hp: Int16) -> Bool {let o = _accessor.offset(VT.hp); return _accessor.mutate(hp, index: o) } @discardableResult public func mutate(hp: Int16) -> Bool {let o = _accessor.offset(VTOFFSET.hp.v); return _accessor.mutate(hp, index: o) }
public var name: String? { let o = _accessor.offset(VT.name); return o == 0 ? nil : _accessor.string(at: o) } public var name: String? { let o = _accessor.offset(VTOFFSET.name.v); return o == 0 ? nil : _accessor.string(at: o) }
public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VT.name) } public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VTOFFSET.name.v) }
public var inventory: FlatbufferVector<UInt8> { return _accessor.vector(at: VT.inventory, byteSize: 1) } public var inventory: FlatbufferVector<UInt8> { return _accessor.vector(at: VTOFFSET.inventory.v, byteSize: 1) }
public func mutate(inventory: UInt8, at index: Int32) -> Bool { let o = _accessor.offset(VT.inventory); return _accessor.directMutate(inventory, index: _accessor.vector(at: o) + index * 1) } public func mutate(inventory: UInt8, at index: Int32) -> Bool { let o = _accessor.offset(VTOFFSET.inventory.v); return _accessor.directMutate(inventory, index: _accessor.vector(at: o) + index * 1) }
public func withUnsafePointerToInventory<T>(_ body: (UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? { return try _accessor.withUnsafePointerToSlice(at: VT.inventory, body: body) } public func withUnsafePointerToInventory<T>(_ body: (UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? { return try _accessor.withUnsafePointerToSlice(at: VTOFFSET.inventory.v, body: body) }
public var color: MyGame_Sample_Color { let o = _accessor.offset(VT.color); return o == 0 ? .blue : MyGame_Sample_Color(rawValue: _accessor.readBuffer(of: Int8.self, at: o)) ?? .blue } public var color: MyGame_Sample_Color { let o = _accessor.offset(VTOFFSET.color.v); return o == 0 ? .blue : MyGame_Sample_Color(rawValue: _accessor.readBuffer(of: Int8.self, at: o)) ?? .blue }
@discardableResult public func mutate(color: MyGame_Sample_Color) -> Bool {let o = _accessor.offset(VT.color); return _accessor.mutate(color.rawValue, index: o) } @discardableResult public func mutate(color: MyGame_Sample_Color) -> Bool {let o = _accessor.offset(VTOFFSET.color.v); return _accessor.mutate(color.rawValue, index: o) }
public var weapons: FlatbufferVector<MyGame_Sample_Weapon> { return _accessor.vector(at: VT.weapons, byteSize: 4) } public var weapons: FlatbufferVector<MyGame_Sample_Weapon> { return _accessor.vector(at: VTOFFSET.weapons.v, byteSize: 4) }
public var equippedType: MyGame_Sample_Equipment { let o = _accessor.offset(VT.equippedType); return o == 0 ? .none_ : MyGame_Sample_Equipment(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none_ } public var equippedType: MyGame_Sample_Equipment { let o = _accessor.offset(VTOFFSET.equippedType.v); return o == 0 ? .none_ : MyGame_Sample_Equipment(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none_ }
public func equipped<T: FlatbuffersInitializable>(type: T.Type) -> T? { let o = _accessor.offset(VT.equipped); return o == 0 ? nil : _accessor.union(o) } public func equipped<T: FlatbuffersInitializable>(type: T.Type) -> T? { let o = _accessor.offset(VTOFFSET.equipped.v); return o == 0 ? nil : _accessor.union(o) }
public var path: FlatbufferVector<MyGame_Sample_Vec3> { return _accessor.vector(at: VT.path, byteSize: 12) } public var path: FlatbufferVector<MyGame_Sample_Vec3> { return _accessor.vector(at: VTOFFSET.path.v, byteSize: 12) }
public var mutablePath: FlatbufferVector<MyGame_Sample_Vec3_Mutable> { return _accessor.vector(at: VT.path, byteSize: 12) } public var mutablePath: FlatbufferVector<MyGame_Sample_Vec3_Mutable> { return _accessor.vector(at: VTOFFSET.path.v, byteSize: 12) }
public func withUnsafePointerToPath<T>(_ body: (UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? { return try _accessor.withUnsafePointerToSlice(at: VT.path, body: body) } public func withUnsafePointerToPath<T>(_ body: (UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? { return try _accessor.withUnsafePointerToSlice(at: VTOFFSET.path.v, body: body) }
public static func startMonster(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 11) } public static func startMonster(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 11) }
public static func add(pos: MyGame_Sample_Vec3?, _ fbb: inout FlatBufferBuilder) { guard let pos = pos else { return }; fbb.create(struct: pos, position: VT.pos) } public static func add(pos: MyGame_Sample_Vec3?, _ fbb: inout FlatBufferBuilder) { guard let pos = pos else { return }; fbb.create(struct: pos, position: VTOFFSET.pos.p) }
public static func add(mana: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: mana, def: 150, at: VT.mana) } public static func add(mana: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: mana, def: 150, at: VTOFFSET.mana.p) }
public static func add(hp: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: hp, def: 100, at: VT.hp) } public static func add(hp: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: hp, def: 100, at: VTOFFSET.hp.p) }
public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VT.name) } public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) }
public static func addVectorOf(inventory: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: inventory, at: VT.inventory) } public static func addVectorOf(inventory: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: inventory, at: VTOFFSET.inventory.p) }
public static func add(color: MyGame_Sample_Color, _ fbb: inout FlatBufferBuilder) { fbb.add(element: color.rawValue, def: 2, at: VT.color) } public static func add(color: MyGame_Sample_Color, _ fbb: inout FlatBufferBuilder) { fbb.add(element: color.rawValue, def: 2, at: VTOFFSET.color.p) }
public static func addVectorOf(weapons: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: weapons, at: VT.weapons) } public static func addVectorOf(weapons: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: weapons, at: VTOFFSET.weapons.p) }
public static func add(equippedType: MyGame_Sample_Equipment, _ fbb: inout FlatBufferBuilder) { fbb.add(element: equippedType.rawValue, def: 0, at: VT.equippedType) } public static func add(equippedType: MyGame_Sample_Equipment, _ fbb: inout FlatBufferBuilder) { fbb.add(element: equippedType.rawValue, def: 0, at: VTOFFSET.equippedType.p) }
public static func add(equipped: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: equipped, at: VT.equipped) } public static func add(equipped: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: equipped, at: VTOFFSET.equipped.p) }
public static func addVectorOf(path: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: path, at: VT.path) } public static func addVectorOf(path: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: path, at: VTOFFSET.path.p) }
public static func startVectorOfPath(_ size: Int, in builder: inout FlatBufferBuilder) { public static func startVectorOfPath(_ size: Int, in builder: inout FlatBufferBuilder) {
builder.startVector(size * MemoryLayout<MyGame_Sample_Vec3>.size, elementSize: MemoryLayout<MyGame_Sample_Vec3>.alignment) builder.startVector(size * MemoryLayout<MyGame_Sample_Vec3>.size, elementSize: MemoryLayout<MyGame_Sample_Vec3>.alignment)
} }
@@ -291,14 +293,14 @@ public struct MyGame_Sample_Monster: FlatBufferTable, FlatbuffersVectorInitializ
public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable { public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable {
var _v = try verifier.visitTable(at: position) var _v = try verifier.visitTable(at: position)
try _v.visit(field: VT.pos, fieldName: "pos", required: false, type: MyGame_Sample_Vec3.self) try _v.visit(field: VTOFFSET.pos.p, fieldName: "pos", required: false, type: MyGame_Sample_Vec3.self)
try _v.visit(field: VT.mana, fieldName: "mana", required: false, type: Int16.self) try _v.visit(field: VTOFFSET.mana.p, fieldName: "mana", required: false, type: Int16.self)
try _v.visit(field: VT.hp, fieldName: "hp", required: false, type: Int16.self) try _v.visit(field: VTOFFSET.hp.p, fieldName: "hp", required: false, type: Int16.self)
try _v.visit(field: VT.name, fieldName: "name", required: false, type: ForwardOffset<String>.self) try _v.visit(field: VTOFFSET.name.p, fieldName: "name", required: false, type: ForwardOffset<String>.self)
try _v.visit(field: VT.inventory, fieldName: "inventory", required: false, type: ForwardOffset<Vector<UInt8, UInt8>>.self) try _v.visit(field: VTOFFSET.inventory.p, fieldName: "inventory", required: false, type: ForwardOffset<Vector<UInt8, UInt8>>.self)
try _v.visit(field: VT.color, fieldName: "color", required: false, type: MyGame_Sample_Color.self) try _v.visit(field: VTOFFSET.color.p, fieldName: "color", required: false, type: MyGame_Sample_Color.self)
try _v.visit(field: VT.weapons, fieldName: "weapons", required: false, type: ForwardOffset<Vector<ForwardOffset<MyGame_Sample_Weapon>, MyGame_Sample_Weapon>>.self) try _v.visit(field: VTOFFSET.weapons.p, fieldName: "weapons", required: false, type: ForwardOffset<Vector<ForwardOffset<MyGame_Sample_Weapon>, MyGame_Sample_Weapon>>.self)
try _v.visit(unionKey: VT.equippedType, unionField: VT.equipped, unionKeyName: "equippedType", fieldName: "equipped", required: false, completion: { (verifier, key: MyGame_Sample_Equipment, pos) in try _v.visit(unionKey: VTOFFSET.equippedType.p, unionField: VTOFFSET.equipped.p, unionKeyName: "equippedType", fieldName: "equipped", required: false, completion: { (verifier, key: MyGame_Sample_Equipment, pos) in
switch key { switch key {
case .none_: case .none_:
break // NOTE - SWIFT doesnt support none break // NOTE - SWIFT doesnt support none
@@ -306,12 +308,13 @@ public struct MyGame_Sample_Monster: FlatBufferTable, FlatbuffersVectorInitializ
try ForwardOffset<MyGame_Sample_Weapon>.verify(&verifier, at: pos, of: MyGame_Sample_Weapon.self) try ForwardOffset<MyGame_Sample_Weapon>.verify(&verifier, at: pos, of: MyGame_Sample_Weapon.self)
} }
}) })
try _v.visit(field: VT.path, fieldName: "path", required: false, type: ForwardOffset<Vector<MyGame_Sample_Vec3, MyGame_Sample_Vec3>>.self) try _v.visit(field: VTOFFSET.path.p, fieldName: "path", required: false, type: ForwardOffset<Vector<MyGame_Sample_Vec3, MyGame_Sample_Vec3>>.self)
_v.finish() _v.finish()
} }
} }
extension MyGame_Sample_Monster: Encodable { extension MyGame_Sample_Monster: Encodable {
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case pos = "pos" case pos = "pos"
case mana = "mana" case mana = "mana"
@@ -324,7 +327,6 @@ extension MyGame_Sample_Monster: Encodable {
case equipped = "equipped" case equipped = "equipped"
case path = "path" case path = "path"
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(pos, forKey: .pos) try container.encodeIfPresent(pos, forKey: .pos)
@@ -409,18 +411,20 @@ public struct MyGame_Sample_Weapon: FlatBufferTable, FlatbuffersVectorInitializa
private init(_ t: Table) { _accessor = t } private init(_ t: Table) { _accessor = t }
public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) } public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) }
private struct VT { private enum VTOFFSET: VOffset {
static let name: VOffset = 4 case name = 4
static let damage: VOffset = 6 case damage = 6
var v: Int32 { Int32(self.rawValue) }
var p: VOffset { self.rawValue }
} }
public var name: String? { let o = _accessor.offset(VT.name); return o == 0 ? nil : _accessor.string(at: o) } public var name: String? { let o = _accessor.offset(VTOFFSET.name.v); return o == 0 ? nil : _accessor.string(at: o) }
public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VT.name) } public var nameSegmentArray: [UInt8]? { return _accessor.getVector(at: VTOFFSET.name.v) }
public var damage: Int16 { let o = _accessor.offset(VT.damage); return o == 0 ? 0 : _accessor.readBuffer(of: Int16.self, at: o) } public var damage: Int16 { let o = _accessor.offset(VTOFFSET.damage.v); return o == 0 ? 0 : _accessor.readBuffer(of: Int16.self, at: o) }
@discardableResult public func mutate(damage: Int16) -> Bool {let o = _accessor.offset(VT.damage); return _accessor.mutate(damage, index: o) } @discardableResult public func mutate(damage: Int16) -> Bool {let o = _accessor.offset(VTOFFSET.damage.v); return _accessor.mutate(damage, index: o) }
public static func startWeapon(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 2) } public static func startWeapon(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 2) }
public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VT.name) } public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) }
public static func add(damage: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: damage, def: 0, at: VT.damage) } public static func add(damage: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: damage, def: 0, at: VTOFFSET.damage.p) }
public static func endWeapon(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } public static func endWeapon(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end }
public static func createWeapon( public static func createWeapon(
_ fbb: inout FlatBufferBuilder, _ fbb: inout FlatBufferBuilder,
@@ -457,18 +461,18 @@ public struct MyGame_Sample_Weapon: FlatBufferTable, FlatbuffersVectorInitializa
public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable { public static func verify<T>(_ verifier: inout Verifier, at position: Int, of type: T.Type) throws where T: Verifiable {
var _v = try verifier.visitTable(at: position) var _v = try verifier.visitTable(at: position)
try _v.visit(field: VT.name, fieldName: "name", required: false, type: ForwardOffset<String>.self) try _v.visit(field: VTOFFSET.name.p, fieldName: "name", required: false, type: ForwardOffset<String>.self)
try _v.visit(field: VT.damage, fieldName: "damage", required: false, type: Int16.self) try _v.visit(field: VTOFFSET.damage.p, fieldName: "damage", required: false, type: Int16.self)
_v.finish() _v.finish()
} }
} }
extension MyGame_Sample_Weapon: Encodable { extension MyGame_Sample_Weapon: Encodable {
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case name = "name" case name = "name"
case damage = "damage" case damage = "damage"
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self) var container = encoder.container(keyedBy: CodingKeys.self)
try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(name, forKey: .name)

View File

@@ -1,18 +1,18 @@
// Automatically generated by the Flatbuffers compiler. Do not modify. // Automatically generated by the Flatbuffers compiler. Do not modify.
// @generated // @generated
pub mod my_game { pub mod my_game {
use super::*;
pub mod sample {
use super::*; use super::*;
pub mod sample { mod color_generated;
use super::*; pub use self::color_generated::*;
mod color_generated; mod equipment_generated;
pub use self::color_generated::*; pub use self::equipment_generated::*;
mod equipment_generated; mod vec_3_generated;
pub use self::equipment_generated::*; pub use self::vec_3_generated::*;
mod vec_3_generated; mod monster_generated;
pub use self::vec_3_generated::*; pub use self::monster_generated::*;
mod monster_generated; mod weapon_generated;
pub use self::monster_generated::*; pub use self::weapon_generated::*;
mod weapon_generated; } // sample
pub use self::weapon_generated::*;
} // sample
} // my_game } // my_game

View File

@@ -2,73 +2,64 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_COLOR: i8 = 0; pub const ENUM_MIN_COLOR: i8 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_COLOR: i8 = 2; pub const ENUM_MAX_COLOR: i8 = 2;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub const ENUM_VALUES_COLOR: [Color; 3] = [ pub const ENUM_VALUES_COLOR: [Color; 3] = [
Color::Red, Color::Red,
Color::Green, Color::Green,
Color::Blue, Color::Blue,
]; ];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)] #[repr(transparent)]
pub struct Color(pub i8); pub struct Color(pub i8);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
impl Color { impl Color {
pub const Red: Self = Self(0); pub const Red: Self = Self(0);
pub const Green: Self = Self(1); pub const Green: Self = Self(1);
pub const Blue: Self = Self(2); pub const Blue: Self = Self(2);
pub const ENUM_MIN: i8 = 0; pub const ENUM_MIN: i8 = 0;
pub const ENUM_MAX: i8 = 2; pub const ENUM_MAX: i8 = 2;
pub const ENUM_VALUES: &'static [Self] = &[ pub const ENUM_VALUES: &'static [Self] = &[
Self::Red, Self::Red,
Self::Green, Self::Green,
Self::Blue, Self::Blue,
]; ];
/// Returns the variant's name or "" if unknown.
/// Returns the variant's name or "" if unknown. pub fn variant_name(self) -> Option<&'static str> {
pub fn variant_name(self) -> Option<&'static str> { match self {
match self { Self::Red => Some("Red"),
Self::Red => Some("Red"), Self::Green => Some("Green"),
Self::Green => Some("Green"), Self::Blue => Some("Blue"),
Self::Blue => Some("Blue"), _ => None,
_ => None,
}
} }
}
} }
impl ::core::fmt::Debug for Color { impl ::core::fmt::Debug for Color {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() { if let Some(name) = self.variant_name() {
f.write_str(name) f.write_str(name)
} else { } else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
} }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for Color { impl<'a> ::flatbuffers::Follow<'a> for Color {
type Inner = Self; type Inner = Self;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let b = unsafe { ::flatbuffers::read_scalar_at::<i8>(buf, loc) };
let b = unsafe { ::flatbuffers::read_scalar_at::<i8>(buf, loc) }; Self(b)
Self(b) }
}
} }
impl ::flatbuffers::Push for Color { impl ::flatbuffers::Push for Color {
type Output = Color; type Output = Color;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i8>(dst, self.0) }; unsafe { ::flatbuffers::emplace_scalar::<i8>(dst, self.0) };
@@ -76,28 +67,26 @@ impl ::flatbuffers::Push for Color {
} }
impl ::flatbuffers::EndianScalar for Color { impl ::flatbuffers::EndianScalar for Color {
type Scalar = i8; type Scalar = i8;
#[inline]
#[inline] fn to_little_endian(self) -> i8 {
fn to_little_endian(self) -> i8 { self.0.to_le()
self.0.to_le() }
} #[inline]
#[allow(clippy::wrong_self_convention)]
#[inline] fn from_little_endian(v: i8) -> Self {
#[allow(clippy::wrong_self_convention)] let b = i8::from_le(v);
fn from_little_endian(v: i8) -> Self { Self(b)
let b = i8::from_le(v); }
Self(b)
}
} }
impl<'a> ::flatbuffers::Verifiable for Color { impl<'a> ::flatbuffers::Verifiable for Color {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
i8::run_verifier(v, pos) i8::run_verifier(v, pos)
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for Color {} impl ::flatbuffers::SimpleToVerifyInSlice for Color {}

View File

@@ -2,69 +2,60 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_EQUIPMENT: u8 = 0; pub const ENUM_MIN_EQUIPMENT: u8 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_EQUIPMENT: u8 = 1; pub const ENUM_MAX_EQUIPMENT: u8 = 1;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub const ENUM_VALUES_EQUIPMENT: [Equipment; 2] = [ pub const ENUM_VALUES_EQUIPMENT: [Equipment; 2] = [
Equipment::NONE, Equipment::NONE,
Equipment::Weapon, Equipment::Weapon,
]; ];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)] #[repr(transparent)]
pub struct Equipment(pub u8); pub struct Equipment(pub u8);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
impl Equipment { impl Equipment {
pub const NONE: Self = Self(0); pub const NONE: Self = Self(0);
pub const Weapon: Self = Self(1); pub const Weapon: Self = Self(1);
pub const ENUM_MIN: u8 = 0; pub const ENUM_MIN: u8 = 0;
pub const ENUM_MAX: u8 = 1; pub const ENUM_MAX: u8 = 1;
pub const ENUM_VALUES: &'static [Self] = &[ pub const ENUM_VALUES: &'static [Self] = &[
Self::NONE, Self::NONE,
Self::Weapon, Self::Weapon,
]; ];
/// Returns the variant's name or "" if unknown.
/// Returns the variant's name or "" if unknown. pub fn variant_name(self) -> Option<&'static str> {
pub fn variant_name(self) -> Option<&'static str> { match self {
match self { Self::NONE => Some("NONE"),
Self::NONE => Some("NONE"), Self::Weapon => Some("Weapon"),
Self::Weapon => Some("Weapon"), _ => None,
_ => None,
}
} }
}
} }
impl ::core::fmt::Debug for Equipment { impl ::core::fmt::Debug for Equipment {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() { if let Some(name) = self.variant_name() {
f.write_str(name) f.write_str(name)
} else { } else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
} }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for Equipment { impl<'a> ::flatbuffers::Follow<'a> for Equipment {
type Inner = Self; type Inner = Self;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let b = unsafe { ::flatbuffers::read_scalar_at::<u8>(buf, loc) };
let b = unsafe { ::flatbuffers::read_scalar_at::<u8>(buf, loc) }; Self(b)
Self(b) }
}
} }
impl ::flatbuffers::Push for Equipment { impl ::flatbuffers::Push for Equipment {
type Output = Equipment; type Output = Equipment;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<u8>(dst, self.0) }; unsafe { ::flatbuffers::emplace_scalar::<u8>(dst, self.0) };
@@ -72,85 +63,75 @@ impl ::flatbuffers::Push for Equipment {
} }
impl ::flatbuffers::EndianScalar for Equipment { impl ::flatbuffers::EndianScalar for Equipment {
type Scalar = u8; type Scalar = u8;
#[inline]
#[inline] fn to_little_endian(self) -> u8 {
fn to_little_endian(self) -> u8 { self.0.to_le()
self.0.to_le() }
} #[inline]
#[allow(clippy::wrong_self_convention)]
#[inline] fn from_little_endian(v: u8) -> Self {
#[allow(clippy::wrong_self_convention)] let b = u8::from_le(v);
fn from_little_endian(v: u8) -> Self { Self(b)
let b = u8::from_le(v); }
Self(b)
}
} }
impl<'a> ::flatbuffers::Verifiable for Equipment { impl<'a> ::flatbuffers::Verifiable for Equipment {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
u8::run_verifier(v, pos) u8::run_verifier(v, pos)
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for Equipment {} impl ::flatbuffers::SimpleToVerifyInSlice for Equipment {}
pub struct EquipmentUnionTableOffset {} pub struct EquipmentUnionTableOffset {}
#[allow(clippy::upper_case_acronyms)] #[allow(clippy::upper_case_acronyms)]
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub enum EquipmentT { pub enum EquipmentT {
NONE, NONE,
Weapon(alloc::boxed::Box<WeaponT>), Weapon(alloc::boxed::Box<WeaponT>),
} }
impl Default for EquipmentT { impl Default for EquipmentT {
fn default() -> Self { fn default() -> Self {
Self::NONE Self::NONE
} }
} }
impl EquipmentT { impl EquipmentT {
pub fn equipment_type(&self) -> Equipment { pub fn equipment_type(&self) -> Equipment {
match self { match self {
Self::NONE => Equipment::NONE, Self::NONE => Equipment::NONE,
Self::Weapon(_) => Equipment::Weapon, Self::Weapon(_) => Equipment::Weapon,
}
} }
}
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(&self, fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>) -> Option<::flatbuffers::WIPOffset<::flatbuffers::UnionWIPOffset>> { pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(&self, fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>) -> Option<::flatbuffers::WIPOffset<::flatbuffers::UnionWIPOffset>> {
match self { match self {
Self::NONE => None, Self::NONE => None,
Self::Weapon(v) => Some(v.pack(fbb).as_union_value()), Self::Weapon(v) => Some(v.pack(fbb).as_union_value()),
}
} }
}
/// If the union variant matches, return the owned WeaponT, setting the union to NONE. /// If the union variant matches, return the owned WeaponT, setting the union to NONE.
pub fn take_weapon(&mut self) -> Option<alloc::boxed::Box<WeaponT>> { pub fn take_weapon(&mut self) -> Option<alloc::boxed::Box<WeaponT>> {
if let Self::Weapon(_) = self { if let Self::Weapon(_) = self {
let v = ::core::mem::replace(self, Self::NONE); let v = ::core::mem::replace(self, Self::NONE);
if let Self::Weapon(w) = v { if let Self::Weapon(w) = v {
Some(w) Some(w)
} else { } else {
unreachable!() unreachable!()
} }
} else { } else {
None None
}
}
/// If the union variant matches, return a reference to the WeaponT.
pub fn as_weapon(&self) -> Option<&WeaponT> {
if let Self::Weapon(v) = self { Some(v.as_ref()) } else { None }
}
/// If the union variant matches, return a mutable reference to the WeaponT.
pub fn as_weapon_mut(&mut self) -> Option<&mut WeaponT> {
if let Self::Weapon(v) = self { Some(v.as_mut()) } else { None }
} }
}
/// If the union variant matches, return a reference to the WeaponT.
pub fn as_weapon(&self) -> Option<&WeaponT> {
if let Self::Weapon(v) = self { Some(v.as_ref()) } else { None }
}
/// If the union variant matches, return a mutable reference to the WeaponT.
pub fn as_weapon_mut(&mut self) -> Option<&mut WeaponT> {
if let Self::Weapon(v) = self { Some(v.as_mut()) } else { None }
}
} }

View File

@@ -2,225 +2,212 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum MonsterOffset {} pub enum MonsterOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct Monster<'a> { pub struct Monster<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for Monster<'a> { impl<'a> ::flatbuffers::Follow<'a> for Monster<'a> {
type Inner = Monster<'a>; type Inner = Monster<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> Monster<'a> { impl<'a> Monster<'a> {
pub const VT_POS: ::flatbuffers::VOffsetT = 4; pub const VT_POS: ::flatbuffers::VOffsetT = 4;
pub const VT_MANA: ::flatbuffers::VOffsetT = 6; pub const VT_MANA: ::flatbuffers::VOffsetT = 6;
pub const VT_HP: ::flatbuffers::VOffsetT = 8; pub const VT_HP: ::flatbuffers::VOffsetT = 8;
pub const VT_NAME: ::flatbuffers::VOffsetT = 10; pub const VT_NAME: ::flatbuffers::VOffsetT = 10;
pub const VT_INVENTORY: ::flatbuffers::VOffsetT = 14; pub const VT_INVENTORY: ::flatbuffers::VOffsetT = 14;
pub const VT_COLOR: ::flatbuffers::VOffsetT = 16; pub const VT_COLOR: ::flatbuffers::VOffsetT = 16;
pub const VT_WEAPONS: ::flatbuffers::VOffsetT = 18; pub const VT_WEAPONS: ::flatbuffers::VOffsetT = 18;
pub const VT_EQUIPPED_TYPE: ::flatbuffers::VOffsetT = 20; pub const VT_EQUIPPED_TYPE: ::flatbuffers::VOffsetT = 20;
pub const VT_EQUIPPED: ::flatbuffers::VOffsetT = 22; pub const VT_EQUIPPED: ::flatbuffers::VOffsetT = 22;
pub const VT_PATH: ::flatbuffers::VOffsetT = 24; pub const VT_PATH: ::flatbuffers::VOffsetT = 24;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Sample.Monster" "MyGame.Sample.Monster"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
Monster { _tab: table } Monster { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args MonsterArgs<'args>
) -> ::flatbuffers::WIPOffset<Monster<'bldr>> {
let mut builder = MonsterBuilder::new(_fbb);
if let Some(x) = args.path { builder.add_path(x); }
if let Some(x) = args.equipped { builder.add_equipped(x); }
if let Some(x) = args.weapons { builder.add_weapons(x); }
if let Some(x) = args.inventory { builder.add_inventory(x); }
if let Some(x) = args.name { builder.add_name(x); }
if let Some(x) = args.pos { builder.add_pos(x); }
builder.add_hp(args.hp);
builder.add_mana(args.mana);
builder.add_equipped_type(args.equipped_type);
builder.add_color(args.color);
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> MonsterT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let pos = self.pos().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, x.unpack()
args: &'args MonsterArgs<'args> });
) -> ::flatbuffers::WIPOffset<Monster<'bldr>> { let mana = self.mana();
let mut builder = MonsterBuilder::new(_fbb); let hp = self.hp();
if let Some(x) = args.path { builder.add_path(x); } let name = self.name().map(|x| {
if let Some(x) = args.equipped { builder.add_equipped(x); } alloc::string::ToString::to_string(x)
if let Some(x) = args.weapons { builder.add_weapons(x); } });
if let Some(x) = args.inventory { builder.add_inventory(x); } let inventory = self.inventory().map(|x| {
if let Some(x) = args.name { builder.add_name(x); } x.into_iter().collect()
if let Some(x) = args.pos { builder.add_pos(x); } });
builder.add_hp(args.hp); let color = self.color();
builder.add_mana(args.mana); let weapons = self.weapons().map(|x| {
builder.add_equipped_type(args.equipped_type); x.iter().map(|t| t.unpack()).collect()
builder.add_color(args.color); });
builder.finish() let equipped = match self.equipped_type() {
Equipment::NONE => EquipmentT::NONE,
Equipment::Weapon => EquipmentT::Weapon(alloc::boxed::Box::new(
self.equipped_as_weapon()
.expect("Invalid union table, expected `Equipment::Weapon`.")
.unpack()
)),
_ => EquipmentT::NONE,
};
let path = self.path().map(|x| {
x.iter().map(|t| t.unpack()).collect()
});
MonsterT {
pos,
mana,
hp,
name,
inventory,
color,
weapons,
equipped,
path,
} }
}
pub fn unpack(&self) -> MonsterT { #[inline]
let pos = self.pos().map(|x| { pub fn pos(&self) -> Option<&'a Vec3> {
x.unpack() // Safety:
}); // Created from valid Table for this object
let mana = self.mana(); // which contains a valid value in this slot
let hp = self.hp(); unsafe { self._tab.get::<Vec3>(Monster::VT_POS, None)}
let name = self.name().map(|x| { }
alloc::string::ToString::to_string(x) #[inline]
}); pub fn mana(&self) -> i16 {
let inventory = self.inventory().map(|x| { // Safety:
x.into_iter().collect() // Created from valid Table for this object
}); // which contains a valid value in this slot
let color = self.color(); unsafe { self._tab.get::<i16>(Monster::VT_MANA, Some(150)).unwrap()}
let weapons = self.weapons().map(|x| { }
x.iter().map(|t| t.unpack()).collect() #[inline]
}); pub fn hp(&self) -> i16 {
let equipped = match self.equipped_type() { // Safety:
Equipment::NONE => EquipmentT::NONE, // Created from valid Table for this object
Equipment::Weapon => EquipmentT::Weapon(alloc::boxed::Box::new( // which contains a valid value in this slot
self.equipped_as_weapon() unsafe { self._tab.get::<i16>(Monster::VT_HP, Some(100)).unwrap()}
.expect("Invalid union table, expected `Equipment::Weapon`.") }
.unpack() #[inline]
)), pub fn name(&self) -> Option<&'a str> {
_ => EquipmentT::NONE, // Safety:
}; // Created from valid Table for this object
let path = self.path().map(|x| { // which contains a valid value in this slot
x.iter().map(|t| t.unpack()).collect() unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<&str>>(Monster::VT_NAME, None)}
}); }
MonsterT { #[inline]
pos, pub fn inventory(&self) -> Option<::flatbuffers::Vector<'a, u8>> {
mana, // Safety:
hp, // Created from valid Table for this object
name, // which contains a valid value in this slot
inventory, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, u8>>>(Monster::VT_INVENTORY, None)}
color, }
weapons, #[inline]
equipped, pub fn color(&self) -> Color {
path, // Safety:
} // Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<Color>(Monster::VT_COLOR, Some(Color::Blue)).unwrap()}
}
#[inline]
pub fn weapons(&self) -> Option<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Weapon<'a>>>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Weapon>>>>(Monster::VT_WEAPONS, None)}
}
#[inline]
pub fn equipped_type(&self) -> Equipment {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<Equipment>(Monster::VT_EQUIPPED_TYPE, Some(Equipment::NONE)).unwrap()}
}
#[inline]
pub fn equipped(&self) -> Option<::flatbuffers::Table<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Table<'a>>>(Monster::VT_EQUIPPED, None)}
}
#[inline]
pub fn path(&self) -> Option<::flatbuffers::Vector<'a, Vec3>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, Vec3>>>(Monster::VT_PATH, None)}
}
#[inline]
#[allow(non_snake_case)]
pub fn equipped_as_weapon(&self) -> Option<Weapon<'a>> {
if self.equipped_type() == Equipment::Weapon {
self.equipped().map(|t| {
// Safety:
// Created from a valid Table for this object
// Which contains a valid union in this slot
unsafe { Weapon::init_from_table(t) }
})
} else {
None
} }
}
#[inline]
pub fn pos(&self) -> Option<&'a Vec3> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<Vec3>(Monster::VT_POS, None)}
}
#[inline]
pub fn mana(&self) -> i16 {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<i16>(Monster::VT_MANA, Some(150)).unwrap()}
}
#[inline]
pub fn hp(&self) -> i16 {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<i16>(Monster::VT_HP, Some(100)).unwrap()}
}
#[inline]
pub fn name(&self) -> Option<&'a str> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<&str>>(Monster::VT_NAME, None)}
}
#[inline]
pub fn inventory(&self) -> Option<::flatbuffers::Vector<'a, u8>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, u8>>>(Monster::VT_INVENTORY, None)}
}
#[inline]
pub fn color(&self) -> Color {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<Color>(Monster::VT_COLOR, Some(Color::Blue)).unwrap()}
}
#[inline]
pub fn weapons(&self) -> Option<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Weapon<'a>>>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, ::flatbuffers::ForwardsUOffset<Weapon>>>>(Monster::VT_WEAPONS, None)}
}
#[inline]
pub fn equipped_type(&self) -> Equipment {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<Equipment>(Monster::VT_EQUIPPED_TYPE, Some(Equipment::NONE)).unwrap()}
}
#[inline]
pub fn equipped(&self) -> Option<::flatbuffers::Table<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Table<'a>>>(Monster::VT_EQUIPPED, None)}
}
#[inline]
pub fn path(&self) -> Option<::flatbuffers::Vector<'a, Vec3>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'a, Vec3>>>(Monster::VT_PATH, None)}
}
#[inline]
#[allow(non_snake_case)]
pub fn equipped_as_weapon(&self) -> Option<Weapon<'a>> {
if self.equipped_type() == Equipment::Weapon {
self.equipped().map(|t| {
// Safety:
// Created from a valid Table for this object
// Which contains a valid union in this slot
unsafe { Weapon::init_from_table(t) }
})
} else {
None
}
}
} }
impl ::flatbuffers::Verifiable for Monster<'_> { impl ::flatbuffers::Verifiable for Monster<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<Vec3>("pos", Self::VT_POS, false)? .visit_field::<Vec3>("pos", Self::VT_POS, false)?
.visit_field::<i16>("mana", Self::VT_MANA, false)? .visit_field::<i16>("mana", Self::VT_MANA, false)?
.visit_field::<i16>("hp", Self::VT_HP, false)? .visit_field::<i16>("hp", Self::VT_HP, false)?
.visit_field::<::flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)? .visit_field::<::flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
.visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, u8>>>("inventory", Self::VT_INVENTORY, false)? .visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, u8>>>("inventory", Self::VT_INVENTORY, false)?
.visit_field::<Color>("color", Self::VT_COLOR, false)? .visit_field::<Color>("color", Self::VT_COLOR, false)?
.visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, ::flatbuffers::ForwardsUOffset<Weapon>>>>("weapons", Self::VT_WEAPONS, false)? .visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, ::flatbuffers::ForwardsUOffset<Weapon>>>>("weapons", Self::VT_WEAPONS, false)?
.visit_union::<Equipment, _>("equipped_type", Self::VT_EQUIPPED_TYPE, "equipped", Self::VT_EQUIPPED, false, |key, v, pos| { .visit_union::<Equipment, _>("equipped_type", Self::VT_EQUIPPED_TYPE, "equipped", Self::VT_EQUIPPED, false, |key, v, pos| {
match key { match key {
Equipment::Weapon => v.verify_union_variant::<::flatbuffers::ForwardsUOffset<Weapon>>("Equipment::Weapon", pos), Equipment::Weapon => v.verify_union_variant::<::flatbuffers::ForwardsUOffset<Weapon>>("Equipment::Weapon", pos),
_ => Ok(()), _ => Ok(()),
} }
})? })?
.visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, Vec3>>>("path", Self::VT_PATH, false)? .visit_field::<::flatbuffers::ForwardsUOffset<::flatbuffers::Vector<'_, Vec3>>>("path", Self::VT_PATH, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct MonsterArgs<'a> { pub struct MonsterArgs<'a> {
pub pos: Option<&'a Vec3>, pub pos: Option<&'a Vec3>,
pub mana: i16, pub mana: i16,
@@ -233,273 +220,246 @@ pub struct MonsterArgs<'a> {
pub equipped: Option<::flatbuffers::WIPOffset<::flatbuffers::UnionWIPOffset>>, pub equipped: Option<::flatbuffers::WIPOffset<::flatbuffers::UnionWIPOffset>>,
pub path: Option<::flatbuffers::WIPOffset<::flatbuffers::Vector<'a, Vec3>>>, pub path: Option<::flatbuffers::WIPOffset<::flatbuffers::Vector<'a, Vec3>>>,
} }
impl<'a> Default for MonsterArgs<'a> { impl<'a> Default for MonsterArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
MonsterArgs { MonsterArgs {
pos: None, pos: None,
mana: 150, mana: 150,
hp: 100, hp: 100,
name: None, name: None,
inventory: None, inventory: None,
color: Color::Blue, color: Color::Blue,
weapons: None, weapons: None,
equipped_type: Equipment::NONE, equipped_type: Equipment::NONE,
equipped: None, equipped: None,
path: None, path: None,
}
} }
}
} }
pub struct MonsterBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct MonsterBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> MonsterBuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> MonsterBuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_pos(&mut self, pos: &Vec3) { pub fn add_pos(&mut self, pos: &Vec3) {
self.fbb_.push_slot_always::<&Vec3>(Monster::VT_POS, pos); self.fbb_.push_slot_always::<&Vec3>(Monster::VT_POS, pos);
} }
#[inline]
#[inline] pub fn add_mana(&mut self, mana: i16) {
pub fn add_mana(&mut self, mana: i16) { self.fbb_.push_slot::<i16>(Monster::VT_MANA, mana, 150);
self.fbb_.push_slot::<i16>(Monster::VT_MANA, mana, 150); }
} #[inline]
pub fn add_hp(&mut self, hp: i16) {
#[inline] self.fbb_.push_slot::<i16>(Monster::VT_HP, hp, 100);
pub fn add_hp(&mut self, hp: i16) { }
self.fbb_.push_slot::<i16>(Monster::VT_HP, hp, 100); #[inline]
} pub fn add_name(&mut self, name: ::flatbuffers::WIPOffset<&'b str>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_NAME, name);
#[inline] }
pub fn add_name(&mut self, name: ::flatbuffers::WIPOffset<&'b str>) { #[inline]
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_NAME, name); pub fn add_inventory(&mut self, inventory: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , u8>>) {
} self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_INVENTORY, inventory);
}
#[inline] #[inline]
pub fn add_inventory(&mut self, inventory: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , u8>>) { pub fn add_color(&mut self, color: Color) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_INVENTORY, inventory); self.fbb_.push_slot::<Color>(Monster::VT_COLOR, color, Color::Blue);
} }
#[inline]
#[inline] pub fn add_weapons(&mut self, weapons: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , ::flatbuffers::ForwardsUOffset<Weapon<'b >>>>) {
pub fn add_color(&mut self, color: Color) { self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_WEAPONS, weapons);
self.fbb_.push_slot::<Color>(Monster::VT_COLOR, color, Color::Blue); }
} #[inline]
pub fn add_equipped_type(&mut self, equipped_type: Equipment) {
#[inline] self.fbb_.push_slot::<Equipment>(Monster::VT_EQUIPPED_TYPE, equipped_type, Equipment::NONE);
pub fn add_weapons(&mut self, weapons: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , ::flatbuffers::ForwardsUOffset<Weapon<'b >>>>) { }
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_WEAPONS, weapons); #[inline]
} pub fn add_equipped(&mut self, equipped: ::flatbuffers::WIPOffset<::flatbuffers::UnionWIPOffset>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_EQUIPPED, equipped);
#[inline] }
pub fn add_equipped_type(&mut self, equipped_type: Equipment) { #[inline]
self.fbb_.push_slot::<Equipment>(Monster::VT_EQUIPPED_TYPE, equipped_type, Equipment::NONE); pub fn add_path(&mut self, path: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , Vec3>>) {
} self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_PATH, path);
}
#[inline] #[inline]
pub fn add_equipped(&mut self, equipped: ::flatbuffers::WIPOffset<::flatbuffers::UnionWIPOffset>) { pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> MonsterBuilder<'a, 'b, A> {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_EQUIPPED, equipped); let start = _fbb.start_table();
} MonsterBuilder {
fbb_: _fbb,
#[inline] start_: start,
pub fn add_path(&mut self, path: ::flatbuffers::WIPOffset<::flatbuffers::Vector<'b , Vec3>>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Monster::VT_PATH, path);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> MonsterBuilder<'a, 'b, A> {
let start = _fbb.start_table();
MonsterBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Monster<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Monster<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for Monster<'_> { impl ::core::fmt::Debug for Monster<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("Monster"); let mut ds = f.debug_struct("Monster");
ds.field("pos", &self.pos()); ds.field("pos", &self.pos());
ds.field("mana", &self.mana()); ds.field("mana", &self.mana());
ds.field("hp", &self.hp()); ds.field("hp", &self.hp());
ds.field("name", &self.name()); ds.field("name", &self.name());
ds.field("inventory", &self.inventory()); ds.field("inventory", &self.inventory());
ds.field("color", &self.color()); ds.field("color", &self.color());
ds.field("weapons", &self.weapons()); ds.field("weapons", &self.weapons());
ds.field("equipped_type", &self.equipped_type()); ds.field("equipped_type", &self.equipped_type());
match self.equipped_type() { match self.equipped_type() {
Equipment::Weapon => { Equipment::Weapon => {
if let Some(x) = self.equipped_as_weapon() { if let Some(x) = self.equipped_as_weapon() {
ds.field("equipped", &x) ds.field("equipped", &x)
} else { } else {
ds.field("equipped", &"InvalidFlatbuffer: Union discriminant does not match value.") ds.field("equipped", &"InvalidFlatbuffer: Union discriminant does not match value.")
} }
}, },
_ => { _ => {
let x: Option<()> = None; let x: Option<()> = None;
ds.field("equipped", &x) ds.field("equipped", &x)
}, },
}; };
ds.field("path", &self.path()); ds.field("path", &self.path());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct MonsterT { pub struct MonsterT {
pub pos: Option<Vec3T>, pub pos: Option<Vec3T>,
pub mana: i16, pub mana: i16,
pub hp: i16, pub hp: i16,
pub name: Option<alloc::string::String>, pub name: Option<alloc::string::String>,
pub inventory: Option<alloc::vec::Vec<u8>>, pub inventory: Option<alloc::vec::Vec<u8>>,
pub color: Color, pub color: Color,
pub weapons: Option<alloc::vec::Vec<WeaponT>>, pub weapons: Option<alloc::vec::Vec<WeaponT>>,
pub equipped: EquipmentT, pub equipped: EquipmentT,
pub path: Option<alloc::vec::Vec<Vec3T>>, pub path: Option<alloc::vec::Vec<Vec3T>>,
} }
impl Default for MonsterT { impl Default for MonsterT {
fn default() -> Self { fn default() -> Self {
Self { Self {
pos: None, pos: None,
mana: 150, mana: 150,
hp: 100, hp: 100,
name: None, name: None,
inventory: None, inventory: None,
color: Color::Blue, color: Color::Blue,
weapons: None, weapons: None,
equipped: EquipmentT::NONE, equipped: EquipmentT::NONE,
path: None, path: None,
}
} }
}
} }
impl MonsterT { impl MonsterT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<Monster<'b>> { ) -> ::flatbuffers::WIPOffset<Monster<'b>> {
let pos_tmp = self.pos.as_ref().map(|x| x.pack()); let pos_tmp = self.pos.as_ref().map(|x| x.pack());
let pos = pos_tmp.as_ref(); let pos = pos_tmp.as_ref();
let mana = self.mana; let mana = self.mana;
let hp = self.hp; let hp = self.hp;
let name = self.name.as_ref().map(|x|{ let name = self.name.as_ref().map(|x|{
_fbb.create_string(x) _fbb.create_string(x)
}); });
let inventory = self.inventory.as_ref().map(|x|{ let inventory = self.inventory.as_ref().map(|x|{
_fbb.create_vector(x) _fbb.create_vector(x)
}); });
let color = self.color; let color = self.color;
let weapons = self.weapons.as_ref().map(|x|{ let weapons = self.weapons.as_ref().map(|x|{
let w: alloc::vec::Vec<_> = x.iter().map(|t| t.pack(_fbb)).collect();_fbb.create_vector(&w) let w: alloc::vec::Vec<_> = x.iter().map(|t| t.pack(_fbb)).collect();_fbb.create_vector(&w)
}); });
let equipped_type = self.equipped.equipment_type(); let equipped_type = self.equipped.equipment_type();
let equipped = self.equipped.pack(_fbb); let equipped = self.equipped.pack(_fbb);
let path = self.path.as_ref().map(|x|{ let path = self.path.as_ref().map(|x|{
let w: alloc::vec::Vec<_> = x.iter().map(|t| t.pack()).collect();_fbb.create_vector(&w) let w: alloc::vec::Vec<_> = x.iter().map(|t| t.pack()).collect();_fbb.create_vector(&w)
}); });
Monster::create(_fbb, &MonsterArgs{ Monster::create(_fbb, &MonsterArgs{
pos, pos,
mana, mana,
hp, hp,
name, name,
inventory, inventory,
color, color,
weapons, weapons,
equipped_type, equipped_type,
equipped, equipped,
path, path,
}) })
} }
} }
#[inline]
/// Verifies that a buffer of bytes contains a `Monster` /// Verifies that a buffer of bytes contains a `Monster`
/// and returns it. /// and returns it.
/// Note that verification is still experimental and may not /// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `root_as_monster_unchecked`. /// `root_as_monster_unchecked`.
#[inline]
pub fn root_as_monster(buf: &[u8]) -> Result<Monster<'_>, ::flatbuffers::InvalidFlatbuffer> { pub fn root_as_monster(buf: &[u8]) -> Result<Monster<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root::<Monster>(buf) ::flatbuffers::root::<Monster>(buf)
} }
#[inline]
/// Verifies that a buffer of bytes contains a size prefixed /// Verifies that a buffer of bytes contains a size prefixed
/// `Monster` and returns it. /// `Monster` and returns it.
/// Note that verification is still experimental and may not /// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `size_prefixed_root_as_monster_unchecked`. /// `size_prefixed_root_as_monster_unchecked`.
#[inline]
pub fn size_prefixed_root_as_monster(buf: &[u8]) -> Result<Monster<'_>, ::flatbuffers::InvalidFlatbuffer> { pub fn size_prefixed_root_as_monster(buf: &[u8]) -> Result<Monster<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root::<Monster>(buf) ::flatbuffers::size_prefixed_root::<Monster>(buf)
} }
#[inline]
/// Verifies, with the given options, that a buffer of bytes /// Verifies, with the given options, that a buffer of bytes
/// contains a `Monster` and returns it. /// contains a `Monster` and returns it.
/// Note that verification is still experimental and may not /// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `root_as_monster_unchecked`. /// `root_as_monster_unchecked`.
#[inline]
pub fn root_as_monster_with_opts<'b, 'o>( pub fn root_as_monster_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions, opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8], buf: &'b [u8],
) -> Result<Monster<'b>, ::flatbuffers::InvalidFlatbuffer> { ) -> Result<Monster<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root_with_opts::<Monster<'b>>(opts, buf) ::flatbuffers::root_with_opts::<Monster<'b>>(opts, buf)
} }
#[inline]
/// Verifies, with the given verifier options, that a buffer of /// Verifies, with the given verifier options, that a buffer of
/// bytes contains a size prefixed `Monster` and returns /// bytes contains a size prefixed `Monster` and returns
/// it. Note that verification is still experimental and may not /// it. Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `root_as_monster_unchecked`. /// `root_as_monster_unchecked`.
#[inline]
pub fn size_prefixed_root_as_monster_with_opts<'b, 'o>( pub fn size_prefixed_root_as_monster_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions, opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8], buf: &'b [u8],
) -> Result<Monster<'b>, ::flatbuffers::InvalidFlatbuffer> { ) -> Result<Monster<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root_with_opts::<Monster<'b>>(opts, buf) ::flatbuffers::size_prefixed_root_with_opts::<Monster<'b>>(opts, buf)
} }
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a Monster and returns it. /// Assumes, without verification, that a buffer of bytes contains a Monster and returns it.
/// # Safety /// # Safety
/// Callers must trust the given bytes do indeed contain a valid `Monster`. /// Callers must trust the given bytes do indeed contain a valid `Monster`.
#[inline]
pub unsafe fn root_as_monster_unchecked(buf: &[u8]) -> Monster<'_> { pub unsafe fn root_as_monster_unchecked(buf: &[u8]) -> Monster<'_> {
unsafe { ::flatbuffers::root_unchecked::<Monster>(buf) } unsafe { ::flatbuffers::root_unchecked::<Monster>(buf) }
} }
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a size prefixed Monster and returns it. /// Assumes, without verification, that a buffer of bytes contains a size prefixed Monster and returns it.
/// # Safety /// # Safety
/// Callers must trust the given bytes do indeed contain a valid size prefixed `Monster`. /// Callers must trust the given bytes do indeed contain a valid size prefixed `Monster`.
#[inline]
pub unsafe fn size_prefixed_root_as_monster_unchecked(buf: &[u8]) -> Monster<'_> { pub unsafe fn size_prefixed_root_as_monster_unchecked(buf: &[u8]) -> Monster<'_> {
unsafe { ::flatbuffers::size_prefixed_root_unchecked::<Monster>(buf) } unsafe { ::flatbuffers::size_prefixed_root_unchecked::<Monster>(buf) }
} }
#[inline] #[inline]
pub fn finish_monster_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>( pub fn finish_monster_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
root: ::flatbuffers::WIPOffset<Monster<'a>> root: ::flatbuffers::WIPOffset<Monster<'a>>) {
) { fbb.finish(root, None);
fbb.finish(root, None);
} }
#[inline] #[inline]
pub fn finish_size_prefixed_monster_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>( pub fn finish_size_prefixed_monster_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, root: ::flatbuffers::WIPOffset<Monster<'a>>) {
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb.finish_size_prefixed(root, None);
root: ::flatbuffers::WIPOffset<Monster<'a>>
) {
fbb.finish_size_prefixed(root, None);
} }

View File

@@ -2,57 +2,47 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
// struct Vec3, aligned to 4 // struct Vec3, aligned to 4
#[repr(transparent)] #[repr(transparent)]
#[derive(Clone, Copy, PartialEq)] #[derive(Clone, Copy, PartialEq)]
pub struct Vec3(pub [u8; 12]); pub struct Vec3(pub [u8; 12]);
impl Default for Vec3 { impl Default for Vec3 {
fn default() -> Self { fn default() -> Self {
Self([0; 12]) Self([0; 12])
} }
} }
impl ::core::fmt::Debug for Vec3 { impl ::core::fmt::Debug for Vec3 {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("Vec3") f.debug_struct("Vec3")
.field("x", &self.x()) .field("x", &self.x())
.field("y", &self.y()) .field("y", &self.y())
.field("z", &self.z()) .field("z", &self.z())
.finish() .finish()
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for Vec3 {} impl ::flatbuffers::SimpleToVerifyInSlice for Vec3 {}
impl<'a> ::flatbuffers::Follow<'a> for Vec3 { impl<'a> ::flatbuffers::Follow<'a> for Vec3 {
type Inner = &'a Vec3; type Inner = &'a Vec3;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { <&'a Vec3>::follow(buf, loc) }
unsafe { <&'a Vec3>::follow(buf, loc) } }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for &'a Vec3 { impl<'a> ::flatbuffers::Follow<'a> for &'a Vec3 {
type Inner = &'a Vec3; type Inner = &'a Vec3;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { ::flatbuffers::follow_cast_ref::<Vec3>(buf, loc) }
unsafe { ::flatbuffers::follow_cast_ref::<Vec3>(buf, loc) } }
}
} }
impl<'b> ::flatbuffers::Push for Vec3 { impl<'b> ::flatbuffers::Push for Vec3 {
type Output = Vec3; type Output = Vec3;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Vec3 as *const u8, <Self as ::flatbuffers::Push>::size()) }; let src = unsafe { ::core::slice::from_raw_parts(self as *const Vec3 as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src); dst.copy_from_slice(src);
} }
#[inline] #[inline]
fn alignment() -> ::flatbuffers::PushAlignment { fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4) ::flatbuffers::PushAlignment::new(4)
@@ -60,150 +50,141 @@ impl<'b> ::flatbuffers::Push for Vec3 {
} }
impl<'a> ::flatbuffers::Verifiable for Vec3 { impl<'a> ::flatbuffers::Verifiable for Vec3 {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos) v.in_buffer::<Self>(pos)
} }
} }
impl<'a> Vec3 { impl<'a> Vec3 {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
x: f32, x: f32,
y: f32, y: f32,
z: f32, z: f32,
) -> Self { ) -> Self {
let mut s = Self([0; 12]); let mut s = Self([0; 12]);
s.set_x(x); s.set_x(x);
s.set_y(y); s.set_y(y);
s.set_z(z); s.set_z(z);
s s
} }
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Sample.Vec3" "MyGame.Sample.Vec3"
} }
pub fn x(&self) -> f32 { pub fn x(&self) -> f32 {
let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(), self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_x(&mut self, x: f32) { pub fn set_x(&mut self, x: f32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(), self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn y(&self) -> f32 { pub fn y(&self) -> f32 {
let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[4..].as_ptr(), self.0[4..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_y(&mut self, x: f32) { pub fn set_y(&mut self, x: f32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[4..].as_mut_ptr(), self.0[4..].as_mut_ptr(),
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn z(&self) -> f32 { pub fn z(&self) -> f32 {
let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[8..].as_ptr(), self.0[8..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_z(&mut self, x: f32) { pub fn set_z(&mut self, x: f32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[8..].as_mut_ptr(), self.0[8..].as_mut_ptr(),
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn unpack(&self) -> Vec3T { pub fn unpack(&self) -> Vec3T {
Vec3T { Vec3T {
x: self.x(), x: self.x(),
y: self.y(), y: self.y(),
z: self.z(), z: self.z(),
}
} }
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Default)]
pub struct Vec3T { pub struct Vec3T {
pub x: f32, pub x: f32,
pub y: f32, pub y: f32,
pub z: f32, pub z: f32,
} }
impl Default for Vec3T { impl Vec3T {
fn default() -> Self { pub fn pack(&self) -> Vec3 {
Self { Vec3::new(
x: 0.0, self.x,
y: 0.0, self.y,
z: 0.0, self.z,
} )
} }
} }
impl Vec3T {
pub fn pack(&self) -> Vec3 {
Vec3::new(
self.x,
self.y,
self.z,
)
}
}

View File

@@ -2,172 +2,159 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum WeaponOffset {} pub enum WeaponOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct Weapon<'a> { pub struct Weapon<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for Weapon<'a> { impl<'a> ::flatbuffers::Follow<'a> for Weapon<'a> {
type Inner = Weapon<'a>; type Inner = Weapon<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> Weapon<'a> { impl<'a> Weapon<'a> {
pub const VT_NAME: ::flatbuffers::VOffsetT = 4; pub const VT_NAME: ::flatbuffers::VOffsetT = 4;
pub const VT_DAMAGE: ::flatbuffers::VOffsetT = 6; pub const VT_DAMAGE: ::flatbuffers::VOffsetT = 6;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Sample.Weapon" "MyGame.Sample.Weapon"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
Weapon { _tab: table } Weapon { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args WeaponArgs<'args>
) -> ::flatbuffers::WIPOffset<Weapon<'bldr>> {
let mut builder = WeaponBuilder::new(_fbb);
if let Some(x) = args.name { builder.add_name(x); }
builder.add_damage(args.damage);
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> WeaponT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let name = self.name().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::string::ToString::to_string(x)
args: &'args WeaponArgs<'args> });
) -> ::flatbuffers::WIPOffset<Weapon<'bldr>> { let damage = self.damage();
let mut builder = WeaponBuilder::new(_fbb); WeaponT {
if let Some(x) = args.name { builder.add_name(x); } name,
builder.add_damage(args.damage); damage,
builder.finish()
} }
}
pub fn unpack(&self) -> WeaponT { #[inline]
let name = self.name().map(|x| { pub fn name(&self) -> Option<&'a str> {
alloc::string::ToString::to_string(x) // Safety:
}); // Created from valid Table for this object
let damage = self.damage(); // which contains a valid value in this slot
WeaponT { unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<&str>>(Weapon::VT_NAME, None)}
name, }
damage, #[inline]
} pub fn damage(&self) -> i16 {
} // Safety:
// Created from valid Table for this object
#[inline] // which contains a valid value in this slot
pub fn name(&self) -> Option<&'a str> { unsafe { self._tab.get::<i16>(Weapon::VT_DAMAGE, Some(0)).unwrap()}
// Safety: }
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<&str>>(Weapon::VT_NAME, None)}
}
#[inline]
pub fn damage(&self) -> i16 {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<i16>(Weapon::VT_DAMAGE, Some(0)).unwrap()}
}
} }
impl ::flatbuffers::Verifiable for Weapon<'_> { impl ::flatbuffers::Verifiable for Weapon<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)? .visit_field::<::flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
.visit_field::<i16>("damage", Self::VT_DAMAGE, false)? .visit_field::<i16>("damage", Self::VT_DAMAGE, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct WeaponArgs<'a> { pub struct WeaponArgs<'a> {
pub name: Option<::flatbuffers::WIPOffset<&'a str>>, pub name: Option<::flatbuffers::WIPOffset<&'a str>>,
pub damage: i16, pub damage: i16,
} }
impl<'a> Default for WeaponArgs<'a> { impl<'a> Default for WeaponArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
WeaponArgs { WeaponArgs {
name: None, name: None,
damage: 0, damage: 0,
}
} }
}
} }
pub struct WeaponBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct WeaponBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> WeaponBuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> WeaponBuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_name(&mut self, name: ::flatbuffers::WIPOffset<&'b str>) { pub fn add_name(&mut self, name: ::flatbuffers::WIPOffset<&'b str>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Weapon::VT_NAME, name); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<_>>(Weapon::VT_NAME, name);
} }
#[inline]
#[inline] pub fn add_damage(&mut self, damage: i16) {
pub fn add_damage(&mut self, damage: i16) { self.fbb_.push_slot::<i16>(Weapon::VT_DAMAGE, damage, 0);
self.fbb_.push_slot::<i16>(Weapon::VT_DAMAGE, damage, 0); }
} #[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> WeaponBuilder<'a, 'b, A> {
#[inline] let start = _fbb.start_table();
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> WeaponBuilder<'a, 'b, A> { WeaponBuilder {
let start = _fbb.start_table(); fbb_: _fbb,
WeaponBuilder { start_: start,
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Weapon<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<Weapon<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for Weapon<'_> { impl ::core::fmt::Debug for Weapon<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("Weapon"); let mut ds = f.debug_struct("Weapon");
ds.field("name", &self.name()); ds.field("name", &self.name());
ds.field("damage", &self.damage()); ds.field("damage", &self.damage());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct WeaponT { pub struct WeaponT {
pub name: Option<alloc::string::String>, pub name: Option<alloc::string::String>,
pub damage: i16, pub damage: i16,
} }
impl Default for WeaponT { impl Default for WeaponT {
fn default() -> Self { fn default() -> Self {
Self { Self {
name: None, name: None,
damage: 0, damage: 0,
}
} }
}
} }
impl WeaponT { impl WeaponT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<Weapon<'b>> { ) -> ::flatbuffers::WIPOffset<Weapon<'b>> {
let name = self.name.as_ref().map(|x|{ let name = self.name.as_ref().map(|x|{
_fbb.create_string(x) _fbb.create_string(x)
}); });
let damage = self.damage; let damage = self.damage;
Weapon::create(_fbb, &WeaponArgs{ Weapon::create(_fbb, &WeaponArgs{
name, name,
damage, damage,
}) })
} }
} }

View File

@@ -383,6 +383,11 @@ flatc(
schema="native_type_test.fbs", schema="native_type_test.fbs",
) )
flatc(
["--cpp", "--gen-compare", "--gen-mutable", "--gen-object-api", "--reflect-names"],
schema="cpp_vec_type_test.fbs",
)
flatc( flatc(
[ [
"--cpp", "--cpp",
@@ -394,11 +399,6 @@ flatc(
schema="native_inline_table_test.fbs", schema="native_inline_table_test.fbs",
) )
flatc(
["--cpp", "--gen-compare", "--gen-mutable", "--gen-object-api", "--reflect-names"],
schema="cross_namespace_pack_test.fbs",
)
flatc( flatc(
RUST_OPTS, RUST_OPTS,
prefix="arrays_test", prefix="arrays_test",
@@ -422,11 +422,6 @@ flatc(
schema="nested_union_test.fbs", schema="nested_union_test.fbs",
) )
flatc(
["--python", "--gen-object-api"],
schema="union_name_test.fbs",
)
flatc( flatc(
NO_INCL_OPTS + CPP_OPTS, NO_INCL_OPTS + CPP_OPTS,
schema="default_vectors_strings_test.fbs", schema="default_vectors_strings_test.fbs",
@@ -527,13 +522,6 @@ flatc(
cwd=swift_code_gen, cwd=swift_code_gen,
) )
flatc(
SWIFT_OPTS_CODE_GEN + BASE_OPTS,
schema="empty_vtable.fbs",
cwd=swift_code_gen,
prefix="../../Tests/Flatbuffers/",
)
# Swift Wasm Tests # Swift Wasm Tests
swift_Wasm_prefix = "swift/Wasm.tests/Tests/FlatBuffers.Test.Swift.WasmTests" swift_Wasm_prefix = "swift/Wasm.tests/Tests/FlatBuffers.Test.Swift.WasmTests"
flatc( flatc(

View File

@@ -126,7 +126,9 @@ static BinarySection GenerateMissingSection(const uint64_t offset,
std::map<uint64_t, BinarySection> BinaryAnnotator::Annotate() { std::map<uint64_t, BinarySection> BinaryAnnotator::Annotate() {
if (bfbs_ != nullptr && bfbs_length_ != 0) { if (bfbs_ != nullptr && bfbs_length_ != 0) {
flatbuffers::Verifier verifier(bfbs_, static_cast<size_t>(bfbs_length_)); flatbuffers::Verifier verifier(bfbs_, static_cast<size_t>(bfbs_length_));
if (!reflection::VerifySchemaBuffer(verifier)) { if ((is_size_prefixed_ &&
!reflection::VerifySizePrefixedSchemaBuffer(verifier)) ||
!reflection::VerifySchemaBuffer(verifier)) {
return {}; return {};
} }
} }

View File

@@ -142,6 +142,10 @@ const static FlatCOption flatc_options[] = {
"and T::empty() must be supported. The custom type also needs to be " "and T::empty() must be supported. The custom type also needs to be "
"constructible from std::string (see the --cpp-str-flex-ctor option to " "constructible from std::string (see the --cpp-str-flex-ctor option to "
"change this behavior)"}, "change this behavior)"},
{"", "cpp-vec-type", "T",
"Set object API vector type (default std::vector). T must support the "
"same interface as std::vector: size(), resize(), reserve(), "
"emplace_back(), operator[], begin(), end(), and data()."},
{"", "cpp-str-flex-ctor", "", {"", "cpp-str-flex-ctor", "",
"Don't construct custom string types by passing std::string from " "Don't construct custom string types by passing std::string from "
"Flatbuffers, but (char* + length)."}, "Flatbuffers, but (char* + length)."},
@@ -543,6 +547,9 @@ FlatCOptions FlatCompiler::ParseFromCommandLineArguments(int argc,
} else if (arg == "--cpp-str-type") { } else if (arg == "--cpp-str-type") {
if (++argi >= argc) Error("missing type following: " + arg, true); if (++argi >= argc) Error("missing type following: " + arg, true);
opts.cpp_object_api_string_type = argv[argi]; opts.cpp_object_api_string_type = argv[argi];
} else if (arg == "--cpp-vec-type") {
if (++argi >= argc) Error("missing type following: " + arg, true);
opts.cpp_object_api_vector_type = argv[argi];
} else if (arg == "--cpp-str-flex-ctor") { } else if (arg == "--cpp-str-flex-ctor") {
opts.cpp_object_api_string_flexible_constructor = true; opts.cpp_object_api_string_flexible_constructor = true;
} else if (arg == "--no-cpp-direct-copy") { } else if (arg == "--no-cpp-direct-copy") {

View File

@@ -929,6 +929,15 @@ class CppGenerator : public BaseGenerator {
return ret; return ret;
} }
const std::string NativeVector(const FieldDef* field) {
auto attr = field ? field->attributes.Lookup("cpp_vec_type") : nullptr;
auto& ret = attr ? attr->constant : opts_.cpp_object_api_vector_type;
if (ret.empty()) {
return "std::vector";
}
return ret;
}
bool FlexibleStringConstructor(const FieldDef* field) { bool FlexibleStringConstructor(const FieldDef* field) {
auto attr = field != nullptr && auto attr = field != nullptr &&
(field->attributes.Lookup("cpp_str_flex_ctor") != nullptr); (field->attributes.Lookup("cpp_str_flex_ctor") != nullptr);
@@ -974,20 +983,26 @@ class CppGenerator : public BaseGenerator {
case BASE_TYPE_VECTOR64: case BASE_TYPE_VECTOR64:
case BASE_TYPE_VECTOR: { case BASE_TYPE_VECTOR: {
const auto type_name = GenTypeNative(type.VectorType(), true, field); const auto type_name = GenTypeNative(type.VectorType(), true, field);
if (type.struct_def && const auto vec_type = NativeVector(&field);
if (vec_type == "std::vector" && type.struct_def &&
type.struct_def->attributes.Lookup("native_custom_alloc")) { type.struct_def->attributes.Lookup("native_custom_alloc")) {
auto native_custom_alloc = auto native_custom_alloc =
type.struct_def->attributes.Lookup("native_custom_alloc"); type.struct_def->attributes.Lookup("native_custom_alloc");
return "std::vector<" + type_name + "," + return "std::vector<" + type_name + "," +
native_custom_alloc->constant + "<" + type_name + ">>"; native_custom_alloc->constant + "<" + type_name + ">>";
} else {
return "std::vector<" + type_name + ">";
} }
return vec_type + "<" + type_name + ">";
} }
case BASE_TYPE_STRUCT: { case BASE_TYPE_STRUCT: {
auto type_name = WrapInNameSpace(*type.struct_def); auto type_name = WrapInNameSpace(*type.struct_def);
if (IsStruct(type)) { if (IsStruct(type)) {
auto native_type = type.struct_def->attributes.Lookup("native_type"); // Field-level native_type takes priority over struct-level
// native_type
auto field_native_type = field.attributes.Lookup("native_type");
auto native_type =
field_native_type
? field_native_type
: type.struct_def->attributes.Lookup("native_type");
if (native_type) { if (native_type) {
type_name = native_type->constant; type_name = native_type->constant;
} }
@@ -1951,9 +1966,10 @@ class CppGenerator : public BaseGenerator {
field.offset64); field.offset64);
} }
if (TypeHasKey(vtype)) { if (TypeHasKey(vtype)) {
code_.SetValue("PARAM_TYPE", "std::vector<" + type + "> *"); code_.SetValue("PARAM_TYPE", NativeVector(&field) + "<" + type + "> *");
} else { } else {
code_.SetValue("PARAM_TYPE", "const std::vector<" + type + "> *"); code_.SetValue("PARAM_TYPE",
"const " + NativeVector(&field) + "<" + type + "> *");
} }
code_.SetValue("PARAM_VALUE", "nullptr"); code_.SetValue("PARAM_VALUE", "nullptr");
} else { } else {
@@ -1979,7 +1995,7 @@ class CppGenerator : public BaseGenerator {
const std::string& full_type = const std::string& full_type =
(cpp_type (cpp_type
? (IsVector(field.value.type) ? (IsVector(field.value.type)
? "std::vector<" + ? NativeVector(&field) + "<" +
GenTypeNativePtr(cpp_type->constant, &field, GenTypeNativePtr(cpp_type->constant, &field,
false) + false) +
"> " "> "
@@ -2779,17 +2795,15 @@ class CppGenerator : public BaseGenerator {
get_call += ">(" + offset_str + ");"; get_call += ">(" + offset_str + ");";
code_ += get_call; code_ += get_call;
} else if (IsString(type) && field.value.constant != "0") { } else if (IsString(type) && field.value.constant != "0") {
std::string escaped; // TODO: Add logic to always convert the string to a valid C++ string
flatbuffers::EscapeString(field.value.constant.c_str(), // literal by handling string escapes.
field.value.constant.length(), &escaped,
true, false);
code_ += " auto* ptr = {{FIELD_VALUE}};"; code_ += " auto* ptr = {{FIELD_VALUE}};";
code_ += " if (ptr) return ptr;"; code_ += " if (ptr) return ptr;";
code_ += " static const struct { uint32_t len; const char s[" + code_ += " static const struct { uint32_t len; const char s[" +
NumToString(field.value.constant.length() + 1) + NumToString(field.value.constant.length() + 1) +
"]; } bfbs_string = { " + "]; } bfbs_string = { " +
NumToString(field.value.constant.length()) + ", " + NumToString(field.value.constant.length()) + ", \"" +
escaped + " };"; field.value.constant + "\" };";
code_ += code_ +=
" return reinterpret_cast<const ::flatbuffers::String " " return reinterpret_cast<const ::flatbuffers::String "
" *>(&bfbs_string);"; " *>(&bfbs_string);";
@@ -3419,15 +3433,11 @@ class CppGenerator : public BaseGenerator {
code_.SetValue("CREATE_STRING", "CreateSharedString"); code_.SetValue("CREATE_STRING", "CreateSharedString");
} }
if (field->value.constant != "0") { if (field->value.constant != "0") {
std::string escaped;
flatbuffers::EscapeString(field->value.constant.c_str(),
field->value.constant.length(), &escaped,
true, false);
code_ += code_ +=
" auto {{FIELD_NAME}}__ = {{FIELD_NAME}} ? " " auto {{FIELD_NAME}}__ = {{FIELD_NAME}} ? "
"_fbb.{{CREATE_STRING}}({{FIELD_NAME}}) : " "_fbb.{{CREATE_STRING}}({{FIELD_NAME}}) : "
"_fbb.{{CREATE_STRING}}(" + "_fbb.{{CREATE_STRING}}(\"" +
escaped + ");"; field->value.constant + "\");";
} else { } else {
code_ += code_ +=
" auto {{FIELD_NAME}}__ = {{FIELD_NAME}} ? " " auto {{FIELD_NAME}}__ = {{FIELD_NAME}} ? "
@@ -3522,10 +3532,21 @@ class CppGenerator : public BaseGenerator {
case BASE_TYPE_STRUCT: { case BASE_TYPE_STRUCT: {
if (IsStruct(type)) { if (IsStruct(type)) {
const auto& struct_attrs = type.struct_def->attributes; const auto& struct_attrs = type.struct_def->attributes;
const auto native_type = struct_attrs.Lookup("native_type"); // Field-level native_type takes priority over struct-level
// native_type
auto field_native_type = afield.attributes.Lookup("native_type");
const auto native_type = field_native_type
? field_native_type
: struct_attrs.Lookup("native_type");
if (native_type) { if (native_type) {
std::string unpack_call = "::flatbuffers::UnPack"; std::string unpack_call = "::flatbuffers::UnPack";
const auto pack_name = struct_attrs.Lookup("native_type_pack_name"); // Field-level native_type_pack_name takes priority over
// struct-level
auto field_pack_name =
afield.attributes.Lookup("native_type_pack_name");
const auto pack_name =
field_pack_name ? field_pack_name
: struct_attrs.Lookup("native_type_pack_name");
if (pack_name) { if (pack_name) {
unpack_call += pack_name->constant; unpack_call += pack_name->constant;
} }
@@ -3780,7 +3801,8 @@ class CppGenerator : public BaseGenerator {
auto vector_type = field.value.type.VectorType(); auto vector_type = field.value.type.VectorType();
switch (vector_type.base_type) { switch (vector_type.base_type) {
case BASE_TYPE_STRING: { case BASE_TYPE_STRING: {
if (NativeString(&field) == "std::string") { if (NativeString(&field) == "std::string" &&
NativeVector(&field) == "std::vector") {
code += "_fbb.CreateVectorOfStrings(" + value + ")"; code += "_fbb.CreateVectorOfStrings(" + value + ")";
} else { } else {
// Use by-function serialization to emulate // Use by-function serialization to emulate
@@ -3801,39 +3823,59 @@ class CppGenerator : public BaseGenerator {
if (IsStruct(vector_type)) { if (IsStruct(vector_type)) {
const auto& struct_attrs = const auto& struct_attrs =
field.value.type.struct_def->attributes; field.value.type.struct_def->attributes;
const auto native_type = struct_attrs.Lookup("native_type"); // Field-level native_type takes priority over struct-level
// native_type
auto field_native_type = field.attributes.Lookup("native_type");
const auto native_type = field_native_type
? field_native_type
: struct_attrs.Lookup("native_type");
if (native_type) { if (native_type) {
code += "_fbb.CreateVectorOfNativeStructs<"; code += "_fbb.CreateVectorOfNativeStructs<";
code += WrapInNameSpace(*vector_type.struct_def) + ", " + code += WrapInNameSpace(*vector_type.struct_def) + ", " +
native_type->constant + ">"; native_type->constant + ">";
code += "(" + value; // Field-level native_type_pack_name takes priority over
// struct-level
auto field_pack_name =
field.attributes.Lookup("native_type_pack_name");
const auto pack_name = const auto pack_name =
struct_attrs.Lookup("native_type_pack_name"); field_pack_name
? field_pack_name
: struct_attrs.Lookup("native_type_pack_name");
// Non-std vectors (e.g. eastl::vector) don't match the
// std::vector overload, so use the pointer+size overload.
const bool is_std_vec = NativeVector(&field) == "std::vector";
if (is_std_vec) {
code += "(" + value;
} else {
code += "(" + value + ".data(), " + value + ".size()";
}
if (pack_name) { if (pack_name) {
code += ", ::flatbuffers::Pack" + pack_name->constant; code += ", ::flatbuffers::Pack" + pack_name->constant;
} }
code += ")"; code += ")";
} else { } else {
// If the field uses 64-bit addressing, create a 64-bit vector. // If the field uses 64-bit addressing, create a 64-bit vector.
const bool is_std_vec = NativeVector(&field) == "std::vector";
const std::string vec_args =
is_std_vec ? ("(" + value + ")")
: ("(" + value + ".data(), " + value + ".size())");
if (field.value.type.base_type == BASE_TYPE_VECTOR64) { if (field.value.type.base_type == BASE_TYPE_VECTOR64) {
code += "_fbb.CreateVectorOfStructs64"; code += "_fbb.CreateVectorOfStructs64" + vec_args;
} else { } else {
code += "_fbb.CreateVectorOfStructs"; code += "_fbb.CreateVectorOfStructs";
if (field.offset64) { if (field.offset64) {
// This is normal 32-bit vector, with 64-bit addressing. // This is normal 32-bit vector, with 64-bit addressing.
code += "64<::flatbuffers::Vector>"; code += "64<::flatbuffers::Vector>";
} }
code += vec_args;
} }
code += "(" + value + ")";
} }
} else { } else {
code += "_fbb.CreateVector<::flatbuffers::Offset<"; code += "_fbb.CreateVector<::flatbuffers::Offset<";
code += WrapInNameSpace(*vector_type.struct_def) + ">> "; code += WrapInNameSpace(*vector_type.struct_def) + ">> ";
code += "(" + value + ".size(), "; code += "(" + value + ".size(), ";
code += "[](size_t i, _VectorArgs *__va) { "; code += "[](size_t i, _VectorArgs *__va) { ";
code += "return " + code += "return Create" + vector_type.struct_def->name;
WrapInNameSpace(vector_type.struct_def->defined_namespace,
"Create" + vector_type.struct_def->name);
code += "(*__va->__fbb, "; code += "(*__va->__fbb, ";
if (field.native_inline) { if (field.native_inline) {
code += "&(__va->_" + value + "[i])"; code += "&(__va->_" + value + "[i])";
@@ -3845,7 +3887,12 @@ class CppGenerator : public BaseGenerator {
break; break;
} }
case BASE_TYPE_BOOL: { case BASE_TYPE_BOOL: {
code += "_fbb.CreateVector(" + value + ")"; if (NativeVector(&field) == "std::vector") {
code += "_fbb.CreateVector(" + value + ")";
} else {
code += "_fbb.CreateVector(" + value + ".data(), " + value +
".size())";
}
break; break;
} }
case BASE_TYPE_UNION: { case BASE_TYPE_UNION: {
@@ -3894,15 +3941,19 @@ class CppGenerator : public BaseGenerator {
code += "; }, &_va )"; code += "; }, &_va )";
} else { } else {
// If the field uses 64-bit addressing, create a 64-bit vector. // If the field uses 64-bit addressing, create a 64-bit vector.
const bool is_std_vec = NativeVector(&field) == "std::vector";
const std::string vec_args =
is_std_vec ? ("(" + value + ")")
: ("(" + value + ".data(), " + value + ".size())");
if (field.value.type.base_type == BASE_TYPE_VECTOR64) { if (field.value.type.base_type == BASE_TYPE_VECTOR64) {
code += "_fbb.CreateVector64(" + value + ")"; code += "_fbb.CreateVector64" + vec_args;
} else { } else {
code += "_fbb.CreateVector"; code += "_fbb.CreateVector";
if (field.offset64) { if (field.offset64) {
// This is normal 32-bit vector, with 64-bit addressing. // This is normal 32-bit vector, with 64-bit addressing.
code += "64<::flatbuffers::Vector>"; code += "64<::flatbuffers::Vector>";
} }
code += "(" + value + ")"; code += vec_args;
} }
} }
break; break;
@@ -3926,11 +3977,22 @@ class CppGenerator : public BaseGenerator {
case BASE_TYPE_STRUCT: { case BASE_TYPE_STRUCT: {
if (IsStruct(field.value.type)) { if (IsStruct(field.value.type)) {
const auto& struct_attribs = field.value.type.struct_def->attributes; const auto& struct_attribs = field.value.type.struct_def->attributes;
const auto native_type = struct_attribs.Lookup("native_type"); // Field-level native_type takes priority over struct-level
// native_type
auto field_native_type = field.attributes.Lookup("native_type");
const auto native_type = field_native_type
? field_native_type
: struct_attribs.Lookup("native_type");
if (native_type && field.native_inline) { if (native_type && field.native_inline) {
code += "::flatbuffers::Pack"; code += "::flatbuffers::Pack";
// Field-level native_type_pack_name takes priority over
// struct-level
auto field_pack_name =
field.attributes.Lookup("native_type_pack_name");
const auto pack_name = const auto pack_name =
struct_attribs.Lookup("native_type_pack_name"); field_pack_name
? field_pack_name
: struct_attribs.Lookup("native_type_pack_name");
if (pack_name) { if (pack_name) {
code += pack_name->constant; code += pack_name->constant;
} }
@@ -3946,10 +4008,8 @@ class CppGenerator : public BaseGenerator {
} }
} else { } else {
// _o->field ? CreateT(_fbb, _o->field.get(), _rehasher); // _o->field ? CreateT(_fbb, _o->field.get(), _rehasher);
const auto& nested_struct = *field.value.type.struct_def; const std::string& type = field.value.type.struct_def->name;
code += value + " ? " + code += value + " ? Create" + type;
WrapInNameSpace(nested_struct.defined_namespace,
"Create" + nested_struct.name);
code += "(_fbb, " + value; code += "(_fbb, " + value;
if (!field.native_inline) code += GenPtrGet(field); if (!field.native_inline) code += GenPtrGet(field);
code += ", _rehasher) : 0"; code += ", _rehasher) : 0";
@@ -4096,9 +4156,15 @@ class CppGenerator : public BaseGenerator {
bool check_ptr = false; bool check_ptr = false;
if (field->value.type.base_type == BASE_TYPE_STRUCT) { if (field->value.type.base_type == BASE_TYPE_STRUCT) {
if (IsStruct(field->value.type)) { if (IsStruct(field->value.type)) {
// Field-level native_type takes priority over struct-level
// native_type
auto field_native_type =
field->attributes.Lookup("native_type");
auto native_type = auto native_type =
field->value.type.struct_def->attributes.Lookup( field_native_type
"native_type"); ? field_native_type
: field->value.type.struct_def->attributes.Lookup(
"native_type");
auto native_inline = field->attributes.Lookup("native_inline"); auto native_inline = field->attributes.Lookup("native_inline");
if (native_type) { if (native_type) {
pass_by_address = true; pass_by_address = true;

View File

@@ -368,17 +368,7 @@ static std::string GenerateFBS(const Parser& parser,
if (field.value.type.base_type != BASE_TYPE_UTYPE) { if (field.value.type.base_type != BASE_TYPE_UTYPE) {
GenComment(field.doc_comment, &schema, nullptr, " "); GenComment(field.doc_comment, &schema, nullptr, " ");
schema += " " + field.name + ":" + GenType(field.value.type); schema += " " + field.name + ":" + GenType(field.value.type);
if (field.value.constant != "0") { if (field.value.constant != "0") schema += " = " + field.value.constant;
if (IsString(field.value.type)) {
std::string escaped;
flatbuffers::EscapeString(field.value.constant.c_str(),
field.value.constant.length(), &escaped,
true, false);
schema += " = " + escaped;
} else {
schema += " = " + field.value.constant;
}
}
std::vector<std::string> attributes; std::vector<std::string> attributes;
if (field.IsRequired()) attributes.push_back("required"); if (field.IsRequired()) attributes.push_back("required");
if (field.key) attributes.push_back("key"); if (field.key) attributes.push_back("key");

View File

@@ -1528,7 +1528,7 @@ class PythonGenerator : public BaseGenerator {
} else { } else {
code += "def Create" + field_method + "Vector(builder, data):\n"; code += "def Create" + field_method + "Vector(builder, data):\n";
} }
code += Indent + "return " + helper_name + "(builder, data)\n\n"; code += Indent + helper_name + "(builder, data)\n\n";
} }
} }
@@ -2095,12 +2095,12 @@ class PythonGenerator : public BaseGenerator {
const auto field_method = namer_.Method(field); const auto field_method = namer_.Method(field);
const auto struct_var = namer_.Variable(struct_def); const auto struct_var = namer_.Variable(struct_def);
const EnumDef& enum_def = *field.value.type.enum_def; const EnumDef& enum_def = *field.value.type.enum_def;
auto union_fn = namer_.Function(enum_def); auto union_type = namer_.Type(enum_def);
if (parser_.opts.include_dependence_headers) { if (parser_.opts.include_dependence_headers) {
union_fn = namer_.NamespacedType(enum_def) + "." + union_fn; union_type = namer_.NamespacedType(enum_def) + "." + union_type;
} }
code += GenIndents(2) + "self." + field_field + " = " + union_fn + code += GenIndents(2) + "self." + field_field + " = " + union_type +
"Creator(" + "self." + field_field + "Type, " + struct_var + "." + "Creator(" + "self." + field_field + "Type, " + struct_var + "." +
field_method + "())"; field_method + "())";
} }

File diff suppressed because it is too large Load Diff

View File

@@ -164,7 +164,7 @@ class SwiftGenerator : public BaseGenerator {
bool generate() { bool generate() {
code_.Clear(); code_.Clear();
code_.SetValue("ACCESS", "_accessor"); code_.SetValue("ACCESS", "_accessor");
code_.SetValue("TABLEOFFSET", "VT"); code_.SetValue("TABLEOFFSET", "VTOFFSET");
code_ += "// " + std::string(FlatBuffersGeneratedWarning()); code_ += "// " + std::string(FlatBuffersGeneratedWarning());
code_ += "// swiftlint:disable all"; code_ += "// swiftlint:disable all";
code_ += "// swiftformat:disable all\n"; code_ += "// swiftformat:disable all\n";
@@ -282,16 +282,9 @@ class SwiftGenerator : public BaseGenerator {
NumToString(field.value.type.VectorType().fixed_length); NumToString(field.value.type.VectorType().fixed_length);
code_.SetValue("FIXEDLENGTH", fixed_length); code_.SetValue("FIXEDLENGTH", fixed_length);
std::string vector_base_type; const auto vector_base_type = IsStruct(field.value.type.VectorType())
if (IsStruct(field.value.type.VectorType())) { ? (type + "()")
vector_base_type = type + "()"; : SwiftConstant(field);
} else if (IsBool(field.value.type.VectorType().base_type)) {
vector_base_type = "false";
} else if (IsFloat(field.value.type.VectorType().base_type)) {
vector_base_type = "0.0";
} else {
vector_base_type = SwiftConstant(field);
}
code_ += "private var _{{FIELDVAR}}: InlineArray<{{FIXEDLENGTH}}, " + code_ += "private var _{{FIELDVAR}}: InlineArray<{{FIXEDLENGTH}}, " +
valueType + ">"; valueType + ">";
@@ -525,7 +518,7 @@ class SwiftGenerator : public BaseGenerator {
void GenTableAccessors(const StructDef& struct_def) { void GenTableAccessors(const StructDef& struct_def) {
// Generate field id constants. // Generate field id constants.
if (struct_def.fields.vec.size() > 0) { if (struct_def.fields.vec.size() > 0) {
code_ += "private struct {{TABLEOFFSET}} {"; code_ += "private enum {{TABLEOFFSET}}: VOffset {";
Indent(); Indent();
for (auto it = struct_def.fields.vec.begin(); for (auto it = struct_def.fields.vec.begin();
it != struct_def.fields.vec.end(); ++it) { it != struct_def.fields.vec.end(); ++it) {
@@ -535,8 +528,10 @@ class SwiftGenerator : public BaseGenerator {
} }
code_.SetValue("OFFSET_NAME", namer_.Variable(field)); code_.SetValue("OFFSET_NAME", namer_.Variable(field));
code_.SetValue("OFFSET_VALUE", NumToString(field.value.offset)); code_.SetValue("OFFSET_VALUE", NumToString(field.value.offset));
code_ += "static let {{OFFSET_NAME}}: VOffset = {{OFFSET_VALUE}}"; code_ += "case {{OFFSET_NAME}} = {{OFFSET_VALUE}}";
} }
code_ += "var v: Int32 { Int32(self.rawValue) }";
code_ += "var p: VOffset { self.rawValue }";
Outdent(); Outdent();
code_ += "}"; code_ += "}";
code_ += ""; code_ += "";
@@ -625,8 +620,7 @@ class SwiftGenerator : public BaseGenerator {
if (should_generate_create) { if (should_generate_create) {
code_ += "{{ACCESS_TYPE}} static func create{{SHORT_STRUCTNAME}}("; code_ += "{{ACCESS_TYPE}} static func create{{SHORT_STRUCTNAME}}(";
Indent(); Indent();
code_ += "_ fbb: inout FlatBufferBuilder\\"; code_ += "_ fbb: inout FlatBufferBuilder,";
if (create_func_header.empty() == false) code_ += ",";
for (auto it = create_func_header.begin(); it < create_func_header.end(); for (auto it = create_func_header.begin(); it < create_func_header.end();
++it) { ++it) {
code_ += *it + "\\"; code_ += *it + "\\";
@@ -705,7 +699,7 @@ class SwiftGenerator : public BaseGenerator {
code_ += field.IsOptional() ? (optional_enum + "\\") code_ += field.IsOptional() ? (optional_enum + "\\")
: (is_enum + ", def: {{CONSTANT}}\\"); : (is_enum + ", def: {{CONSTANT}}\\");
code_ += ", at: {{TABLEOFFSET}}.{{OFFSET}}) }"; code_ += ", at: {{TABLEOFFSET}}.{{OFFSET}}.p) }";
const auto default_value = const auto default_value =
IsEnum(field.value.type) IsEnum(field.value.type)
@@ -725,7 +719,7 @@ class SwiftGenerator : public BaseGenerator {
code_ += code_ +=
"{{VALUETYPE}}" + builder_string + "fbb.add(element: {{FIELDVAR}},\\"; "{{VALUETYPE}}" + builder_string + "fbb.add(element: {{FIELDVAR}},\\";
code_ += field.IsOptional() ? "\\" : " def: {{CONSTANT}},"; code_ += field.IsOptional() ? "\\" : " def: {{CONSTANT}},";
code_ += " at: {{TABLEOFFSET}}.{{OFFSET}}) }"; code_ += " at: {{TABLEOFFSET}}.{{OFFSET}}.p) }";
create_func_header.push_back( create_func_header.push_back(
field_var + ": " + nullable_type + " = " + field_var + ": " + nullable_type + " = " +
(field.IsOptional() ? "nil" : default_value)); (field.IsOptional() ? "nil" : default_value));
@@ -736,7 +730,7 @@ class SwiftGenerator : public BaseGenerator {
const auto create_struct = const auto create_struct =
"guard let {{FIELDVAR}} = {{FIELDVAR}} else { return };" "guard let {{FIELDVAR}} = {{FIELDVAR}} else { return };"
" fbb.create(struct: {{FIELDVAR}}, position: " " fbb.create(struct: {{FIELDVAR}}, position: "
"{{TABLEOFFSET}}.{{OFFSET}}) }"; "{{TABLEOFFSET}}.{{OFFSET}}.p) }";
code_ += type + "?" + builder_string + create_struct; code_ += type + "?" + builder_string + create_struct;
/// Optional hard coded since structs are always optional /// Optional hard coded since structs are always optional
create_func_header.push_back(field_var + ": " + type + create_func_header.push_back(field_var + ": " + type +
@@ -753,9 +747,8 @@ class SwiftGenerator : public BaseGenerator {
(field.IsRequired() ? "" : " = Offset()")); (field.IsRequired() ? "" : " = Offset()"));
const auto reader_type = const auto reader_type =
IsStruct(field.value.type) && field.value.type.struct_def->fixed IsStruct(field.value.type) && field.value.type.struct_def->fixed
? "structOffset: {{TABLEOFFSET}}.{{OFFSET}}) }" ? "structOffset: {{TABLEOFFSET}}.{{OFFSET}}.p) }"
: "offset: {{FIELDVAR}}, at: {{TABLEOFFSET}}.{{OFFSET}}) " : "offset: {{FIELDVAR}}, at: {{TABLEOFFSET}}.{{OFFSET}}.p) }";
"}";
code_ += "Offset" + builder_string + "fbb.add(" + reader_type; code_ += "Offset" + builder_string + "fbb.add(" + reader_type;
const auto vectortype = field.value.type.VectorType(); const auto vectortype = field.value.type.VectorType();
@@ -859,10 +852,7 @@ class SwiftGenerator : public BaseGenerator {
break; break;
case BASE_TYPE_STRING: { case BASE_TYPE_STRING: {
const auto sc = SwiftConstant(field); const auto default_string = "\"" + SwiftConstant(field) + "\"";
std::string default_string;
flatbuffers::EscapeString(sc.c_str(), sc.length(), &default_string,
true, false);
code_.SetValue("VALUETYPE", GenType(field.value.type)); code_.SetValue("VALUETYPE", GenType(field.value.type));
code_.SetValue("CONSTANT", field.IsDefault() ? default_string : "nil"); code_.SetValue("CONSTANT", field.IsDefault() ? default_string : "nil");
code_ += GenReaderMainBody(is_required) + GenOffset() + code_ += GenReaderMainBody(is_required) + GenOffset() +
@@ -870,7 +860,7 @@ class SwiftGenerator : public BaseGenerator {
code_ += "{{ACCESS_TYPE}} var {{FIELDVAR}}SegmentArray: [UInt8]" + code_ += "{{ACCESS_TYPE}} var {{FIELDVAR}}SegmentArray: [UInt8]" +
is_required + is_required +
" { return " " { return "
"{{ACCESS}}.getVector(at: {{TABLEOFFSET}}.{{OFFSET}}) }"; "{{ACCESS}}.getVector(at: {{TABLEOFFSET}}.{{OFFSET}}.v) }";
break; break;
} }
case BASE_TYPE_ARRAY: case BASE_TYPE_ARRAY:
@@ -904,7 +894,7 @@ class SwiftGenerator : public BaseGenerator {
code_ += code_ +=
"{{ACCESS_TYPE}} var {{FIELDVAR}}: " "{{ACCESS_TYPE}} var {{FIELDVAR}}: "
"FlatbufferVector<{{VALUETYPE}}> " "FlatbufferVector<{{VALUETYPE}}> "
"{ return {{ACCESS}}.vector(at: {{TABLEOFFSET}}.{{OFFSET}}, " "{ return {{ACCESS}}.vector(at: {{TABLEOFFSET}}.{{OFFSET}}.v, "
"byteSize: {{SIZE}}) }"; "byteSize: {{SIZE}}) }";
} }
@@ -921,7 +911,7 @@ class SwiftGenerator : public BaseGenerator {
code_ += code_ +=
"{{ACCESS_TYPE}} var {{FIELDVAR}}: " "{{ACCESS_TYPE}} var {{FIELDVAR}}: "
"FlatbufferVector<{{VALUETYPE}}_Mutable> " "FlatbufferVector<{{VALUETYPE}}_Mutable> "
"{ return {{ACCESS}}.vector(at: {{TABLEOFFSET}}.{{OFFSET}}, " "{ return {{ACCESS}}.vector(at: {{TABLEOFFSET}}.{{OFFSET}}.v, "
"byteSize: {{SIZE}}) }"; "byteSize: {{SIZE}}) }";
GenUnsafeBufferPointer(field); GenUnsafeBufferPointer(field);
return; return;
@@ -930,8 +920,7 @@ class SwiftGenerator : public BaseGenerator {
if (vectortype.base_type == BASE_TYPE_UNION) { if (vectortype.base_type == BASE_TYPE_UNION) {
code_ += code_ +=
"{{ACCESS_TYPE}} var {{FIELDVAR}}: UnionFlatbufferVector " "{{ACCESS_TYPE}} var {{FIELDVAR}}: UnionFlatbufferVector "
"{ return {{ACCESS}}.unionVector(at: " "{ return {{ACCESS}}.unionVector(at: {{TABLEOFFSET}}.{{OFFSET}}.v, "
"{{TABLEOFFSET}}.{{OFFSET}}, "
"byteSize: {{SIZE}}) }"; "byteSize: {{SIZE}}) }";
code_ += code_ +=
"{{ACCESS_TYPE}} func {{FIELDVAR}}<T: FlatbuffersInitializable>(at " "{{ACCESS_TYPE}} func {{FIELDVAR}}<T: FlatbuffersInitializable>(at "
@@ -965,21 +954,24 @@ class SwiftGenerator : public BaseGenerator {
"{{ACCESS_TYPE}} func {{functionName}}<T>(_ body: " "{{ACCESS_TYPE}} func {{functionName}}<T>(_ body: "
"(UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? { return " "(UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? { return "
"try " "try "
"{{ACCESS}}.withUnsafePointerToSlice(at: " "{{ACCESS}}.withUnsafePointerToSlice(at: {{TABLEOFFSET}}.{{OFFSET}}.v, "
"{{TABLEOFFSET}}.{{OFFSET}}, "
"body: body) }"; "body: body) }";
} }
std::vector<std::string> GenerateCodingKeys(const StructDef& struct_def) { void GenerateCodingKeys(const StructDef& struct_def) {
std::vector<std::string> coding_keys; code_ += "enum CodingKeys: String, CodingKey {";
Indent();
for (auto it = struct_def.fields.vec.begin(); for (auto it = struct_def.fields.vec.begin();
it != struct_def.fields.vec.end(); ++it) { it != struct_def.fields.vec.end(); ++it) {
const auto& field = **it; const auto& field = **it;
if (field.deprecated) continue; if (field.deprecated) continue;
coding_keys.push_back("case " + namer_.Variable(field) + " = \"" +
field.name + "\""); code_.SetValue("RAWVALUENAME", field.name);
code_.SetValue("FIELDVAR", namer_.Variable(field));
code_ += "case {{FIELDVAR}} = \"{{RAWVALUENAME}}\"";
} }
return coding_keys; Outdent();
code_ += "}";
} }
void GenerateEncoderUnionBody(const FieldDef& field) { void GenerateEncoderUnionBody(const FieldDef& field) {
@@ -1101,31 +1093,14 @@ class SwiftGenerator : public BaseGenerator {
GenOSVersionChecks(); GenOSVersionChecks();
code_ += "extension {{STRUCTNAME}}: Encodable {"; code_ += "extension {{STRUCTNAME}}: Encodable {";
Indent(); Indent();
auto coding_keys = GenerateCodingKeys(struct_def); code_ += "";
if (struct_def.fields.vec.empty() == false) GenerateCodingKeys(struct_def);
if (coding_keys.empty() == false) {
code_ += "enum CodingKeys: String, CodingKey {";
Indent();
for (auto it = coding_keys.begin(); it != coding_keys.end(); ++it) {
const auto& field = *it;
code_ += field;
}
Outdent();
code_ += "}";
code_ += "";
}
code_ += "{{ACCESS_TYPE}} func encode(to encoder: Encoder) throws {"; code_ += "{{ACCESS_TYPE}} func encode(to encoder: Encoder) throws {";
Indent();
if (coding_keys.empty() == false) { if (struct_def.fields.vec.empty() == false) GenerateEncoderBody(struct_def);
Indent(); Outdent();
GenerateEncoderBody(struct_def);
Outdent();
}
code_ += "}"; code_ += "}";
Outdent(); Outdent();
code_ += "}"; code_ += "}";
code_ += ""; code_ += "";
@@ -1155,7 +1130,7 @@ class SwiftGenerator : public BaseGenerator {
} }
code_ += code_ +=
"try _v.visit(field: {{TABLEOFFSET}}.{{OFFSET}}, fieldName: " "try _v.visit(field: {{TABLEOFFSET}}.{{OFFSET}}.p, fieldName: "
"\"{{FIELDVAR}}\", required: {{ISREQUIRED}}, type: " "\"{{FIELDVAR}}\", required: {{ISREQUIRED}}, type: "
"{{VALUETYPE}}.self)"; "{{VALUETYPE}}.self)";
} }
@@ -1175,9 +1150,8 @@ class SwiftGenerator : public BaseGenerator {
code_.SetValue("VALUETYPE", namer_.NamespacedType(union_def)); code_.SetValue("VALUETYPE", namer_.NamespacedType(union_def));
code_.SetValue("FUNCTION_NAME", is_vector ? "visitUnionVector" : "visit"); code_.SetValue("FUNCTION_NAME", is_vector ? "visitUnionVector" : "visit");
code_ += code_ +=
"try _v.{{FUNCTION_NAME}}(unionKey: " "try _v.{{FUNCTION_NAME}}(unionKey: {{TABLEOFFSET}}.{{OFFSET}}Type.p, "
"{{TABLEOFFSET}}.{{OFFSET}}Type, " "unionField: {{TABLEOFFSET}}.{{OFFSET}}.p, unionKeyName: "
"unionField: {{TABLEOFFSET}}.{{OFFSET}}, unionKeyName: "
"\"{{FIELDVAR}}Type\", fieldName: \"{{FIELDVAR}}\", required: " "\"{{FIELDVAR}}Type\", fieldName: \"{{FIELDVAR}}\", required: "
"{{ISREQUIRED}}, completion: { (verifier, key: {{VALUETYPE}}, pos) in"; "{{ISREQUIRED}}, completion: { (verifier, key: {{VALUETYPE}}, pos) in";
Indent(); Indent();
@@ -1652,23 +1626,15 @@ class SwiftGenerator : public BaseGenerator {
buffer_constructor.push_back(field_var + " = _t." + field_field); buffer_constructor.push_back(field_var + " = _t." + field_field);
if (field.IsRequired()) { if (field.IsRequired()) {
std::string default_value; std::string default_value =
if (field.IsDefault()) { field.IsDefault() ? SwiftConstant(field) : "";
const auto sc = SwiftConstant(field); base_constructor.push_back(field_var + " = \"" + default_value +
flatbuffers::EscapeString(sc.c_str(), sc.length(), &default_value, "\"");
true, false);
} else {
default_value = "\"\"";
}
base_constructor.push_back(field_var + " = " + default_value);
break; break;
} }
if (field.IsDefault() && !field.IsRequired()) { if (field.IsDefault() && !field.IsRequired()) {
const auto sc = SwiftConstant(field); std::string value = field.IsDefault() ? SwiftConstant(field) : "nil";
std::string value; base_constructor.push_back(field_var + " = \"" + value + "\"");
flatbuffers::EscapeString(sc.c_str(), sc.length(), &value,
true, false);
base_constructor.push_back(field_var + " = " + value);
} }
break; break;
} }
@@ -1927,7 +1893,7 @@ class SwiftGenerator : public BaseGenerator {
} }
std::string GenOffset() { std::string GenOffset() {
return "let o = {{ACCESS}}.offset({{TABLEOFFSET}}.{{OFFSET}}); "; return "let o = {{ACCESS}}.offset({{TABLEOFFSET}}.{{OFFSET}}.v); ";
} }
std::string GenReaderMainBody(const std::string& optional = "") { std::string GenReaderMainBody(const std::string& optional = "") {

View File

@@ -324,10 +324,9 @@ class TsGenerator : public BaseGenerator {
export_counter++; export_counter++;
} }
if (export_counter > 0) { if (export_counter > 0)
parser_.opts.file_saver->SaveFile(it.second.filepath.c_str(), code, parser_.opts.file_saver->SaveFile(it.second.filepath.c_str(), code,
false); false);
}
} }
} }
@@ -522,20 +521,7 @@ class TsGenerator : public BaseGenerator {
case BASE_TYPE_BOOL: case BASE_TYPE_BOOL:
return value.constant == "0" ? "false" : "true"; return value.constant == "0" ? "false" : "true";
case BASE_TYPE_STRING: { case BASE_TYPE_STRING:
// NOTE: Strings without a default value are parsed as "0" by
// the parser, so therefore we have to treat "0" as a null-signifying
// value.
if (value.constant == "0" || value.constant == "null") {
return "null";
} else {
std::string escaped;
flatbuffers::EscapeString(value.constant.c_str(),
value.constant.length(), &escaped,
true, false);
return escaped;
}
}
case BASE_TYPE_UNION: case BASE_TYPE_UNION:
case BASE_TYPE_STRUCT: { case BASE_TYPE_STRUCT: {
return null_keyword_; return null_keyword_;
@@ -661,8 +647,7 @@ class TsGenerator : public BaseGenerator {
} }
void GenStructArgs(import_set& imports, const StructDef& struct_def, void GenStructArgs(import_set& imports, const StructDef& struct_def,
const Definition& owner, std::string* arguments, std::string* arguments, const std::string& nameprefix) {
const std::string& nameprefix) {
for (auto it = struct_def.fields.vec.begin(); for (auto it = struct_def.fields.vec.begin();
it != struct_def.fields.vec.end(); ++it) { it != struct_def.fields.vec.end(); ++it) {
auto& field = **it; auto& field = **it;
@@ -670,11 +655,11 @@ class TsGenerator : public BaseGenerator {
// Generate arguments for a struct inside a struct. To ensure names // Generate arguments for a struct inside a struct. To ensure names
// don't clash, and to make it obvious these arguments are constructing // don't clash, and to make it obvious these arguments are constructing
// a nested struct, prefix the name with the field name. // a nested struct, prefix the name with the field name.
GenStructArgs(imports, *field.value.type.struct_def, owner, arguments, GenStructArgs(imports, *field.value.type.struct_def, arguments,
nameprefix + field.name + "_"); nameprefix + field.name + "_");
} else { } else {
*arguments += ", " + nameprefix + field.name + ": " + *arguments += ", " + nameprefix + field.name + ": " +
GenTypeName(imports, owner, field.value.type, true, GenTypeName(imports, field, field.value.type, true,
field.IsOptional()); field.IsOptional());
} }
} }
@@ -936,48 +921,6 @@ class TsGenerator : public BaseGenerator {
return symbols_expression; return symbols_expression;
} }
std::vector<std::string> PathComponents(const std::string& path) const {
std::vector<std::string> components;
size_t start = 0;
while (start < path.size()) {
auto end = path.find(kPathSeparator, start);
if (end == std::string::npos) end = path.size();
if (end > start) {
components.emplace_back(path.substr(start, end - start));
}
if (end == path.size()) break;
start = end + 1;
}
return components;
}
std::string RelativeDirectory(const std::vector<std::string>& from,
const std::vector<std::string>& to) const {
size_t common = 0;
while (common < from.size() && common < to.size() &&
from[common] == to[common]) {
++common;
}
std::string rel;
const size_t ups = from.size() - common;
if (ups == 0) {
rel = ".";
} else {
for (size_t i = 0; i < ups; ++i) {
if (!rel.empty()) rel += kPathSeparator;
rel += "..";
}
}
for (size_t i = common; i < to.size(); ++i) {
if (!rel.empty()) rel += kPathSeparator;
rel += to[i];
}
return rel;
}
template <typename DefinitionT> template <typename DefinitionT>
ImportDefinition AddImport(import_set& imports, const Definition& dependent, ImportDefinition AddImport(import_set& imports, const Definition& dependent,
const DefinitionT& dependency) { const DefinitionT& dependency) {
@@ -1005,32 +948,26 @@ class TsGenerator : public BaseGenerator {
const std::string symbols_expression = GenSymbolExpression( const std::string symbols_expression = GenSymbolExpression(
dependency, has_name_clash, import_name, name, object_name); dependency, has_name_clash, import_name, name, object_name);
const Namespace* dependent_ns = dependent.defined_namespace std::string bare_file_path;
? dependent.defined_namespace std::string rel_file_path;
: parser_.empty_namespace_; if (dependent.defined_namespace) {
const Namespace* dependency_ns = dependency.defined_namespace const auto& dep_comps = dependent.defined_namespace->components;
? dependency.defined_namespace for (size_t i = 0; i < dep_comps.size(); i++) {
: parser_.empty_namespace_; rel_file_path += i == 0 ? ".." : (kPathSeparator + std::string(".."));
}
if (dep_comps.size() == 0) {
rel_file_path += ".";
}
} else {
rel_file_path += "..";
}
const std::string dependent_dirs = bare_file_path +=
namer_.Directories(*dependent_ns, SkipDir::OutputPath); kPathSeparator +
const std::string dependency_dirs = namer_.Directories(dependency.defined_namespace->components,
namer_.Directories(*dependency_ns, SkipDir::OutputPath); SkipDir::OutputPath) +
const auto dependent_components = PathComponents(dependent_dirs);
const auto dependency_components = PathComponents(dependency_dirs);
std::string rel_dir =
RelativeDirectory(dependent_components, dependency_components);
if (rel_dir.empty()) rel_dir = ".";
if (!rel_dir.empty()) rel_dir += kPathSeparator;
std::string rel_file_path =
rel_dir + namer_.File(dependency, SkipFile::SuffixAndExtension);
std::string bare_file_path =
kPathSeparator + dependency_dirs +
namer_.File(dependency, SkipFile::SuffixAndExtension); namer_.File(dependency, SkipFile::SuffixAndExtension);
rel_file_path += bare_file_path;
ImportDefinition import; ImportDefinition import;
import.name = name; import.name = name;
@@ -1235,10 +1172,9 @@ class TsGenerator : public BaseGenerator {
std::string GenNullCheckConditional(const std::string& nullCheckVar, std::string GenNullCheckConditional(const std::string& nullCheckVar,
const std::string& trueVal, const std::string& trueVal,
const std::string& falseVal = "") { const std::string& falseVal) {
std::string false_val = falseVal.empty() ? null_keyword_ : falseVal;
return "(" + nullCheckVar + " !== " + null_keyword_ + " ? " + trueVal + return "(" + nullCheckVar + " !== " + null_keyword_ + " ? " + trueVal +
" : " + false_val + ")"; " : " + falseVal + ")";
} }
std::string GenStructMemberValueTS(const StructDef& struct_def, std::string GenStructMemberValueTS(const StructDef& struct_def,
@@ -1347,9 +1283,10 @@ class TsGenerator : public BaseGenerator {
// Emit a scalar field // Emit a scalar field
const auto is_string = IsString(field.value.type); const auto is_string = IsString(field.value.type);
if (IsScalar(field.value.type.base_type) || is_string) { if (IsScalar(field.value.type.base_type) || is_string) {
field_type += const auto has_null_default = is_string || HasNullDefault(field);
GenTypeName(imports, field, field.value.type, false,
!HasDefaultValue(field) || HasNullDefault(field)); field_type += GenTypeName(imports, field, field.value.type, false,
has_null_default);
field_val = "this." + namer_.Method(field) + "()"; field_val = "this." + namer_.Method(field) + "()";
if (field.value.type.base_type != BASE_TYPE_STRING) { if (field.value.type.base_type != BASE_TYPE_STRING) {
@@ -1695,12 +1632,11 @@ class TsGenerator : public BaseGenerator {
GenDocComment(struct_def.doc_comment, code_ptr); GenDocComment(struct_def.doc_comment, code_ptr);
code += "export class "; code += "export class ";
code += object_name; code += object_name;
if (parser.opts.generate_object_based_api) { if (parser.opts.generate_object_based_api)
code += " implements flatbuffers.IUnpackableObject<" + object_api_name + code += " implements flatbuffers.IUnpackableObject<" + object_api_name +
"> {\n"; "> {\n";
} else { else
code += " {\n"; code += " {\n";
}
code += " bb: flatbuffers.ByteBuffer|" + null_keyword_ + " = " + code += " bb: flatbuffers.ByteBuffer|" + null_keyword_ + " = " +
null_keyword_ + ";\n"; null_keyword_ + ";\n";
code += " bb_pos = 0;\n"; code += " bb_pos = 0;\n";
@@ -1743,22 +1679,21 @@ class TsGenerator : public BaseGenerator {
offset_prefix = " const offset = " + GenBBAccess() + offset_prefix = " const offset = " + GenBBAccess() +
".__offset(this.bb_pos, " + ".__offset(this.bb_pos, " +
NumToString(field.value.offset) + ");\n"; NumToString(field.value.offset) + ");\n";
offset_prefix += " return "; offset_prefix += " return offset ? ";
} }
// Emit a scalar field // Emit a scalar field
const auto is_string = IsString(field.value.type); const auto is_string = IsString(field.value.type);
if (IsScalar(field.value.type.base_type) || is_string) { if (IsScalar(field.value.type.base_type) || is_string) {
const auto has_null_default = const auto has_null_default = is_string || HasNullDefault(field);
!field.IsRequired() && !HasDefaultValue(field);
GenDocComment(field.doc_comment, code_ptr); GenDocComment(field.doc_comment, code_ptr);
std::string prefix = namer_.Method(field) + "("; std::string prefix = namer_.Method(field) + "(";
if (is_string) { if (is_string) {
code += prefix + "):" + (has_null_default ? "string|" + null_keyword_ : "string") + "\n"; code += prefix + "):string|" + null_keyword_ + "\n";
code += code +=
prefix + "optionalEncoding:flatbuffers.Encoding" + "):" + prefix + "optionalEncoding:flatbuffers.Encoding" + "):" +
GenTypeName(imports, struct_def, field.value.type, false, has_null_default) + GenTypeName(imports, struct_def, field.value.type, false, true) +
"\n"; "\n";
code += prefix + "optionalEncoding?:any"; code += prefix + "optionalEncoding?:any";
} else { } else {
@@ -1787,16 +1722,9 @@ class TsGenerator : public BaseGenerator {
if (is_string) { if (is_string) {
index += ", optionalEncoding"; index += ", optionalEncoding";
} }
if (field.IsRequired()) { code +=
code += offset_prefix + GenGetter(field.value.type, "(" + index + ")");
offset_prefix + GenGetter(field.value.type, "(" + index + ")"); if (field.value.type.base_type != BASE_TYPE_ARRAY) {
;
} else {
code += offset_prefix + "offset ? " +
GenGetter(field.value.type, "(" + index + ")");
}
if (field.value.type.base_type != BASE_TYPE_ARRAY &&
!field.IsRequired()) {
code += " : " + GenDefaultValue(field, imports); code += " : " + GenDefaultValue(field, imports);
} }
code += ";\n"; code += ";\n";
@@ -1821,8 +1749,8 @@ class TsGenerator : public BaseGenerator {
code += code +=
MaybeAdd(field.value.offset) + ", " + GenBBAccess() + ");\n"; MaybeAdd(field.value.offset) + ", " + GenBBAccess() + ");\n";
} else { } else {
code += offset_prefix + "offset ? (obj || " + code += offset_prefix + "(obj || " + GenerateNewExpression(type) +
GenerateNewExpression(type) + ").__init("; ").__init(";
code += field.value.type.struct_def->fixed code += field.value.type.struct_def->fixed
? "this.bb_pos + offset" ? "this.bb_pos + offset"
: GenBBAccess() + ".__indirect(this.bb_pos + offset)"; : GenBBAccess() + ".__indirect(this.bb_pos + offset)";
@@ -1980,7 +1908,7 @@ class TsGenerator : public BaseGenerator {
code += "):" + vectortypename + "|" + null_keyword_ + " {\n"; code += "):" + vectortypename + "|" + null_keyword_ + " {\n";
if (vectortype.base_type == BASE_TYPE_STRUCT) { if (vectortype.base_type == BASE_TYPE_STRUCT) {
code += offset_prefix + "offset ? (obj || " + code += offset_prefix + "(obj || " +
GenerateNewExpression(vectortypename); GenerateNewExpression(vectortypename);
code += ").__init("; code += ").__init(";
code += vectortype.struct_def->fixed code += vectortype.struct_def->fixed
@@ -1993,8 +1921,7 @@ class TsGenerator : public BaseGenerator {
} else if (IsString(vectortype)) { } else if (IsString(vectortype)) {
index += ", optionalEncoding"; index += ", optionalEncoding";
} }
code += offset_prefix + "offset ? " + code += offset_prefix + GenGetter(vectortype, "(" + index + ")");
GenGetter(vectortype, "(" + index + ")");
} }
code += " : "; code += " : ";
if (field.value.type.element == BASE_TYPE_BOOL) { if (field.value.type.element == BASE_TYPE_BOOL) {
@@ -2026,7 +1953,7 @@ class TsGenerator : public BaseGenerator {
" " " "
"{\n"; "{\n";
code += offset_prefix + "offset ? " + code += offset_prefix +
GenGetter(field.value.type, "(obj, this.bb_pos + offset)") + GenGetter(field.value.type, "(obj, this.bb_pos + offset)") +
" : " + null_keyword_ + ";\n"; " : " + null_keyword_ + ";\n";
break; break;
@@ -2079,7 +2006,7 @@ class TsGenerator : public BaseGenerator {
// Emit a length helper // Emit a length helper
GenDocComment(code_ptr); GenDocComment(code_ptr);
code += namer_.Method(field, "Length"); code += namer_.Method(field, "Length");
code += "():number {\n" + offset_prefix + "offset ? "; code += "():number {\n" + offset_prefix;
code += code +=
GenBBAccess() + ".__vector_len(this.bb_pos + offset) : 0;\n}\n\n"; GenBBAccess() + ".__vector_len(this.bb_pos + offset) : 0;\n}\n\n";
@@ -2090,30 +2017,15 @@ class TsGenerator : public BaseGenerator {
GenDocComment(code_ptr); GenDocComment(code_ptr);
code += namer_.Method(field, "Array"); code += namer_.Method(field, "Array");
code += "():" + GenType(vectorType) + "Array|" + null_keyword_ +
" {\n" + offset_prefix;
std::string return_type = code += "new " + GenType(vectorType) + "Array(" + GenBBAccess() +
(field.IsRequired() || HasDefaultValue(field)) ".bytes().buffer, " + GenBBAccess() +
? "Array" ".bytes().byteOffset + " + GenBBAccess() +
: ("Array|" + null_keyword_); ".__vector(this.bb_pos + offset), " + GenBBAccess() +
if (field.IsRequired()) { ".__vector_len(this.bb_pos + offset)) : " + null_keyword_ +
code += "():" + GenType(vectorType) + return_type + " {\n" + ";\n}\n\n";
offset_prefix + "new " + GenType(vectorType) + "Array(" +
GenBBAccess() + ".bytes().buffer, " + GenBBAccess() +
".bytes().byteOffset + " + GenBBAccess() +
".__vector(this.bb_pos + offset), " + GenBBAccess() +
".__vector_len(this.bb_pos + offset));\n}\n\n";
} else {
std::string value = HasDefaultValue(field)
? "new " + GenType(vectorType) + "Array()"
: "null";
code += "():" + GenType(vectorType) + return_type + " {\n" +
offset_prefix + "offset ? new " + GenType(vectorType) +
"Array(" + GenBBAccess() + ".bytes().buffer, " +
GenBBAccess() + ".bytes().byteOffset + " + GenBBAccess() +
".__vector(this.bb_pos + offset), " + GenBBAccess() +
".__vector_len(this.bb_pos + offset)) : " + value +
";\n}\n\n";
}
} }
} }
} }
@@ -2142,7 +2054,7 @@ class TsGenerator : public BaseGenerator {
// Emit a factory constructor // Emit a factory constructor
if (struct_def.fixed) { if (struct_def.fixed) {
std::string arguments; std::string arguments;
GenStructArgs(imports, struct_def, struct_def, &arguments, ""); GenStructArgs(imports, struct_def, &arguments, "");
GenDocComment(code_ptr); GenDocComment(code_ptr);
code += "static create" + GetPrefixedName(struct_def) + code += "static create" + GetPrefixedName(struct_def) +
@@ -2344,34 +2256,6 @@ class TsGenerator : public BaseGenerator {
return field.IsOptional() && field.value.constant == "null"; return field.IsOptional() && field.value.constant == "null";
} }
static bool HasDefaultValue(const FieldDef& field) {
switch (field.value.type.base_type) {
// These types can't have defaults
case BASE_TYPE_UNION:
case BASE_TYPE_STRUCT: {
return false;
}
// Arrays always have a default (empty array)
case BASE_TYPE_ARRAY:
return true;
// The only supported default for vectors is []
case BASE_TYPE_VECTOR:
return field.value.constant == "[]";
// Even strings are presumed to be null-default if the default value is
// "0", this is intended behavior.
case BASE_TYPE_STRING: {
return field.value.constant != "0" && field.value.constant != "null";
}
default: {
return field.value.constant != "null";
}
}
}
std::string GetArgType(import_set& imports, const Definition& owner, std::string GetArgType(import_set& imports, const Definition& owner,
const FieldDef& field, bool allowNull) { const FieldDef& field, bool allowNull) {
return GenTypeName(imports, owner, field.value.type, true, return GenTypeName(imports, owner, field.value.type, true,

View File

@@ -2809,8 +2809,7 @@ bool Parser::SupportsOptionalScalars() const {
bool Parser::SupportsDefaultVectorsAndStrings() const { bool Parser::SupportsDefaultVectorsAndStrings() const {
static FLATBUFFERS_CONSTEXPR unsigned long supported_langs = static FLATBUFFERS_CONSTEXPR unsigned long supported_langs =
IDLOptions::kRust | IDLOptions::kSwift | IDLOptions::kNim | IDLOptions::kRust | IDLOptions::kSwift | IDLOptions::kNim |
IDLOptions::kCpp | IDLOptions::kBinary | IDLOptions::kJson | IDLOptions::kCpp | IDLOptions::kBinary | IDLOptions::kJson;
IDLOptions::kTs;
return !(opts.lang_to_generate & ~supported_langs); return !(opts.lang_to_generate & ~supported_langs);
} }
@@ -3172,10 +3171,8 @@ CheckedError Parser::ParseProtoFields(StructDef* struct_def, bool isextend,
return Error("Protobuf has non positive number in reserved ids"); return Error("Protobuf has non positive number in reserved ids");
if (range) { if (range) {
for (uint32_t id = static_cast<uint32_t>(from) + 1; for (voffset_t id = from + 1; id <= attribute; id++)
id <= static_cast<uint32_t>(attribute); id++) { struct_def->reserved_ids.push_back(id);
struct_def->reserved_ids.push_back(static_cast<voffset_t>(id));
}
range = false; range = false;
} else { } else {

View File

@@ -641,10 +641,7 @@ const uint8_t* AddFlatBuffer(std::vector<uint8_t>& flatbuf,
const uint8_t* newbuf, size_t newlen) { const uint8_t* newbuf, size_t newlen) {
// Align to sizeof(uoffset_t) past sizeof(largest_scalar_t) since we're // Align to sizeof(uoffset_t) past sizeof(largest_scalar_t) since we're
// going to chop off the root offset. // going to chop off the root offset.
if (!newbuf || newlen < sizeof(uoffset_t)) return nullptr;
FLATBUFFERS_ASSERT(newlen >= sizeof(uoffset_t)); FLATBUFFERS_ASSERT(newlen >= sizeof(uoffset_t));
auto root = ReadScalar<uoffset_t>(newbuf);
if (root < sizeof(uoffset_t) || root >= newlen) return nullptr;
while ((flatbuf.size() & (sizeof(uoffset_t) - 1)) || while ((flatbuf.size() & (sizeof(uoffset_t) - 1)) ||
!(flatbuf.size() & (sizeof(largest_scalar_t) - 1))) { !(flatbuf.size() & (sizeof(largest_scalar_t) - 1))) {
flatbuf.push_back(0); flatbuf.push_back(0);
@@ -652,7 +649,7 @@ const uint8_t* AddFlatBuffer(std::vector<uint8_t>& flatbuf,
auto insertion_point = static_cast<uoffset_t>(flatbuf.size()); auto insertion_point = static_cast<uoffset_t>(flatbuf.size());
// Insert the entire FlatBuffer minus the root pointer. // Insert the entire FlatBuffer minus the root pointer.
flatbuf.insert(flatbuf.end(), newbuf + sizeof(uoffset_t), newbuf + newlen); flatbuf.insert(flatbuf.end(), newbuf + sizeof(uoffset_t), newbuf + newlen);
auto root_offset = root - sizeof(uoffset_t); auto root_offset = ReadScalar<uoffset_t>(newbuf) - sizeof(uoffset_t);
return flatbuf.data() + insertion_point + root_offset; return flatbuf.data() + insertion_point + root_offset;
} }

View File

@@ -49,7 +49,7 @@ public struct Table {
/// the vtable /// the vtable
/// - Parameter o: current offset /// - Parameter o: current offset
/// - Returns: offset of field within buffer /// - Returns: offset of field within buffer
public func offset(_ o: VOffset) -> Int32 { public func offset(_ o: Int32) -> Int32 {
let vtable = position &- bb.read(def: Int32.self, position: Int(position)) let vtable = position &- bb.read(def: Int32.self, position: Int(position))
return o return o
< bb < bb
@@ -57,7 +57,7 @@ public struct Table {
? Int32( ? Int32(
bb.read( bb.read(
def: Int16.self, def: Int16.self,
position: Int(vtable &+ Int32(o)))) : 0 position: Int(vtable &+ o))) : 0
} }
/// Gets the indirect offset of the current stored object /// Gets the indirect offset of the current stored object
@@ -106,13 +106,13 @@ public struct Table {
/// This should only be used by `Scalars` /// This should only be used by `Scalars`
/// - Parameter off: Readable offset /// - Parameter off: Readable offset
/// - Returns: Returns a vector of type [T] /// - Returns: Returns a vector of type [T]
public func getVector<T>(at off: VOffset) -> [T]? { public func getVector<T>(at off: Int32) -> [T]? {
let o = offset(off) let o = offset(off)
guard o != 0 else { return nil } guard o != 0 else { return nil }
return bb.readSlice(index: Int(vector(at: o)), count: Int(vector(count: o))) return bb.readSlice(index: Int(vector(at: o)), count: Int(vector(count: o)))
} }
public func vector<T>(at off: VOffset, byteSize: Int) -> FlatbufferVector<T> { public func vector<T>(at off: Int32, byteSize: Int) -> FlatbufferVector<T> {
let off = offset(off) let off = offset(off)
return FlatbufferVector( return FlatbufferVector(
bb: bb, bb: bb,
@@ -122,7 +122,7 @@ public struct Table {
} }
public func unionVector( public func unionVector(
at off: VOffset, at off: Int32,
byteSize: Int) -> UnionFlatbufferVector byteSize: Int) -> UnionFlatbufferVector
{ {
let off = offset(off) let off = offset(off)
@@ -146,7 +146,7 @@ public struct Table {
/// - Returns: Returns a pointer to the underlying data /// - Returns: Returns a pointer to the underlying data
@inline(__always) @inline(__always)
public func withUnsafePointerToSlice<T>( public func withUnsafePointerToSlice<T>(
at off: VOffset, at off: Int32,
body: (UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T? body: (UnsafeRawBufferPointer, Int) throws -> T) rethrows -> T?
{ {
let o = offset(off) let o = offset(off)

View File

@@ -14,7 +14,6 @@
* limitations under the License. * limitations under the License.
*/ */
import Common
import Foundation import Foundation
enum FlexBuffersErrors: Error { enum FlexBuffersErrors: Error {
@@ -24,10 +23,6 @@ enum FlexBuffersErrors: Error {
@inline(__always) @inline(__always)
public func getRoot(buffer: ByteBuffer) throws -> Reference? { public func getRoot(buffer: ByteBuffer) throws -> Reference? {
assert(
isLitteEndian,
"Swift FlexBuffers currently only supports little-endian systems")
let end = buffer.count let end = buffer.count
if buffer.count < 3 { if buffer.count < 3 {
throw FlexBuffersErrors.sizeOfBufferIsTooSmall throw FlexBuffersErrors.sizeOfBufferIsTooSmall

View File

@@ -37,15 +37,12 @@ public struct FlexBuffersWriter {
private var hasDuplicatedKeys = false private var hasDuplicatedKeys = false
private var minBitWidth: BitWidth = .w8 private var minBitWidth: BitWidth = .w8
private var _bb: _InternalByteBuffer private var _bb: _InternalByteBuffer
private var stack: Stack = Stack() private var stack: [Value] = []
private var keyPool: [Int: UInt] = [:] private var keyPool: [Int: UInt] = [:]
private var stringPool: [Int: UInt] = [:] private var stringPool: [Int: UInt] = [:]
private var flags: BuilderFlag private var flags: BuilderFlag
public init(initialSize: Int = 1024, flags: BuilderFlag = .shareKeys) { public init(initialSize: Int = 1024, flags: BuilderFlag = .shareKeys) {
assert(
isLitteEndian,
"Swift FlexBuffers currently only supports little-endian systems")
_bb = _InternalByteBuffer(initialSize: initialSize) _bb = _InternalByteBuffer(initialSize: initialSize)
self.flags = flags self.flags = flags
} }
@@ -151,7 +148,7 @@ public struct FlexBuffersWriter {
typed: typed, typed: typed,
fixed: fixed, fixed: fixed,
keys: nil) keys: nil)
stack.popLast(start) stack = Array(stack[..<start])
stack.append(vec) stack.append(vec)
return vec.u return vec.u
} }
@@ -220,7 +217,7 @@ public struct FlexBuffersWriter {
typed: false, typed: false,
fixed: false, fixed: false,
keys: keys) keys: keys)
stack.popLast(start) stack = Array(stack[..<start])
stack.append(vec) stack.append(vec)
return numericCast(vec.u) return numericCast(vec.u)
} }
@@ -760,7 +757,7 @@ public struct FlexBuffersWriter {
} }
if !fixed { if !fixed {
write(value: UInt64(count), byteWidth: byteWidth) write(value: count, byteWidth: byteWidth)
} }
let vloc = _bb.writerIndex let vloc = _bb.writerIndex
@@ -833,14 +830,13 @@ public struct FlexBuffersWriter {
let key, value: Value let key, value: Value
} }
stack.withUnsafeMutableBytes(start: start) { buffer in stack[start...].withUnsafeMutableBytes { buffer in
var ptr = buffer.assumingMemoryBound(to: TwoValue.self) var ptr = buffer.assumingMemoryBound(to: TwoValue.self)
ptr.sort { a, b in ptr.sort { a, b in
let aMem = _bb.memory.advanced(by: numericCast(a.key.u)) let aMem = _bb.memory.advanced(by: numericCast(a.key.u))
.assumingMemoryBound(to: CChar.self) .assumingMemoryBound(to: CChar.self)
let bMem = _bb.memory.advanced(by: numericCast(b.key.u)) let bMem = _bb.memory.advanced(by: numericCast(b.key.u))
.assumingMemoryBound(to: CChar.self) .assumingMemoryBound(to: CChar.self)
let comp = strcmp(aMem, bMem) let comp = strcmp(aMem, bMem)
if (comp == 0) && a != b { hasDuplicatedKeys = true } if (comp == 0) && a != b { hasDuplicatedKeys = true }
return comp < 0 return comp < 0
@@ -901,129 +897,3 @@ extension FlexBuffersWriter {
return endMap(start: start) return endMap(start: start)
} }
} }
fileprivate struct Stack: RandomAccessCollection {
typealias Element = Value
typealias Index = Int
private final class Storage {
var memory: UnsafeMutableRawPointer
init(capacity: Int, alignment: Int) {
memory = .allocate(byteCount: capacity, alignment: alignment)
memset(memory, 0, capacity)
}
deinit {
memory.deallocate()
}
}
private static let initialCapacity = 10 &* MemoryLayout<Value>.stride
private let storage: Storage
private var capacity: Int
private(set) var count: Int
var startIndex: Int {
0
}
var endIndex: Int {
count
}
init() {
count = 0
capacity = Self.initialCapacity
storage = Storage(
capacity: capacity,
alignment: MemoryLayout<Value>.alignment)
}
@inline(__always)
subscript(position: Int) -> Value {
get {
storage.memory.advanced(by: position &* MemoryLayout<Value>.stride)
.assumingMemoryBound(to: Value.self).pointee
}
set {
storage.memory.advanced(by: position &* MemoryLayout<Value>.stride)
.assumingMemoryBound(to: Value.self).pointee = newValue
}
}
@inline(__always)
mutating func popLast(_ val: Int) {
count = if val < 0 {
0
} else {
val
}
}
mutating func append(_ value: Value) {
let writePosition = count &* MemoryLayout<Value>.stride
if writePosition >= capacity {
reallocate(writePosition: writePosition)
}
storage.memory.advanced(by: writePosition).storeBytes(
of: value,
as: Value.self)
count += 1
}
mutating func removeAll(keepingCapacity keepCapacity: Bool = false) {
count = 0
if !keepCapacity {
capacity = Self.initialCapacity
storage.memory = UnsafeMutableRawPointer.allocate(
byteCount: capacity,
alignment: MemoryLayout<Value>.alignment)
}
memset(storage.memory, 0, capacity)
}
@discardableResult
mutating func withUnsafeMutableBytes<R>(
start: Int,
_ body: (UnsafeMutableRawBufferPointer) throws -> R) rethrows -> R
{
let startingPosition = start &* MemoryLayout<Value>.stride
let pointer = storage.memory.advanced(by: startingPosition)
return try body(UnsafeMutableRawBufferPointer(
start: pointer,
count: (count &* MemoryLayout<Value>.stride) &- startingPosition))
}
@discardableResult
mutating func withUnsafeMutableBytes<R>(
_ body: (UnsafeMutableRawBufferPointer) throws
-> R) rethrows -> R
{
return try body(UnsafeMutableRawBufferPointer(
start: storage.memory,
count: count &* MemoryLayout<Value>.stride))
}
mutating private func reallocate(writePosition: Int) {
while capacity <= writePosition {
capacity = capacity << 1
}
/// solution take from Apple-NIO
capacity = capacity.convertToPowerofTwo
let newData = UnsafeMutableRawPointer.allocate(
byteCount: capacity,
alignment: MemoryLayout<Value>.alignment)
memset(newData, 0, capacity)
memcpy(
newData,
storage.memory,
writePosition)
storage.memory.deallocate()
storage.memory = newData
}
}

View File

@@ -60,7 +60,7 @@ struct _InternalByteBuffer {
let newData = UnsafeMutableRawPointer.allocate( let newData = UnsafeMutableRawPointer.allocate(
byteCount: capacity, byteCount: capacity,
alignment: alignment) alignment: alignment)
memset(newData, 0, capacity) memset(newData, 0, capacity &- writerSize)
memcpy( memcpy(
newData, newData,
memory, memory,

View File

@@ -52,7 +52,6 @@ cc_test(
"monster_test.cpp", "monster_test.cpp",
"monster_test.h", "monster_test.h",
"monster_test_bfbs_generated.h", "monster_test_bfbs_generated.h",
"cross_namespace_pack_test_generated.h",
"namespace_test/namespace_test1_generated.h", "namespace_test/namespace_test1_generated.h",
"namespace_test/namespace_test2_generated.h", "namespace_test/namespace_test2_generated.h",
"native_inline_table_test_generated.h", "native_inline_table_test_generated.h",
@@ -137,7 +136,6 @@ cc_test(
deps = [ deps = [
":alignment_test_cc_fbs", ":alignment_test_cc_fbs",
":arrays_test_cc_fbs", ":arrays_test_cc_fbs",
":cross_namespace_pack_test_cc_fbs",
":default_vectors_strings_test_cc_fbs", ":default_vectors_strings_test_cc_fbs",
":monster_extra_cc_fbs", ":monster_extra_cc_fbs",
":monster_test_cc_fbs", ":monster_test_cc_fbs",
@@ -263,17 +261,6 @@ flatbuffer_cc_library(
], ],
) )
flatbuffer_cc_library(
name = "cross_namespace_pack_test_cc_fbs",
srcs = ["cross_namespace_pack_test.fbs"],
flatc_args = [
"--gen-object-api",
"--gen-mutable",
"--gen-compare",
"--reflect-names",
],
)
flatbuffer_cc_library( flatbuffer_cc_library(
name = "native_type_test_cc_fbs", name = "native_type_test_cc_fbs",
srcs = ["native_type_test.fbs"], srcs = ["native_type_test.fbs"],

View File

@@ -106,9 +106,6 @@
<Compile Include="..\MyGame\Example\NestedStruct.cs"> <Compile Include="..\MyGame\Example\NestedStruct.cs">
<Link>MyGame\Example\NestedStruct.cs</Link> <Link>MyGame\Example\NestedStruct.cs</Link>
</Compile> </Compile>
<Compile Include="..\MyGame\Example\LargeArrayStruct.cs">
<Link>MyGame\Example\LargeArrayStruct.cs</Link>
</Compile>
<Compile Include="..\MyGame\Example\LongEnum.cs"> <Compile Include="..\MyGame\Example\LongEnum.cs">
<Link>MyGame\Example\LongEnum.cs</Link> <Link>MyGame\Example\LongEnum.cs</Link>
</Compile> </Compile>

View File

@@ -1,150 +0,0 @@
// <auto-generated>
// automatically generated by the FlatBuffers compiler, do not modify
// </auto-generated>
namespace MyGame.Example
{
using global::System;
using global::System.Collections.Generic;
using global::Google.FlatBuffers;
public struct LargeArrayStruct : IFlatbufferObject
{
private Struct __p;
public ByteBuffer ByteBuffer { get { return __p.bb; } }
public void __init(int _i, ByteBuffer _bb) { __p = new Struct(_i, _bb); }
public LargeArrayStruct __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
public byte D(int j) { return __p.bb.Get(__p.bb_pos + 0 + j * 1); }
public const int DLength = 64;
#if ENABLE_SPAN_T
public Span<byte> GetDBytes() { return __p.bb.ToSpan(__p.bb_pos + 0, 64); }
#else
public ArraySegment<byte>? GetDBytes() { return __p.bb.ToArraySegment(__p.bb_pos + 0, 64);}
#endif
public void MutateD(int j, byte d) { __p.bb.Put(__p.bb_pos + 0 + j * 1, d); }
public float E(int j) { return __p.bb.GetFloat(__p.bb_pos + 64 + j * 4); }
public const int ELength = 64;
#if ENABLE_SPAN_T
public Span<float> GetEBytes() { return System.Runtime.InteropServices.MemoryMarshal.Cast<byte, float>(__p.bb.ToSpan(__p.bb_pos + 64, 256)); }
#else
public ArraySegment<byte>? GetEBytes() { return __p.bb.ToArraySegment(__p.bb_pos + 64, 256);}
#endif
public void MutateE(int j, float e) { __p.bb.PutFloat(__p.bb_pos + 64 + j * 4, e); }
public bool F(int j) { return 0!=__p.bb.Get(__p.bb_pos + 320 + j * 1); }
public const int FLength = 64;
#if ENABLE_SPAN_T
public Span<bool> GetFBytes() { return System.Runtime.InteropServices.MemoryMarshal.Cast<byte, bool>(__p.bb.ToSpan(__p.bb_pos + 320, 64)); }
#else
public ArraySegment<byte>? GetFBytes() { return __p.bb.ToArraySegment(__p.bb_pos + 320, 64);}
#endif
public void MutateF(int j, bool f) { __p.bb.Put(__p.bb_pos + 320 + j * 1, (byte)(f ? 1 : 0)); }
public MyGame.Example.NestedStruct G(int j) { return (new MyGame.Example.NestedStruct()).__assign(__p.bb_pos + 384 + j * 32, __p.bb); }
public MyGame.Example.TestEnum H(int j) { return (MyGame.Example.TestEnum)__p.bb.GetSbyte(__p.bb_pos + 2432 + j * 1); }
public const int HLength = 64;
#if ENABLE_SPAN_T
public Span<MyGame.Example.TestEnum> GetHBytes() { return System.Runtime.InteropServices.MemoryMarshal.Cast<byte, MyGame.Example.TestEnum>(__p.bb.ToSpan(__p.bb_pos + 2432, 64)); }
#else
public ArraySegment<byte>? GetHBytes() { return __p.bb.ToArraySegment(__p.bb_pos + 2432, 64);}
#endif
public void MutateH(int j, MyGame.Example.TestEnum h) { __p.bb.PutSbyte(__p.bb_pos + 2432 + j * 1, (sbyte)h); }
public static Offset<MyGame.Example.LargeArrayStruct> CreateLargeArrayStruct(FlatBufferBuilder builder, byte[] D, float[] E, bool[] F, int[,] g_A, MyGame.Example.TestEnum[] g_B, MyGame.Example.TestEnum[,] g_C, long[,] g_D, MyGame.Example.TestEnum[] H) {
builder.Prep(8, 2496);
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.PutSbyte((sbyte)H[_idx0-1]);
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.Prep(8, 32);
for (int _idx1 = 2; _idx1 > 0; _idx1--) {
builder.PutLong(g_D[_idx0-1,_idx1-1]);
}
builder.Pad(5);
for (int _idx1 = 2; _idx1 > 0; _idx1--) {
builder.PutSbyte((sbyte)g_C[_idx0-1,_idx1-1]);
}
builder.PutSbyte((sbyte)g_B[_idx0-1]);
for (int _idx1 = 2; _idx1 > 0; _idx1--) {
builder.PutInt(g_A[_idx0-1,_idx1-1]);
}
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.PutBool(F[_idx0-1]);
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.PutFloat(E[_idx0-1]);
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.PutByte(D[_idx0-1]);
}
return new Offset<MyGame.Example.LargeArrayStruct>(builder.Offset);
}
public LargeArrayStructT UnPack() {
var _o = new LargeArrayStructT();
this.UnPackTo(_o);
return _o;
}
public void UnPackTo(LargeArrayStructT _o) {
_o.D = new byte[64];
for (var _j = 0; _j < 64; ++_j) { _o.D[_j] = this.D(_j); }
_o.E = new float[64];
for (var _j = 0; _j < 64; ++_j) { _o.E[_j] = this.E(_j); }
_o.F = new bool[64];
for (var _j = 0; _j < 64; ++_j) { _o.F[_j] = this.F(_j); }
_o.G = new MyGame.Example.NestedStructT[64];
for (var _j = 0; _j < 64; ++_j) { _o.G[_j] = this.G(_j).UnPack(); }
_o.H = new MyGame.Example.TestEnum[64];
for (var _j = 0; _j < 64; ++_j) { _o.H[_j] = this.H(_j); }
}
public static Offset<MyGame.Example.LargeArrayStruct> Pack(FlatBufferBuilder builder, LargeArrayStructT _o) {
if (_o == null) return default(Offset<MyGame.Example.LargeArrayStruct>);
var _d = _o.D;
var _e = _o.E;
var _f = _o.F;
var _g_a = new int[64,2];
for (var idx0 = 0; idx0 < 64; ++idx0) {for (var idx1 = 0; idx1 < 2; ++idx1) {_g_a[idx0,idx1] = _o.G[idx0].A[idx1];}}
var _g_b = new MyGame.Example.TestEnum[64];
for (var idx0 = 0; idx0 < 64; ++idx0) {_g_b[idx0] = _o.G[idx0].B;}
var _g_c = new MyGame.Example.TestEnum[64,2];
for (var idx0 = 0; idx0 < 64; ++idx0) {for (var idx1 = 0; idx1 < 2; ++idx1) {_g_c[idx0,idx1] = _o.G[idx0].C[idx1];}}
var _g_d = new long[64,2];
for (var idx0 = 0; idx0 < 64; ++idx0) {for (var idx1 = 0; idx1 < 2; ++idx1) {_g_d[idx0,idx1] = _o.G[idx0].D[idx1];}}
var _h = _o.H;
return CreateLargeArrayStruct(
builder,
_d,
_e,
_f,
_g_a,
_g_b,
_g_c,
_g_d,
_h);
}
}
public class LargeArrayStructT
{
[Newtonsoft.Json.JsonProperty("d")]
public byte[] D { get; set; }
[Newtonsoft.Json.JsonProperty("e")]
public float[] E { get; set; }
[Newtonsoft.Json.JsonProperty("f")]
public bool[] F { get; set; }
[Newtonsoft.Json.JsonProperty("g")]
public MyGame.Example.NestedStructT[] G { get; set; }
[Newtonsoft.Json.JsonProperty("h")]
public MyGame.Example.TestEnum[] H { get; set; }
public LargeArrayStructT() {
this.D = new byte[64];
this.E = new float[64];
this.F = new bool[64];
this.G = new MyGame.Example.NestedStructT[64];
this.H = new MyGame.Example.TestEnum[64];
}
}
}

View File

@@ -1,117 +0,0 @@
// automatically generated by the FlatBuffers compiler, do not modify
package MyGame.Example;
import com.google.flatbuffers.BaseVector;
import com.google.flatbuffers.BooleanVector;
import com.google.flatbuffers.ByteVector;
import com.google.flatbuffers.Constants;
import com.google.flatbuffers.DoubleVector;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.FloatVector;
import com.google.flatbuffers.IntVector;
import com.google.flatbuffers.LongVector;
import com.google.flatbuffers.ShortVector;
import com.google.flatbuffers.StringVector;
import com.google.flatbuffers.Struct;
import com.google.flatbuffers.UnionVector;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@SuppressWarnings("unused")
public final class LargeArrayStruct extends Struct {
public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
public LargeArrayStruct __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
public int d(int j) { return bb.get(bb_pos + 0 + j * 1); }
public void mutateD(int j, int d) { bb.put(bb_pos + 0 + j * 1, (byte) d); }
public float e(int j) { return bb.getFloat(bb_pos + 64 + j * 4); }
public void mutateE(int j, float e) { bb.putFloat(bb_pos + 64 + j * 4, e); }
public boolean f(int j) { return 0!=bb.get(bb_pos + 320 + j * 1); }
public void mutateF(int j, boolean f) { bb.put(bb_pos + 320 + j * 1, (byte)(f ? 1 : 0)); }
public MyGame.Example.NestedStruct g(int j) { return g(new MyGame.Example.NestedStruct(), j); }
public MyGame.Example.NestedStruct g(MyGame.Example.NestedStruct obj, int j) { return obj.__assign(bb_pos + 384 + j * 32, bb); }
public byte h(int j) { return bb.get(bb_pos + 2432 + j * 1); }
public void mutateH(int j, byte h) { bb.put(bb_pos + 2432 + j * 1, h); }
public static int createLargeArrayStruct(FlatBufferBuilder builder, int[] d, float[] e, boolean[] f, int[][] g_a, byte[] g_b, byte[][] g_c, long[][] g_d, byte[] h) {
builder.prep(8, 2496);
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.putByte(h[_idx0-1]);
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.prep(8, 32);
for (int _idx1 = 2; _idx1 > 0; _idx1--) {
builder.putLong(g_d[_idx0-1][_idx1-1]);
}
builder.pad(5);
for (int _idx1 = 2; _idx1 > 0; _idx1--) {
builder.putByte(g_c[_idx0-1][_idx1-1]);
}
builder.putByte(g_b[_idx0-1]);
for (int _idx1 = 2; _idx1 > 0; _idx1--) {
builder.putInt(g_a[_idx0-1][_idx1-1]);
}
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.putBoolean(f[_idx0-1]);
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.putFloat(e[_idx0-1]);
}
for (int _idx0 = 64; _idx0 > 0; _idx0--) {
builder.putByte((byte) d[_idx0-1]);
}
return builder.offset();
}
public static final class Vector extends BaseVector {
public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
public LargeArrayStruct get(int j) { return get(new LargeArrayStruct(), j); }
public LargeArrayStruct get(LargeArrayStruct obj, int j) { return obj.__assign(__element(j), bb); }
}
public LargeArrayStructT unpack() {
LargeArrayStructT _o = new LargeArrayStructT();
unpackTo(_o);
return _o;
}
public void unpackTo(LargeArrayStructT _o) {
int[] _oD = _o.getD();
for (int _j = 0; _j < 64; ++_j) { _oD[_j] = d(_j); }
float[] _oE = _o.getE();
for (int _j = 0; _j < 64; ++_j) { _oE[_j] = e(_j); }
boolean[] _oF = _o.getF();
for (int _j = 0; _j < 64; ++_j) { _oF[_j] = f(_j); }
MyGame.Example.NestedStructT[] _oG = _o.getG();
for (int _j = 0; _j < 64; ++_j) { _oG[_j] = g(_j).unpack(); }
byte[] _oH = _o.getH();
for (int _j = 0; _j < 64; ++_j) { _oH[_j] = h(_j); }
}
public static int pack(FlatBufferBuilder builder, LargeArrayStructT _o) {
if (_o == null) return 0;
int[] _d = _o.getD();
float[] _e = _o.getE();
boolean[] _f = _o.getF();
int[][] _g_a = new int[64][2];
for (int idx0 = 0; idx0 < 64; ++idx0) {for (int idx1 = 0; idx1 < 2; ++idx1) {_g_a[idx0][idx1] = _o.getG()[idx0].getA()[idx1];}}
byte[] _g_b = new byte[64];
for (int idx0 = 0; idx0 < 64; ++idx0) {_g_b[idx0] = _o.getG()[idx0].getB();}
byte[][] _g_c = new byte[64][2];
for (int idx0 = 0; idx0 < 64; ++idx0) {for (int idx1 = 0; idx1 < 2; ++idx1) {_g_c[idx0][idx1] = _o.getG()[idx0].getC()[idx1];}}
long[][] _g_d = new long[64][2];
for (int idx0 = 0; idx0 < 64; ++idx0) {for (int idx1 = 0; idx1 < 2; ++idx1) {_g_d[idx0][idx1] = _o.getG()[idx0].getD()[idx1];}}
byte[] _h = _o.getH();
return createLargeArrayStruct(
builder,
_d,
_e,
_f,
_g_a,
_g_b,
_g_c,
_g_d,
_h);
}
}

View File

@@ -1,226 +0,0 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: Example
import flatbuffers
from flatbuffers.compat import import_numpy
from typing import Any
from MyGame.Example.NestedStruct import NestedStruct
np = import_numpy()
class LargeArrayStruct(object):
__slots__ = ['_tab']
@classmethod
def SizeOf(cls) -> int:
return 2496
# LargeArrayStruct
def Init(self, buf: bytes, pos: int):
self._tab = flatbuffers.table.Table(buf, pos)
# LargeArrayStruct
def D(self, j = None):
if j is None:
return [self._tab.Get(flatbuffers.number_types.Uint8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0 + i * 1)) for i in range(self.DLength())]
elif j >= 0 and j < self.DLength():
return self._tab.Get(flatbuffers.number_types.Uint8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0 + j * 1))
else:
return None
# LargeArrayStruct
def DAsNumpy(self):
return self._tab.GetArrayAsNumpy(flatbuffers.number_types.Uint8Flags, self._tab.Pos + 0, self.DLength())
# LargeArrayStruct
def DLength(self) -> int:
return 64
# LargeArrayStruct
def DIsNone(self) -> bool:
return False
# LargeArrayStruct
def E(self, j = None):
if j is None:
return [self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(64 + i * 4)) for i in range(self.ELength())]
elif j >= 0 and j < self.ELength():
return self._tab.Get(flatbuffers.number_types.Float32Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(64 + j * 4))
else:
return None
# LargeArrayStruct
def EAsNumpy(self):
return self._tab.GetArrayAsNumpy(flatbuffers.number_types.Float32Flags, self._tab.Pos + 64, self.ELength())
# LargeArrayStruct
def ELength(self) -> int:
return 64
# LargeArrayStruct
def EIsNone(self) -> bool:
return False
# LargeArrayStruct
def F(self, j = None):
if j is None:
return [self._tab.Get(flatbuffers.number_types.BoolFlags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(320 + i * 1)) for i in range(self.FLength())]
elif j >= 0 and j < self.FLength():
return self._tab.Get(flatbuffers.number_types.BoolFlags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(320 + j * 1))
else:
return None
# LargeArrayStruct
def FAsNumpy(self):
return self._tab.GetArrayAsNumpy(flatbuffers.number_types.BoolFlags, self._tab.Pos + 320, self.FLength())
# LargeArrayStruct
def FLength(self) -> int:
return 64
# LargeArrayStruct
def FIsNone(self) -> bool:
return False
# LargeArrayStruct
def G(self, i: int) -> NestedStruct:
obj = NestedStruct()
obj.Init(self._tab.Bytes, self._tab.Pos + 384 + i * 32)
return obj
# LargeArrayStruct
def GLength(self) -> int:
return 64
# LargeArrayStruct
def GIsNone(self) -> bool:
return False
# LargeArrayStruct
def H(self, j = None):
if j is None:
return [self._tab.Get(flatbuffers.number_types.Int8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(2432 + i * 1)) for i in range(self.HLength())]
elif j >= 0 and j < self.HLength():
return self._tab.Get(flatbuffers.number_types.Int8Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(2432 + j * 1))
else:
return None
# LargeArrayStruct
def HAsNumpy(self):
return self._tab.GetArrayAsNumpy(flatbuffers.number_types.Int8Flags, self._tab.Pos + 2432, self.HLength())
# LargeArrayStruct
def HLength(self) -> int:
return 64
# LargeArrayStruct
def HIsNone(self) -> bool:
return False
def CreateLargeArrayStruct(builder, d, e, f, g_a, g_b, g_c, g_d, h):
builder.Prep(8, 2496)
for _idx0 in range(64 , 0, -1):
builder.PrependInt8(h[_idx0-1])
for _idx0 in range(64 , 0, -1):
builder.Prep(8, 32)
for _idx1 in range(2 , 0, -1):
builder.PrependInt64(g_d[_idx0-1][_idx1-1])
builder.Pad(5)
for _idx1 in range(2 , 0, -1):
builder.PrependInt8(g_c[_idx0-1][_idx1-1])
builder.PrependInt8(g_b[_idx0-1])
for _idx1 in range(2 , 0, -1):
builder.PrependInt32(g_a[_idx0-1][_idx1-1])
for _idx0 in range(64 , 0, -1):
builder.PrependBool(f[_idx0-1])
for _idx0 in range(64 , 0, -1):
builder.PrependFloat32(e[_idx0-1])
for _idx0 in range(64 , 0, -1):
builder.PrependUint8(d[_idx0-1])
return builder.Offset()
import MyGame.Example.NestedStruct
try:
from typing import List
except:
pass
class LargeArrayStructT(object):
# LargeArrayStructT
def __init__(
self,
d = None,
e = None,
f = None,
g = None,
h = None,
):
self.d = d # type: Optional[List[int]]
self.e = e # type: Optional[List[float]]
self.f = f # type: Optional[List[bool]]
self.g = g # type: Optional[List[MyGame.Example.NestedStruct.NestedStructT]]
self.h = h # type: Optional[List[int]]
@classmethod
def InitFromBuf(cls, buf, pos):
largeArrayStruct = LargeArrayStruct()
largeArrayStruct.Init(buf, pos)
return cls.InitFromObj(largeArrayStruct)
@classmethod
def InitFromPackedBuf(cls, buf, pos=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, pos)
return cls.InitFromBuf(buf, pos+n)
@classmethod
def InitFromObj(cls, largeArrayStruct):
x = LargeArrayStructT()
x._UnPack(largeArrayStruct)
return x
# LargeArrayStructT
def _UnPack(self, largeArrayStruct):
if largeArrayStruct is None:
return
if not largeArrayStruct.DIsNone():
if np is None:
self.d = []
for i in range(largeArrayStruct.DLength()):
self.d.append(largeArrayStruct.D(i))
else:
self.d = largeArrayStruct.DAsNumpy()
if not largeArrayStruct.EIsNone():
if np is None:
self.e = []
for i in range(largeArrayStruct.ELength()):
self.e.append(largeArrayStruct.E(i))
else:
self.e = largeArrayStruct.EAsNumpy()
if not largeArrayStruct.FIsNone():
if np is None:
self.f = []
for i in range(largeArrayStruct.FLength()):
self.f.append(largeArrayStruct.F(i))
else:
self.f = largeArrayStruct.FAsNumpy()
if not largeArrayStruct.GIsNone():
self.g = []
for i in range(largeArrayStruct.GLength()):
if largeArrayStruct.G(i) is None:
self.g.append(None)
else:
nestedStruct_ = MyGame.Example.NestedStruct.NestedStructT.InitFromObj(largeArrayStruct.G(i))
self.g.append(nestedStruct_)
if not largeArrayStruct.HIsNone():
if np is None:
self.h = []
for i in range(largeArrayStruct.HLength()):
self.h.append(largeArrayStruct.H(i))
else:
self.h = largeArrayStruct.HAsNumpy()
# LargeArrayStructT
def Pack(self, builder):
return CreateLargeArrayStruct(builder, self.d, self.e, self.f, self.g.a, self.g.b, self.g.c, self.g.d, self.h)

View File

@@ -1,60 +0,0 @@
from __future__ import annotations
import flatbuffers
import numpy as np
import typing
from MyGame.Example.NestedStruct import NestedStruct, NestedStructT
from MyGame.Example.TestEnum import TestEnum
uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type
class LargeArrayStruct(object):
@classmethod
def SizeOf(cls) -> int: ...
def Init(self, buf: bytes, pos: int) -> None: ...
def D(self, i: int) -> typing.List[int]: ...
def DAsNumpy(self) -> np.ndarray: ...
def DLength(self) -> int: ...
def DIsNone(self) -> bool: ...
def E(self, i: int) -> typing.List[float]: ...
def EAsNumpy(self) -> np.ndarray: ...
def ELength(self) -> int: ...
def EIsNone(self) -> bool: ...
def F(self, i: int) -> typing.List[bool]: ...
def FAsNumpy(self) -> np.ndarray: ...
def FLength(self) -> int: ...
def FIsNone(self) -> bool: ...
def G(self, i: int) -> NestedStruct | None: ...
def GLength(self) -> int: ...
def GIsNone(self) -> bool: ...
def H(self, i: int) -> typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]: ...
def HAsNumpy(self) -> np.ndarray: ...
def HLength(self) -> int: ...
def HIsNone(self) -> bool: ...
class LargeArrayStructT(object):
d: typing.List[int]
e: typing.List[float]
f: typing.List[bool]
g: typing.List[NestedStructT]
h: typing.List[typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]]
def __init__(
self,
d: typing.List[int] | None = ...,
e: typing.List[float] | None = ...,
f: typing.List[bool] | None = ...,
g: typing.List['NestedStructT'] | None = ...,
h: typing.List[typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]] | None = ...,
) -> None: ...
@classmethod
def InitFromBuf(cls, buf: bytes, pos: int) -> LargeArrayStructT: ...
@classmethod
def InitFromPackedBuf(cls, buf: bytes, pos: int = 0) -> LargeArrayStructT: ...
@classmethod
def InitFromObj(cls, largeArrayStruct: LargeArrayStruct) -> LargeArrayStructT: ...
def _UnPack(self, largeArrayStruct: LargeArrayStruct) -> None: ...
def Pack(self, builder: flatbuffers.Builder) -> None: ...
def CreateLargeArrayStruct(builder: flatbuffers.Builder, d: int, e: float, f: bool, g_a: int, g_b: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C], g_c: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C], g_d: int, h: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C]) -> uoffset: ...

View File

@@ -1,57 +0,0 @@
// automatically generated by the FlatBuffers compiler, do not modify
package MyGame.Example;
import com.google.flatbuffers.BaseVector;
import com.google.flatbuffers.BooleanVector;
import com.google.flatbuffers.ByteVector;
import com.google.flatbuffers.Constants;
import com.google.flatbuffers.DoubleVector;
import com.google.flatbuffers.FlatBufferBuilder;
import com.google.flatbuffers.FloatVector;
import com.google.flatbuffers.IntVector;
import com.google.flatbuffers.LongVector;
import com.google.flatbuffers.ShortVector;
import com.google.flatbuffers.StringVector;
import com.google.flatbuffers.Struct;
import com.google.flatbuffers.UnionVector;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public class LargeArrayStructT {
private int[] d;
private float[] e;
private boolean[] f;
private MyGame.Example.NestedStructT[] g;
private byte[] h;
public int[] getD() { return d; }
public void setD(int[] d) { if (d != null && d.length == 64) this.d = d; }
public float[] getE() { return e; }
public void setE(float[] e) { if (e != null && e.length == 64) this.e = e; }
public boolean[] getF() { return f; }
public void setF(boolean[] f) { if (f != null && f.length == 64) this.f = f; }
public MyGame.Example.NestedStructT[] getG() { return g; }
public void setG(MyGame.Example.NestedStructT[] g) { if (g != null && g.length == 64) this.g = g; }
public byte[] getH() { return h; }
public void setH(byte[] h) { if (h != null && h.length == 64) this.h = h; }
public LargeArrayStructT() {
this.d = new int[64];
this.e = new float[64];
this.f = new boolean[64];
this.g = new MyGame.Example.NestedStructT[64];
this.h = new byte[64];
}
}

View File

@@ -922,7 +922,7 @@ def MonsterCreateInventoryVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateInventoryVector(builder, data): def CreateInventoryVector(builder, data):
return MonsterCreateInventoryVector(builder, data) MonsterCreateInventoryVector(builder, data)
def MonsterAddColor(builder, color): def MonsterAddColor(builder, color):
builder.PrependUint8Slot(6, color, 8) builder.PrependUint8Slot(6, color, 8)
@@ -962,7 +962,7 @@ def MonsterCreateTest4Vector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateTest4Vector(builder, data): def CreateTest4Vector(builder, data):
return MonsterCreateTest4Vector(builder, data) MonsterCreateTest4Vector(builder, data)
def MonsterAddTestarrayofstring(builder, testarrayofstring): def MonsterAddTestarrayofstring(builder, testarrayofstring):
builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofstring), 0) builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofstring), 0)
@@ -980,7 +980,7 @@ def MonsterCreateTestarrayofstringVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateTestarrayofstringVector(builder, data): def CreateTestarrayofstringVector(builder, data):
return MonsterCreateTestarrayofstringVector(builder, data) MonsterCreateTestarrayofstringVector(builder, data)
def MonsterAddTestarrayoftables(builder, testarrayoftables): def MonsterAddTestarrayoftables(builder, testarrayoftables):
builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayoftables), 0) builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayoftables), 0)
@@ -998,7 +998,7 @@ def MonsterCreateTestarrayoftablesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateTestarrayoftablesVector(builder, data): def CreateTestarrayoftablesVector(builder, data):
return MonsterCreateTestarrayoftablesVector(builder, data) MonsterCreateTestarrayoftablesVector(builder, data)
def MonsterAddEnemy(builder, enemy): def MonsterAddEnemy(builder, enemy):
builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(enemy), 0) builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(enemy), 0)
@@ -1026,7 +1026,7 @@ def MonsterCreateTestnestedflatbufferVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateTestnestedflatbufferVector(builder, data): def CreateTestnestedflatbufferVector(builder, data):
return MonsterCreateTestnestedflatbufferVector(builder, data) MonsterCreateTestnestedflatbufferVector(builder, data)
def MonsterMakeTestnestedflatbufferVectorFromBytes(builder, bytes): def MonsterMakeTestnestedflatbufferVectorFromBytes(builder, bytes):
builder.StartVector(1, len(bytes), 1) builder.StartVector(1, len(bytes), 1)
@@ -1115,7 +1115,7 @@ def MonsterCreateTestarrayofboolsVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateTestarrayofboolsVector(builder, data): def CreateTestarrayofboolsVector(builder, data):
return MonsterCreateTestarrayofboolsVector(builder, data) MonsterCreateTestarrayofboolsVector(builder, data)
def MonsterAddTestf(builder, testf): def MonsterAddTestf(builder, testf):
builder.PrependFloat32Slot(25, testf, 3.14159) builder.PrependFloat32Slot(25, testf, 3.14159)
@@ -1151,7 +1151,7 @@ def MonsterCreateTestarrayofstring2Vector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateTestarrayofstring2Vector(builder, data): def CreateTestarrayofstring2Vector(builder, data):
return MonsterCreateTestarrayofstring2Vector(builder, data) MonsterCreateTestarrayofstring2Vector(builder, data)
def MonsterAddTestarrayofsortedstruct(builder, testarrayofsortedstruct): def MonsterAddTestarrayofsortedstruct(builder, testarrayofsortedstruct):
builder.PrependUOffsetTRelativeSlot(29, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofsortedstruct), 0) builder.PrependUOffsetTRelativeSlot(29, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofsortedstruct), 0)
@@ -1173,7 +1173,7 @@ def MonsterCreateTestarrayofsortedstructVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateTestarrayofsortedstructVector(builder, data): def CreateTestarrayofsortedstructVector(builder, data):
return MonsterCreateTestarrayofsortedstructVector(builder, data) MonsterCreateTestarrayofsortedstructVector(builder, data)
def MonsterAddFlex(builder, flex): def MonsterAddFlex(builder, flex):
builder.PrependUOffsetTRelativeSlot(30, flatbuffers.number_types.UOffsetTFlags.py_type(flex), 0) builder.PrependUOffsetTRelativeSlot(30, flatbuffers.number_types.UOffsetTFlags.py_type(flex), 0)
@@ -1195,7 +1195,7 @@ def MonsterCreateFlexVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateFlexVector(builder, data): def CreateFlexVector(builder, data):
return MonsterCreateFlexVector(builder, data) MonsterCreateFlexVector(builder, data)
def MonsterAddTest5(builder, test5): def MonsterAddTest5(builder, test5):
builder.PrependUOffsetTRelativeSlot(31, flatbuffers.number_types.UOffsetTFlags.py_type(test5), 0) builder.PrependUOffsetTRelativeSlot(31, flatbuffers.number_types.UOffsetTFlags.py_type(test5), 0)
@@ -1217,7 +1217,7 @@ def MonsterCreateTest5Vector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateTest5Vector(builder, data): def CreateTest5Vector(builder, data):
return MonsterCreateTest5Vector(builder, data) MonsterCreateTest5Vector(builder, data)
def MonsterAddVectorOfLongs(builder, vectorOfLongs): def MonsterAddVectorOfLongs(builder, vectorOfLongs):
builder.PrependUOffsetTRelativeSlot(32, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfLongs), 0) builder.PrependUOffsetTRelativeSlot(32, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfLongs), 0)
@@ -1239,7 +1239,7 @@ def MonsterCreateVectorOfLongsVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVectorOfLongsVector(builder, data): def CreateVectorOfLongsVector(builder, data):
return MonsterCreateVectorOfLongsVector(builder, data) MonsterCreateVectorOfLongsVector(builder, data)
def MonsterAddVectorOfDoubles(builder, vectorOfDoubles): def MonsterAddVectorOfDoubles(builder, vectorOfDoubles):
builder.PrependUOffsetTRelativeSlot(33, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfDoubles), 0) builder.PrependUOffsetTRelativeSlot(33, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfDoubles), 0)
@@ -1261,7 +1261,7 @@ def MonsterCreateVectorOfDoublesVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVectorOfDoublesVector(builder, data): def CreateVectorOfDoublesVector(builder, data):
return MonsterCreateVectorOfDoublesVector(builder, data) MonsterCreateVectorOfDoublesVector(builder, data)
def MonsterAddParentNamespaceTest(builder, parentNamespaceTest): def MonsterAddParentNamespaceTest(builder, parentNamespaceTest):
builder.PrependUOffsetTRelativeSlot(34, flatbuffers.number_types.UOffsetTFlags.py_type(parentNamespaceTest), 0) builder.PrependUOffsetTRelativeSlot(34, flatbuffers.number_types.UOffsetTFlags.py_type(parentNamespaceTest), 0)
@@ -1285,7 +1285,7 @@ def MonsterCreateVectorOfReferrablesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateVectorOfReferrablesVector(builder, data): def CreateVectorOfReferrablesVector(builder, data):
return MonsterCreateVectorOfReferrablesVector(builder, data) MonsterCreateVectorOfReferrablesVector(builder, data)
def MonsterAddSingleWeakReference(builder, singleWeakReference): def MonsterAddSingleWeakReference(builder, singleWeakReference):
builder.PrependUint64Slot(36, singleWeakReference, 0) builder.PrependUint64Slot(36, singleWeakReference, 0)
@@ -1313,7 +1313,7 @@ def MonsterCreateVectorOfWeakReferencesVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVectorOfWeakReferencesVector(builder, data): def CreateVectorOfWeakReferencesVector(builder, data):
return MonsterCreateVectorOfWeakReferencesVector(builder, data) MonsterCreateVectorOfWeakReferencesVector(builder, data)
def MonsterAddVectorOfStrongReferrables(builder, vectorOfStrongReferrables): def MonsterAddVectorOfStrongReferrables(builder, vectorOfStrongReferrables):
builder.PrependUOffsetTRelativeSlot(38, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfStrongReferrables), 0) builder.PrependUOffsetTRelativeSlot(38, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfStrongReferrables), 0)
@@ -1331,7 +1331,7 @@ def MonsterCreateVectorOfStrongReferrablesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateVectorOfStrongReferrablesVector(builder, data): def CreateVectorOfStrongReferrablesVector(builder, data):
return MonsterCreateVectorOfStrongReferrablesVector(builder, data) MonsterCreateVectorOfStrongReferrablesVector(builder, data)
def MonsterAddCoOwningReference(builder, coOwningReference): def MonsterAddCoOwningReference(builder, coOwningReference):
builder.PrependUint64Slot(39, coOwningReference, 0) builder.PrependUint64Slot(39, coOwningReference, 0)
@@ -1359,7 +1359,7 @@ def MonsterCreateVectorOfCoOwningReferencesVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVectorOfCoOwningReferencesVector(builder, data): def CreateVectorOfCoOwningReferencesVector(builder, data):
return MonsterCreateVectorOfCoOwningReferencesVector(builder, data) MonsterCreateVectorOfCoOwningReferencesVector(builder, data)
def MonsterAddNonOwningReference(builder, nonOwningReference): def MonsterAddNonOwningReference(builder, nonOwningReference):
builder.PrependUint64Slot(41, nonOwningReference, 0) builder.PrependUint64Slot(41, nonOwningReference, 0)
@@ -1387,7 +1387,7 @@ def MonsterCreateVectorOfNonOwningReferencesVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVectorOfNonOwningReferencesVector(builder, data): def CreateVectorOfNonOwningReferencesVector(builder, data):
return MonsterCreateVectorOfNonOwningReferencesVector(builder, data) MonsterCreateVectorOfNonOwningReferencesVector(builder, data)
def MonsterAddAnyUniqueType(builder, anyUniqueType): def MonsterAddAnyUniqueType(builder, anyUniqueType):
builder.PrependUint8Slot(43, anyUniqueType, 0) builder.PrependUint8Slot(43, anyUniqueType, 0)
@@ -1433,7 +1433,7 @@ def MonsterCreateVectorOfEnumsVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVectorOfEnumsVector(builder, data): def CreateVectorOfEnumsVector(builder, data):
return MonsterCreateVectorOfEnumsVector(builder, data) MonsterCreateVectorOfEnumsVector(builder, data)
def MonsterAddSignedEnum(builder, signedEnum): def MonsterAddSignedEnum(builder, signedEnum):
builder.PrependInt8Slot(48, signedEnum, -1) builder.PrependInt8Slot(48, signedEnum, -1)
@@ -1461,7 +1461,7 @@ def MonsterCreateTestrequirednestedflatbufferVector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateTestrequirednestedflatbufferVector(builder, data): def CreateTestrequirednestedflatbufferVector(builder, data):
return MonsterCreateTestrequirednestedflatbufferVector(builder, data) MonsterCreateTestrequirednestedflatbufferVector(builder, data)
def MonsterMakeTestrequirednestedflatbufferVectorFromBytes(builder, bytes): def MonsterMakeTestrequirednestedflatbufferVectorFromBytes(builder, bytes):
builder.StartVector(1, len(bytes), 1) builder.StartVector(1, len(bytes), 1)
@@ -1486,7 +1486,7 @@ def MonsterCreateScalarKeySortedTablesVector(builder, data):
return builder.CreateVectorOfTables(data) return builder.CreateVectorOfTables(data)
def CreateScalarKeySortedTablesVector(builder, data): def CreateScalarKeySortedTablesVector(builder, data):
return MonsterCreateScalarKeySortedTablesVector(builder, data) MonsterCreateScalarKeySortedTablesVector(builder, data)
def MonsterAddNativeInline(builder, nativeInline): def MonsterAddNativeInline(builder, nativeInline):
builder.PrependStructSlot(51, flatbuffers.number_types.UOffsetTFlags.py_type(nativeInline), 0) builder.PrependStructSlot(51, flatbuffers.number_types.UOffsetTFlags.py_type(nativeInline), 0)

View File

@@ -238,7 +238,7 @@ def TypeAliasesCreateV8Vector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateV8Vector(builder, data): def CreateV8Vector(builder, data):
return TypeAliasesCreateV8Vector(builder, data) TypeAliasesCreateV8Vector(builder, data)
def TypeAliasesAddVf64(builder, vf64): def TypeAliasesAddVf64(builder, vf64):
builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(vf64), 0) builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(vf64), 0)
@@ -260,7 +260,7 @@ def TypeAliasesCreateVf64Vector(builder, data):
return builder.EndVector() return builder.EndVector()
def CreateVf64Vector(builder, data): def CreateVf64Vector(builder, data):
return TypeAliasesCreateVf64Vector(builder, data) TypeAliasesCreateVf64Vector(builder, data)
def TypeAliasesEnd(builder): def TypeAliasesEnd(builder):
return builder.EndObject() return builder.EndObject()

View File

@@ -214,7 +214,7 @@ def MonsterExtraCreateDvecVector(builder: flatbuffers.Builder, data: Iterable[An
return builder.EndVector() return builder.EndVector()
def CreateDvecVector(builder: flatbuffers.Builder, data: Iterable[Any]) -> int: def CreateDvecVector(builder: flatbuffers.Builder, data: Iterable[Any]) -> int:
return MonsterExtraCreateDvecVector(builder, data) MonsterExtraCreateDvecVector(builder, data)
def MonsterExtraAddFvec(builder: flatbuffers.Builder, fvec: int): def MonsterExtraAddFvec(builder: flatbuffers.Builder, fvec: int):
builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(fvec), 0) builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(fvec), 0)
@@ -236,7 +236,7 @@ def MonsterExtraCreateFvecVector(builder: flatbuffers.Builder, data: Iterable[An
return builder.EndVector() return builder.EndVector()
def CreateFvecVector(builder: flatbuffers.Builder, data: Iterable[Any]) -> int: def CreateFvecVector(builder: flatbuffers.Builder, data: Iterable[Any]) -> int:
return MonsterExtraCreateFvecVector(builder, data) MonsterExtraCreateFvecVector(builder, data)
def MonsterExtraEnd(builder: flatbuffers.Builder) -> int: def MonsterExtraEnd(builder: flatbuffers.Builder) -> int:
return builder.EndObject() return builder.EndObject()

View File

@@ -28,7 +28,6 @@ ${test_dir}/../flatc -p -o ${gen_code_path} -I include_test monster_extra.fbs --
${test_dir}/../flatc -p -o ${gen_code_path} -I include_test arrays_test.fbs --gen-object-api --python-typing ${test_dir}/../flatc -p -o ${gen_code_path} -I include_test arrays_test.fbs --gen-object-api --python-typing
${test_dir}/../flatc -p -o ${gen_code_path} -I include_test nested_union_test.fbs --gen-object-api --python-typing --python-decode-obj-api-strings ${test_dir}/../flatc -p -o ${gen_code_path} -I include_test nested_union_test.fbs --gen-object-api --python-typing --python-decode-obj-api-strings
${test_dir}/../flatc -p -o ${gen_code_path} -I include_test service_test.fbs --grpc --grpc-python-typed-handlers --python-typing --no-python-gen-numpy --gen-onefile ${test_dir}/../flatc -p -o ${gen_code_path} -I include_test service_test.fbs --grpc --grpc-python-typed-handlers --python-typing --no-python-gen-numpy --gen-onefile
${test_dir}/../flatc -p -o ${gen_code_path} union_name_test.fbs --gen-object-api
# Syntax: run_tests <interpreter> <benchmark vtable dedupes> # Syntax: run_tests <interpreter> <benchmark vtable dedupes>
# <benchmark read count> <benchmark build count> # <benchmark read count> <benchmark build count>

Binary file not shown.

View File

@@ -18,14 +18,6 @@ struct ArrayStruct{
f:[int64:2]; f:[int64:2];
} }
struct LargeArrayStruct {
d:[ubyte:64];
e:[float:64];
f:[bool:64];
g:[NestedStruct:64];
h:[TestEnum:64];
}
table ArrayTable{ table ArrayTable{
a:ArrayStruct; a:ArrayStruct;
} }

View File

@@ -59,37 +59,6 @@
}, },
"additionalProperties" : false "additionalProperties" : false
}, },
"MyGame_Example_LargeArrayStruct" : {
"type" : "object",
"properties" : {
"d" : {
"type" : "array", "items" : {"type" : "integer", "minimum" : 0, "maximum" :255},
"minItems": 64,
"maxItems": 64
},
"e" : {
"type" : "array", "items" : {"type" : "number"},
"minItems": 64,
"maxItems": 64
},
"f" : {
"type" : "array", "items" : {"type" : "boolean"},
"minItems": 64,
"maxItems": 64
},
"g" : {
"type" : "array", "items" : {"$ref" : "#/definitions/MyGame_Example_NestedStruct"},
"minItems": 64,
"maxItems": 64
},
"h" : {
"type" : "array", "items" : {"$ref" : "#/definitions/MyGame_Example_TestEnum"},
"minItems": 64,
"maxItems": 64
}
},
"additionalProperties" : false
},
"MyGame_Example_ArrayTable" : { "MyGame_Example_ArrayTable" : {
"type" : "object", "type" : "object",
"properties" : { "properties" : {

View File

@@ -1,921 +0,0 @@
// automatically generated by the FlatBuffers compiler, do not modify
// @generated
extern crate alloc;
#[allow(unused_imports, dead_code)]
pub mod my_game {
extern crate alloc;
#[allow(unused_imports, dead_code)]
pub mod example {
extern crate alloc;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_TEST_ENUM: i8 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_TEST_ENUM: i8 = 2;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)]
pub const ENUM_VALUES_TEST_ENUM: [TestEnum; 3] = [
TestEnum::A,
TestEnum::B,
TestEnum::C,
];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)]
pub struct TestEnum(pub i8);
#[allow(non_upper_case_globals)]
impl TestEnum {
pub const A: Self = Self(0);
pub const B: Self = Self(1);
pub const C: Self = Self(2);
pub const ENUM_MIN: i8 = 0;
pub const ENUM_MAX: i8 = 2;
pub const ENUM_VALUES: &'static [Self] = &[
Self::A,
Self::B,
Self::C,
];
/// Returns the variant's name or "" if unknown.
pub fn variant_name(self) -> Option<&'static str> {
match self {
Self::A => Some("A"),
Self::B => Some("B"),
Self::C => Some("C"),
_ => None,
}
}
}
impl ::core::fmt::Debug for TestEnum {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() {
f.write_str(name)
} else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
}
}
impl<'a> ::flatbuffers::Follow<'a> for TestEnum {
type Inner = Self;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
let b = unsafe { ::flatbuffers::read_scalar_at::<i8>(buf, loc) };
Self(b)
}
}
impl ::flatbuffers::Push for TestEnum {
type Output = TestEnum;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i8>(dst, self.0) };
}
}
impl ::flatbuffers::EndianScalar for TestEnum {
type Scalar = i8;
#[inline]
fn to_little_endian(self) -> i8 {
self.0.to_le()
}
#[inline]
#[allow(clippy::wrong_self_convention)]
fn from_little_endian(v: i8) -> Self {
let b = i8::from_le(v);
Self(b)
}
}
impl<'a> ::flatbuffers::Verifiable for TestEnum {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
i8::run_verifier(v, pos)
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for TestEnum {}
// struct NestedStruct, aligned to 8
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct NestedStruct(pub [u8; 32]);
impl Default for NestedStruct {
fn default() -> Self {
Self([0; 32])
}
}
impl ::core::fmt::Debug for NestedStruct {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("NestedStruct")
.field("a", &self.a())
.field("b", &self.b())
.field("c", &self.c())
.field("d", &self.d())
.finish()
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for NestedStruct {}
impl<'a> ::flatbuffers::Follow<'a> for NestedStruct {
type Inner = &'a NestedStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { <&'a NestedStruct>::follow(buf, loc) }
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a NestedStruct {
type Inner = &'a NestedStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { ::flatbuffers::follow_cast_ref::<NestedStruct>(buf, loc) }
}
}
impl<'b> ::flatbuffers::Push for NestedStruct {
type Output = NestedStruct;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const NestedStruct as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(8)
}
}
impl<'a> ::flatbuffers::Verifiable for NestedStruct {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos)
}
}
impl<'a> NestedStruct {
#[allow(clippy::too_many_arguments)]
pub fn new(
a: &[i32; 2],
b: TestEnum,
c: &[TestEnum; 2],
d: &[i64; 2],
) -> Self {
let mut s = Self([0; 32]);
s.set_a(a);
s.set_b(b);
s.set_c(c);
s.set_d(d);
s
}
pub fn a(&'a self) -> ::flatbuffers::Array<'a, i32, 2> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 0) }
}
pub fn set_a(&mut self, items: &[i32; 2]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 0, items) };
}
pub fn b(&self) -> TestEnum {
let mut mem = ::core::mem::MaybeUninit::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[8..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_b(&mut self, x: TestEnum) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[8..].as_mut_ptr(),
::core::mem::size_of::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
pub fn c(&'a self) -> ::flatbuffers::Array<'a, TestEnum, 2> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 9) }
}
pub fn set_c(&mut self, x: &[TestEnum; 2]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe {
::core::ptr::copy(
x.as_ptr() as *const u8,
self.0.as_mut_ptr().add(9),
2,
);
}
}
pub fn d(&'a self) -> ::flatbuffers::Array<'a, i64, 2> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 16) }
}
pub fn set_d(&mut self, items: &[i64; 2]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 16, items) };
}
pub fn unpack(&self) -> NestedStructT {
NestedStructT {
a: self.a().into(),
b: self.b(),
c: self.c().into(),
d: self.d().into(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct NestedStructT {
pub a: [i32; 2],
pub b: TestEnum,
pub c: [TestEnum; 2],
pub d: [i64; 2],
}
impl Default for NestedStructT {
fn default() -> Self {
Self {
a: [0; 2],
b: TestEnum::A,
c: ::flatbuffers::array_init(|_| Default::default()),
d: [0; 2],
}
}
}
impl NestedStructT {
pub fn pack(&self) -> NestedStruct {
NestedStruct::new(
&self.a,
self.b,
&self.c,
&self.d,
)
}
}
// struct ArrayStruct, aligned to 8
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct ArrayStruct(pub [u8; 160]);
impl Default for ArrayStruct {
fn default() -> Self {
Self([0; 160])
}
}
impl ::core::fmt::Debug for ArrayStruct {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("ArrayStruct")
.field("a", &self.a())
.field("b", &self.b())
.field("c", &self.c())
.field("d", &self.d())
.field("e", &self.e())
.field("f", &self.f())
.finish()
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for ArrayStruct {}
impl<'a> ::flatbuffers::Follow<'a> for ArrayStruct {
type Inner = &'a ArrayStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { <&'a ArrayStruct>::follow(buf, loc) }
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a ArrayStruct {
type Inner = &'a ArrayStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { ::flatbuffers::follow_cast_ref::<ArrayStruct>(buf, loc) }
}
}
impl<'b> ::flatbuffers::Push for ArrayStruct {
type Output = ArrayStruct;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const ArrayStruct as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(8)
}
}
impl<'a> ::flatbuffers::Verifiable for ArrayStruct {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos)
}
}
impl<'a> ArrayStruct {
#[allow(clippy::too_many_arguments)]
pub fn new(
a: f32,
b: &[i32; 15],
c: i8,
d: &[NestedStruct; 2],
e: i32,
f: &[i64; 2],
) -> Self {
let mut s = Self([0; 160]);
s.set_a(a);
s.set_b(b);
s.set_c(c);
s.set_d(d);
s.set_e(e);
s.set_f(f);
s
}
pub fn a(&self) -> f32 {
let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_a(&mut self, x: f32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
pub fn b(&'a self) -> ::flatbuffers::Array<'a, i32, 15> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 4) }
}
pub fn set_b(&mut self, items: &[i32; 15]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 4, items) };
}
pub fn c(&self) -> i8 {
let mut mem = ::core::mem::MaybeUninit::<<i8 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[64..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i8 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_c(&mut self, x: i8) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[64..].as_mut_ptr(),
::core::mem::size_of::<<i8 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
pub fn d(&'a self) -> ::flatbuffers::Array<'a, NestedStruct, 2> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 72) }
}
pub fn set_d(&mut self, x: &[NestedStruct; 2]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe {
::core::ptr::copy(
x.as_ptr() as *const u8,
self.0.as_mut_ptr().add(72),
64,
);
}
}
pub fn e(&self) -> i32 {
let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[136..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_e(&mut self, x: i32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[136..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
pub fn f(&'a self) -> ::flatbuffers::Array<'a, i64, 2> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 144) }
}
pub fn set_f(&mut self, items: &[i64; 2]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 144, items) };
}
pub fn unpack(&self) -> ArrayStructT {
ArrayStructT {
a: self.a(),
b: self.b().into(),
c: self.c(),
d: { let d = self.d(); ::flatbuffers::array_init(|i| d.get(i).unpack()) },
e: self.e(),
f: self.f().into(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct ArrayStructT {
pub a: f32,
pub b: [i32; 15],
pub c: i8,
pub d: [NestedStructT; 2],
pub e: i32,
pub f: [i64; 2],
}
impl Default for ArrayStructT {
fn default() -> Self {
Self {
a: 0.0,
b: [0; 15],
c: 0,
d: ::flatbuffers::array_init(|_| Default::default()),
e: 0,
f: [0; 2],
}
}
}
impl ArrayStructT {
pub fn pack(&self) -> ArrayStruct {
ArrayStruct::new(
self.a,
&self.b,
self.c,
&::flatbuffers::array_init(|i| self.d[i].pack()),
self.e,
&self.f,
)
}
}
// struct LargeArrayStruct, aligned to 4
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct LargeArrayStruct(pub [u8; 384]);
impl Default for LargeArrayStruct {
fn default() -> Self {
Self([0; 384])
}
}
impl ::core::fmt::Debug for LargeArrayStruct {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("LargeArrayStruct")
.field("d", &self.d())
.field("e", &self.e())
.field("f", &self.f())
.finish()
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for LargeArrayStruct {}
impl<'a> ::flatbuffers::Follow<'a> for LargeArrayStruct {
type Inner = &'a LargeArrayStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { <&'a LargeArrayStruct>::follow(buf, loc) }
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a LargeArrayStruct {
type Inner = &'a LargeArrayStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { ::flatbuffers::follow_cast_ref::<LargeArrayStruct>(buf, loc) }
}
}
impl<'b> ::flatbuffers::Push for LargeArrayStruct {
type Output = LargeArrayStruct;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const LargeArrayStruct as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4)
}
}
impl<'a> ::flatbuffers::Verifiable for LargeArrayStruct {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos)
}
}
impl<'a> LargeArrayStruct {
#[allow(clippy::too_many_arguments)]
pub fn new(
d: &[u8; 64],
e: &[f32; 64],
f: &[bool; 64],
) -> Self {
let mut s = Self([0; 384]);
s.set_d(d);
s.set_e(e);
s.set_f(f);
s
}
pub fn d(&'a self) -> ::flatbuffers::Array<'a, u8, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 0) }
}
pub fn set_d(&mut self, items: &[u8; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 0, items) };
}
pub fn e(&'a self) -> ::flatbuffers::Array<'a, f32, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 64) }
}
pub fn set_e(&mut self, items: &[f32; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 64, items) };
}
pub fn f(&'a self) -> ::flatbuffers::Array<'a, bool, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 320) }
}
pub fn set_f(&mut self, items: &[bool; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 320, items) };
}
pub fn unpack(&self) -> LargeArrayStructT {
LargeArrayStructT {
d: self.d().into(),
e: self.e().into(),
f: self.f().into(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct LargeArrayStructT {
pub d: [u8; 64],
pub e: [f32; 64],
pub f: [bool; 64],
}
impl Default for LargeArrayStructT {
fn default() -> Self {
Self {
d: [0; 64],
e: [0.0; 64],
f: [false; 64],
}
}
}
impl LargeArrayStructT {
pub fn pack(&self) -> LargeArrayStruct {
LargeArrayStruct::new(
&self.d,
&self.e,
&self.f,
)
}
}
pub enum ArrayTableOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct ArrayTable<'a> {
pub _tab: ::flatbuffers::Table<'a>,
}
impl<'a> ::flatbuffers::Follow<'a> for ArrayTable<'a> {
type Inner = ArrayTable<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl<'a> ArrayTable<'a> {
pub const VT_A: ::flatbuffers::VOffsetT = 4;
#[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
ArrayTable { _tab: table }
}
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args ArrayTableArgs<'args>
) -> ::flatbuffers::WIPOffset<ArrayTable<'bldr>> {
let mut builder = ArrayTableBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
pub fn unpack(&self) -> ArrayTableT {
let a = self.a().map(|x| {
x.unpack()
});
ArrayTableT {
a,
}
}
#[inline]
pub fn a(&self) -> Option<&'a ArrayStruct> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<ArrayStruct>(ArrayTable::VT_A, None)}
}
}
impl ::flatbuffers::Verifiable for ArrayTable<'_> {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)?
.visit_field::<ArrayStruct>("a", Self::VT_A, false)?
.finish();
Ok(())
}
}
pub struct ArrayTableArgs<'a> {
pub a: Option<&'a ArrayStruct>,
}
impl<'a> Default for ArrayTableArgs<'a> {
#[inline]
fn default() -> Self {
ArrayTableArgs {
a: None,
}
}
}
pub struct ArrayTableBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> ArrayTableBuilder<'a, 'b, A> {
#[inline]
pub fn add_a(&mut self, a: &ArrayStruct) {
self.fbb_.push_slot_always::<&ArrayStruct>(ArrayTable::VT_A, a);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> ArrayTableBuilder<'a, 'b, A> {
let start = _fbb.start_table();
ArrayTableBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<ArrayTable<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
impl ::core::fmt::Debug for ArrayTable<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("ArrayTable");
ds.field("a", &self.a());
ds.finish()
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq)]
pub struct ArrayTableT {
pub a: Option<ArrayStructT>,
}
impl Default for ArrayTableT {
fn default() -> Self {
Self {
a: None,
}
}
}
impl ArrayTableT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<ArrayTable<'b>> {
let a_tmp = self.a.as_ref().map(|x| x.pack());
let a = a_tmp.as_ref();
ArrayTable::create(_fbb, &ArrayTableArgs{
a,
})
}
}
#[inline]
/// Verifies that a buffer of bytes contains a `ArrayTable`
/// and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_array_table_unchecked`.
pub fn root_as_array_table(buf: &[u8]) -> Result<ArrayTable<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root::<ArrayTable>(buf)
}
#[inline]
/// Verifies that a buffer of bytes contains a size prefixed
/// `ArrayTable` and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `size_prefixed_root_as_array_table_unchecked`.
pub fn size_prefixed_root_as_array_table(buf: &[u8]) -> Result<ArrayTable<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root::<ArrayTable>(buf)
}
#[inline]
/// Verifies, with the given options, that a buffer of bytes
/// contains a `ArrayTable` and returns it.
/// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_array_table_unchecked`.
pub fn root_as_array_table_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<ArrayTable<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root_with_opts::<ArrayTable<'b>>(opts, buf)
}
#[inline]
/// Verifies, with the given verifier options, that a buffer of
/// bytes contains a size prefixed `ArrayTable` and returns
/// it. Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use
/// `root_as_array_table_unchecked`.
pub fn size_prefixed_root_as_array_table_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<ArrayTable<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root_with_opts::<ArrayTable<'b>>(opts, buf)
}
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a ArrayTable and returns it.
/// # Safety
/// Callers must trust the given bytes do indeed contain a valid `ArrayTable`.
pub unsafe fn root_as_array_table_unchecked(buf: &[u8]) -> ArrayTable<'_> {
unsafe { ::flatbuffers::root_unchecked::<ArrayTable>(buf) }
}
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a size prefixed ArrayTable and returns it.
/// # Safety
/// Callers must trust the given bytes do indeed contain a valid size prefixed `ArrayTable`.
pub unsafe fn size_prefixed_root_as_array_table_unchecked(buf: &[u8]) -> ArrayTable<'_> {
unsafe { ::flatbuffers::size_prefixed_root_unchecked::<ArrayTable>(buf) }
}
pub const ARRAY_TABLE_IDENTIFIER: &str = "ARRT";
#[inline]
pub fn array_table_buffer_has_identifier(buf: &[u8]) -> bool {
::flatbuffers::buffer_has_identifier(buf, ARRAY_TABLE_IDENTIFIER, false)
}
#[inline]
pub fn array_table_size_prefixed_buffer_has_identifier(buf: &[u8]) -> bool {
::flatbuffers::buffer_has_identifier(buf, ARRAY_TABLE_IDENTIFIER, true)
}
pub const ARRAY_TABLE_EXTENSION: &str = "mon";
#[inline]
pub fn finish_array_table_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
root: ::flatbuffers::WIPOffset<ArrayTable<'a>>) {
fbb.finish(root, Some(ARRAY_TABLE_IDENTIFIER));
}
#[inline]
pub fn finish_size_prefixed_array_table_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, root: ::flatbuffers::WIPOffset<ArrayTable<'a>>) {
fbb.finish_size_prefixed(root, Some(ARRAY_TABLE_IDENTIFIER));
}
} // pub mod Example
} // pub mod MyGame

View File

@@ -1,18 +1,16 @@
// Automatically generated by the Flatbuffers compiler. Do not modify. // Automatically generated by the Flatbuffers compiler. Do not modify.
// @generated // @generated
pub mod my_game { pub mod my_game {
use super::*;
pub mod example {
use super::*; use super::*;
pub mod example { mod test_enum_generated;
use super::*; pub use self::test_enum_generated::*;
mod test_enum_generated; mod nested_struct_generated;
pub use self::test_enum_generated::*; pub use self::nested_struct_generated::*;
mod nested_struct_generated; mod array_struct_generated;
pub use self::nested_struct_generated::*; pub use self::array_struct_generated::*;
mod array_struct_generated; mod array_table_generated;
pub use self::array_struct_generated::*; pub use self::array_table_generated::*;
mod large_array_struct_generated; } // example
pub use self::large_array_struct_generated::*;
mod array_table_generated;
pub use self::array_table_generated::*;
} // example
} // my_game } // my_game

View File

@@ -2,60 +2,50 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
// struct ArrayStruct, aligned to 8 // struct ArrayStruct, aligned to 8
#[repr(transparent)] #[repr(transparent)]
#[derive(Clone, Copy, PartialEq)] #[derive(Clone, Copy, PartialEq)]
pub struct ArrayStruct(pub [u8; 160]); pub struct ArrayStruct(pub [u8; 160]);
impl Default for ArrayStruct { impl Default for ArrayStruct {
fn default() -> Self { fn default() -> Self {
Self([0; 160]) Self([0; 160])
} }
} }
impl ::core::fmt::Debug for ArrayStruct { impl ::core::fmt::Debug for ArrayStruct {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("ArrayStruct") f.debug_struct("ArrayStruct")
.field("a", &self.a()) .field("a", &self.a())
.field("b", &self.b()) .field("b", &self.b())
.field("c", &self.c()) .field("c", &self.c())
.field("d", &self.d()) .field("d", &self.d())
.field("e", &self.e()) .field("e", &self.e())
.field("f", &self.f()) .field("f", &self.f())
.finish() .finish()
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for ArrayStruct {} impl ::flatbuffers::SimpleToVerifyInSlice for ArrayStruct {}
impl<'a> ::flatbuffers::Follow<'a> for ArrayStruct { impl<'a> ::flatbuffers::Follow<'a> for ArrayStruct {
type Inner = &'a ArrayStruct; type Inner = &'a ArrayStruct;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { <&'a ArrayStruct>::follow(buf, loc) }
unsafe { <&'a ArrayStruct>::follow(buf, loc) } }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for &'a ArrayStruct { impl<'a> ::flatbuffers::Follow<'a> for &'a ArrayStruct {
type Inner = &'a ArrayStruct; type Inner = &'a ArrayStruct;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { ::flatbuffers::follow_cast_ref::<ArrayStruct>(buf, loc) }
unsafe { ::flatbuffers::follow_cast_ref::<ArrayStruct>(buf, loc) } }
}
} }
impl<'b> ::flatbuffers::Push for ArrayStruct { impl<'b> ::flatbuffers::Push for ArrayStruct {
type Output = ArrayStruct; type Output = ArrayStruct;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const ArrayStruct as *const u8, <Self as ::flatbuffers::Push>::size()) }; let src = unsafe { ::core::slice::from_raw_parts(self as *const ArrayStruct as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src); dst.copy_from_slice(src);
} }
#[inline] #[inline]
fn alignment() -> ::flatbuffers::PushAlignment { fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(8) ::flatbuffers::PushAlignment::new(8)
@@ -63,219 +53,207 @@ impl<'b> ::flatbuffers::Push for ArrayStruct {
} }
impl<'a> ::flatbuffers::Verifiable for ArrayStruct { impl<'a> ::flatbuffers::Verifiable for ArrayStruct {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos) v.in_buffer::<Self>(pos)
} }
} }
impl<'a> ArrayStruct { impl<'a> ArrayStruct {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
a: f32, a: f32,
b: &[i32; 15], b: &[i32; 15],
c: i8, c: i8,
d: &[NestedStruct; 2], d: &[NestedStruct; 2],
e: i32, e: i32,
f: &[i64; 2], f: &[i64; 2],
) -> Self { ) -> Self {
let mut s = Self([0; 160]); let mut s = Self([0; 160]);
s.set_a(a); s.set_a(a);
s.set_b(b); s.set_b(b);
s.set_c(c); s.set_c(c);
s.set_d(d); s.set_d(d);
s.set_e(e); s.set_e(e);
s.set_f(f); s.set_f(f);
s s
} }
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Example.ArrayStruct" "MyGame.Example.ArrayStruct"
} }
pub fn a(&self) -> f32 { pub fn a(&self) -> f32 {
let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<f32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(), self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_a(&mut self, x: f32) { pub fn set_a(&mut self, x: f32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(), self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<f32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn b(&'a self) -> ::flatbuffers::Array<'a, i32, 15> { pub fn b(&'a self) -> ::flatbuffers::Array<'a, i32, 15> {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
use ::flatbuffers::Follow; use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 4) } unsafe { ::flatbuffers::Array::follow(&self.0, 4) }
} }
pub fn set_b(&mut self, items: &[i32; 15]) { pub fn set_b(&mut self, items: &[i32; 15]) {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 4, items) }; unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 4, items) };
} }
pub fn c(&self) -> i8 { pub fn c(&self) -> i8 {
let mut mem = ::core::mem::MaybeUninit::<<i8 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<i8 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[64..].as_ptr(), self.0[64..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i8 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i8 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_c(&mut self, x: i8) { pub fn set_c(&mut self, x: i8) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[64..].as_mut_ptr(), self.0[64..].as_mut_ptr(),
::core::mem::size_of::<<i8 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i8 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn d(&'a self) -> ::flatbuffers::Array<'a, NestedStruct, 2> { pub fn d(&'a self) -> ::flatbuffers::Array<'a, NestedStruct, 2> {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
use ::flatbuffers::Follow; use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 72) } unsafe { ::flatbuffers::Array::follow(&self.0, 72) }
} }
pub fn set_d(&mut self, x: &[NestedStruct; 2]) { pub fn set_d(&mut self, x: &[NestedStruct; 2]) {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
unsafe { unsafe {
::core::ptr::copy( ::core::ptr::copy(
x.as_ptr() as *const u8, x.as_ptr() as *const u8,
self.0.as_mut_ptr().add(72), self.0.as_mut_ptr().add(72),
64, 64,
); );
}
} }
}
pub fn e(&self) -> i32 { pub fn e(&self) -> i32 {
let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[136..].as_ptr(), self.0[136..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_e(&mut self, x: i32) { pub fn set_e(&mut self, x: i32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[136..].as_mut_ptr(), self.0[136..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn f(&'a self) -> ::flatbuffers::Array<'a, i64, 2> { pub fn f(&'a self) -> ::flatbuffers::Array<'a, i64, 2> {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
use ::flatbuffers::Follow; use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 144) } unsafe { ::flatbuffers::Array::follow(&self.0, 144) }
} }
pub fn set_f(&mut self, items: &[i64; 2]) { pub fn set_f(&mut self, items: &[i64; 2]) {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 144, items) }; unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 144, items) };
} }
pub fn unpack(&self) -> ArrayStructT { pub fn unpack(&self) -> ArrayStructT {
ArrayStructT { ArrayStructT {
a: self.a(), a: self.a(),
b: self.b().into(), b: self.b().into(),
c: self.c(), c: self.c(),
d: { let d = self.d(); ::flatbuffers::array_init(|i| d.get(i).unpack()) }, d: { let d = self.d(); ::flatbuffers::array_init(|i| d.get(i).unpack()) },
e: self.e(), e: self.e(),
f: self.f().into(), f: self.f().into(),
}
} }
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Default)]
pub struct ArrayStructT { pub struct ArrayStructT {
pub a: f32, pub a: f32,
pub b: [i32; 15], pub b: [i32; 15],
pub c: i8, pub c: i8,
pub d: [NestedStructT; 2], pub d: [NestedStructT; 2],
pub e: i32, pub e: i32,
pub f: [i64; 2], pub f: [i64; 2],
} }
impl Default for ArrayStructT { impl ArrayStructT {
fn default() -> Self { pub fn pack(&self) -> ArrayStruct {
Self { ArrayStruct::new(
a: 0.0, self.a,
b: [0; 15], &self.b,
c: 0, self.c,
d: ::flatbuffers::array_init(|_| Default::default()), &::flatbuffers::array_init(|i| self.d[i].pack()),
e: 0, self.e,
f: [0; 2], &self.f,
} )
} }
} }
impl ArrayStructT {
pub fn pack(&self) -> ArrayStruct {
ArrayStruct::new(
self.a,
&self.b,
self.c,
&::flatbuffers::array_init(|i| self.d[i].pack()),
self.e,
&self.f,
)
}
}

View File

@@ -2,226 +2,208 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum ArrayTableOffset {} pub enum ArrayTableOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct ArrayTable<'a> { pub struct ArrayTable<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for ArrayTable<'a> { impl<'a> ::flatbuffers::Follow<'a> for ArrayTable<'a> {
type Inner = ArrayTable<'a>; type Inner = ArrayTable<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> ArrayTable<'a> { impl<'a> ArrayTable<'a> {
pub const VT_A: ::flatbuffers::VOffsetT = 4; pub const VT_A: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Example.ArrayTable" "MyGame.Example.ArrayTable"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
ArrayTable { _tab: table } ArrayTable { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args ArrayTableArgs<'args>
) -> ::flatbuffers::WIPOffset<ArrayTable<'bldr>> {
let mut builder = ArrayTableBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> ArrayTableT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let a = self.a().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, x.unpack()
args: &'args ArrayTableArgs<'args> });
) -> ::flatbuffers::WIPOffset<ArrayTable<'bldr>> { ArrayTableT {
let mut builder = ArrayTableBuilder::new(_fbb); a,
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> ArrayTableT { #[inline]
let a = self.a().map(|x| { pub fn a(&self) -> Option<&'a ArrayStruct> {
x.unpack() // Safety:
}); // Created from valid Table for this object
ArrayTableT { // which contains a valid value in this slot
a, unsafe { self._tab.get::<ArrayStruct>(ArrayTable::VT_A, None)}
} }
}
#[inline]
pub fn a(&self) -> Option<&'a ArrayStruct> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<ArrayStruct>(ArrayTable::VT_A, None)}
}
} }
impl ::flatbuffers::Verifiable for ArrayTable<'_> { impl ::flatbuffers::Verifiable for ArrayTable<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<ArrayStruct>("a", Self::VT_A, false)? .visit_field::<ArrayStruct>("a", Self::VT_A, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct ArrayTableArgs<'a> { pub struct ArrayTableArgs<'a> {
pub a: Option<&'a ArrayStruct>, pub a: Option<&'a ArrayStruct>,
} }
impl<'a> Default for ArrayTableArgs<'a> { impl<'a> Default for ArrayTableArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
ArrayTableArgs { ArrayTableArgs {
a: None, a: None,
}
} }
}
} }
pub struct ArrayTableBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct ArrayTableBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> ArrayTableBuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> ArrayTableBuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_a(&mut self, a: &ArrayStruct) { pub fn add_a(&mut self, a: &ArrayStruct) {
self.fbb_.push_slot_always::<&ArrayStruct>(ArrayTable::VT_A, a); self.fbb_.push_slot_always::<&ArrayStruct>(ArrayTable::VT_A, a);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> ArrayTableBuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> ArrayTableBuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); ArrayTableBuilder {
ArrayTableBuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<ArrayTable<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<ArrayTable<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for ArrayTable<'_> { impl ::core::fmt::Debug for ArrayTable<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("ArrayTable"); let mut ds = f.debug_struct("ArrayTable");
ds.field("a", &self.a()); ds.field("a", &self.a());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct ArrayTableT { pub struct ArrayTableT {
pub a: Option<ArrayStructT>, pub a: Option<ArrayStructT>,
} }
impl Default for ArrayTableT { impl Default for ArrayTableT {
fn default() -> Self { fn default() -> Self {
Self { Self {
a: None, a: None,
}
} }
}
} }
impl ArrayTableT { impl ArrayTableT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<ArrayTable<'b>> { ) -> ::flatbuffers::WIPOffset<ArrayTable<'b>> {
let a_tmp = self.a.as_ref().map(|x| x.pack()); let a_tmp = self.a.as_ref().map(|x| x.pack());
let a = a_tmp.as_ref(); let a = a_tmp.as_ref();
ArrayTable::create(_fbb, &ArrayTableArgs{ ArrayTable::create(_fbb, &ArrayTableArgs{
a, a,
}) })
} }
} }
#[inline]
/// Verifies that a buffer of bytes contains a `ArrayTable` /// Verifies that a buffer of bytes contains a `ArrayTable`
/// and returns it. /// and returns it.
/// Note that verification is still experimental and may not /// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `root_as_array_table_unchecked`. /// `root_as_array_table_unchecked`.
#[inline]
pub fn root_as_array_table(buf: &[u8]) -> Result<ArrayTable<'_>, ::flatbuffers::InvalidFlatbuffer> { pub fn root_as_array_table(buf: &[u8]) -> Result<ArrayTable<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root::<ArrayTable>(buf) ::flatbuffers::root::<ArrayTable>(buf)
} }
#[inline]
/// Verifies that a buffer of bytes contains a size prefixed /// Verifies that a buffer of bytes contains a size prefixed
/// `ArrayTable` and returns it. /// `ArrayTable` and returns it.
/// Note that verification is still experimental and may not /// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `size_prefixed_root_as_array_table_unchecked`. /// `size_prefixed_root_as_array_table_unchecked`.
#[inline]
pub fn size_prefixed_root_as_array_table(buf: &[u8]) -> Result<ArrayTable<'_>, ::flatbuffers::InvalidFlatbuffer> { pub fn size_prefixed_root_as_array_table(buf: &[u8]) -> Result<ArrayTable<'_>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root::<ArrayTable>(buf) ::flatbuffers::size_prefixed_root::<ArrayTable>(buf)
} }
#[inline]
/// Verifies, with the given options, that a buffer of bytes /// Verifies, with the given options, that a buffer of bytes
/// contains a `ArrayTable` and returns it. /// contains a `ArrayTable` and returns it.
/// Note that verification is still experimental and may not /// Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `root_as_array_table_unchecked`. /// `root_as_array_table_unchecked`.
#[inline]
pub fn root_as_array_table_with_opts<'b, 'o>( pub fn root_as_array_table_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions, opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8], buf: &'b [u8],
) -> Result<ArrayTable<'b>, ::flatbuffers::InvalidFlatbuffer> { ) -> Result<ArrayTable<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::root_with_opts::<ArrayTable<'b>>(opts, buf) ::flatbuffers::root_with_opts::<ArrayTable<'b>>(opts, buf)
} }
#[inline]
/// Verifies, with the given verifier options, that a buffer of /// Verifies, with the given verifier options, that a buffer of
/// bytes contains a size prefixed `ArrayTable` and returns /// bytes contains a size prefixed `ArrayTable` and returns
/// it. Note that verification is still experimental and may not /// it. Note that verification is still experimental and may not
/// catch every error, or be maximally performant. For the /// catch every error, or be maximally performant. For the
/// previous, unchecked, behavior use /// previous, unchecked, behavior use
/// `root_as_array_table_unchecked`. /// `root_as_array_table_unchecked`.
#[inline]
pub fn size_prefixed_root_as_array_table_with_opts<'b, 'o>( pub fn size_prefixed_root_as_array_table_with_opts<'b, 'o>(
opts: &'o ::flatbuffers::VerifierOptions, opts: &'o ::flatbuffers::VerifierOptions,
buf: &'b [u8], buf: &'b [u8],
) -> Result<ArrayTable<'b>, ::flatbuffers::InvalidFlatbuffer> { ) -> Result<ArrayTable<'b>, ::flatbuffers::InvalidFlatbuffer> {
::flatbuffers::size_prefixed_root_with_opts::<ArrayTable<'b>>(opts, buf) ::flatbuffers::size_prefixed_root_with_opts::<ArrayTable<'b>>(opts, buf)
} }
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a ArrayTable and returns it. /// Assumes, without verification, that a buffer of bytes contains a ArrayTable and returns it.
/// # Safety /// # Safety
/// Callers must trust the given bytes do indeed contain a valid `ArrayTable`. /// Callers must trust the given bytes do indeed contain a valid `ArrayTable`.
#[inline]
pub unsafe fn root_as_array_table_unchecked(buf: &[u8]) -> ArrayTable<'_> { pub unsafe fn root_as_array_table_unchecked(buf: &[u8]) -> ArrayTable<'_> {
unsafe { ::flatbuffers::root_unchecked::<ArrayTable>(buf) } unsafe { ::flatbuffers::root_unchecked::<ArrayTable>(buf) }
} }
#[inline]
/// Assumes, without verification, that a buffer of bytes contains a size prefixed ArrayTable and returns it. /// Assumes, without verification, that a buffer of bytes contains a size prefixed ArrayTable and returns it.
/// # Safety /// # Safety
/// Callers must trust the given bytes do indeed contain a valid size prefixed `ArrayTable`. /// Callers must trust the given bytes do indeed contain a valid size prefixed `ArrayTable`.
#[inline]
pub unsafe fn size_prefixed_root_as_array_table_unchecked(buf: &[u8]) -> ArrayTable<'_> { pub unsafe fn size_prefixed_root_as_array_table_unchecked(buf: &[u8]) -> ArrayTable<'_> {
unsafe { ::flatbuffers::size_prefixed_root_unchecked::<ArrayTable>(buf) } unsafe { ::flatbuffers::size_prefixed_root_unchecked::<ArrayTable>(buf) }
} }
pub const ARRAY_TABLE_IDENTIFIER: &str = "ARRT"; pub const ARRAY_TABLE_IDENTIFIER: &str = "ARRT";
#[inline] #[inline]
pub fn array_table_buffer_has_identifier(buf: &[u8]) -> bool { pub fn array_table_buffer_has_identifier(buf: &[u8]) -> bool {
::flatbuffers::buffer_has_identifier(buf, ARRAY_TABLE_IDENTIFIER, false) ::flatbuffers::buffer_has_identifier(buf, ARRAY_TABLE_IDENTIFIER, false)
} }
#[inline] #[inline]
pub fn array_table_size_prefixed_buffer_has_identifier(buf: &[u8]) -> bool { pub fn array_table_size_prefixed_buffer_has_identifier(buf: &[u8]) -> bool {
::flatbuffers::buffer_has_identifier(buf, ARRAY_TABLE_IDENTIFIER, true) ::flatbuffers::buffer_has_identifier(buf, ARRAY_TABLE_IDENTIFIER, true)
} }
pub const ARRAY_TABLE_EXTENSION: &str = "mon"; pub const ARRAY_TABLE_EXTENSION: &str = "mon";
@@ -229,15 +211,11 @@ pub const ARRAY_TABLE_EXTENSION: &str = "mon";
#[inline] #[inline]
pub fn finish_array_table_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>( pub fn finish_array_table_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
root: ::flatbuffers::WIPOffset<ArrayTable<'a>> root: ::flatbuffers::WIPOffset<ArrayTable<'a>>) {
) { fbb.finish(root, Some(ARRAY_TABLE_IDENTIFIER));
fbb.finish(root, Some(ARRAY_TABLE_IDENTIFIER));
} }
#[inline] #[inline]
pub fn finish_size_prefixed_array_table_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>( pub fn finish_size_prefixed_array_table_buffer<'a, 'b, A: ::flatbuffers::Allocator + 'a>(fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, root: ::flatbuffers::WIPOffset<ArrayTable<'a>>) {
fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb.finish_size_prefixed(root, Some(ARRAY_TABLE_IDENTIFIER));
root: ::flatbuffers::WIPOffset<ArrayTable<'a>>
) {
fbb.finish_size_prefixed(root, Some(ARRAY_TABLE_IDENTIFIER));
} }

View File

@@ -1,223 +0,0 @@
// automatically generated by the FlatBuffers compiler, do not modify
// @generated
extern crate alloc;
use super::*;
// struct LargeArrayStruct, aligned to 8
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct LargeArrayStruct(pub [u8; 2496]);
impl Default for LargeArrayStruct {
fn default() -> Self {
Self([0; 2496])
}
}
impl ::core::fmt::Debug for LargeArrayStruct {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("LargeArrayStruct")
.field("d", &self.d())
.field("e", &self.e())
.field("f", &self.f())
.field("g", &self.g())
.field("h", &self.h())
.finish()
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for LargeArrayStruct {}
impl<'a> ::flatbuffers::Follow<'a> for LargeArrayStruct {
type Inner = &'a LargeArrayStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { <&'a LargeArrayStruct>::follow(buf, loc) }
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a LargeArrayStruct {
type Inner = &'a LargeArrayStruct;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { ::flatbuffers::follow_cast_ref::<LargeArrayStruct>(buf, loc) }
}
}
impl<'b> ::flatbuffers::Push for LargeArrayStruct {
type Output = LargeArrayStruct;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const LargeArrayStruct as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(8)
}
}
impl<'a> ::flatbuffers::Verifiable for LargeArrayStruct {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos)
}
}
impl<'a> LargeArrayStruct {
#[allow(clippy::too_many_arguments)]
pub fn new(
d: &[u8; 64],
e: &[f32; 64],
f: &[bool; 64],
g: &[NestedStruct; 64],
h: &[TestEnum; 64],
) -> Self {
let mut s = Self([0; 2496]);
s.set_d(d);
s.set_e(e);
s.set_f(f);
s.set_g(g);
s.set_h(h);
s
}
pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Example.LargeArrayStruct"
}
pub fn d(&'a self) -> ::flatbuffers::Array<'a, u8, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 0) }
}
pub fn set_d(&mut self, items: &[u8; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 0, items) };
}
pub fn e(&'a self) -> ::flatbuffers::Array<'a, f32, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 64) }
}
pub fn set_e(&mut self, items: &[f32; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 64, items) };
}
pub fn f(&'a self) -> ::flatbuffers::Array<'a, bool, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 320) }
}
pub fn set_f(&mut self, items: &[bool; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 320, items) };
}
pub fn g(&'a self) -> ::flatbuffers::Array<'a, NestedStruct, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 384) }
}
pub fn set_g(&mut self, x: &[NestedStruct; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe {
::core::ptr::copy(
x.as_ptr() as *const u8,
self.0.as_mut_ptr().add(384),
2048,
);
}
}
pub fn h(&'a self) -> ::flatbuffers::Array<'a, TestEnum, 64> {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 2432) }
}
pub fn set_h(&mut self, x: &[TestEnum; 64]) {
// Safety:
// Created from a valid Table for this object
// Which contains a valid array in this slot
unsafe {
::core::ptr::copy(
x.as_ptr() as *const u8,
self.0.as_mut_ptr().add(2432),
64,
);
}
}
pub fn unpack(&self) -> LargeArrayStructT {
LargeArrayStructT {
d: self.d().into(),
e: self.e().into(),
f: self.f().into(),
g: { let g = self.g(); ::flatbuffers::array_init(|i| g.get(i).unpack()) },
h: self.h().into(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct LargeArrayStructT {
pub d: [u8; 64],
pub e: [f32; 64],
pub f: [bool; 64],
pub g: [NestedStructT; 64],
pub h: [TestEnum; 64],
}
impl Default for LargeArrayStructT {
fn default() -> Self {
Self {
d: [0; 64],
e: [0.0; 64],
f: [false; 64],
g: ::flatbuffers::array_init(|_| Default::default()),
h: ::flatbuffers::array_init(|_| Default::default()),
}
}
}
impl LargeArrayStructT {
pub fn pack(&self) -> LargeArrayStruct {
LargeArrayStruct::new(
&self.d,
&self.e,
&self.f,
&::flatbuffers::array_init(|i| self.g[i].pack()),
&self.h,
)
}
}

View File

@@ -2,58 +2,48 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
// struct NestedStruct, aligned to 8 // struct NestedStruct, aligned to 8
#[repr(transparent)] #[repr(transparent)]
#[derive(Clone, Copy, PartialEq)] #[derive(Clone, Copy, PartialEq)]
pub struct NestedStruct(pub [u8; 32]); pub struct NestedStruct(pub [u8; 32]);
impl Default for NestedStruct { impl Default for NestedStruct {
fn default() -> Self { fn default() -> Self {
Self([0; 32]) Self([0; 32])
} }
} }
impl ::core::fmt::Debug for NestedStruct { impl ::core::fmt::Debug for NestedStruct {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("NestedStruct") f.debug_struct("NestedStruct")
.field("a", &self.a()) .field("a", &self.a())
.field("b", &self.b()) .field("b", &self.b())
.field("c", &self.c()) .field("c", &self.c())
.field("d", &self.d()) .field("d", &self.d())
.finish() .finish()
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for NestedStruct {} impl ::flatbuffers::SimpleToVerifyInSlice for NestedStruct {}
impl<'a> ::flatbuffers::Follow<'a> for NestedStruct { impl<'a> ::flatbuffers::Follow<'a> for NestedStruct {
type Inner = &'a NestedStruct; type Inner = &'a NestedStruct;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { <&'a NestedStruct>::follow(buf, loc) }
unsafe { <&'a NestedStruct>::follow(buf, loc) } }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for &'a NestedStruct { impl<'a> ::flatbuffers::Follow<'a> for &'a NestedStruct {
type Inner = &'a NestedStruct; type Inner = &'a NestedStruct;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { ::flatbuffers::follow_cast_ref::<NestedStruct>(buf, loc) }
unsafe { ::flatbuffers::follow_cast_ref::<NestedStruct>(buf, loc) } }
}
} }
impl<'b> ::flatbuffers::Push for NestedStruct { impl<'b> ::flatbuffers::Push for NestedStruct {
type Output = NestedStruct; type Output = NestedStruct;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const NestedStruct as *const u8, <Self as ::flatbuffers::Push>::size()) }; let src = unsafe { ::core::slice::from_raw_parts(self as *const NestedStruct as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src); dst.copy_from_slice(src);
} }
#[inline] #[inline]
fn alignment() -> ::flatbuffers::PushAlignment { fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(8) ::flatbuffers::PushAlignment::new(8)
@@ -61,149 +51,139 @@ impl<'b> ::flatbuffers::Push for NestedStruct {
} }
impl<'a> ::flatbuffers::Verifiable for NestedStruct { impl<'a> ::flatbuffers::Verifiable for NestedStruct {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos) v.in_buffer::<Self>(pos)
} }
} }
impl<'a> NestedStruct { impl<'a> NestedStruct {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
a: &[i32; 2], a: &[i32; 2],
b: TestEnum, b: TestEnum,
c: &[TestEnum; 2], c: &[TestEnum; 2],
d: &[i64; 2], d: &[i64; 2],
) -> Self { ) -> Self {
let mut s = Self([0; 32]); let mut s = Self([0; 32]);
s.set_a(a); s.set_a(a);
s.set_b(b); s.set_b(b);
s.set_c(c); s.set_c(c);
s.set_d(d); s.set_d(d);
s s
} }
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.Example.NestedStruct" "MyGame.Example.NestedStruct"
} }
pub fn a(&'a self) -> ::flatbuffers::Array<'a, i32, 2> { pub fn a(&'a self) -> ::flatbuffers::Array<'a, i32, 2> {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
use ::flatbuffers::Follow; use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 0) } unsafe { ::flatbuffers::Array::follow(&self.0, 0) }
} }
pub fn set_a(&mut self, items: &[i32; 2]) { pub fn set_a(&mut self, items: &[i32; 2]) {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 0, items) }; unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 0, items) };
} }
pub fn b(&self) -> TestEnum { pub fn b(&self) -> TestEnum {
let mut mem = ::core::mem::MaybeUninit::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[8..].as_ptr(), self.0[8..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_b(&mut self, x: TestEnum) { pub fn set_b(&mut self, x: TestEnum) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[8..].as_mut_ptr(), self.0[8..].as_mut_ptr(),
::core::mem::size_of::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<TestEnum as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn c(&'a self) -> ::flatbuffers::Array<'a, TestEnum, 2> { pub fn c(&'a self) -> ::flatbuffers::Array<'a, TestEnum, 2> {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
use ::flatbuffers::Follow; use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 9) } unsafe { ::flatbuffers::Array::follow(&self.0, 9) }
} }
pub fn set_c(&mut self, x: &[TestEnum; 2]) { pub fn set_c(&mut self, x: &[TestEnum; 2]) {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
unsafe { unsafe {
::core::ptr::copy( ::core::ptr::copy(
x.as_ptr() as *const u8, x.as_ptr() as *const u8,
self.0.as_mut_ptr().add(9), self.0.as_mut_ptr().add(9),
2, 2,
); );
}
} }
}
pub fn d(&'a self) -> ::flatbuffers::Array<'a, i64, 2> { pub fn d(&'a self) -> ::flatbuffers::Array<'a, i64, 2> {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
use ::flatbuffers::Follow; use ::flatbuffers::Follow;
unsafe { ::flatbuffers::Array::follow(&self.0, 16) } unsafe { ::flatbuffers::Array::follow(&self.0, 16) }
} }
pub fn set_d(&mut self, items: &[i64; 2]) { pub fn set_d(&mut self, items: &[i64; 2]) {
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid array in this slot // Which contains a valid array in this slot
unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 16, items) }; unsafe { ::flatbuffers::emplace_scalar_array(&mut self.0, 16, items) };
} }
pub fn unpack(&self) -> NestedStructT { pub fn unpack(&self) -> NestedStructT {
NestedStructT { NestedStructT {
a: self.a().into(), a: self.a().into(),
b: self.b(), b: self.b(),
c: self.c().into(), c: self.c().into(),
d: self.d().into(), d: self.d().into(),
}
} }
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Default)]
pub struct NestedStructT { pub struct NestedStructT {
pub a: [i32; 2], pub a: [i32; 2],
pub b: TestEnum, pub b: TestEnum,
pub c: [TestEnum; 2], pub c: [TestEnum; 2],
pub d: [i64; 2], pub d: [i64; 2],
} }
impl Default for NestedStructT { impl NestedStructT {
fn default() -> Self { pub fn pack(&self) -> NestedStruct {
Self { NestedStruct::new(
a: [0; 2], &self.a,
b: TestEnum::A, self.b,
c: ::flatbuffers::array_init(|_| Default::default()), &self.c,
d: [0; 2], &self.d,
} )
} }
} }
impl NestedStructT {
pub fn pack(&self) -> NestedStruct {
NestedStruct::new(
&self.a,
self.b,
&self.c,
&self.d,
)
}
}

View File

@@ -2,73 +2,64 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_TEST_ENUM: i8 = 0; pub const ENUM_MIN_TEST_ENUM: i8 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_TEST_ENUM: i8 = 2; pub const ENUM_MAX_TEST_ENUM: i8 = 2;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub const ENUM_VALUES_TEST_ENUM: [TestEnum; 3] = [ pub const ENUM_VALUES_TEST_ENUM: [TestEnum; 3] = [
TestEnum::A, TestEnum::A,
TestEnum::B, TestEnum::B,
TestEnum::C, TestEnum::C,
]; ];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)] #[repr(transparent)]
pub struct TestEnum(pub i8); pub struct TestEnum(pub i8);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
impl TestEnum { impl TestEnum {
pub const A: Self = Self(0); pub const A: Self = Self(0);
pub const B: Self = Self(1); pub const B: Self = Self(1);
pub const C: Self = Self(2); pub const C: Self = Self(2);
pub const ENUM_MIN: i8 = 0; pub const ENUM_MIN: i8 = 0;
pub const ENUM_MAX: i8 = 2; pub const ENUM_MAX: i8 = 2;
pub const ENUM_VALUES: &'static [Self] = &[ pub const ENUM_VALUES: &'static [Self] = &[
Self::A, Self::A,
Self::B, Self::B,
Self::C, Self::C,
]; ];
/// Returns the variant's name or "" if unknown.
/// Returns the variant's name or "" if unknown. pub fn variant_name(self) -> Option<&'static str> {
pub fn variant_name(self) -> Option<&'static str> { match self {
match self { Self::A => Some("A"),
Self::A => Some("A"), Self::B => Some("B"),
Self::B => Some("B"), Self::C => Some("C"),
Self::C => Some("C"), _ => None,
_ => None,
}
} }
}
} }
impl ::core::fmt::Debug for TestEnum { impl ::core::fmt::Debug for TestEnum {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() { if let Some(name) = self.variant_name() {
f.write_str(name) f.write_str(name)
} else { } else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
} }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for TestEnum { impl<'a> ::flatbuffers::Follow<'a> for TestEnum {
type Inner = Self; type Inner = Self;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let b = unsafe { ::flatbuffers::read_scalar_at::<i8>(buf, loc) };
let b = unsafe { ::flatbuffers::read_scalar_at::<i8>(buf, loc) }; Self(b)
Self(b) }
}
} }
impl ::flatbuffers::Push for TestEnum { impl ::flatbuffers::Push for TestEnum {
type Output = TestEnum; type Output = TestEnum;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i8>(dst, self.0) }; unsafe { ::flatbuffers::emplace_scalar::<i8>(dst, self.0) };
@@ -76,28 +67,26 @@ impl ::flatbuffers::Push for TestEnum {
} }
impl ::flatbuffers::EndianScalar for TestEnum { impl ::flatbuffers::EndianScalar for TestEnum {
type Scalar = i8; type Scalar = i8;
#[inline]
#[inline] fn to_little_endian(self) -> i8 {
fn to_little_endian(self) -> i8 { self.0.to_le()
self.0.to_le() }
} #[inline]
#[allow(clippy::wrong_self_convention)]
#[inline] fn from_little_endian(v: i8) -> Self {
#[allow(clippy::wrong_self_convention)] let b = i8::from_le(v);
fn from_little_endian(v: i8) -> Self { Self(b)
let b = i8::from_le(v); }
Self(b)
}
} }
impl<'a> ::flatbuffers::Verifiable for TestEnum { impl<'a> ::flatbuffers::Verifiable for TestEnum {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
i8::run_verifier(v, pos) i8::run_verifier(v, pos)
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for TestEnum {} impl ::flatbuffers::SimpleToVerifyInSlice for TestEnum {}

View File

@@ -3276,10 +3276,10 @@ inline ::flatbuffers::Offset<Monster> Monster::Pack(::flatbuffers::FlatBufferBui
auto _test = _o->test.Pack(_fbb); auto _test = _o->test.Pack(_fbb);
auto _test4 = _o->test4.size() ? _fbb.CreateVectorOfStructs(_o->test4) : 0; auto _test4 = _o->test4.size() ? _fbb.CreateVectorOfStructs(_o->test4) : 0;
auto _testarrayofstring = _o->testarrayofstring.size() ? _fbb.CreateVectorOfStrings(_o->testarrayofstring) : 0; auto _testarrayofstring = _o->testarrayofstring.size() ? _fbb.CreateVectorOfStrings(_o->testarrayofstring) : 0;
auto _testarrayoftables = _o->testarrayoftables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Monster>> (_o->testarrayoftables.size(), [](size_t i, _VectorArgs *__va) { return MyGame::Example::CreateMonster(*__va->__fbb, __va->__o->testarrayoftables[i].get(), __va->__rehasher); }, &_va ) : 0; auto _testarrayoftables = _o->testarrayoftables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Monster>> (_o->testarrayoftables.size(), [](size_t i, _VectorArgs *__va) { return CreateMonster(*__va->__fbb, __va->__o->testarrayoftables[i].get(), __va->__rehasher); }, &_va ) : 0;
auto _enemy = _o->enemy ? MyGame::Example::CreateMonster(_fbb, _o->enemy.get(), _rehasher) : 0; auto _enemy = _o->enemy ? CreateMonster(_fbb, _o->enemy.get(), _rehasher) : 0;
auto _testnestedflatbuffer = _o->testnestedflatbuffer.size() ? _fbb.CreateVector(_o->testnestedflatbuffer) : 0; auto _testnestedflatbuffer = _o->testnestedflatbuffer.size() ? _fbb.CreateVector(_o->testnestedflatbuffer) : 0;
auto _testempty = _o->testempty ? MyGame::Example::CreateStat(_fbb, _o->testempty.get(), _rehasher) : 0; auto _testempty = _o->testempty ? CreateStat(_fbb, _o->testempty.get(), _rehasher) : 0;
auto _testbool = _o->testbool; auto _testbool = _o->testbool;
auto _testhashs32_fnv1 = _o->testhashs32_fnv1; auto _testhashs32_fnv1 = _o->testhashs32_fnv1;
auto _testhashu32_fnv1 = _o->testhashu32_fnv1; auto _testhashu32_fnv1 = _o->testhashu32_fnv1;
@@ -3299,11 +3299,11 @@ inline ::flatbuffers::Offset<Monster> Monster::Pack(::flatbuffers::FlatBufferBui
auto _test5 = _o->test5.size() ? _fbb.CreateVectorOfStructs(_o->test5) : 0; auto _test5 = _o->test5.size() ? _fbb.CreateVectorOfStructs(_o->test5) : 0;
auto _vector_of_longs = _o->vector_of_longs.size() ? _fbb.CreateVector(_o->vector_of_longs) : 0; auto _vector_of_longs = _o->vector_of_longs.size() ? _fbb.CreateVector(_o->vector_of_longs) : 0;
auto _vector_of_doubles = _o->vector_of_doubles.size() ? _fbb.CreateVector(_o->vector_of_doubles) : 0; auto _vector_of_doubles = _o->vector_of_doubles.size() ? _fbb.CreateVector(_o->vector_of_doubles) : 0;
auto _parent_namespace_test = _o->parent_namespace_test ? MyGame::CreateInParentNamespace(_fbb, _o->parent_namespace_test.get(), _rehasher) : 0; auto _parent_namespace_test = _o->parent_namespace_test ? CreateInParentNamespace(_fbb, _o->parent_namespace_test.get(), _rehasher) : 0;
auto _vector_of_referrables = _o->vector_of_referrables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Referrable>> (_o->vector_of_referrables.size(), [](size_t i, _VectorArgs *__va) { return MyGame::Example::CreateReferrable(*__va->__fbb, __va->__o->vector_of_referrables[i].get(), __va->__rehasher); }, &_va ) : 0; auto _vector_of_referrables = _o->vector_of_referrables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Referrable>> (_o->vector_of_referrables.size(), [](size_t i, _VectorArgs *__va) { return CreateReferrable(*__va->__fbb, __va->__o->vector_of_referrables[i].get(), __va->__rehasher); }, &_va ) : 0;
auto _single_weak_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->single_weak_reference)) : 0; auto _single_weak_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->single_weak_reference)) : 0;
auto _vector_of_weak_references = _o->vector_of_weak_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_weak_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_weak_references[i])) : 0; }, &_va ) : 0; auto _vector_of_weak_references = _o->vector_of_weak_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_weak_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_weak_references[i])) : 0; }, &_va ) : 0;
auto _vector_of_strong_referrables = _o->vector_of_strong_referrables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Referrable>> (_o->vector_of_strong_referrables.size(), [](size_t i, _VectorArgs *__va) { return MyGame::Example::CreateReferrable(*__va->__fbb, __va->__o->vector_of_strong_referrables[i].get(), __va->__rehasher); }, &_va ) : 0; auto _vector_of_strong_referrables = _o->vector_of_strong_referrables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Referrable>> (_o->vector_of_strong_referrables.size(), [](size_t i, _VectorArgs *__va) { return CreateReferrable(*__va->__fbb, __va->__o->vector_of_strong_referrables[i].get(), __va->__rehasher); }, &_va ) : 0;
auto _co_owning_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->co_owning_reference)) : 0; auto _co_owning_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->co_owning_reference)) : 0;
auto _vector_of_co_owning_references = _o->vector_of_co_owning_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_co_owning_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_co_owning_references[i].get())) : 0; }, &_va ) : 0; auto _vector_of_co_owning_references = _o->vector_of_co_owning_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_co_owning_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_co_owning_references[i].get())) : 0; }, &_va ) : 0;
auto _non_owning_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->non_owning_reference)) : 0; auto _non_owning_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->non_owning_reference)) : 0;
@@ -3315,7 +3315,7 @@ inline ::flatbuffers::Offset<Monster> Monster::Pack(::flatbuffers::FlatBufferBui
auto _vector_of_enums = _o->vector_of_enums.size() ? _fbb.CreateVector(_o->vector_of_enums) : 0; auto _vector_of_enums = _o->vector_of_enums.size() ? _fbb.CreateVector(_o->vector_of_enums) : 0;
auto _signed_enum = _o->signed_enum; auto _signed_enum = _o->signed_enum;
auto _testrequirednestedflatbuffer = _o->testrequirednestedflatbuffer.size() ? _fbb.CreateVector(_o->testrequirednestedflatbuffer) : 0; auto _testrequirednestedflatbuffer = _o->testrequirednestedflatbuffer.size() ? _fbb.CreateVector(_o->testrequirednestedflatbuffer) : 0;
auto _scalar_key_sorted_tables = _o->scalar_key_sorted_tables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Stat>> (_o->scalar_key_sorted_tables.size(), [](size_t i, _VectorArgs *__va) { return MyGame::Example::CreateStat(*__va->__fbb, __va->__o->scalar_key_sorted_tables[i].get(), __va->__rehasher); }, &_va ) : 0; auto _scalar_key_sorted_tables = _o->scalar_key_sorted_tables.size() ? _fbb.CreateVector<::flatbuffers::Offset<MyGame::Example::Stat>> (_o->scalar_key_sorted_tables.size(), [](size_t i, _VectorArgs *__va) { return CreateStat(*__va->__fbb, __va->__o->scalar_key_sorted_tables[i].get(), __va->__rehasher); }, &_va ) : 0;
auto _native_inline = &_o->native_inline; auto _native_inline = &_o->native_inline;
auto _long_enum_non_enum_default = _o->long_enum_non_enum_default; auto _long_enum_non_enum_default = _o->long_enum_non_enum_default;
auto _long_enum_normal_default = _o->long_enum_normal_default; auto _long_enum_normal_default = _o->long_enum_normal_default;

View File

@@ -0,0 +1,16 @@
native_include "cpp_vec_type_native_type_test_impl.h";
namespace CppVecNativeTypeTest;
struct Vec3 (native_type: "CppVecNativeTypeTest::Native::Vec3") {
x: float;
y: float;
z: float;
}
table Container {
points: [Vec3] (cpp_vec_type: "CppVecNativeTypeTest::CustomVec");
bytes: [ubyte] (cpp_vec_type: "CppVecNativeTypeTest::CustomVec");
}
root_type Container;

View File

@@ -0,0 +1,15 @@
#include "cpp_vec_type_native_type_test_impl.h"
#include "cpp_vec_type_native_type_test_generated.h"
namespace flatbuffers {
CppVecNativeTypeTest::Vec3 Pack(
const CppVecNativeTypeTest::Native::Vec3& obj) {
return CppVecNativeTypeTest::Vec3(obj.x, obj.y, obj.z);
}
const CppVecNativeTypeTest::Native::Vec3 UnPack(
const CppVecNativeTypeTest::Vec3& obj) {
return CppVecNativeTypeTest::Native::Vec3(obj.x(), obj.y(), obj.z());
}
} // namespace flatbuffers

View File

@@ -0,0 +1,34 @@
#ifndef CPP_VEC_TYPE_NATIVE_TYPE_TEST_IMPL_H
#define CPP_VEC_TYPE_NATIVE_TYPE_TEST_IMPL_H
#include <vector>
namespace CppVecNativeTypeTest {
namespace Native {
struct Vec3 {
float x, y, z;
Vec3() : x(0), y(0), z(0) {}
Vec3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
bool operator==(const Vec3& o) const {
return x == o.x && y == o.y && z == o.z;
}
};
} // namespace Native
template <typename T>
struct CustomVec : public std::vector<T> {
using std::vector<T>::vector;
};
struct Vec3; // flatbuffers-generated struct
} // namespace CppVecNativeTypeTest
namespace flatbuffers {
CppVecNativeTypeTest::Vec3 Pack(const CppVecNativeTypeTest::Native::Vec3& obj);
const CppVecNativeTypeTest::Native::Vec3 UnPack(
const CppVecNativeTypeTest::Vec3& obj);
} // namespace flatbuffers
#endif // CPP_VEC_TYPE_NATIVE_TYPE_TEST_IMPL_H

View File

@@ -0,0 +1,17 @@
native_include "cpp_vec_type_test_impl.h";
namespace CppVecTest;
table Item {
id: int;
value: float;
}
table Data {
values: [int] (cpp_vec_type: "CppVecTest::CustomVec");
items: [Item] (cpp_vec_type: "CppVecTest::CustomVec");
strs: [string] (cpp_vec_type: "CppVecTest::CustomVec");
regular: [int];
}
root_type Data;

View File

@@ -0,0 +1,15 @@
#ifndef CPP_VEC_TYPE_TEST_IMPL_H
#define CPP_VEC_TYPE_TEST_IMPL_H
#include <vector>
namespace CppVecTest {
template<typename T>
struct CustomVec : public std::vector<T> {
using std::vector<T>::vector;
};
} // namespace CppVecTest
#endif // CPP_VEC_TYPE_TEST_IMPL_H

View File

@@ -1,18 +0,0 @@
// Test for cross-namespace Pack() code generation (issue #8948).
// Verifies that Create* calls in Pack() are properly namespace-qualified
// when referencing tables from different namespaces.
namespace native;
table TableWithNative {
value: int;
}
namespace foo;
table Consumer {
c1: native.TableWithNative;
c2: [native.TableWithNative];
}
root_type Consumer;

View File

@@ -1,23 +0,0 @@
enum ABC: int { A, B, C }
struct EvenMoreStruct {
g:[int64:2];
}
table EvenMoreDefaults {
str: EvenMoreStruct;
ints: [int] = [];
floats: [float] = [ ];
float_optional: [float];
bytes_optional: [ubyte];
floats_required: [float] (required);
empty_string: string = "";
some_string: string = "some";
zero_string: string = "0";
a_string:string (key);
required_string: string (required);
abcs: [ABC] = [];
bools: [bool] = [];
one_bool: bool = true;
}

View File

@@ -1,6 +1,5 @@
#include "flexbuffers_test.h" #include "flexbuffers_test.h"
#include <memory>
#include <limits> #include <limits>
#include "flatbuffers/flexbuffers.h" #include "flatbuffers/flexbuffers.h"
@@ -14,13 +13,6 @@ namespace tests {
// Shortcuts for the infinity. // Shortcuts for the infinity.
static const auto infinity_d = std::numeric_limits<double>::infinity(); static const auto infinity_d = std::numeric_limits<double>::infinity();
static bool IsAligned(const void* ptr, std::size_t alignment) {
void* p = const_cast<void*>(ptr);
std::size_t space = 2 * alignment;
void* q = std::align(alignment, alignment, p, space);
return q != nullptr && p == ptr && space == 2 * alignment;
}
void FlexBuffersTest() { void FlexBuffersTest() {
flexbuffers::Builder slb(512, flexbuffers::Builder slb(512,
flexbuffers::BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); flexbuffers::BUILDER_FLAG_SHARE_KEYS_AND_STRINGS);
@@ -37,10 +29,7 @@ void FlexBuffersTest() {
slb.IndirectFloat(4.0f); slb.IndirectFloat(4.0f);
auto i_f = slb.LastValue(); auto i_f = slb.LastValue();
uint8_t blob[] = {77}; uint8_t blob[] = {77};
uint32_t aligned_blob[] = {88, 99}; slb.Blob(blob, 1);
slb.Blob(blob, sizeof blob);
slb.AlignedBlob(aligned_blob, sizeof aligned_blob,
flexbuffers::BIT_WIDTH_32);
slb += false; slb += false;
slb.ReuseValue(i_f); slb.ReuseValue(i_f);
}); });
@@ -73,7 +62,7 @@ void FlexBuffersTest() {
auto map = flexbuffers::GetRoot(slb.GetBuffer()).AsMap(); auto map = flexbuffers::GetRoot(slb.GetBuffer()).AsMap();
TEST_EQ(map.size(), 7); TEST_EQ(map.size(), 7);
auto vec = map["vec"].AsVector(); auto vec = map["vec"].AsVector();
TEST_EQ(vec.size(), 7); TEST_EQ(vec.size(), 6);
TEST_EQ(vec[0].AsInt64(), -100); TEST_EQ(vec[0].AsInt64(), -100);
TEST_EQ_STR(vec[1].AsString().c_str(), "Fred"); TEST_EQ_STR(vec[1].AsString().c_str(), "Fred");
TEST_EQ(vec[1].AsInt64(), 0); // Number parsing failed. TEST_EQ(vec[1].AsInt64(), 0); // Number parsing failed.
@@ -91,15 +80,9 @@ void FlexBuffersTest() {
auto blob = vec[3].AsBlob(); auto blob = vec[3].AsBlob();
TEST_EQ(blob.size(), 1); TEST_EQ(blob.size(), 1);
TEST_EQ(blob.data()[0], 77); TEST_EQ(blob.data()[0], 77);
TEST_EQ(vec[4].IsBlob(), true); TEST_EQ(vec[4].IsBool(), true); // Check if type is a bool
auto aligned_blob = vec[4].AsBlob(); TEST_EQ(vec[4].AsBool(), false); // Check if value is false
TEST_EQ(aligned_blob.size(), 8); TEST_EQ(vec[5].AsDouble(), 4.0); // This is shared with vec[2] !
TEST_EQ(reinterpret_cast<const uint32_t*>(aligned_blob.data())[0], 88);
TEST_EQ(reinterpret_cast<const uint32_t*>(aligned_blob.data())[1], 99);
TEST_EQ(IsAligned(aligned_blob.data(), 4), true);
TEST_EQ(vec[5].IsBool(), true); // Check if type is a bool
TEST_EQ(vec[5].AsBool(), false); // Check if value is false
TEST_EQ(vec[6].AsDouble(), 4.0); // This is shared with vec[2] !
auto tvec = map["bar"].AsTypedVector(); auto tvec = map["bar"].AsTypedVector();
TEST_EQ(tvec.size(), 3); TEST_EQ(tvec.size(), 3);
TEST_EQ(tvec[2].AsInt8(), 3); TEST_EQ(tvec[2].AsInt8(), 3);
@@ -124,9 +107,9 @@ void FlexBuffersTest() {
TEST_EQ(vec[2].MutateFloat(2.0f), true); TEST_EQ(vec[2].MutateFloat(2.0f), true);
TEST_EQ(vec[2].AsFloat(), 2.0f); TEST_EQ(vec[2].AsFloat(), 2.0f);
TEST_EQ(vec[2].MutateFloat(3.14159), false); // Double does not fit in float. TEST_EQ(vec[2].MutateFloat(3.14159), false); // Double does not fit in float.
TEST_EQ(vec[5].AsBool(), false); // Is false before change TEST_EQ(vec[4].AsBool(), false); // Is false before change
TEST_EQ(vec[5].MutateBool(true), true); // Can change a bool TEST_EQ(vec[4].MutateBool(true), true); // Can change a bool
TEST_EQ(vec[5].AsBool(), true); // Changed bool is now true TEST_EQ(vec[4].AsBool(), true); // Changed bool is now true
// Parse from JSON: // Parse from JSON:
flatbuffers::Parser parser; flatbuffers::Parser parser;

View File

@@ -1,16 +1,16 @@
// Automatically generated by the Flatbuffers compiler. Do not modify. // Automatically generated by the Flatbuffers compiler. Do not modify.
// @generated // @generated
pub mod my_game { pub mod my_game {
use super::*;
pub mod other_name_space {
use super::*; use super::*;
pub mod other_name_space { mod from_include_generated;
use super::*; pub use self::from_include_generated::*;
mod from_include_generated; mod unused_generated;
pub use self::from_include_generated::*; pub use self::unused_generated::*;
mod unused_generated; mod table_b_generated;
pub use self::unused_generated::*; pub use self::table_b_generated::*;
mod table_b_generated; } // other_name_space
pub use self::table_b_generated::*;
} // other_name_space
} // my_game } // my_game
mod table_a_generated; mod table_a_generated;
pub use self::table_a_generated::*; pub use self::table_a_generated::*;

View File

@@ -2,65 +2,56 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_FROM_INCLUDE: i64 = 0; pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0; pub const ENUM_MAX_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [ pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [
FromInclude::IncludeVal, FromInclude::IncludeVal,
]; ];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)] #[repr(transparent)]
pub struct FromInclude(pub i64); pub struct FromInclude(pub i64);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
impl FromInclude { impl FromInclude {
pub const IncludeVal: Self = Self(0); pub const IncludeVal: Self = Self(0);
pub const ENUM_MIN: i64 = 0; pub const ENUM_MIN: i64 = 0;
pub const ENUM_MAX: i64 = 0; pub const ENUM_MAX: i64 = 0;
pub const ENUM_VALUES: &'static [Self] = &[ pub const ENUM_VALUES: &'static [Self] = &[
Self::IncludeVal, Self::IncludeVal,
]; ];
/// Returns the variant's name or "" if unknown.
/// Returns the variant's name or "" if unknown. pub fn variant_name(self) -> Option<&'static str> {
pub fn variant_name(self) -> Option<&'static str> { match self {
match self { Self::IncludeVal => Some("IncludeVal"),
Self::IncludeVal => Some("IncludeVal"), _ => None,
_ => None,
}
} }
}
} }
impl ::core::fmt::Debug for FromInclude { impl ::core::fmt::Debug for FromInclude {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() { if let Some(name) = self.variant_name() {
f.write_str(name) f.write_str(name)
} else { } else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
} }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for FromInclude { impl<'a> ::flatbuffers::Follow<'a> for FromInclude {
type Inner = Self; type Inner = Self;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) };
let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) }; Self(b)
Self(b) }
}
} }
impl ::flatbuffers::Push for FromInclude { impl ::flatbuffers::Push for FromInclude {
type Output = FromInclude; type Output = FromInclude;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) }; unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) };
@@ -68,28 +59,26 @@ impl ::flatbuffers::Push for FromInclude {
} }
impl ::flatbuffers::EndianScalar for FromInclude { impl ::flatbuffers::EndianScalar for FromInclude {
type Scalar = i64; type Scalar = i64;
#[inline]
#[inline] fn to_little_endian(self) -> i64 {
fn to_little_endian(self) -> i64 { self.0.to_le()
self.0.to_le() }
} #[inline]
#[allow(clippy::wrong_self_convention)]
#[inline] fn from_little_endian(v: i64) -> Self {
#[allow(clippy::wrong_self_convention)] let b = i64::from_le(v);
fn from_little_endian(v: i64) -> Self { Self(b)
let b = i64::from_le(v); }
Self(b)
}
} }
impl<'a> ::flatbuffers::Verifiable for FromInclude { impl<'a> ::flatbuffers::Verifiable for FromInclude {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
i64::run_verifier(v, pos) i64::run_verifier(v, pos)
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {} impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {}

View File

@@ -2,147 +2,136 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum TableBOffset {} pub enum TableBOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct TableB<'a> { pub struct TableB<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> { impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> {
type Inner = TableB<'a>; type Inner = TableB<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> TableB<'a> { impl<'a> TableB<'a> {
pub const VT_A: ::flatbuffers::VOffsetT = 4; pub const VT_A: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.TableB" "MyGame.OtherNameSpace.TableB"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableB { _tab: table } TableB { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableBArgs<'args>
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> {
let mut builder = TableBBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> TableBT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let a = self.a().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::boxed::Box::new(x.unpack())
args: &'args TableBArgs<'args> });
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> { TableBT {
let mut builder = TableBBuilder::new(_fbb); a,
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> TableBT { #[inline]
let a = self.a().map(|x| { pub fn a(&self) -> Option<super::super::TableA<'a>> {
alloc::boxed::Box::new(x.unpack()) // Safety:
}); // Created from valid Table for this object
TableBT { // which contains a valid value in this slot
a, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
} }
}
#[inline]
pub fn a(&self) -> Option<super::super::TableA<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
}
} }
impl ::flatbuffers::Verifiable for TableB<'_> { impl ::flatbuffers::Verifiable for TableB<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)? .visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct TableBArgs<'a> { pub struct TableBArgs<'a> {
pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>, pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>,
} }
impl<'a> Default for TableBArgs<'a> { impl<'a> Default for TableBArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
TableBArgs { TableBArgs {
a: None, a: None,
}
} }
}
} }
pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) { pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); TableBBuilder {
TableBBuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for TableB<'_> { impl ::core::fmt::Debug for TableB<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableB"); let mut ds = f.debug_struct("TableB");
ds.field("a", &self.a()); ds.field("a", &self.a());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct TableBT { pub struct TableBT {
pub a: Option<alloc::boxed::Box<super::super::TableAT>>, pub a: Option<alloc::boxed::Box<super::super::TableAT>>,
} }
impl Default for TableBT { impl Default for TableBT {
fn default() -> Self { fn default() -> Self {
Self { Self {
a: None, a: None,
}
} }
}
} }
impl TableBT { impl TableBT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableB<'b>> { ) -> ::flatbuffers::WIPOffset<TableB<'b>> {
let a = self.a.as_ref().map(|x|{ let a = self.a.as_ref().map(|x|{
x.pack(_fbb) x.pack(_fbb)
}); });
TableB::create(_fbb, &TableBArgs{ TableB::create(_fbb, &TableBArgs{
a, a,
}) })
} }
} }

View File

@@ -2,55 +2,45 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
// struct Unused, aligned to 4 // struct Unused, aligned to 4
#[repr(transparent)] #[repr(transparent)]
#[derive(Clone, Copy, PartialEq)] #[derive(Clone, Copy, PartialEq)]
pub struct Unused(pub [u8; 4]); pub struct Unused(pub [u8; 4]);
impl Default for Unused { impl Default for Unused {
fn default() -> Self { fn default() -> Self {
Self([0; 4]) Self([0; 4])
} }
} }
impl ::core::fmt::Debug for Unused { impl ::core::fmt::Debug for Unused {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("Unused") f.debug_struct("Unused")
.field("a", &self.a()) .field("a", &self.a())
.finish() .finish()
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for Unused {} impl ::flatbuffers::SimpleToVerifyInSlice for Unused {}
impl<'a> ::flatbuffers::Follow<'a> for Unused { impl<'a> ::flatbuffers::Follow<'a> for Unused {
type Inner = &'a Unused; type Inner = &'a Unused;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { <&'a Unused>::follow(buf, loc) }
unsafe { <&'a Unused>::follow(buf, loc) } }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for &'a Unused { impl<'a> ::flatbuffers::Follow<'a> for &'a Unused {
type Inner = &'a Unused; type Inner = &'a Unused;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) }
unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) } }
}
} }
impl<'b> ::flatbuffers::Push for Unused { impl<'b> ::flatbuffers::Push for Unused {
type Output = Unused; type Output = Unused;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) }; let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src); dst.copy_from_slice(src);
} }
#[inline] #[inline]
fn alignment() -> ::flatbuffers::PushAlignment { fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4) ::flatbuffers::PushAlignment::new(4)
@@ -58,80 +48,73 @@ impl<'b> ::flatbuffers::Push for Unused {
} }
impl<'a> ::flatbuffers::Verifiable for Unused { impl<'a> ::flatbuffers::Verifiable for Unused {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos) v.in_buffer::<Self>(pos)
} }
} }
impl<'a> Unused { impl<'a> Unused {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
a: i32, a: i32,
) -> Self { ) -> Self {
let mut s = Self([0; 4]); let mut s = Self([0; 4]);
s.set_a(a); s.set_a(a);
s s
} }
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.Unused" "MyGame.OtherNameSpace.Unused"
} }
pub fn a(&self) -> i32 { pub fn a(&self) -> i32 {
let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(), self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_a(&mut self, x: i32) { pub fn set_a(&mut self, x: i32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(), self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn unpack(&self) -> UnusedT { pub fn unpack(&self) -> UnusedT {
UnusedT { UnusedT {
a: self.a(), a: self.a(),
}
} }
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Default)]
pub struct UnusedT { pub struct UnusedT {
pub a: i32, pub a: i32,
} }
impl Default for UnusedT { impl UnusedT {
fn default() -> Self { pub fn pack(&self) -> Unused {
Self { Unused::new(
a: 0, self.a,
} )
} }
} }
impl UnusedT {
pub fn pack(&self) -> Unused {
Unused::new(
self.a,
)
}
}

View File

@@ -2,147 +2,136 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum TableAOffset {} pub enum TableAOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct TableA<'a> { pub struct TableA<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> { impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> {
type Inner = TableA<'a>; type Inner = TableA<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> TableA<'a> { impl<'a> TableA<'a> {
pub const VT_B: ::flatbuffers::VOffsetT = 4; pub const VT_B: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"TableA" "TableA"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableA { _tab: table } TableA { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableAArgs<'args>
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> {
let mut builder = TableABuilder::new(_fbb);
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> TableAT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let b = self.b().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::boxed::Box::new(x.unpack())
args: &'args TableAArgs<'args> });
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> { TableAT {
let mut builder = TableABuilder::new(_fbb); b,
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> TableAT { #[inline]
let b = self.b().map(|x| { pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
alloc::boxed::Box::new(x.unpack()) // Safety:
}); // Created from valid Table for this object
TableAT { // which contains a valid value in this slot
b, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
} }
}
#[inline]
pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
}
} }
impl ::flatbuffers::Verifiable for TableA<'_> { impl ::flatbuffers::Verifiable for TableA<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)? .visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct TableAArgs<'a> { pub struct TableAArgs<'a> {
pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>, pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>,
} }
impl<'a> Default for TableAArgs<'a> { impl<'a> Default for TableAArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
TableAArgs { TableAArgs {
b: None, b: None,
}
} }
}
} }
pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) { pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); TableABuilder {
TableABuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for TableA<'_> { impl ::core::fmt::Debug for TableA<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableA"); let mut ds = f.debug_struct("TableA");
ds.field("b", &self.b()); ds.field("b", &self.b());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct TableAT { pub struct TableAT {
pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>, pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>,
} }
impl Default for TableAT { impl Default for TableAT {
fn default() -> Self { fn default() -> Self {
Self { Self {
b: None, b: None,
}
} }
}
} }
impl TableAT { impl TableAT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableA<'b>> { ) -> ::flatbuffers::WIPOffset<TableA<'b>> {
let b = self.b.as_ref().map(|x|{ let b = self.b.as_ref().map(|x|{
x.pack(_fbb) x.pack(_fbb)
}); });
TableA::create(_fbb, &TableAArgs{ TableA::create(_fbb, &TableAArgs{
b, b,
}) })
} }
} }

View File

@@ -1,525 +1,479 @@
// automatically generated by the FlatBuffers compiler, do not modify // automatically generated by the FlatBuffers compiler, do not modify
// @generated // @generated
extern crate alloc; extern crate alloc;
pub enum TableAOffset {} pub enum TableAOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct TableA<'a> { pub struct TableA<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> { impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> {
type Inner = TableA<'a>; type Inner = TableA<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> TableA<'a> { impl<'a> TableA<'a> {
pub const VT_B: ::flatbuffers::VOffsetT = 4; pub const VT_B: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"TableA" "TableA"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableA { _tab: table } TableA { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableAArgs<'args>
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> {
let mut builder = TableABuilder::new(_fbb);
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> TableAT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let b = self.b().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::boxed::Box::new(x.unpack())
args: &'args TableAArgs<'args> });
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> { TableAT {
let mut builder = TableABuilder::new(_fbb); b,
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> TableAT { #[inline]
let b = self.b().map(|x| { pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
alloc::boxed::Box::new(x.unpack()) // Safety:
}); // Created from valid Table for this object
TableAT { // which contains a valid value in this slot
b, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
} }
}
#[inline]
pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
}
} }
impl ::flatbuffers::Verifiable for TableA<'_> { impl ::flatbuffers::Verifiable for TableA<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)? .visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct TableAArgs<'a> { pub struct TableAArgs<'a> {
pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>, pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>,
} }
impl<'a> Default for TableAArgs<'a> { impl<'a> Default for TableAArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
TableAArgs { TableAArgs {
b: None, b: None,
}
} }
}
} }
pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) { pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); TableABuilder {
TableABuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for TableA<'_> { impl ::core::fmt::Debug for TableA<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableA"); let mut ds = f.debug_struct("TableA");
ds.field("b", &self.b()); ds.field("b", &self.b());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct TableAT { pub struct TableAT {
pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>, pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>,
} }
impl Default for TableAT { impl Default for TableAT {
fn default() -> Self { fn default() -> Self {
Self { Self {
b: None, b: None,
}
} }
}
} }
impl TableAT { impl TableAT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableA<'b>> { ) -> ::flatbuffers::WIPOffset<TableA<'b>> {
let b = self.b.as_ref().map(|x|{ let b = self.b.as_ref().map(|x|{
x.pack(_fbb) x.pack(_fbb)
}); });
TableA::create(_fbb, &TableAArgs{ TableA::create(_fbb, &TableAArgs{
b, b,
}) })
} }
} }
#[allow(unused_imports, dead_code)] #[allow(unused_imports, dead_code)]
pub mod my_game { pub mod my_game {
extern crate alloc;
#[allow(unused_imports, dead_code)] extern crate alloc;
pub mod other_name_space { #[allow(unused_imports, dead_code)]
extern crate alloc; pub mod other_name_space {
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] extern crate alloc;
pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0; pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)]
pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [
FromInclude::IncludeVal,
];
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[allow(non_camel_case_types)] #[repr(transparent)]
pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [ pub struct FromInclude(pub i64);
FromInclude::IncludeVal, #[allow(non_upper_case_globals)]
]; impl FromInclude {
pub const IncludeVal: Self = Self(0);
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub const ENUM_MIN: i64 = 0;
#[repr(transparent)] pub const ENUM_MAX: i64 = 0;
pub struct FromInclude(pub i64); pub const ENUM_VALUES: &'static [Self] = &[
Self::IncludeVal,
];
/// Returns the variant's name or "" if unknown.
pub fn variant_name(self) -> Option<&'static str> {
match self {
Self::IncludeVal => Some("IncludeVal"),
_ => None,
}
}
}
impl ::core::fmt::Debug for FromInclude {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() {
f.write_str(name)
} else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
}
}
impl<'a> ::flatbuffers::Follow<'a> for FromInclude {
type Inner = Self;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) };
Self(b)
}
}
#[allow(non_upper_case_globals)] impl ::flatbuffers::Push for FromInclude {
impl FromInclude { type Output = FromInclude;
pub const IncludeVal: Self = Self(0); #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) };
}
}
pub const ENUM_MIN: i64 = 0; impl ::flatbuffers::EndianScalar for FromInclude {
pub const ENUM_MAX: i64 = 0; type Scalar = i64;
pub const ENUM_VALUES: &'static [Self] = &[ #[inline]
Self::IncludeVal, fn to_little_endian(self) -> i64 {
]; self.0.to_le()
}
#[inline]
#[allow(clippy::wrong_self_convention)]
fn from_little_endian(v: i64) -> Self {
let b = i64::from_le(v);
Self(b)
}
}
/// Returns the variant's name or "" if unknown. impl<'a> ::flatbuffers::Verifiable for FromInclude {
pub fn variant_name(self) -> Option<&'static str> { #[inline]
match self { fn run_verifier(
Self::IncludeVal => Some("IncludeVal"), v: &mut ::flatbuffers::Verifier, pos: usize
_ => None, ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
} i64::run_verifier(v, pos)
} }
} }
impl ::core::fmt::Debug for FromInclude { impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {}
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { // struct Unused, aligned to 4
if let Some(name) = self.variant_name() { #[repr(transparent)]
f.write_str(name) #[derive(Clone, Copy, PartialEq)]
} else { pub struct Unused(pub [u8; 4]);
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) impl Default for Unused {
} fn default() -> Self {
} Self([0; 4])
} }
}
impl ::core::fmt::Debug for Unused {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("Unused")
.field("a", &self.a())
.finish()
}
}
impl<'a> ::flatbuffers::Follow<'a> for FromInclude { impl ::flatbuffers::SimpleToVerifyInSlice for Unused {}
type Inner = Self; impl<'a> ::flatbuffers::Follow<'a> for Unused {
type Inner = &'a Unused;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { <&'a Unused>::follow(buf, loc) }
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a Unused {
type Inner = &'a Unused;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) }
}
}
impl<'b> ::flatbuffers::Push for Unused {
type Output = Unused;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4)
}
}
#[inline] impl<'a> ::flatbuffers::Verifiable for Unused {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { #[inline]
let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) }; fn run_verifier(
Self(b) v: &mut ::flatbuffers::Verifier, pos: usize
} ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
} v.in_buffer::<Self>(pos)
}
}
impl ::flatbuffers::Push for FromInclude { impl<'a> Unused {
type Output = FromInclude; #[allow(clippy::too_many_arguments)]
pub fn new(
a: i32,
) -> Self {
let mut s = Self([0; 4]);
s.set_a(a);
s
}
#[inline] pub const fn get_fully_qualified_name() -> &'static str {
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { "MyGame.OtherNameSpace.Unused"
unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) }; }
}
}
impl ::flatbuffers::EndianScalar for FromInclude { pub fn a(&self) -> i32 {
type Scalar = i64; let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
#[inline] pub fn set_a(&mut self, x: i32) {
fn to_little_endian(self) -> i64 { let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
self.0.to_le() // Safety:
} // Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
#[inline] pub fn unpack(&self) -> UnusedT {
#[allow(clippy::wrong_self_convention)] UnusedT {
fn from_little_endian(v: i64) -> Self { a: self.a(),
let b = i64::from_le(v); }
Self(b) }
} }
}
impl<'a> ::flatbuffers::Verifiable for FromInclude { #[derive(Debug, Clone, PartialEq, Default)]
#[inline] pub struct UnusedT {
fn run_verifier( pub a: i32,
v: &mut ::flatbuffers::Verifier, pos: usize }
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { impl UnusedT {
i64::run_verifier(v, pos) pub fn pack(&self) -> Unused {
} Unused::new(
} self.a,
)
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {} pub enum TableBOffset {}
#[derive(Copy, Clone, PartialEq)]
// struct Unused, aligned to 4 pub struct TableB<'a> {
#[repr(transparent)] pub _tab: ::flatbuffers::Table<'a>,
#[derive(Clone, Copy, PartialEq)] }
pub struct Unused(pub [u8; 4]);
impl Default for Unused { impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> {
fn default() -> Self { type Inner = TableB<'a>;
Self([0; 4]) #[inline]
} unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
} Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl ::core::fmt::Debug for Unused { impl<'a> TableB<'a> {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { pub const VT_A: ::flatbuffers::VOffsetT = 4;
f.debug_struct("Unused")
.field("a", &self.a())
.finish()
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for Unused {} pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.TableB"
}
impl<'a> ::flatbuffers::Follow<'a> for Unused { #[inline]
type Inner = &'a Unused; pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableB { _tab: table }
}
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableBArgs<'args>
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> {
let mut builder = TableBBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
#[inline] pub fn unpack(&self) -> TableBT {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let a = self.a().map(|x| {
unsafe { <&'a Unused>::follow(buf, loc) } alloc::boxed::Box::new(x.unpack())
} });
} TableBT {
a,
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a Unused { #[inline]
type Inner = &'a Unused; pub fn a(&self) -> Option<super::super::TableA<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
}
}
#[inline] impl ::flatbuffers::Verifiable for TableB<'_> {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { #[inline]
unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) } fn run_verifier(
} v: &mut ::flatbuffers::Verifier, pos: usize
} ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)?
.finish();
Ok(())
}
}
pub struct TableBArgs<'a> {
pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>,
}
impl<'a> Default for TableBArgs<'a> {
#[inline]
fn default() -> Self {
TableBArgs {
a: None,
}
}
}
impl<'b> ::flatbuffers::Push for Unused { pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
type Output = Unused; fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> {
#[inline]
pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> {
let start = _fbb.start_table();
TableBBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
#[inline] impl ::core::fmt::Debug for TableB<'_> {
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) }; let mut ds = f.debug_struct("TableB");
dst.copy_from_slice(src); ds.field("a", &self.a());
} ds.finish()
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq)]
pub struct TableBT {
pub a: Option<alloc::boxed::Box<super::super::TableAT>>,
}
impl Default for TableBT {
fn default() -> Self {
Self {
a: None,
}
}
}
impl TableBT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableB<'b>> {
let a = self.a.as_ref().map(|x|{
x.pack(_fbb)
});
TableB::create(_fbb, &TableBArgs{
a,
})
}
}
} // pub mod OtherNameSpace
} // pub mod MyGame
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4)
}
}
impl<'a> ::flatbuffers::Verifiable for Unused {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos)
}
}
impl<'a> Unused {
#[allow(clippy::too_many_arguments)]
pub fn new(
a: i32,
) -> Self {
let mut s = Self([0; 4]);
s.set_a(a);
s
}
pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.Unused"
}
pub fn a(&self) -> i32 {
let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_a(&mut self, x: i32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
pub fn unpack(&self) -> UnusedT {
UnusedT {
a: self.a(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct UnusedT {
pub a: i32,
}
impl Default for UnusedT {
fn default() -> Self {
Self {
a: 0,
}
}
}
impl UnusedT {
pub fn pack(&self) -> Unused {
Unused::new(
self.a,
)
}
}
pub enum TableBOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct TableB<'a> {
pub _tab: ::flatbuffers::Table<'a>,
}
impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> {
type Inner = TableB<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl<'a> TableB<'a> {
pub const VT_A: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.TableB"
}
#[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableB { _tab: table }
}
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableBArgs<'args>
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> {
let mut builder = TableBBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
pub fn unpack(&self) -> TableBT {
let a = self.a().map(|x| {
alloc::boxed::Box::new(x.unpack())
});
TableBT {
a,
}
}
#[inline]
pub fn a(&self) -> Option<super::super::TableA<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
}
}
impl ::flatbuffers::Verifiable for TableB<'_> {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)?
.finish();
Ok(())
}
}
pub struct TableBArgs<'a> {
pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>,
}
impl<'a> Default for TableBArgs<'a> {
#[inline]
fn default() -> Self {
TableBArgs {
a: None,
}
}
}
pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> {
#[inline]
pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> {
let start = _fbb.start_table();
TableBBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
impl ::core::fmt::Debug for TableB<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableB");
ds.field("a", &self.a());
ds.finish()
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq)]
pub struct TableBT {
pub a: Option<alloc::boxed::Box<super::super::TableAT>>,
}
impl Default for TableBT {
fn default() -> Self {
Self {
a: None,
}
}
}
impl TableBT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableB<'b>> {
let a = self.a.as_ref().map(|x|{
x.pack(_fbb)
});
TableB::create(_fbb, &TableBArgs{
a,
})
}
}
} // pub mod OtherNameSpace
} // pub mod MyGame

View File

@@ -1,16 +1,16 @@
// Automatically generated by the Flatbuffers compiler. Do not modify. // Automatically generated by the Flatbuffers compiler. Do not modify.
// @generated // @generated
pub mod my_game { pub mod my_game {
use super::*;
pub mod other_name_space {
use super::*; use super::*;
pub mod other_name_space { mod from_include_generated;
use super::*; pub use self::from_include_generated::*;
mod from_include_generated; mod unused_generated;
pub use self::from_include_generated::*; pub use self::unused_generated::*;
mod unused_generated; mod table_b_generated;
pub use self::unused_generated::*; pub use self::table_b_generated::*;
mod table_b_generated; } // other_name_space
pub use self::table_b_generated::*;
} // other_name_space
} // my_game } // my_game
mod table_a_generated; mod table_a_generated;
pub use self::table_a_generated::*; pub use self::table_a_generated::*;

View File

@@ -2,65 +2,56 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_FROM_INCLUDE: i64 = 0; pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0; pub const ENUM_MAX_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [ pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [
FromInclude::IncludeVal, FromInclude::IncludeVal,
]; ];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)] #[repr(transparent)]
pub struct FromInclude(pub i64); pub struct FromInclude(pub i64);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
impl FromInclude { impl FromInclude {
pub const IncludeVal: Self = Self(0); pub const IncludeVal: Self = Self(0);
pub const ENUM_MIN: i64 = 0; pub const ENUM_MIN: i64 = 0;
pub const ENUM_MAX: i64 = 0; pub const ENUM_MAX: i64 = 0;
pub const ENUM_VALUES: &'static [Self] = &[ pub const ENUM_VALUES: &'static [Self] = &[
Self::IncludeVal, Self::IncludeVal,
]; ];
/// Returns the variant's name or "" if unknown.
/// Returns the variant's name or "" if unknown. pub fn variant_name(self) -> Option<&'static str> {
pub fn variant_name(self) -> Option<&'static str> { match self {
match self { Self::IncludeVal => Some("IncludeVal"),
Self::IncludeVal => Some("IncludeVal"), _ => None,
_ => None,
}
} }
}
} }
impl ::core::fmt::Debug for FromInclude { impl ::core::fmt::Debug for FromInclude {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() { if let Some(name) = self.variant_name() {
f.write_str(name) f.write_str(name)
} else { } else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
} }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for FromInclude { impl<'a> ::flatbuffers::Follow<'a> for FromInclude {
type Inner = Self; type Inner = Self;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) };
let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) }; Self(b)
Self(b) }
}
} }
impl ::flatbuffers::Push for FromInclude { impl ::flatbuffers::Push for FromInclude {
type Output = FromInclude; type Output = FromInclude;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) }; unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) };
@@ -68,28 +59,26 @@ impl ::flatbuffers::Push for FromInclude {
} }
impl ::flatbuffers::EndianScalar for FromInclude { impl ::flatbuffers::EndianScalar for FromInclude {
type Scalar = i64; type Scalar = i64;
#[inline]
#[inline] fn to_little_endian(self) -> i64 {
fn to_little_endian(self) -> i64 { self.0.to_le()
self.0.to_le() }
} #[inline]
#[allow(clippy::wrong_self_convention)]
#[inline] fn from_little_endian(v: i64) -> Self {
#[allow(clippy::wrong_self_convention)] let b = i64::from_le(v);
fn from_little_endian(v: i64) -> Self { Self(b)
let b = i64::from_le(v); }
Self(b)
}
} }
impl<'a> ::flatbuffers::Verifiable for FromInclude { impl<'a> ::flatbuffers::Verifiable for FromInclude {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
i64::run_verifier(v, pos) i64::run_verifier(v, pos)
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {} impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {}

View File

@@ -2,147 +2,136 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum TableBOffset {} pub enum TableBOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct TableB<'a> { pub struct TableB<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> { impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> {
type Inner = TableB<'a>; type Inner = TableB<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> TableB<'a> { impl<'a> TableB<'a> {
pub const VT_A: ::flatbuffers::VOffsetT = 4; pub const VT_A: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.TableB" "MyGame.OtherNameSpace.TableB"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableB { _tab: table } TableB { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableBArgs<'args>
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> {
let mut builder = TableBBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> TableBT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let a = self.a().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::boxed::Box::new(x.unpack())
args: &'args TableBArgs<'args> });
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> { TableBT {
let mut builder = TableBBuilder::new(_fbb); a,
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> TableBT { #[inline]
let a = self.a().map(|x| { pub fn a(&self) -> Option<super::super::TableA<'a>> {
alloc::boxed::Box::new(x.unpack()) // Safety:
}); // Created from valid Table for this object
TableBT { // which contains a valid value in this slot
a, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
} }
}
#[inline]
pub fn a(&self) -> Option<super::super::TableA<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
}
} }
impl ::flatbuffers::Verifiable for TableB<'_> { impl ::flatbuffers::Verifiable for TableB<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)? .visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct TableBArgs<'a> { pub struct TableBArgs<'a> {
pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>, pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>,
} }
impl<'a> Default for TableBArgs<'a> { impl<'a> Default for TableBArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
TableBArgs { TableBArgs {
a: None, a: None,
}
} }
}
} }
pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) { pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); TableBBuilder {
TableBBuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for TableB<'_> { impl ::core::fmt::Debug for TableB<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableB"); let mut ds = f.debug_struct("TableB");
ds.field("a", &self.a()); ds.field("a", &self.a());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct TableBT { pub struct TableBT {
pub a: Option<alloc::boxed::Box<super::super::TableAT>>, pub a: Option<alloc::boxed::Box<super::super::TableAT>>,
} }
impl Default for TableBT { impl Default for TableBT {
fn default() -> Self { fn default() -> Self {
Self { Self {
a: None, a: None,
}
} }
}
} }
impl TableBT { impl TableBT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableB<'b>> { ) -> ::flatbuffers::WIPOffset<TableB<'b>> {
let a = self.a.as_ref().map(|x|{ let a = self.a.as_ref().map(|x|{
x.pack(_fbb) x.pack(_fbb)
}); });
TableB::create(_fbb, &TableBArgs{ TableB::create(_fbb, &TableBArgs{
a, a,
}) })
} }
} }

View File

@@ -2,55 +2,45 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
// struct Unused, aligned to 4 // struct Unused, aligned to 4
#[repr(transparent)] #[repr(transparent)]
#[derive(Clone, Copy, PartialEq)] #[derive(Clone, Copy, PartialEq)]
pub struct Unused(pub [u8; 4]); pub struct Unused(pub [u8; 4]);
impl Default for Unused { impl Default for Unused {
fn default() -> Self { fn default() -> Self {
Self([0; 4]) Self([0; 4])
} }
} }
impl ::core::fmt::Debug for Unused { impl ::core::fmt::Debug for Unused {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("Unused") f.debug_struct("Unused")
.field("a", &self.a()) .field("a", &self.a())
.finish() .finish()
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for Unused {} impl ::flatbuffers::SimpleToVerifyInSlice for Unused {}
impl<'a> ::flatbuffers::Follow<'a> for Unused { impl<'a> ::flatbuffers::Follow<'a> for Unused {
type Inner = &'a Unused; type Inner = &'a Unused;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { <&'a Unused>::follow(buf, loc) }
unsafe { <&'a Unused>::follow(buf, loc) } }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for &'a Unused { impl<'a> ::flatbuffers::Follow<'a> for &'a Unused {
type Inner = &'a Unused; type Inner = &'a Unused;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) }
unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) } }
}
} }
impl<'b> ::flatbuffers::Push for Unused { impl<'b> ::flatbuffers::Push for Unused {
type Output = Unused; type Output = Unused;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) }; let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src); dst.copy_from_slice(src);
} }
#[inline] #[inline]
fn alignment() -> ::flatbuffers::PushAlignment { fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4) ::flatbuffers::PushAlignment::new(4)
@@ -58,80 +48,73 @@ impl<'b> ::flatbuffers::Push for Unused {
} }
impl<'a> ::flatbuffers::Verifiable for Unused { impl<'a> ::flatbuffers::Verifiable for Unused {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos) v.in_buffer::<Self>(pos)
} }
} }
impl<'a> Unused { impl<'a> Unused {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
pub fn new( pub fn new(
a: i32, a: i32,
) -> Self { ) -> Self {
let mut s = Self([0; 4]); let mut s = Self([0; 4]);
s.set_a(a); s.set_a(a);
s s
} }
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.Unused" "MyGame.OtherNameSpace.Unused"
} }
pub fn a(&self) -> i32 { pub fn a(&self) -> i32 {
let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit(); let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe { ::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(), self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8, mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
mem.assume_init() mem.assume_init()
}) })
} }
pub fn set_a(&mut self, x: i32) { pub fn set_a(&mut self, x: i32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x); let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety: // Safety:
// Created from a valid Table for this object // Created from a valid Table for this object
// Which contains a valid value in this slot // Which contains a valid value in this slot
unsafe { unsafe {
::core::ptr::copy_nonoverlapping( ::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8, &x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(), self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(), ::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
); );
}
} }
}
pub fn unpack(&self) -> UnusedT { pub fn unpack(&self) -> UnusedT {
UnusedT { UnusedT {
a: self.a(), a: self.a(),
}
} }
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Default)]
pub struct UnusedT { pub struct UnusedT {
pub a: i32, pub a: i32,
} }
impl Default for UnusedT { impl UnusedT {
fn default() -> Self { pub fn pack(&self) -> Unused {
Self { Unused::new(
a: 0, self.a,
} )
} }
} }
impl UnusedT {
pub fn pack(&self) -> Unused {
Unused::new(
self.a,
)
}
}

View File

@@ -2,147 +2,136 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
pub enum TableAOffset {} pub enum TableAOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct TableA<'a> { pub struct TableA<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> { impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> {
type Inner = TableA<'a>; type Inner = TableA<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> TableA<'a> { impl<'a> TableA<'a> {
pub const VT_B: ::flatbuffers::VOffsetT = 4; pub const VT_B: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"TableA" "TableA"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableA { _tab: table } TableA { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableAArgs<'args>
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> {
let mut builder = TableABuilder::new(_fbb);
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> TableAT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let b = self.b().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::boxed::Box::new(x.unpack())
args: &'args TableAArgs<'args> });
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> { TableAT {
let mut builder = TableABuilder::new(_fbb); b,
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> TableAT { #[inline]
let b = self.b().map(|x| { pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
alloc::boxed::Box::new(x.unpack()) // Safety:
}); // Created from valid Table for this object
TableAT { // which contains a valid value in this slot
b, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
} }
}
#[inline]
pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
}
} }
impl ::flatbuffers::Verifiable for TableA<'_> { impl ::flatbuffers::Verifiable for TableA<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)? .visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct TableAArgs<'a> { pub struct TableAArgs<'a> {
pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>, pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>,
} }
impl<'a> Default for TableAArgs<'a> { impl<'a> Default for TableAArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
TableAArgs { TableAArgs {
b: None, b: None,
}
} }
}
} }
pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) { pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); TableABuilder {
TableABuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for TableA<'_> { impl ::core::fmt::Debug for TableA<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableA"); let mut ds = f.debug_struct("TableA");
ds.field("b", &self.b()); ds.field("b", &self.b());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct TableAT { pub struct TableAT {
pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>, pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>,
} }
impl Default for TableAT { impl Default for TableAT {
fn default() -> Self { fn default() -> Self {
Self { Self {
b: None, b: None,
}
} }
}
} }
impl TableAT { impl TableAT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableA<'b>> { ) -> ::flatbuffers::WIPOffset<TableA<'b>> {
let b = self.b.as_ref().map(|x|{ let b = self.b.as_ref().map(|x|{
x.pack(_fbb) x.pack(_fbb)
}); });
TableA::create(_fbb, &TableAArgs{ TableA::create(_fbb, &TableAArgs{
b, b,
}) })
} }
} }

View File

@@ -1,525 +1,479 @@
// automatically generated by the FlatBuffers compiler, do not modify // automatically generated by the FlatBuffers compiler, do not modify
// @generated // @generated
extern crate alloc; extern crate alloc;
pub enum TableAOffset {} pub enum TableAOffset {}
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
pub struct TableA<'a> { pub struct TableA<'a> {
pub _tab: ::flatbuffers::Table<'a>, pub _tab: ::flatbuffers::Table<'a>,
} }
impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> { impl<'a> ::flatbuffers::Follow<'a> for TableA<'a> {
type Inner = TableA<'a>; type Inner = TableA<'a>;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } } }
}
} }
impl<'a> TableA<'a> { impl<'a> TableA<'a> {
pub const VT_B: ::flatbuffers::VOffsetT = 4; pub const VT_B: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str { pub const fn get_fully_qualified_name() -> &'static str {
"TableA" "TableA"
} }
#[inline] #[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self { pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableA { _tab: table } TableA { _tab: table }
} }
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableAArgs<'args>
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> {
let mut builder = TableABuilder::new(_fbb);
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
}
#[allow(unused_mut)] pub fn unpack(&self) -> TableAT {
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>( let b = self.b().map(|x| {
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>, alloc::boxed::Box::new(x.unpack())
args: &'args TableAArgs<'args> });
) -> ::flatbuffers::WIPOffset<TableA<'bldr>> { TableAT {
let mut builder = TableABuilder::new(_fbb); b,
if let Some(x) = args.b { builder.add_b(x); }
builder.finish()
} }
}
pub fn unpack(&self) -> TableAT { #[inline]
let b = self.b().map(|x| { pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
alloc::boxed::Box::new(x.unpack()) // Safety:
}); // Created from valid Table for this object
TableAT { // which contains a valid value in this slot
b, unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
} }
}
#[inline]
pub fn b(&self) -> Option<my_game::other_name_space::TableB<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>(TableA::VT_B, None)}
}
} }
impl ::flatbuffers::Verifiable for TableA<'_> { impl ::flatbuffers::Verifiable for TableA<'_> {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)? v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)? .visit_field::<::flatbuffers::ForwardsUOffset<my_game::other_name_space::TableB>>("b", Self::VT_B, false)?
.finish(); .finish();
Ok(()) Ok(())
} }
} }
pub struct TableAArgs<'a> { pub struct TableAArgs<'a> {
pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>, pub b: Option<::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'a>>>,
} }
impl<'a> Default for TableAArgs<'a> { impl<'a> Default for TableAArgs<'a> {
#[inline] #[inline]
fn default() -> Self { fn default() -> Self {
TableAArgs { TableAArgs {
b: None, b: None,
}
} }
}
} }
pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> { pub struct TableABuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>, fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>, start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
} }
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> { impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableABuilder<'a, 'b, A> {
#[inline] #[inline]
pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) { pub fn add_b(&mut self, b: ::flatbuffers::WIPOffset<my_game::other_name_space::TableB<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b); self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<my_game::other_name_space::TableB>>(TableA::VT_B, b);
} }
#[inline]
#[inline] pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> {
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableABuilder<'a, 'b, A> { let start = _fbb.start_table();
let start = _fbb.start_table(); TableABuilder {
TableABuilder { fbb_: _fbb,
fbb_: _fbb, start_: start,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
} }
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableA<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
} }
impl ::core::fmt::Debug for TableA<'_> { impl ::core::fmt::Debug for TableA<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableA"); let mut ds = f.debug_struct("TableA");
ds.field("b", &self.b()); ds.field("b", &self.b());
ds.finish() ds.finish()
} }
} }
#[non_exhaustive] #[non_exhaustive]
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
pub struct TableAT { pub struct TableAT {
pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>, pub b: Option<alloc::boxed::Box<my_game::other_name_space::TableBT>>,
} }
impl Default for TableAT { impl Default for TableAT {
fn default() -> Self { fn default() -> Self {
Self { Self {
b: None, b: None,
}
} }
}
} }
impl TableAT { impl TableAT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>( pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self, &self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A> _fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableA<'b>> { ) -> ::flatbuffers::WIPOffset<TableA<'b>> {
let b = self.b.as_ref().map(|x|{ let b = self.b.as_ref().map(|x|{
x.pack(_fbb) x.pack(_fbb)
}); });
TableA::create(_fbb, &TableAArgs{ TableA::create(_fbb, &TableAArgs{
b, b,
}) })
} }
} }
#[allow(unused_imports, dead_code)] #[allow(unused_imports, dead_code)]
pub mod my_game { pub mod my_game {
extern crate alloc;
#[allow(unused_imports, dead_code)] extern crate alloc;
pub mod other_name_space { #[allow(unused_imports, dead_code)]
extern crate alloc; pub mod other_name_space {
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] extern crate alloc;
pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0; pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)]
pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [
FromInclude::IncludeVal,
];
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[allow(non_camel_case_types)] #[repr(transparent)]
pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [ pub struct FromInclude(pub i64);
FromInclude::IncludeVal, #[allow(non_upper_case_globals)]
]; impl FromInclude {
pub const IncludeVal: Self = Self(0);
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] pub const ENUM_MIN: i64 = 0;
#[repr(transparent)] pub const ENUM_MAX: i64 = 0;
pub struct FromInclude(pub i64); pub const ENUM_VALUES: &'static [Self] = &[
Self::IncludeVal,
];
/// Returns the variant's name or "" if unknown.
pub fn variant_name(self) -> Option<&'static str> {
match self {
Self::IncludeVal => Some("IncludeVal"),
_ => None,
}
}
}
impl ::core::fmt::Debug for FromInclude {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() {
f.write_str(name)
} else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
}
}
impl<'a> ::flatbuffers::Follow<'a> for FromInclude {
type Inner = Self;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) };
Self(b)
}
}
#[allow(non_upper_case_globals)] impl ::flatbuffers::Push for FromInclude {
impl FromInclude { type Output = FromInclude;
pub const IncludeVal: Self = Self(0); #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) };
}
}
pub const ENUM_MIN: i64 = 0; impl ::flatbuffers::EndianScalar for FromInclude {
pub const ENUM_MAX: i64 = 0; type Scalar = i64;
pub const ENUM_VALUES: &'static [Self] = &[ #[inline]
Self::IncludeVal, fn to_little_endian(self) -> i64 {
]; self.0.to_le()
}
#[inline]
#[allow(clippy::wrong_self_convention)]
fn from_little_endian(v: i64) -> Self {
let b = i64::from_le(v);
Self(b)
}
}
/// Returns the variant's name or "" if unknown. impl<'a> ::flatbuffers::Verifiable for FromInclude {
pub fn variant_name(self) -> Option<&'static str> { #[inline]
match self { fn run_verifier(
Self::IncludeVal => Some("IncludeVal"), v: &mut ::flatbuffers::Verifier, pos: usize
_ => None, ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
} i64::run_verifier(v, pos)
} }
} }
impl ::core::fmt::Debug for FromInclude { impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {}
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { // struct Unused, aligned to 4
if let Some(name) = self.variant_name() { #[repr(transparent)]
f.write_str(name) #[derive(Clone, Copy, PartialEq)]
} else { pub struct Unused(pub [u8; 4]);
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) impl Default for Unused {
} fn default() -> Self {
} Self([0; 4])
} }
}
impl ::core::fmt::Debug for Unused {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
f.debug_struct("Unused")
.field("a", &self.a())
.finish()
}
}
impl<'a> ::flatbuffers::Follow<'a> for FromInclude { impl ::flatbuffers::SimpleToVerifyInSlice for Unused {}
type Inner = Self; impl<'a> ::flatbuffers::Follow<'a> for Unused {
type Inner = &'a Unused;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { <&'a Unused>::follow(buf, loc) }
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a Unused {
type Inner = &'a Unused;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) }
}
}
impl<'b> ::flatbuffers::Push for Unused {
type Output = Unused;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) };
dst.copy_from_slice(src);
}
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4)
}
}
#[inline] impl<'a> ::flatbuffers::Verifiable for Unused {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { #[inline]
let b = unsafe { ::flatbuffers::read_scalar_at::<i64>(buf, loc) }; fn run_verifier(
Self(b) v: &mut ::flatbuffers::Verifier, pos: usize
} ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
} v.in_buffer::<Self>(pos)
}
}
impl ::flatbuffers::Push for FromInclude { impl<'a> Unused {
type Output = FromInclude; #[allow(clippy::too_many_arguments)]
pub fn new(
a: i32,
) -> Self {
let mut s = Self([0; 4]);
s.set_a(a);
s
}
#[inline] pub const fn get_fully_qualified_name() -> &'static str {
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { "MyGame.OtherNameSpace.Unused"
unsafe { ::flatbuffers::emplace_scalar::<i64>(dst, self.0) }; }
}
}
impl ::flatbuffers::EndianScalar for FromInclude { pub fn a(&self) -> i32 {
type Scalar = i64; let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
#[inline] pub fn set_a(&mut self, x: i32) {
fn to_little_endian(self) -> i64 { let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
self.0.to_le() // Safety:
} // Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
#[inline] pub fn unpack(&self) -> UnusedT {
#[allow(clippy::wrong_self_convention)] UnusedT {
fn from_little_endian(v: i64) -> Self { a: self.a(),
let b = i64::from_le(v); }
Self(b) }
} }
}
impl<'a> ::flatbuffers::Verifiable for FromInclude { #[derive(Debug, Clone, PartialEq, Default)]
#[inline] pub struct UnusedT {
fn run_verifier( pub a: i32,
v: &mut ::flatbuffers::Verifier, pos: usize }
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { impl UnusedT {
i64::run_verifier(v, pos) pub fn pack(&self) -> Unused {
} Unused::new(
} self.a,
)
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for FromInclude {} pub enum TableBOffset {}
#[derive(Copy, Clone, PartialEq)]
// struct Unused, aligned to 4 pub struct TableB<'a> {
#[repr(transparent)] pub _tab: ::flatbuffers::Table<'a>,
#[derive(Clone, Copy, PartialEq)] }
pub struct Unused(pub [u8; 4]);
impl Default for Unused { impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> {
fn default() -> Self { type Inner = TableB<'a>;
Self([0; 4]) #[inline]
} unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
} Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl ::core::fmt::Debug for Unused { impl<'a> TableB<'a> {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { pub const VT_A: ::flatbuffers::VOffsetT = 4;
f.debug_struct("Unused")
.field("a", &self.a())
.finish()
}
}
impl ::flatbuffers::SimpleToVerifyInSlice for Unused {} pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.TableB"
}
impl<'a> ::flatbuffers::Follow<'a> for Unused { #[inline]
type Inner = &'a Unused; pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableB { _tab: table }
}
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableBArgs<'args>
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> {
let mut builder = TableBBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
#[inline] pub fn unpack(&self) -> TableBT {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let a = self.a().map(|x| {
unsafe { <&'a Unused>::follow(buf, loc) } alloc::boxed::Box::new(x.unpack())
} });
} TableBT {
a,
}
}
impl<'a> ::flatbuffers::Follow<'a> for &'a Unused { #[inline]
type Inner = &'a Unused; pub fn a(&self) -> Option<super::super::TableA<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
}
}
#[inline] impl ::flatbuffers::Verifiable for TableB<'_> {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { #[inline]
unsafe { ::flatbuffers::follow_cast_ref::<Unused>(buf, loc) } fn run_verifier(
} v: &mut ::flatbuffers::Verifier, pos: usize
} ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)?
.finish();
Ok(())
}
}
pub struct TableBArgs<'a> {
pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>,
}
impl<'a> Default for TableBArgs<'a> {
#[inline]
fn default() -> Self {
TableBArgs {
a: None,
}
}
}
impl<'b> ::flatbuffers::Push for Unused { pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
type Output = Unused; fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> {
#[inline]
pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> {
let start = _fbb.start_table();
TableBBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
#[inline] impl ::core::fmt::Debug for TableB<'_> {
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let src = unsafe { ::core::slice::from_raw_parts(self as *const Unused as *const u8, <Self as ::flatbuffers::Push>::size()) }; let mut ds = f.debug_struct("TableB");
dst.copy_from_slice(src); ds.field("a", &self.a());
} ds.finish()
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq)]
pub struct TableBT {
pub a: Option<alloc::boxed::Box<super::super::TableAT>>,
}
impl Default for TableBT {
fn default() -> Self {
Self {
a: None,
}
}
}
impl TableBT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableB<'b>> {
let a = self.a.as_ref().map(|x|{
x.pack(_fbb)
});
TableB::create(_fbb, &TableBArgs{
a,
})
}
}
} // pub mod OtherNameSpace
} // pub mod MyGame
#[inline]
fn alignment() -> ::flatbuffers::PushAlignment {
::flatbuffers::PushAlignment::new(4)
}
}
impl<'a> ::flatbuffers::Verifiable for Unused {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.in_buffer::<Self>(pos)
}
}
impl<'a> Unused {
#[allow(clippy::too_many_arguments)]
pub fn new(
a: i32,
) -> Self {
let mut s = Self([0; 4]);
s.set_a(a);
s
}
pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.Unused"
}
pub fn a(&self) -> i32 {
let mut mem = ::core::mem::MaybeUninit::<<i32 as ::flatbuffers::EndianScalar>::Scalar>::uninit();
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
::flatbuffers::EndianScalar::from_little_endian(unsafe {
::core::ptr::copy_nonoverlapping(
self.0[0..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_a(&mut self, x: i32) {
let x_le = ::flatbuffers::EndianScalar::to_little_endian(x);
// Safety:
// Created from a valid Table for this object
// Which contains a valid value in this slot
unsafe {
::core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(),
::core::mem::size_of::<<i32 as ::flatbuffers::EndianScalar>::Scalar>(),
);
}
}
pub fn unpack(&self) -> UnusedT {
UnusedT {
a: self.a(),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct UnusedT {
pub a: i32,
}
impl Default for UnusedT {
fn default() -> Self {
Self {
a: 0,
}
}
}
impl UnusedT {
pub fn pack(&self) -> Unused {
Unused::new(
self.a,
)
}
}
pub enum TableBOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct TableB<'a> {
pub _tab: ::flatbuffers::Table<'a>,
}
impl<'a> ::flatbuffers::Follow<'a> for TableB<'a> {
type Inner = TableB<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { _tab: unsafe { ::flatbuffers::Table::new(buf, loc) } }
}
}
impl<'a> TableB<'a> {
pub const VT_A: ::flatbuffers::VOffsetT = 4;
pub const fn get_fully_qualified_name() -> &'static str {
"MyGame.OtherNameSpace.TableB"
}
#[inline]
pub unsafe fn init_from_table(table: ::flatbuffers::Table<'a>) -> Self {
TableB { _tab: table }
}
#[allow(unused_mut)]
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: ::flatbuffers::Allocator + 'bldr>(
_fbb: &'mut_bldr mut ::flatbuffers::FlatBufferBuilder<'bldr, A>,
args: &'args TableBArgs<'args>
) -> ::flatbuffers::WIPOffset<TableB<'bldr>> {
let mut builder = TableBBuilder::new(_fbb);
if let Some(x) = args.a { builder.add_a(x); }
builder.finish()
}
pub fn unpack(&self) -> TableBT {
let a = self.a().map(|x| {
alloc::boxed::Box::new(x.unpack())
});
TableBT {
a,
}
}
#[inline]
pub fn a(&self) -> Option<super::super::TableA<'a>> {
// Safety:
// Created from valid Table for this object
// which contains a valid value in this slot
unsafe { self._tab.get::<::flatbuffers::ForwardsUOffset<super::super::TableA>>(TableB::VT_A, None)}
}
}
impl ::flatbuffers::Verifiable for TableB<'_> {
#[inline]
fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
v.visit_table(pos)?
.visit_field::<::flatbuffers::ForwardsUOffset<super::super::TableA>>("a", Self::VT_A, false)?
.finish();
Ok(())
}
}
pub struct TableBArgs<'a> {
pub a: Option<::flatbuffers::WIPOffset<super::super::TableA<'a>>>,
}
impl<'a> Default for TableBArgs<'a> {
#[inline]
fn default() -> Self {
TableBArgs {
a: None,
}
}
}
pub struct TableBBuilder<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> {
fbb_: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>,
start_: ::flatbuffers::WIPOffset<::flatbuffers::TableUnfinishedWIPOffset>,
}
impl<'a: 'b, 'b, A: ::flatbuffers::Allocator + 'a> TableBBuilder<'a, 'b, A> {
#[inline]
pub fn add_a(&mut self, a: ::flatbuffers::WIPOffset<super::super::TableA<'b >>) {
self.fbb_.push_slot_always::<::flatbuffers::WIPOffset<super::super::TableA>>(TableB::VT_A, a);
}
#[inline]
pub fn new(_fbb: &'b mut ::flatbuffers::FlatBufferBuilder<'a, A>) -> TableBBuilder<'a, 'b, A> {
let start = _fbb.start_table();
TableBBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> ::flatbuffers::WIPOffset<TableB<'a>> {
let o = self.fbb_.end_table(self.start_);
::flatbuffers::WIPOffset::new(o.value())
}
}
impl ::core::fmt::Debug for TableB<'_> {
fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
let mut ds = f.debug_struct("TableB");
ds.field("a", &self.a());
ds.finish()
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq)]
pub struct TableBT {
pub a: Option<alloc::boxed::Box<super::super::TableAT>>,
}
impl Default for TableBT {
fn default() -> Self {
Self {
a: None,
}
}
}
impl TableBT {
pub fn pack<'b, A: ::flatbuffers::Allocator + 'b>(
&self,
_fbb: &mut ::flatbuffers::FlatBufferBuilder<'b, A>
) -> ::flatbuffers::WIPOffset<TableB<'b>> {
let a = self.a.as_ref().map(|x|{
x.pack(_fbb)
});
TableB::create(_fbb, &TableBArgs{
a,
})
}
}
} // pub mod OtherNameSpace
} // pub mod MyGame

View File

@@ -2,73 +2,64 @@
// @generated // @generated
extern crate alloc; extern crate alloc;
use super::*; use super::*;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_ABC: i32 = 0; pub const ENUM_MIN_ABC: i32 = 0;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_ABC: i32 = 2; pub const ENUM_MAX_ABC: i32 = 2;
#[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")] #[deprecated(since = "2.0.0", note = "Use associated constants instead. This will no longer be generated in 2021.")]
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
pub const ENUM_VALUES_ABC: [ABC; 3] = [ pub const ENUM_VALUES_ABC: [ABC; 3] = [
ABC::void, ABC::void,
ABC::where_, ABC::where_,
ABC::stackalloc, ABC::stackalloc,
]; ];
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
#[repr(transparent)] #[repr(transparent)]
pub struct ABC(pub i32); pub struct ABC(pub i32);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
impl ABC { impl ABC {
pub const void: Self = Self(0); pub const void: Self = Self(0);
pub const where_: Self = Self(1); pub const where_: Self = Self(1);
pub const stackalloc: Self = Self(2); pub const stackalloc: Self = Self(2);
pub const ENUM_MIN: i32 = 0; pub const ENUM_MIN: i32 = 0;
pub const ENUM_MAX: i32 = 2; pub const ENUM_MAX: i32 = 2;
pub const ENUM_VALUES: &'static [Self] = &[ pub const ENUM_VALUES: &'static [Self] = &[
Self::void, Self::void,
Self::where_, Self::where_,
Self::stackalloc, Self::stackalloc,
]; ];
/// Returns the variant's name or "" if unknown.
/// Returns the variant's name or "" if unknown. pub fn variant_name(self) -> Option<&'static str> {
pub fn variant_name(self) -> Option<&'static str> { match self {
match self { Self::void => Some("void"),
Self::void => Some("void"), Self::where_ => Some("where_"),
Self::where_ => Some("where_"), Self::stackalloc => Some("stackalloc"),
Self::stackalloc => Some("stackalloc"), _ => None,
_ => None,
}
} }
}
} }
impl ::core::fmt::Debug for ABC { impl ::core::fmt::Debug for ABC {
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
if let Some(name) = self.variant_name() { if let Some(name) = self.variant_name() {
f.write_str(name) f.write_str(name)
} else { } else {
f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0)) f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
}
} }
}
} }
impl<'a> ::flatbuffers::Follow<'a> for ABC { impl<'a> ::flatbuffers::Follow<'a> for ABC {
type Inner = Self; type Inner = Self;
#[inline]
#[inline] unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { let b = unsafe { ::flatbuffers::read_scalar_at::<i32>(buf, loc) };
let b = unsafe { ::flatbuffers::read_scalar_at::<i32>(buf, loc) }; Self(b)
Self(b) }
}
} }
impl ::flatbuffers::Push for ABC { impl ::flatbuffers::Push for ABC {
type Output = ABC; type Output = ABC;
#[inline] #[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) { unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
unsafe { ::flatbuffers::emplace_scalar::<i32>(dst, self.0) }; unsafe { ::flatbuffers::emplace_scalar::<i32>(dst, self.0) };
@@ -76,28 +67,26 @@ impl ::flatbuffers::Push for ABC {
} }
impl ::flatbuffers::EndianScalar for ABC { impl ::flatbuffers::EndianScalar for ABC {
type Scalar = i32; type Scalar = i32;
#[inline]
#[inline] fn to_little_endian(self) -> i32 {
fn to_little_endian(self) -> i32 { self.0.to_le()
self.0.to_le() }
} #[inline]
#[allow(clippy::wrong_self_convention)]
#[inline] fn from_little_endian(v: i32) -> Self {
#[allow(clippy::wrong_self_convention)] let b = i32::from_le(v);
fn from_little_endian(v: i32) -> Self { Self(b)
let b = i32::from_le(v); }
Self(b)
}
} }
impl<'a> ::flatbuffers::Verifiable for ABC { impl<'a> ::flatbuffers::Verifiable for ABC {
#[inline] #[inline]
fn run_verifier( fn run_verifier(
v: &mut ::flatbuffers::Verifier, pos: usize v: &mut ::flatbuffers::Verifier, pos: usize
) -> Result<(), ::flatbuffers::InvalidFlatbuffer> { ) -> Result<(), ::flatbuffers::InvalidFlatbuffer> {
i32::run_verifier(v, pos) i32::run_verifier(v, pos)
} }
} }
impl ::flatbuffers::SimpleToVerifyInSlice for ABC {} impl ::flatbuffers::SimpleToVerifyInSlice for ABC {}

Some files were not shown because too many files have changed in this diff Show More