zksync_vm2/
fat_pointer.rs1use std::ptr;
2
3use primitive_types::U256;
4use zksync_vm2_interface::HeapId;
5
6#[derive(Debug)]
8#[repr(C)]
9pub struct FatPointer {
10 pub offset: u32,
12 pub memory_page: HeapId,
14 pub start: u32,
16 pub length: u32,
18}
19
20#[cfg(target_endian = "little")]
21impl From<&mut U256> for &mut FatPointer {
22 fn from(value: &mut U256) -> Self {
23 unsafe { &mut *ptr::from_mut(value).cast() }
24 }
25}
26
27#[cfg(target_endian = "little")]
28impl From<U256> for FatPointer {
29 fn from(value: U256) -> Self {
30 unsafe { std::mem::transmute(value.low_u128()) }
31 }
32}
33
34impl FatPointer {
35 #[cfg(target_endian = "little")]
37 pub fn into_u256(self) -> U256 {
38 U256::zero() + unsafe { std::mem::transmute::<FatPointer, u128>(self) }
39 }
40}