pub struct Data(UnsafeCell<AHashMap<Value, MaybeReady<&'static Expr>>>);
Expand description
A Term Dispatcher for Equal
Tuple Fields§
§0: UnsafeCell<AHashMap<Value, MaybeReady<&'static Expr>>>
Implementations§
Source§impl Data
impl Data
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates and returns a new instance of the data structure by initializing it with an empty hash map.
Sourcepub fn set(&self, v: Value, e: Expr) -> Option<&'static Expr>
pub fn set(&self, v: Value, e: Expr) -> Option<&'static Expr>
Updates the mapping by setting an associated expression for a given value and returns the updated expression when modifications are made.
Sourcepub fn set_ref(&self, v: Value, e: &'static Expr)
pub fn set_ref(&self, v: Value, e: &'static Expr)
Sets the internal mapping for a given key with a new static expression value, and if necessary, triggers a notification to propagate the update.
Sourcepub async fn acquire(&self, v: Value) -> &'static Expr
pub async fn acquire(&self, v: Value) -> &'static Expr
Acquires asynchronously an expression for a given value, waiting for its readiness if necessary.
Sourcepub fn is_pending(&self, v: Value) -> bool
pub fn is_pending(&self, v: Value) -> bool
Checks whether the synthesis term associated with the provided value is still pending.
Sourcepub fn contains(&self, v: Value) -> bool
pub fn contains(&self, v: Value) -> bool
Checks whether the underlying data structure contains the specified key.
Methods from Deref<Target = UnsafeCell<HashMap<Value, MaybeReady<&'static Expr>>>>§
Sourcepub unsafe fn replace(&self, value: T) -> T
🔬This is a nightly-only experimental API. (unsafe_cell_access
)
pub unsafe fn replace(&self, value: T) -> T
unsafe_cell_access
)Replace the value in this UnsafeCell
and return the old value.
§Safety
The caller must take care to avoid aliasing and data races.
- It is Undefined Behavior to allow calls to race with any other access to the wrapped value.
- It is Undefined Behavior to call this while any other reference(s) to the wrapped value are alive.
§Examples
#![feature(unsafe_cell_access)]
use std::cell::UnsafeCell;
let uc = UnsafeCell::new(5);
let old = unsafe { uc.replace(10) };
assert_eq!(old, 5);
1.0.0 · Sourcepub fn get(&self) -> *mut T
pub fn get(&self) -> *mut T
Gets a mutable pointer to the wrapped value.
This can be cast to a pointer of any kind.
Ensure that the access is unique (no active references, mutable or not)
when casting to &mut T
, and ensure that there are no mutations
or mutable aliases going on when casting to &T
§Examples
use std::cell::UnsafeCell;
let uc = UnsafeCell::new(5);
let five = uc.get();
Sourcepub unsafe fn as_ref_unchecked(&self) -> &T
🔬This is a nightly-only experimental API. (unsafe_cell_access
)
pub unsafe fn as_ref_unchecked(&self) -> &T
unsafe_cell_access
)Get a shared reference to the value within the UnsafeCell
.
§Safety
- It is Undefined Behavior to call this while any mutable reference to the wrapped value is alive.
- Mutating the wrapped value while the returned reference is alive is Undefined Behavior.
§Examples
#![feature(unsafe_cell_access)]
use std::cell::UnsafeCell;
let uc = UnsafeCell::new(5);
let val = unsafe { uc.as_ref_unchecked() };
assert_eq!(val, &5);
Sourcepub unsafe fn as_mut_unchecked(&self) -> &mut T
🔬This is a nightly-only experimental API. (unsafe_cell_access
)
pub unsafe fn as_mut_unchecked(&self) -> &mut T
unsafe_cell_access
)Get an exclusive reference to the value within the UnsafeCell
.
§Safety
- It is Undefined Behavior to call this while any other reference(s) to the wrapped value are alive.
- Mutating the wrapped value through other means while the returned reference is alive is Undefined Behavior.
§Examples
#![feature(unsafe_cell_access)]
use std::cell::UnsafeCell;
let uc = UnsafeCell::new(5);
unsafe { *uc.as_mut_unchecked() += 1; }
assert_eq!(uc.into_inner(), 6);
Trait Implementations§
Source§impl From<UnsafeCell<AHashMap<Value, MaybeReady<&'static Expr>>>> for Data
impl From<UnsafeCell<AHashMap<Value, MaybeReady<&'static Expr>>>> for Data
Source§fn from(original: UnsafeCell<HashMap<Value, MaybeReady<&'static Expr>>>) -> Data
fn from(original: UnsafeCell<HashMap<Value, MaybeReady<&'static Expr>>>) -> Data
Auto Trait Implementations§
impl !Freeze for Data
impl !RefUnwindSafe for Data
impl !Send for Data
impl !Sync for Data
impl Unpin for Data
impl !UnwindSafe for Data
Blanket Implementations§
Source§impl<T> AllocForAny<T> for T
impl<T> AllocForAny<T> for T
Source§fn galloc(self) -> &'static T
fn galloc(self) -> &'static T
Provides a method to allocate an instance of T
on the heap with a static lifetime.
This implementation of galloc
takes ownership of the T
instance and uses the alloc
function to place it in a location with a static lifetime, presumably managing it in a way that ensures its persistence for the duration of the program.
This can be particularly useful for scenarios where a static lifetime is required, such as when interfacing with systems or patterns that necessitate global state or long-lived data.
Source§fn galloc_mut(self) -> &'static T
fn galloc_mut(self) -> &'static T
Provides a method that moves the instance and returns a reference to it allocated with a static lifetime.
This method utilizes alloc_mut
to perform the allocation, likely involving allocating the resource in a manner that ensures it lives for the entire duration of the application.
These semantics allow the user to safely assume that the reference will not expire during the program’s execution, making it suitable for long-lived data structures or operations that require such guarantees.
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
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