pub struct Executor {Show 13 fields
pub ctx: Context,
pub cfg: Cfg,
pub deducers: Vec<DeducerEnum>,
pub data: Vec<Data>,
pub counter: Cell<usize>,
pub subproblem_count: Cell<usize>,
pub cur_size: Cell<usize>,
pub cur_nt: Cell<usize>,
pub waiting_tasks: UnsafeCell<TaskWaitingCost>,
pub top_task: UnsafeCell<JoinHandle<&'static Expr>>,
expr_collector: UnsafeCell<Vec<EV>>,
pub bridge: Bridge,
pub start_time: Instant,
}
Expand description
A structure representing an executor for managing and coordinating the synthesis process.
This structure encapsulates various fields required to execute synthesis tasks effectively, such as tracking state and managing data flow.
Usage:
let exec = Executor::new(ctx, cfg);
let result = exec.solve_top_blocked();
let result = DefineFun { sig: problem.synthfun().sig.clone(), expr: result};
Fields§
§ctx: Context
§cfg: Cfg
§deducers: Vec<DeducerEnum>
All deducers used in the executor.
data: Vec<Data>
Term Dispatcher data structures
counter: Cell<usize>
A counter for the number of expressions enumerated.
subproblem_count: Cell<usize>
A counter for the number of subproblems processed.
cur_size: Cell<usize>
The current size of the expression being processed.
cur_nt: Cell<usize>
The current non-terminal index being processed.
waiting_tasks: UnsafeCell<TaskWaitingCost>
No longer used Queue of tasks waiting for cost limit to be released.
top_task: UnsafeCell<JoinHandle<&'static Expr>>
Top task to be executed.
expr_collector: UnsafeCell<Vec<EV>>
§bridge: Bridge
Bridge to interact with other threads
start_time: Instant
Timestamp when the executor started.
Implementations§
Source§impl Executor
impl Executor
Sourcepub fn problem_count(&self) -> usize
pub fn problem_count(&self) -> usize
Retrieves the count of subproblems processed by the executor.
pub fn top_task(&self) -> &mut JoinHandle<&'static Expr>
Sourcepub fn collect_expr(&self, e: &'static Expr, v: Value)
pub fn collect_expr(&self, e: &'static Expr, v: Value)
Collects expressions and their associated values. Save them into the expr_collector
field.
Sourcepub fn waiting_tasks(&self) -> &mut TaskWaitingCost
pub fn waiting_tasks(&self) -> &mut TaskWaitingCost
Returns a mutable reference to the field waiting_tasks
.
Sourcepub fn extract_expr_collector(&self) -> Vec<EV>
pub fn extract_expr_collector(&self) -> Vec<EV>
Extracts the contents of the expr_collector
and returns them as a Vec<EV>
.
Sourcepub fn cur_data(&self) -> &Data
pub fn cur_data(&self) -> &Data
Provides a method to access the current data entry from the data
vector within the Executor context.
Sourcepub async fn solve_task(&'static self, problem: Problem) -> &'static Expr
pub async fn solve_task(&'static self, problem: Problem) -> &'static Expr
Solves a given synthesis problem asynchronously and returns a reference to an expression.
Sourcepub async fn generate_condition(
&'static self,
problem: Problem,
result: &'static Expr,
) -> &'static Expr
pub async fn generate_condition( &'static self, problem: Problem, result: &'static Expr, ) -> &'static Expr
Asynchronously generates a conditional expression for a given problem and result.
Sourcepub fn solve_top_blocked(self) -> &'static Expr
pub fn solve_top_blocked(self) -> &'static Expr
Attempts to solve the top-level problem and manage its execution.
Sourcepub fn solve_top_with_limit(self) -> Option<&'static Expr>
pub fn solve_top_with_limit(self) -> Option<&'static Expr>
Attempts to solve the top problem with a limit within the Executor
.
Sourcepub fn enum_expr(&'static self, e: Expr, v: Value) -> Result<(), ()>
pub fn enum_expr(&'static self, e: Expr, v: Value) -> Result<(), ()>
Handle when a new express is enumerated.
Sourcefn collect_condition(&'static self, e: &Expr)
fn collect_condition(&'static self, e: &Expr)
Collects and inserts an expression into a shared collection of conditions CONDITIONS
Auto Trait Implementations§
impl !Freeze for Executor
impl !RefUnwindSafe for Executor
impl !Send for Executor
impl !Sync for Executor
impl Unpin for Executor
impl !UnwindSafe for Executor
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