Trait SlabItem

pub trait SlabItem: Sized + Any {
    const SLAB_SIZE: usize;

    // Required methods
    fn read_slab(index: usize, slab: &[u32]) -> Self;
    fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize;
}
Expand description

Determines the “size” of a type when stored in a slab of &[u32], and how to read/write it from/to the slab.

SlabItem can be automatically derived for struct and tuple types, so long as those types’ fields implement SlabItem.

Required Associated Constants§

const SLAB_SIZE: usize

The number of u32s this type occupies in a slab of &[u32].

Required Methods§

fn read_slab(index: usize, slab: &[u32]) -> Self

Read the type out of the slab at index.

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

Write the type into the slab at starting index and return the new index.

If the type cannot be written, the returned index will be equal to index.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

§

impl SlabItem for bool

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> bool

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for f32

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> f32

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for f64

§

const SLAB_SIZE: usize = 2usize

§

fn read_slab(index: usize, slab: &[u32]) -> f64

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for i8

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> i8

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for i16

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> i16

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for i32

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> i32

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for i64

§

const SLAB_SIZE: usize = 2usize

§

fn read_slab(index: usize, slab: &[u32]) -> i64

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for i128

§

const SLAB_SIZE: usize = 4usize

§

fn read_slab(index: usize, slab: &[u32]) -> i128

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for u8

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> u8

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for u16

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> u16

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for u32

§

const SLAB_SIZE: usize = 1usize

§

fn read_slab(index: usize, slab: &[u32]) -> u32

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for u64

§

const SLAB_SIZE: usize = 2usize

§

fn read_slab(index: usize, slab: &[u32]) -> u64

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for u128

§

const SLAB_SIZE: usize = 4usize

§

fn read_slab(index: usize, slab: &[u32]) -> u128

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for Mat4

§

const SLAB_SIZE: usize = 16usize

§

fn read_slab(index: usize, slab: &[u32]) -> Mat4

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for Quat

§

const SLAB_SIZE: usize = 4usize

§

fn read_slab(index: usize, slab: &[u32]) -> Quat

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for Vec4

§

const SLAB_SIZE: usize = 4usize

§

fn read_slab(index: usize, slab: &[u32]) -> Vec4

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for Vec2

§

const SLAB_SIZE: usize = 2usize

§

fn read_slab(index: usize, slab: &[u32]) -> Vec2

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for Vec3

§

const SLAB_SIZE: usize = 3usize

§

fn read_slab(index: usize, slab: &[u32]) -> Vec3

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for UVec2

§

const SLAB_SIZE: usize = 2usize

§

fn read_slab(index: usize, slab: &[u32]) -> UVec2

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for UVec3

§

const SLAB_SIZE: usize = 3usize

§

fn read_slab(index: usize, slab: &[u32]) -> UVec3

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl SlabItem for UVec4

§

const SLAB_SIZE: usize = 4usize

§

fn read_slab(index: usize, slab: &[u32]) -> UVec4

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A> SlabItem for (A,)
where A: SlabItem,

§

const SLAB_SIZE: usize = { A::SLAB_SIZE }

§

fn read_slab(index: usize, slab: &[u32]) -> (A,)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B> SlabItem for (A, B)
where A: SlabItem, B: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C> SlabItem for (A, B, C)
where A: SlabItem, B: SlabItem, C: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D> SlabItem for (A, B, C, D)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E> SlabItem for (A, B, C, D, E)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F> SlabItem for (A, B, C, D, E, F)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G> SlabItem for (A, B, C, D, E, F, G)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F, G)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G, H> SlabItem for (A, B, C, D, E, F, G, H)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem, H: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F, G, H)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G, H, I> SlabItem for (A, B, C, D, E, F, G, H, I)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem, H: SlabItem, I: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F, G, H, I)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G, H, I, J> SlabItem for (A, B, C, D, E, F, G, H, I, J)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem, H: SlabItem, I: SlabItem, J: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F, G, H, I, J)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G, H, I, J, K> SlabItem for (A, B, C, D, E, F, G, H, I, J, K)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem, H: SlabItem, I: SlabItem, J: SlabItem, K: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F, G, H, I, J, K)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G, H, I, J, K, L> SlabItem for (A, B, C, D, E, F, G, H, I, J, K, L)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem, H: SlabItem, I: SlabItem, J: SlabItem, K: SlabItem, L: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> (A, B, C, D, E, F, G, H, I, J, K, L)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<A, B, C, D, E, F, G, H, I, J, K, L, M> SlabItem for (A, B, C, D, E, F, G, H, I, J, K, L, M)
where A: SlabItem, B: SlabItem, C: SlabItem, D: SlabItem, E: SlabItem, F: SlabItem, G: SlabItem, H: SlabItem, I: SlabItem, J: SlabItem, K: SlabItem, L: SlabItem, M: SlabItem,

§

const SLAB_SIZE: usize

§

fn read_slab( index: usize, slab: &[u32], ) -> (A, B, C, D, E, F, G, H, I, J, K, L, M)

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<T> SlabItem for Option<T>
where T: SlabItem + Default,

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> Option<T>

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

