pub struct Page<const SIZE: u32>(/* private fields */);Expand description
Struct represents memory page number with some constant size SIZE in bytes.
SIZEtype is u32, so page size < 4GiB (wasm32 memory size limit).SIZEmust be power of two and must not be equal to zero bytes.SIZE == 1is possible, but then you cannot use PagesAmount for these pages.
Implementations§
Source§impl<const SIZE: u32> Page<SIZE>
impl<const SIZE: u32> Page<SIZE>
Sourcepub const SIZE: u32 = SIZE
pub const SIZE: u32 = SIZE
Page size. May be any number power of two in interval [1, u32::MAX].
Sourcepub const UPPER: Self
pub const UPPER: Self
Max possible page number in 4GB memory.
Note: const computation contains checking in order to prevent incorrect SIZE.
Sourcepub fn inc(&self) -> PagesAmount<SIZE>
pub fn inc(&self) -> PagesAmount<SIZE>
Increment page number. Returns PagesAmount<SIZE>, because this allows to avoid overflows.
Sourcepub fn from_offset(offset: u32) -> Self
pub fn from_offset(offset: u32) -> Self
Constructs new page from byte offset: returns page which contains this byte.
Sourcepub fn end_offset(&self) -> u32
pub fn end_offset(&self) -> u32
Returns page last byte offset.
Sourcepub fn to_page<const S1: u32>(self) -> Page<S1>
pub fn to_page<const S1: u32>(self) -> Page<S1>
Returns new page, which contains self zero byte.
Sourcepub fn to_iter<const S1: u32>(self) -> IntervalIterator<Page<S1>>
pub fn to_iter<const S1: u32>(self) -> IntervalIterator<Page<S1>>
Returns an iterator that iterates over the range of pages from self to the end page,
inclusive. Each iteration yields a page of type Page<S1>.
§Example
use gear_core::pages::{GearPage, WasmPage};
let x: Vec<GearPage> = WasmPage::from(5).to_iter().collect();
println!("{x:?}");For this example must be printed: [GearPage(20), GearPage(21), GearPage(22), GearPage(23)]
Trait Implementations§
Source§impl<const SIZE: u32> Decode for Page<SIZE>
impl<const SIZE: u32> Decode for Page<SIZE>
Source§fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy,
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy, ) -> Result<Self, Error>
Attempt to deserialise the value from input.
Source§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
Source§impl<const SIZE: u32> DecodeAsFields for Page<SIZE>
impl<const SIZE: u32> DecodeAsFields for Page<SIZE>
Source§fn decode_as_fields<'info, R: TypeResolver>(
input: &mut &[u8],
fields: &mut dyn FieldIter<'info, R::TypeId>,
types: &'info R,
) -> Result<Self, Error>
fn decode_as_fields<'info, R: TypeResolver>( input: &mut &[u8], fields: &mut dyn FieldIter<'info, R::TypeId>, types: &'info R, ) -> Result<Self, Error>
Given some bytes and some fields denoting their structure, attempt to decode.
Source§impl<const SIZE: u32> Encode for Page<SIZE>
impl<const SIZE: u32> Encode for Page<SIZE>
Source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
If possible give a hint of expected size of the encoding. Read more
Source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy,
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy, )
Convert self to a slice and append it to the destination.
Source§fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>(
&self,
f: __CodecUsingEncodedCallback,
) -> __CodecOutputReturn
fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( &self, f: __CodecUsingEncodedCallback, ) -> __CodecOutputReturn
Convert self to a slice and then invoke the given closure with it.
Source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Calculates the encoded size. Read more
Source§impl<const SIZE: u32> EncodeAsFields for Page<SIZE>
impl<const SIZE: u32> EncodeAsFields for Page<SIZE>
Source§fn encode_as_fields_to<ScaleEncodeResolver: TypeResolver>(
&self,
__encode_as_type_fields: &mut dyn FieldIter<'_, ScaleEncodeResolver::TypeId>,
__encode_as_type_types: &ScaleEncodeResolver,
__encode_as_type_out: &mut Vec<u8>,
) -> Result<(), Error>
fn encode_as_fields_to<ScaleEncodeResolver: TypeResolver>( &self, __encode_as_type_fields: &mut dyn FieldIter<'_, ScaleEncodeResolver::TypeId>, __encode_as_type_types: &ScaleEncodeResolver, __encode_as_type_out: &mut Vec<u8>, ) -> Result<(), Error>
Given some fields describing the shape of a type, attempt to encode to that shape.
Source§fn encode_as_fields<R>(
&self,
fields: &mut dyn FieldIter<'_, <R as TypeResolver>::TypeId, Item = Field<'_, <R as TypeResolver>::TypeId>>,
types: &R,
) -> Result<Vec<u8>, Error>where
R: TypeResolver,
fn encode_as_fields<R>(
&self,
fields: &mut dyn FieldIter<'_, <R as TypeResolver>::TypeId, Item = Field<'_, <R as TypeResolver>::TypeId>>,
types: &R,
) -> Result<Vec<u8>, Error>where
R: TypeResolver,
This is a helper function which internally calls
EncodeAsFields::encode_as_fields_to. Prefer to
implement that instead.Source§impl<const SIZE: u32> EncodeAsType for Page<SIZE>
impl<const SIZE: u32> EncodeAsType for Page<SIZE>
Source§fn encode_as_type_to<ScaleEncodeResolver: TypeResolver>(
&self,
__encode_as_type_type_id: ScaleEncodeResolver::TypeId,
__encode_as_type_types: &ScaleEncodeResolver,
__encode_as_type_out: &mut Vec<u8>,
) -> Result<(), Error>
fn encode_as_type_to<ScaleEncodeResolver: TypeResolver>( &self, __encode_as_type_type_id: ScaleEncodeResolver::TypeId, __encode_as_type_types: &ScaleEncodeResolver, __encode_as_type_out: &mut Vec<u8>, ) -> Result<(), Error>
Given some
type_id, types, a context and some output target for the SCALE encoded bytes,
attempt to SCALE encode the current value into the type given by type_id.Source§fn encode_as_type<R>(
&self,
type_id: <R as TypeResolver>::TypeId,
types: &R,
) -> Result<Vec<u8>, Error>where
R: TypeResolver,
fn encode_as_type<R>(
&self,
type_id: <R as TypeResolver>::TypeId,
types: &R,
) -> Result<Vec<u8>, Error>where
R: TypeResolver,
This is a helper function which internally calls
EncodeAsType::encode_as_type_to. Prefer to
implement that instead.Source§impl From<Page<WASM_PAGE_SIZE>> for AllocError
impl From<Page<WASM_PAGE_SIZE>> for AllocError
Source§impl<const SIZE: u32> IntoVisitor for Page<SIZE>
impl<const SIZE: u32> IntoVisitor for Page<SIZE>
Source§type AnyVisitor<ScaleDecodeTypeResolver: TypeResolver> = Visitor<SIZE, ScaleDecodeTypeResolver>
type AnyVisitor<ScaleDecodeTypeResolver: TypeResolver> = Visitor<SIZE, ScaleDecodeTypeResolver>
The visitor type used to decode SCALE encoded bytes to
Self.Source§fn into_visitor<ScaleDecodeTypeResolver: TypeResolver>() -> Self::AnyVisitor<ScaleDecodeTypeResolver>
fn into_visitor<ScaleDecodeTypeResolver: TypeResolver>() -> Self::AnyVisitor<ScaleDecodeTypeResolver>
A means of obtaining this visitor.
Source§impl<const SIZE: u32> LowerBounded for Page<SIZE>
impl<const SIZE: u32> LowerBounded for Page<SIZE>
Source§impl<const SIZE: u32> Numerated for Page<SIZE>
impl<const SIZE: u32> Numerated for Page<SIZE>
Source§type Distance = u32
type Distance = u32
Numerate type: type that describes the distances between two values of
Self.Source§type Bound = PagesAmount<SIZE>
type Bound = PagesAmount<SIZE>
Bound type: type for which any value can be mapped to
Self,
and also has upper value, which is bigger than any value of Self.Source§fn add_if_enclosed_by(self, num: Self::Distance, other: Self) -> Option<Self>
fn add_if_enclosed_by(self, num: Self::Distance, other: Self) -> Option<Self>
Source§fn sub_if_enclosed_by(self, num: Self::Distance, other: Self) -> Option<Self>
fn sub_if_enclosed_by(self, num: Self::Distance, other: Self) -> Option<Self>
Source§fn enclosed_by(self, a: &Self, b: &Self) -> bool
fn enclosed_by(self, a: &Self, b: &Self) -> bool
Returns
true, if self is enclosed by a and b.Source§impl<const SIZE: u32> Ord for Page<SIZE>
impl<const SIZE: u32> Ord for Page<SIZE>
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl<const SIZE: u32> PartialOrd<Page<SIZE>> for PagesAmount<SIZE>
impl<const SIZE: u32> PartialOrd<Page<SIZE>> for PagesAmount<SIZE>
Source§impl<const SIZE: u32> PartialOrd<PagesAmount<SIZE>> for Page<SIZE>
impl<const SIZE: u32> PartialOrd<PagesAmount<SIZE>> for Page<SIZE>
Source§impl<const SIZE: u32> PartialOrd for Page<SIZE>
impl<const SIZE: u32> PartialOrd for Page<SIZE>
Source§impl<const SIZE: u32> UpperBounded for Page<SIZE>
impl<const SIZE: u32> UpperBounded for Page<SIZE>
impl<const SIZE: u32> Copy for Page<SIZE>
impl<const SIZE: u32> EncodeLike for Page<SIZE>
impl<const SIZE: u32> Eq for Page<SIZE>
impl<const SIZE: u32> StructuralPartialEq for Page<SIZE>
Auto Trait Implementations§
impl<const SIZE: u32> Freeze for Page<SIZE>
impl<const SIZE: u32> RefUnwindSafe for Page<SIZE>
impl<const SIZE: u32> Send for Page<SIZE>
impl<const SIZE: u32> Sync for Page<SIZE>
impl<const SIZE: u32> Unpin for Page<SIZE>
impl<const SIZE: u32> UnwindSafe for Page<SIZE>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DecodeAsType for Twhere
T: IntoVisitor,
impl<T> DecodeAsType for Twhere
T: IntoVisitor,
fn decode_as_type_maybe_compact<R>(
input: &mut &[u8],
type_id: <R as TypeResolver>::TypeId,
types: &R,
is_compact: bool,
) -> Result<T, Error>where
R: TypeResolver,
Source§fn decode_as_type<R>(
input: &mut &[u8],
type_id: <R as TypeResolver>::TypeId,
types: &R,
) -> Result<Self, Error>where
R: TypeResolver,
fn decode_as_type<R>(
input: &mut &[u8],
type_id: <R as TypeResolver>::TypeId,
types: &R,
) -> Result<Self, Error>where
R: TypeResolver,
Given some input bytes, a
type_id, and type registry, attempt to decode said bytes into
Self. Implementations should modify the &mut reference to the bytes such that any bytes
not used in the course of decoding are still pointed to after decoding is complete.