pub unsafe trait ObjectCore: Sized + 'static {
const TYPE_KEY: &'static str;
const TYPE_DEPTH: i32;
// Required methods
fn type_index() -> i32;
unsafe fn object_header_mut(this: &mut Self) -> &mut TVMFFIObject;
}Expand description
The native representation of an object-system type.
§Safety
Self must have a compatible C layout with a valid TVMFFIObject prefix
at offset zero. Its registered type, inheritance and payload must describe
that layout correctly, including for foreign declarations.
A live managed object and its header must remain at their original allocation
address until destruction. Safe APIs must not move, replace or expose mutable
access to that header while managed; payload mutation must preserve its type
invariants. Preallocation builders and values moved out during destruction
are not live managed objects and cannot be borrowed as AnyView.
Required Associated Constants§
Sourceconst TYPE_DEPTH: i32
const TYPE_DEPTH: i32
Depth of this type in the object inheritance tree.
The root Object has depth zero, and every registered subtype has
depth one greater than its parent. This value must be non-negative and
agree with the runtime type table entry for Self.
Required Methods§
fn type_index() -> i32
Sourceunsafe fn object_header_mut(this: &mut Self) -> &mut TVMFFIObject
unsafe fn object_header_mut(this: &mut Self) -> &mut TVMFFIObject
Return the object header This function is implemented as a static function so
§Arguments
this- The object to get the header
§Returns
&mut TVMFFIObject- The object header \return The object header
§Safety
The caller must have exclusive access to the header and preserve the managed allocation’s address, reference counts, deleter and dynamic type.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.