pub struct IndexedMerkleTreeZeroCopy<'a, H, I, const HEIGHT: usize>where
H: Hasher,
I: CheckedAdd + CheckedSub + Copy + Clone + PartialOrd + ToBytes + TryFrom<usize> + Unsigned + Pod,
usize: From<I>,{
pub merkle_tree: &'a IndexedMerkleTree<'a, H, I, HEIGHT>,
}Fields§
§merkle_tree: &'a IndexedMerkleTree<'a, H, I, HEIGHT>Implementations§
source§impl<'a, H, I, const HEIGHT: usize> IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>where
H: Hasher,
I: CheckedAdd + CheckedSub + Copy + Clone + PartialOrd + ToBytes + TryFrom<usize> + Unsigned + Pod,
usize: From<I>,
impl<'a, H, I, const HEIGHT: usize> IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>where
H: Hasher,
I: CheckedAdd + CheckedSub + Copy + Clone + PartialOrd + ToBytes + TryFrom<usize> + Unsigned + Pod,
usize: From<I>,
sourcepub unsafe fn struct_from_bytes_zero_copy(
bytes_struct: &'a [u8]
) -> Result<Self, IndexedMerkleTreeError>
pub unsafe fn struct_from_bytes_zero_copy( bytes_struct: &'a [u8] ) -> Result<Self, IndexedMerkleTreeError>
Casts a byte slice into wrapped IndexedMerkleTree structure reference,
without dynamic fields.
§Purpose
This method is meant to be used mostly in Solana programs, where memory constraints are tight and we want to make sure no data is copied.
§Safety
This is highly unsafe. Ensuring the alignment and that the slice provides actual data of the hash set is the caller’s responsibility.
Calling it in async context (or anyhwere where the underlying data can be moved in the memory) is certainly going to cause undefined behavior.
sourcepub unsafe fn from_bytes_zero_copy(
bytes_struct: &'a [u8],
bytes_filled_subtrees: &'a [u8],
bytes_changelog: &'a [u8],
bytes_roots: &'a [u8],
bytes_canopy: &'a [u8],
bytes_indexed_changelog: &'a [u8]
) -> Result<Self, IndexedMerkleTreeError>
pub unsafe fn from_bytes_zero_copy( bytes_struct: &'a [u8], bytes_filled_subtrees: &'a [u8], bytes_changelog: &'a [u8], bytes_roots: &'a [u8], bytes_canopy: &'a [u8], bytes_indexed_changelog: &'a [u8] ) -> Result<Self, IndexedMerkleTreeError>
Casts a byte slice into wrapped IndexedMerkleTree structure reference,
including dynamic fields.
§Purpose
This method is meant to be used mostly in Solana programs, where memory constraints are tight and we want to make sure no data is copied.
§Safety
This is highly unsafe. Ensuring the alignment and that the slice provides actual data of the hash set is the caller’s responsibility.
Calling it in async context (or anyhwere where the underlying data can be moved in the memory) is certainly going to cause undefined behavior.
Trait Implementations§
source§impl<'a, H, I, const HEIGHT: usize> Debug for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>where
H: Hasher + Debug,
I: CheckedAdd + CheckedSub + Copy + Clone + PartialOrd + ToBytes + TryFrom<usize> + Unsigned + Pod + Debug,
usize: From<I>,
impl<'a, H, I, const HEIGHT: usize> Debug for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>where
H: Hasher + Debug,
I: CheckedAdd + CheckedSub + Copy + Clone + PartialOrd + ToBytes + TryFrom<usize> + Unsigned + Pod + Debug,
usize: From<I>,
Auto Trait Implementations§
impl<'a, H, I, const HEIGHT: usize> Freeze for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>
impl<'a, H, I, const HEIGHT: usize> RefUnwindSafe for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>
impl<'a, H, I, const HEIGHT: usize> Send for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>
impl<'a, H, I, const HEIGHT: usize> Sync for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>
impl<'a, H, I, const HEIGHT: usize> Unpin for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>
impl<'a, H, I, const HEIGHT: usize> UnwindSafe for IndexedMerkleTreeZeroCopy<'a, H, I, HEIGHT>
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> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more