pub enum MetadataSpec {
    InHeader(HeaderMetadataSpec),
    OnSide(SideMetadataSpec),
}
Expand description

This struct stores the specification of a metadata bit-set. It is used as an input to the (inline) functions provided by the side metadata module.

Each plan or policy which uses a metadata bit-set, needs to create an instance of this struct.

For performance reasons, objects of this struct should be constants.

Variants§

§

InHeader(HeaderMetadataSpec)

In-header metadata uses bits from an object header.

§

OnSide(SideMetadataSpec)

On-side metadata uses a side table.

Implementations§

source§

impl MetadataSpec

source

pub const fn is_on_side(&self) -> bool

Is this metadata stored in the side table?

source

pub const fn is_in_header(&self) -> bool

Is this metadata stored in the object header?

source

pub const fn extract_side_spec(&self) -> &SideMetadataSpec

Extract SideMetadataSpec from a MetadataSpec. Panics if this is not side metadata.

source

pub unsafe fn load<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, mask: Option<T> ) -> T

A function to non-atomically load the specified metadata’s content. Returns the metadata value.

§Arguments:
  • object: is a reference to the target object.
  • mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
§Safety

This is a non-atomic load, thus not thread-safe.

source

pub fn load_atomic<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, mask: Option<T>, ordering: Ordering ) -> T

A function to atomically load the specified metadata’s content. Returns the metadata value.

§Arguments:
  • object: is a reference to the target object.
  • mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
  • atomic_ordering: is the ordering for the load operation.
source

pub unsafe fn store<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, mask: Option<T> )

A function to non-atomically store a value to the specified metadata.

§Arguments:
  • object: is a reference to the target object.
  • val: is the new metadata value to be stored.
  • mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
§Safety

This is a non-atomic store, thus not thread-safe.

source

pub fn store_atomic<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, mask: Option<T>, ordering: Ordering )

A function to atomically store a value to the specified metadata.

§Arguments:
  • object: is a reference to the target object.
  • val: is the new metadata value to be stored.
  • mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
  • ordering: is the ordering for the store operation.
source

pub fn compare_exchange_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, old_val: T, new_val: T, mask: Option<T>, success_order: Ordering, failure_order: Ordering ) -> Result<T, T>

A function to atomically compare-and-exchange the specified metadata’s content. Returns true if the operation is successful, and false otherwise.

§Arguments:
  • object: is a reference to the target object.
  • old_val: is the expected current value of the metadata.
  • new_val: is the new metadata value to be stored if the compare-and-exchange operation is successful.
  • mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
  • success_order: is the atomic ordering used if the operation is successful.
  • failure_order: is the atomic ordering used if the operation fails.
source

pub fn fetch_add_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T

A function to atomically perform an add operation on the specified metadata’s content. Returns the old metadata value.

§Arguments:
  • object: is a reference to the target object.
  • val: is the value to be added to the current value of the metadata.
  • order: is the atomic ordering of the fetch-and-add operation.
source

pub fn fetch_sub_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T

A function to atomically perform a subtract operation on the specified metadata’s content. Returns the old metadata value.

§Arguments:
  • object: is a reference to the target object.
  • val: is the value to be subtracted from the current value of the metadata.
  • order: is the atomic ordering of the fetch-and-add operation.
source

pub fn fetch_and_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T

A function to atomically perform a bit-and operation on the specified metadata’s content. Returns the old metadata value.

§Arguments:
  • object: is a reference to the target object.
  • val: is the value to bit-and with the current value of the metadata.
  • order: is the atomic ordering of the fetch-and-add operation.
source

pub fn fetch_or_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T

A function to atomically perform a bit-or operation on the specified metadata’s content. Returns the old metadata value.

§Arguments:
  • object: is a reference to the target object.
  • val: is the value to bit-or with the current value of the metadata.
  • order: is the atomic ordering of the fetch-and-add operation.
source

pub fn fetch_update_metadata<VM: VMBinding, T: MetadataValue, F: FnMut(T) -> Option<T> + Copy>( &self, object: ObjectReference, set_order: Ordering, fetch_order: Ordering, f: F ) -> Result<T, T>

A function to atomically perform an update operation on the specified metadata’s content. The semantics are the same as Rust’s fetch_update on atomic types. Returns a Result of Ok(previous_value) if the function returned Some(_), else Err(previous_value).

§Arguments:
  • object: is a reference to the target object.
  • val: is the value to bit-or with the current value of the metadata.
  • order: is the atomic ordering of the fetch-and-add operation.
  • f: the update function. The function may be called multiple times.

Trait Implementations§

source§

impl Clone for MetadataSpec

source§

fn clone(&self) -> MetadataSpec

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 Debug for MetadataSpec

source§

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

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

impl Copy for MetadataSpec

Auto Trait Implementations§

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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.