§

impl<T> SlabItem for PhantomData<T>
where T: Any,

§

const SLAB_SIZE: usize = 0usize

§

fn read_slab(_: usize, _: &[u32]) -> PhantomData<T>

§

fn write_slab(&self, index: usize, _: &mut [u32]) -> usize

§

impl<T, const N: usize> SlabItem for [T; N]

§

const SLAB_SIZE: usize

§

fn read_slab(index: usize, slab: &[u32]) -> [T; N]

§

fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize

Implementors§

Source§

impl SlabItem for TextureAddressMode

Source§

const SLAB_SIZE: usize = 1usize

Source§

impl SlabItem for LightStyle

Source§

const SLAB_SIZE: usize = 1usize

Source§

impl SlabItem for DebugChannel

Source§

const SLAB_SIZE: usize = 1usize

Source§

impl SlabItem for AtlasBlittingDescriptor

Source§

const SLAB_SIZE: usize = 2usize

Source§

impl SlabItem for AtlasDescriptor
where UVec3: SlabItem,

Source§

const SLAB_SIZE: usize = 3usize

Source§

impl SlabItem for AtlasTextureDescriptor

Source§

const SLAB_SIZE: usize = 8usize

Source§

impl SlabItem for TextureModes

Source§

const SLAB_SIZE: usize = 2usize

Source§

impl SlabItem for Aabb
where Vec3: SlabItem,

Source§

const SLAB_SIZE: usize = 6usize

Source§

impl SlabItem for BoundingBox
where Vec3: SlabItem,

Source§

const SLAB_SIZE: usize = 6usize

Source§

impl SlabItem for BoundingSphere

Source§

const SLAB_SIZE: usize = 4usize

Source§

impl SlabItem for Frustum

Source§

const SLAB_SIZE: usize = 51usize

Source§

impl SlabItem for CameraDescriptor

Source§

const SLAB_SIZE: usize = 92usize

Source§

impl SlabItem for VertexPrefilterEnvironmentCubemapIds

Source§

const SLAB_SIZE: usize = 2usize

Source§

impl SlabItem for DepthPyramidDescriptor

Source§

const SLAB_SIZE: usize = 5usize

Source§

impl SlabItem for DrawIndirectArgs
where u32: SlabItem,

Source§

const SLAB_SIZE: usize = 4usize

Source§

impl SlabItem for GeometryDescriptor

Source§

const SLAB_SIZE: usize = 10usize

Source§

impl SlabItem for SkinDescriptor

Source§

const SLAB_SIZE: usize = 4usize

Source§

impl SlabItem for MorphTarget
where Vec3: SlabItem,

Source§

const SLAB_SIZE: usize = 9usize

Source§

impl SlabItem for Vertex

Source§

const SLAB_SIZE: usize = 26usize

Source§

impl SlabItem for Candela
where f32: SlabItem,

Source§

const SLAB_SIZE: usize = 1usize

Source§

impl SlabItem for DirectionalLightDescriptor

Source§

const SLAB_SIZE: usize = 8usize

Source§

impl SlabItem for LightDescriptor

Source§

const SLAB_SIZE: usize = 4usize

Source§

impl SlabItem for LightTile

Source§

const SLAB_SIZE: usize = 5usize

Source§

impl SlabItem for LightTilingDescriptor

Source§

const SLAB_SIZE: usize = 6usize

Source§

impl SlabItem for LightingDescriptor

Source§

const SLAB_SIZE: usize = 6usize

Source§

impl SlabItem for Lux
where f32: SlabItem,

Source§

const SLAB_SIZE: usize = 1usize

Source§

impl SlabItem for PointLightDescriptor

Source§

const SLAB_SIZE: usize = 8usize

Source§

impl SlabItem for ShadowMapDescriptor

Source§

const SLAB_SIZE: usize = 9usize

Source§

impl SlabItem for SpotLightDescriptor

Source§

const SLAB_SIZE: usize = 13usize

Source§

impl SlabItem for MaterialDescriptor

Source§

const SLAB_SIZE: usize = 22usize

Source§

impl SlabItem for PrimitiveDescriptor

Source§

const SLAB_SIZE: usize = 17usize

Source§

impl SlabItem for Box
where Vec2: SlabItem,

Source§

const SLAB_SIZE: usize = 4usize

Source§

impl SlabItem for CircleDescriptor

Source§

const SLAB_SIZE: usize = 3usize

Source§

impl SlabItem for Tonemap
where u32: SlabItem,

Source§

const SLAB_SIZE: usize = 1usize

Source§

impl SlabItem for TonemapConstants

Source§

const SLAB_SIZE: usize = 2usize

Source§

impl SlabItem for TransformDescriptor

Source§

const SLAB_SIZE: usize = 10usize

§

impl<T> SlabItem for Array<T>
where T: SlabItem,

§

const SLAB_SIZE: usize = 2usize

§

impl<T> SlabItem for Id<T>
where T: Any,

§

const SLAB_SIZE: usize = 1usize