use crate::layout::*;
use core::mem;
use core::cmp::Ordering;
extern crate flatbuffers;
use self::flatbuffers::{EndianScalar, Follow};
#[repr(transparent)]
#[derive(Clone, Copy, PartialEq)]
pub struct Segment(pub [u8; 16]);
impl Default for Segment {
fn default() -> Self {
Self([0; 16])
}
}
impl core::fmt::Debug for Segment {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
f.debug_struct("Segment")
.field("offset", &self.offset())
.field("length", &self.length())
.field("alignment_exponent", &self.alignment_exponent())
.field("_compression", &self._compression())
.field("_encryption", &self._encryption())
.finish()
}
}
impl flatbuffers::SimpleToVerifyInSlice for Segment {}
impl<'a> flatbuffers::Follow<'a> for Segment {
type Inner = &'a Segment;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
<&'a Segment>::follow(buf, loc)
}
}
impl<'a> flatbuffers::Follow<'a> for &'a Segment {
type Inner = &'a Segment;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
flatbuffers::follow_cast_ref::<Segment>(buf, loc)
}
}
impl<'b> flatbuffers::Push for Segment {
type Output = Segment;
#[inline]
unsafe fn push(&self, dst: &mut [u8], _written_len: usize) {
let src = ::core::slice::from_raw_parts(self as *const Segment 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 Segment {
#[inline]
fn run_verifier(
v: &mut flatbuffers::Verifier, pos: usize
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;
v.in_buffer::<Self>(pos)
}
}
impl<'a> Segment {
#[allow(clippy::too_many_arguments)]
pub fn new(
offset: u64,
length: u32,
alignment_exponent: u8,
_compression: u8,
_encryption: u16,
) -> Self {
let mut s = Self([0; 16]);
s.set_offset(offset);
s.set_length(length);
s.set_alignment_exponent(alignment_exponent);
s.set__compression(_compression);
s.set__encryption(_encryption);
s
}
pub fn offset(&self) -> u64 {
let mut mem = core::mem::MaybeUninit::<<u64 as EndianScalar>::Scalar>::uninit();
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::<<u64 as EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_offset(&mut self, x: u64) {
let x_le = x.to_little_endian();
unsafe {
core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[0..].as_mut_ptr(),
core::mem::size_of::<<u64 as EndianScalar>::Scalar>(),
);
}
}
pub fn length(&self) -> u32 {
let mut mem = core::mem::MaybeUninit::<<u32 as EndianScalar>::Scalar>::uninit();
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::<<u32 as EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_length(&mut self, x: u32) {
let x_le = x.to_little_endian();
unsafe {
core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[8..].as_mut_ptr(),
core::mem::size_of::<<u32 as EndianScalar>::Scalar>(),
);
}
}
pub fn alignment_exponent(&self) -> u8 {
let mut mem = core::mem::MaybeUninit::<<u8 as EndianScalar>::Scalar>::uninit();
EndianScalar::from_little_endian(unsafe {
core::ptr::copy_nonoverlapping(
self.0[12..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
core::mem::size_of::<<u8 as EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set_alignment_exponent(&mut self, x: u8) {
let x_le = x.to_little_endian();
unsafe {
core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[12..].as_mut_ptr(),
core::mem::size_of::<<u8 as EndianScalar>::Scalar>(),
);
}
}
pub fn _compression(&self) -> u8 {
let mut mem = core::mem::MaybeUninit::<<u8 as EndianScalar>::Scalar>::uninit();
EndianScalar::from_little_endian(unsafe {
core::ptr::copy_nonoverlapping(
self.0[13..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
core::mem::size_of::<<u8 as EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set__compression(&mut self, x: u8) {
let x_le = x.to_little_endian();
unsafe {
core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[13..].as_mut_ptr(),
core::mem::size_of::<<u8 as EndianScalar>::Scalar>(),
);
}
}
pub fn _encryption(&self) -> u16 {
let mut mem = core::mem::MaybeUninit::<<u16 as EndianScalar>::Scalar>::uninit();
EndianScalar::from_little_endian(unsafe {
core::ptr::copy_nonoverlapping(
self.0[14..].as_ptr(),
mem.as_mut_ptr() as *mut u8,
core::mem::size_of::<<u16 as EndianScalar>::Scalar>(),
);
mem.assume_init()
})
}
pub fn set__encryption(&mut self, x: u16) {
let x_le = x.to_little_endian();
unsafe {
core::ptr::copy_nonoverlapping(
&x_le as *const _ as *const u8,
self.0[14..].as_mut_ptr(),
core::mem::size_of::<<u16 as EndianScalar>::Scalar>(),
);
}
}
}
pub enum FileLayoutOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct FileLayout<'a> {
pub _tab: flatbuffers::Table<'a>,
}
impl<'a> flatbuffers::Follow<'a> for FileLayout<'a> {
type Inner = FileLayout<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { _tab: flatbuffers::Table::new(buf, loc) }
}
}
impl<'a> FileLayout<'a> {
pub const VT_ROOT_LAYOUT: flatbuffers::VOffsetT = 4;
pub const VT_SEGMENTS: flatbuffers::VOffsetT = 6;
#[inline]
pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
FileLayout { _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 FileLayoutArgs<'args>
) -> flatbuffers::WIPOffset<FileLayout<'bldr>> {
let mut builder = FileLayoutBuilder::new(_fbb);
if let Some(x) = args.segments { builder.add_segments(x); }
if let Some(x) = args.root_layout { builder.add_root_layout(x); }
builder.finish()
}
#[inline]
pub fn root_layout(&self) -> Option<Layout<'a>> {
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<Layout>>(FileLayout::VT_ROOT_LAYOUT, None)}
}
#[inline]
pub fn segments(&self) -> Option<flatbuffers::Vector<'a, Segment>> {
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, Segment>>>(FileLayout::VT_SEGMENTS, None)}
}
}
impl flatbuffers::Verifiable for FileLayout<'_> {
#[inline]
fn run_verifier(
v: &mut flatbuffers::Verifier, pos: usize
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;
v.visit_table(pos)?
.visit_field::<flatbuffers::ForwardsUOffset<Layout>>("root_layout", Self::VT_ROOT_LAYOUT, false)?
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, Segment>>>("segments", Self::VT_SEGMENTS, false)?
.finish();
Ok(())
}
}
pub struct FileLayoutArgs<'a> {
pub root_layout: Option<flatbuffers::WIPOffset<Layout<'a>>>,
pub segments: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, Segment>>>,
}
impl<'a> Default for FileLayoutArgs<'a> {
#[inline]
fn default() -> Self {
FileLayoutArgs {
root_layout: None,
segments: None,
}
}
}
pub struct FileLayoutBuilder<'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> FileLayoutBuilder<'a, 'b, A> {
#[inline]
pub fn add_root_layout(&mut self, root_layout: flatbuffers::WIPOffset<Layout<'b >>) {
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<Layout>>(FileLayout::VT_ROOT_LAYOUT, root_layout);
}
#[inline]
pub fn add_segments(&mut self, segments: flatbuffers::WIPOffset<flatbuffers::Vector<'b , Segment>>) {
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(FileLayout::VT_SEGMENTS, segments);
}
#[inline]
pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> FileLayoutBuilder<'a, 'b, A> {
let start = _fbb.start_table();
FileLayoutBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> flatbuffers::WIPOffset<FileLayout<'a>> {
let o = self.fbb_.end_table(self.start_);
flatbuffers::WIPOffset::new(o.value())
}
}
impl core::fmt::Debug for FileLayout<'_> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let mut ds = f.debug_struct("FileLayout");
ds.field("root_layout", &self.root_layout());
ds.field("segments", &self.segments());
ds.finish()
}
}
pub enum PostscriptOffset {}
#[derive(Copy, Clone, PartialEq)]
pub struct Postscript<'a> {
pub _tab: flatbuffers::Table<'a>,
}
impl<'a> flatbuffers::Follow<'a> for Postscript<'a> {
type Inner = Postscript<'a>;
#[inline]
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
Self { _tab: flatbuffers::Table::new(buf, loc) }
}
}
impl<'a> Postscript<'a> {
pub const VT_DTYPE: flatbuffers::VOffsetT = 4;
pub const VT_FILE_LAYOUT: flatbuffers::VOffsetT = 6;
#[inline]
pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
Postscript { _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 PostscriptArgs<'args>
) -> flatbuffers::WIPOffset<Postscript<'bldr>> {
let mut builder = PostscriptBuilder::new(_fbb);
if let Some(x) = args.file_layout { builder.add_file_layout(x); }
if let Some(x) = args.dtype { builder.add_dtype(x); }
builder.finish()
}
#[inline]
pub fn dtype(&self) -> Option<&'a Segment> {
unsafe { self._tab.get::<Segment>(Postscript::VT_DTYPE, None)}
}
#[inline]
pub fn file_layout(&self) -> Option<&'a Segment> {
unsafe { self._tab.get::<Segment>(Postscript::VT_FILE_LAYOUT, None)}
}
}
impl flatbuffers::Verifiable for Postscript<'_> {
#[inline]
fn run_verifier(
v: &mut flatbuffers::Verifier, pos: usize
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
use self::flatbuffers::Verifiable;
v.visit_table(pos)?
.visit_field::<Segment>("dtype", Self::VT_DTYPE, false)?
.visit_field::<Segment>("file_layout", Self::VT_FILE_LAYOUT, false)?
.finish();
Ok(())
}
}
pub struct PostscriptArgs<'a> {
pub dtype: Option<&'a Segment>,
pub file_layout: Option<&'a Segment>,
}
impl<'a> Default for PostscriptArgs<'a> {
#[inline]
fn default() -> Self {
PostscriptArgs {
dtype: None,
file_layout: None,
}
}
}
pub struct PostscriptBuilder<'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> PostscriptBuilder<'a, 'b, A> {
#[inline]
pub fn add_dtype(&mut self, dtype: &Segment) {
self.fbb_.push_slot_always::<&Segment>(Postscript::VT_DTYPE, dtype);
}
#[inline]
pub fn add_file_layout(&mut self, file_layout: &Segment) {
self.fbb_.push_slot_always::<&Segment>(Postscript::VT_FILE_LAYOUT, file_layout);
}
#[inline]
pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> PostscriptBuilder<'a, 'b, A> {
let start = _fbb.start_table();
PostscriptBuilder {
fbb_: _fbb,
start_: start,
}
}
#[inline]
pub fn finish(self) -> flatbuffers::WIPOffset<Postscript<'a>> {
let o = self.fbb_.end_table(self.start_);
flatbuffers::WIPOffset::new(o.value())
}
}
impl core::fmt::Debug for Postscript<'_> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let mut ds = f.debug_struct("Postscript");
ds.field("dtype", &self.dtype());
ds.field("file_layout", &self.file_layout());
ds.finish()
}
}
#[inline]
pub fn root_as_postscript(buf: &[u8]) -> Result<Postscript, flatbuffers::InvalidFlatbuffer> {
flatbuffers::root::<Postscript>(buf)
}
#[inline]
pub fn size_prefixed_root_as_postscript(buf: &[u8]) -> Result<Postscript, flatbuffers::InvalidFlatbuffer> {
flatbuffers::size_prefixed_root::<Postscript>(buf)
}
#[inline]
pub fn root_as_postscript_with_opts<'b, 'o>(
opts: &'o flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<Postscript<'b>, flatbuffers::InvalidFlatbuffer> {
flatbuffers::root_with_opts::<Postscript<'b>>(opts, buf)
}
#[inline]
pub fn size_prefixed_root_as_postscript_with_opts<'b, 'o>(
opts: &'o flatbuffers::VerifierOptions,
buf: &'b [u8],
) -> Result<Postscript<'b>, flatbuffers::InvalidFlatbuffer> {
flatbuffers::size_prefixed_root_with_opts::<Postscript<'b>>(opts, buf)
}
#[inline]
pub unsafe fn root_as_postscript_unchecked(buf: &[u8]) -> Postscript {
flatbuffers::root_unchecked::<Postscript>(buf)
}
#[inline]
pub unsafe fn size_prefixed_root_as_postscript_unchecked(buf: &[u8]) -> Postscript {
flatbuffers::size_prefixed_root_unchecked::<Postscript>(buf)
}
#[inline]
pub fn finish_postscript_buffer<'a, 'b, A: flatbuffers::Allocator + 'a>(
fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>,
root: flatbuffers::WIPOffset<Postscript<'a>>) {
fbb.finish(root, None);
}
#[inline]
pub fn finish_size_prefixed_postscript_buffer<'a, 'b, A: flatbuffers::Allocator + 'a>(fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, root: flatbuffers::WIPOffset<Postscript<'a>>) {
fbb.finish_size_prefixed(root, None);
}