Struct PackedByteArray
pub struct PackedByteArray { /* private fields */ }
Expand description
Implements Godot’s PackedByteArray
type,
which is a space-efficient array of u8
s.
Check out the book for a tutorial on packed arrays.
Note that, unlike Array
, this type has value semantics: each copy will be independent
of the original. Under the hood, Godot uses copy-on-write, so copies are still cheap
to make.
§Registering properties
You can use both #[var]
and #[export]
with packed arrays. However, since they use copy-on-write, GDScript (for #[var]
) and the
editor (for #[export]
) will effectively keep an independent copy of the array. Writes to the packed array from Rust are thus not
reflected on the other side – you may need to replace the entire array.
See also godot/#76150 for details.
§Thread safety
Usage is safe if the PackedByteArray
is used on a single thread only. Concurrent reads on different threads are also safe,
but any writes must be externally synchronized. The Rust compiler will enforce this as
long as you use only Rust threads, but it cannot protect against concurrent modification
on other threads (e.g. created through GDScript).
Implementations§
§impl PackedByteArray
impl PackedByteArray
pub fn new() -> PackedByteArray
pub fn new() -> PackedByteArray
Constructs an empty array.
pub fn get(&self, index: usize) -> Option<u8>
pub fn get(&self, index: usize) -> Option<u8>
Returns a copy of the value at the specified index, or None
if out-of-bounds.
If you know the index is valid, use the []
operator (Index
/IndexMut
traits) instead.
pub fn contains(&self, value: &u8) -> bool
pub fn contains(&self, value: &u8) -> bool
Returns true
if the array contains the given value.
Godot equivalent: has
pub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the array. Equivalent of size()
in Godot.
pub fn clear(&mut self)
pub fn clear(&mut self)
Clears the array, removing all elements.
pub fn push(&mut self, value: u8)
pub fn push(&mut self, value: u8)
Appends an element to the end of the array. Equivalent of append
and push_back
in GDScript.
pub fn insert(&mut self, index: usize, value: u8)
pub fn insert(&mut self, index: usize, value: u8)
Inserts a new element at a given index in the array. The index must be valid, or at
the end of the array (index == len()
).
Note: On large arrays, this method is much slower than push
as it will move all
the array’s elements after the inserted element. The larger the array, the slower
insert
will be.
pub fn remove(&mut self, index: usize) -> u8
pub fn remove(&mut self, index: usize) -> u8
Removes and returns the element at the specified index. Similar to remove_at
in
GDScript, but also returns the removed value.
On large arrays, this method is much slower than pop_back
as it will move all the array’s
elements after the removed element. The larger the array, the slower remove
will be.
§Panics
If index
is out of bounds.
pub fn fill(&mut self, value: u8)
pub fn fill(&mut self, value: u8)
Assigns the given value to all elements in the array. This can be used together
with resize
to create an array with a given size and initialized elements.
pub fn resize(&mut self, size: usize)
pub fn resize(&mut self, size: usize)
Resizes the array to contain a different number of elements. If the new size is
smaller, elements are removed from the end. If the new size is larger, new elements
are set to Default::default()
.
pub fn extend_array(&mut self, other: &PackedByteArray)
pub fn extend_array(&mut self, other: &PackedByteArray)
Appends another array at the end of this array. Equivalent of append_array
in GDScript.
pub fn subarray(&self, begin: usize, end: usize) -> PackedByteArray
pub fn subarray(&self, begin: usize, end: usize) -> PackedByteArray
Returns a sub-range begin..end
, as a new packed array.
This method is called slice()
in Godot.
The values of begin
(inclusive) and end
(exclusive) will be clamped to the array size.
To obtain Rust slices, see as_slice
and as_mut_slice
.
pub fn as_slice(&self) -> &[u8] ⓘ
pub fn as_slice(&self) -> &[u8] ⓘ
Returns a shared Rust slice of the array.
The resulting slice can be further subdivided or converted into raw pointers.
See also as_mut_slice
to get exclusive slices, and
subarray
to get a sub-array as a copy.
pub fn as_mut_slice(&mut self) -> &mut [u8] ⓘ
pub fn as_mut_slice(&mut self) -> &mut [u8] ⓘ
pub fn find(&self, value: &u8, from: Option<usize>) -> Option<usize>
pub fn find(&self, value: &u8, from: Option<usize>) -> Option<usize>
Searches the array for the first occurrence of a value and returns its index, or
None
if not found. Starts searching at index from
; pass None
to search the
entire array.
pub fn rfind(&self, value: &u8, from: Option<usize>) -> Option<usize>
pub fn rfind(&self, value: &u8, from: Option<usize>) -> Option<usize>
Searches the array backwards for the last occurrence of a value and returns its
index, or None
if not found. Starts searching at index from
; pass None
to
search the entire array.
pub fn bsearch(&self, value: &u8) -> usize
pub fn bsearch(&self, value: &u8) -> usize
Finds the index of an existing value in a sorted array using binary search.
If the value is not present in the array, returns the insertion index that would maintain sorting order.
Calling bsearch()
on an unsorted array results in unspecified (but safe) behavior.
pub fn reverse(&mut self)
pub fn reverse(&mut self)
Reverses the order of the elements in the array.
pub fn sort(&mut self)
pub fn sort(&mut self)
Sorts the elements of the array in ascending order.
This sort is stable, since elements inside packed arrays are indistinguishable. Relative order between equal elements thus isn’t observable.
pub fn to_float32_array(&self) -> PackedFloat32Array
pub fn to_float32_array(&self) -> PackedFloat32Array
Returns a copy of the data converted to a PackedFloat32Array
, where each block of 4 bytes has been converted to a 32-bit float.
The size of the input array must be a multiple of 4 (size of 32-bit float). The size of the new array will be byte_array.size() / 4
.
If the original data can’t be converted to 32-bit floats, the resulting data is undefined.
pub fn to_float64_array(&self) -> PackedFloat64Array
pub fn to_float64_array(&self) -> PackedFloat64Array
Returns a copy of the data converted to a PackedFloat64Array
, where each block of 8 bytes has been converted to a 64-bit float.
The size of the input array must be a multiple of 8 (size of 64-bit float). The size of the new array will be byte_array.size() / 8
.
If the original data can’t be converted to 64-bit floats, the resulting data is undefined.
pub fn to_int32_array(&self) -> PackedInt32Array
pub fn to_int32_array(&self) -> PackedInt32Array
Returns a copy of the data converted to a PackedInt32Array
, where each block of 4 bytes has been converted to a 32-bit integer.
The size of the input array must be a multiple of 4 (size of 32-bit integer). The size of the new array will be byte_array.size() / 4
.
If the original data can’t be converted to 32-bit integers, the resulting data is undefined.
pub fn to_int64_array(&self) -> PackedInt64Array
pub fn to_int64_array(&self) -> PackedInt64Array
Returns a copy of the data converted to a PackedInt64Array
, where each block of 8 bytes has been converted to a 64-bit integer.
The size of the input array must be a multiple of 8 (size of 64-bit integer). The size of the new array will be byte_array.size() / 8
.
If the original data can’t be converted to 64-bit integers, the resulting data is undefined.
Trait Implementations§
§impl ArrayElement for PackedByteArray
impl ArrayElement for PackedByteArray
fn debug_validate_elements(_array: &Array<Self>) -> Result<(), ConvertError>
§impl Clone for PackedByteArray
impl Clone for PackedByteArray
§fn clone(&self) -> PackedByteArray
fn clone(&self) -> PackedByteArray
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for PackedByteArray
impl Debug for PackedByteArray
§impl Default for PackedByteArray
impl Default for PackedByteArray
§fn default() -> PackedByteArray
fn default() -> PackedByteArray
§impl Display for PackedByteArray
impl Display for PackedByteArray
§impl Export for PackedByteArray
impl Export for PackedByteArray
§fn export_hint() -> PropertyHintInfo
fn export_hint() -> PropertyHintInfo
§fn as_node_class() -> Option<ClassName>
fn as_node_class() -> Option<ClassName>
§impl Extend<u8> for PackedByteArray
impl Extend<u8> for PackedByteArray
Extends aPackedByteArray
with the contents of an iterator
§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = u8>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = u8>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)§impl From<&[u8]> for PackedByteArray
impl From<&[u8]> for PackedByteArray
Creates a PackedByteArray
from the given slice.
§fn from(slice: &[u8]) -> PackedByteArray
fn from(slice: &[u8]) -> PackedByteArray
§impl<const N: usize> From<&[u8; N]> for PackedByteArray
impl<const N: usize> From<&[u8; N]> for PackedByteArray
Creates a PackedByteArray
from the given Rust array.
§fn from(arr: &[u8; N]) -> PackedByteArray
fn from(arr: &[u8; N]) -> PackedByteArray
§impl From<&Array<Variant>> for PackedByteArray
impl From<&Array<Variant>> for PackedByteArray
§fn from(other: &Array<Variant>) -> PackedByteArray
fn from(other: &Array<Variant>) -> PackedByteArray
§impl From<&PackedByteArray> for Array<Variant>
impl From<&PackedByteArray> for Array<Variant>
§fn from(other: &PackedByteArray) -> Array<Variant>
fn from(other: &PackedByteArray) -> Array<Variant>
§impl<const N: usize> From<[u8; N]> for PackedByteArray
impl<const N: usize> From<[u8; N]> for PackedByteArray
Creates a PackedByteArray
from the given Rust array.
§fn from(arr: [u8; N]) -> PackedByteArray
fn from(arr: [u8; N]) -> PackedByteArray
§impl From<Vec<u8>> for PackedByteArray
impl From<Vec<u8>> for PackedByteArray
Creates a PackedByteArray
from the given Rust vec.
§fn from(vec: Vec<u8>) -> PackedByteArray
fn from(vec: Vec<u8>) -> PackedByteArray
§impl FromGodot for PackedByteArray
impl FromGodot for PackedByteArray
§fn try_from_godot(
via: <PackedByteArray as GodotConvert>::Via,
) -> Result<PackedByteArray, ConvertError>
fn try_from_godot( via: <PackedByteArray as GodotConvert>::Via, ) -> Result<PackedByteArray, ConvertError>
Err
on failure.§fn from_godot(via: Self::Via) -> Self
fn from_godot(via: Self::Via) -> Self
§fn try_from_variant(variant: &Variant) -> Result<Self, ConvertError>
fn try_from_variant(variant: &Variant) -> Result<Self, ConvertError>
Variant
, returning Err
on failure.§fn from_variant(variant: &Variant) -> Self
fn from_variant(variant: &Variant) -> Self
§impl FromIterator<u8> for PackedByteArray
impl FromIterator<u8> for PackedByteArray
Creates a PackedByteArray
from an iterator.
§fn from_iter<I>(iter: I) -> PackedByteArraywhere
I: IntoIterator<Item = u8>,
fn from_iter<I>(iter: I) -> PackedByteArraywhere
I: IntoIterator<Item = u8>,
§impl GodotConvert for PackedByteArray
impl GodotConvert for PackedByteArray
§type Via = PackedByteArray
type Via = PackedByteArray
Self
is represented in Godot.§impl Index<usize> for PackedByteArray
impl Index<usize> for PackedByteArray
§impl IndexMut<usize> for PackedByteArray
impl IndexMut<usize> for PackedByteArray
§impl PartialEq for PackedByteArray
impl PartialEq for PackedByteArray
§impl ToGodot for PackedByteArray
impl ToGodot for PackedByteArray
§type ToVia<'v> = <PackedByteArray as GodotConvert>::Via
type ToVia<'v> = <PackedByteArray as GodotConvert>::Via
to_godot()
, which differs from Via
for pass-by-reference types.§fn to_godot(&self) -> <PackedByteArray as ToGodot>::ToVia<'_>
fn to_godot(&self) -> <PackedByteArray as ToGodot>::ToVia<'_>
§fn to_variant(&self) -> Variant
fn to_variant(&self) -> Variant
§impl Var for PackedByteArray
impl Var for PackedByteArray
fn get_property(&self) -> <PackedByteArray as GodotConvert>::Via
fn set_property(&mut self, value: <PackedByteArray as GodotConvert>::Via)
§fn var_hint() -> PropertyHintInfo
fn var_hint() -> PropertyHintInfo
GodotType::property_info
, e.g. for enums/newtypes.impl Eq for PackedByteArray
impl GodotType for PackedByteArray
Auto Trait Implementations§
impl Freeze for PackedByteArray
impl RefUnwindSafe for PackedByteArray
impl !Send for PackedByteArray
impl !Sync for PackedByteArray
impl Unpin for PackedByteArray
impl UnwindSafe for PackedByteArray
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)