pub unsafe trait ListItem<const ID: u64 = 0>: ListArcSafe<ID> {
// Required methods
unsafe fn view_links(me: *const Self) -> *mut ListLinks<ID>;
unsafe fn view_value(me: *mut ListLinks<ID>) -> *const Self;
unsafe fn prepare_to_insert(me: *const Self) -> *mut ListLinks<ID>;
unsafe fn post_remove(me: *mut ListLinks<ID>) -> *const Self;
}Expand description
Implemented by types where a ListArc<Self> can be inserted into a List.
§Safety
Implementers must ensure that they provide the guarantees documented on methods provided by this trait.
Required Methods§
Sourceunsafe fn view_links(me: *const Self) -> *mut ListLinks<ID>
unsafe fn view_links(me: *const Self) -> *mut ListLinks<ID>
Views the ListLinks for this value.
§Guarantees
If there is a previous call to prepare_to_insert and there is no call to post_remove
since the most recent such call, then this returns the same pointer as the one returned by
the most recent call to prepare_to_insert.
Otherwise, the returned pointer points at a read-only ListLinks with two null pointers.
§Safety
The provided pointer must point at a valid value. (It need not be in an Arc.)
Sourceunsafe fn view_value(me: *mut ListLinks<ID>) -> *const Self
unsafe fn view_value(me: *mut ListLinks<ID>) -> *const Self
View the full value given its ListLinks field.
Can only be used when the value is in a list.
§Guarantees
- Returns the same pointer as the one passed to the most recent call to
prepare_to_insert. - The returned pointer is valid until the next call to
post_remove.
§Safety
- The provided pointer must originate from the most recent call to
prepare_to_insert, or from a call toview_linksthat happened after the most recent call toprepare_to_insert. - Since the most recent call to
prepare_to_insert, thepost_removemethod must not have been called.
Sourceunsafe fn prepare_to_insert(me: *const Self) -> *mut ListLinks<ID>
unsafe fn prepare_to_insert(me: *const Self) -> *mut ListLinks<ID>
This is called when an item is inserted into a List.
§Guarantees
The caller is granted exclusive access to the returned ListLinks until post_remove is
called.
§Safety
- The provided pointer must point at a valid value in an
Arc. - Calls to
prepare_to_insertandpost_removeon the same value must alternate. - The caller must own the
ListArcfor this value. - The caller must not give up ownership of the
ListArcunlesspost_removehas been called after this call toprepare_to_insert.
Sourceunsafe fn post_remove(me: *mut ListLinks<ID>) -> *const Self
unsafe fn post_remove(me: *mut ListLinks<ID>) -> *const Self
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.