Enum mmtk::util::metadata::MetadataSpec
source · 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
impl MetadataSpec
sourcepub const fn is_on_side(&self) -> bool
pub const fn is_on_side(&self) -> bool
Is this metadata stored in the side table?
sourcepub const fn is_in_header(&self) -> bool
pub const fn is_in_header(&self) -> bool
Is this metadata stored in the object header?
sourcepub const fn extract_side_spec(&self) -> &SideMetadataSpec
pub const fn extract_side_spec(&self) -> &SideMetadataSpec
Extract SideMetadataSpec from a MetadataSpec. Panics if this is not side metadata.
sourcepub unsafe fn load<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
mask: Option<T>
) -> T
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.
sourcepub fn load_atomic<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
mask: Option<T>,
ordering: Ordering
) -> T
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.
sourcepub unsafe fn store<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
mask: Option<T>
)
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.
sourcepub fn store_atomic<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
mask: Option<T>,
ordering: Ordering
)
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.
sourcepub 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>
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.
sourcepub fn fetch_add_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
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.
sourcepub fn fetch_sub_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
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.
sourcepub fn fetch_and_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
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.
sourcepub fn fetch_or_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
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.
sourcepub 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>
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
impl Clone for MetadataSpec
source§fn clone(&self) -> MetadataSpec
fn clone(&self) -> MetadataSpec
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for MetadataSpec
impl Debug for MetadataSpec
impl Copy for MetadataSpec
Auto Trait Implementations§
impl RefUnwindSafe for MetadataSpec
impl Send for MetadataSpec
impl Sync for MetadataSpec
impl Unpin for MetadataSpec
impl UnwindSafe for MetadataSpec
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for 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