Struct ssbh_lib::SsbhArray

source ·
pub struct SsbhArray<T> {
    pub elements: Vec<T>,
}
Expand description

A fixed-size collection of contiguous elements consisting of a relative offset to the array elements and an element count.

use binrw::BinRead;
use ssbh_lib::{SsbhArray, Matrix4x4};
use ssbh_write::SsbhWrite;
#[derive(BinRead, SsbhWrite)]
struct Transforms {
    array_relative_offset: u64,
    array_item_count: u64
}

This can instead be expressed as the following struct with an explicit array item type. The generated parsing and exporting code will correctly read and write the array data from the appropriate offset.

use binrw::BinRead;
use ssbh_lib::{SsbhArray, Matrix4x4};
use ssbh_write::SsbhWrite;

#[derive(BinRead, SsbhWrite)]
struct Transforms {
    data: SsbhArray<Matrix4x4>,
}

Fields§

§elements: Vec<T>

Implementations§

source§

impl<T> SsbhArray<T>

source

pub fn new() -> Self

Creates an empty array.

let array: SsbhArray<u32> = SsbhArray::new();
assert!(array.elements.is_empty());
source

pub fn from_vec(elements: Vec<T>) -> Self

Creates a new array from elements.

let array = SsbhArray::from_vec(vec![0, 1, 2]);
assert_eq!(vec![0, 1, 2], array.elements);

Trait Implementations§

source§

impl<T> BinRead for SsbhArray<T>
where T: BinRead, for<'a> T::Args<'a>: Clone + Default,

§

type Args<'a> = <T as BinRead>::Args<'a>

The type used for the args parameter of read_args() and read_options(). Read more
source§

fn read_options<R: Read + Seek>( reader: &mut R, endian: Endian, _args: Self::Args<'_> ) -> BinResult<Self>

Read Self from the reader using the given Endian and arguments. Read more
source§

fn read_be<R>(reader: &mut R) -> Result<Self, Error>
where R: Read + Seek, Self::Args<'a>: for<'a> Required,

Read Self from the reader using default arguments and assuming big-endian byte order. Read more
source§

fn read_le<R>(reader: &mut R) -> Result<Self, Error>
where R: Read + Seek, Self::Args<'a>: for<'a> Required,

Read Self from the reader using default arguments and assuming little-endian byte order. Read more
source§

fn read_ne<R>(reader: &mut R) -> Result<Self, Error>
where R: Read + Seek, Self::Args<'a>: for<'a> Required,

Read T from the reader assuming native-endian byte order. Read more
source§

fn read_be_args<R>(reader: &mut R, args: Self::Args<'_>) -> Result<Self, Error>
where R: Read + Seek,

Read Self from the reader, assuming big-endian byte order, using the given arguments. Read more
source§

fn read_le_args<R>(reader: &mut R, args: Self::Args<'_>) -> Result<Self, Error>
where R: Read + Seek,

Read Self from the reader, assuming little-endian byte order, using the given arguments. Read more
source§

fn read_ne_args<R>(reader: &mut R, args: Self::Args<'_>) -> Result<Self, Error>
where R: Read + Seek,

Read T from the reader, assuming native-endian byte order, using the given arguments. Read more
source§

impl<T: Clone> Clone for SsbhArray<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug> Debug for SsbhArray<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T> Default for SsbhArray<T>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<T> From<Vec<T>> for SsbhArray<T>

source§

fn from(v: Vec<T>) -> Self

Converts to this type from the input type.
source§

impl<T> FromIterator<T> for SsbhArray<T>

source§

fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self

Creates a value from an iterator. Read more
source§

impl<T: PartialEq> PartialEq for SsbhArray<T>

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: SsbhWrite> SsbhWrite for SsbhArray<T>

source§

fn ssbh_write<W: Write + Seek>( &self, writer: &mut W, data_ptr: &mut u64 ) -> Result<()>

Writes the byte representation of self to writer. data_ptr is assumed to be the absolute offset where the next data stored behind an offset will be written. Struct that contains no offsets as fields can skip updating data_ptr. Read more
source§

fn size_in_bytes(&self) -> u64

The offset in bytes between successive elements in an array of this type. This should include any alignment or padding.
source§

fn alignment_in_bytes() -> u64

The alignment for pointers of this type, which is useful for offset calculations.
source§

fn write<W>(&self, writer: &mut W) -> Result<(), Error>
where W: Write + Seek,

Writes the byte representation of self to writer. This is a convenience method for ssbh_write that handles initializing the data pointer.
source§

impl<T: Eq> Eq for SsbhArray<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for SsbhArray<T>
where T: RefUnwindSafe,

§

impl<T> Send for SsbhArray<T>
where T: Send,

§

impl<T> Sync for SsbhArray<T>
where T: Sync,

§

impl<T> Unpin for SsbhArray<T>
where T: Unpin,

§

impl<T> UnwindSafe for SsbhArray<T>
where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.