Skip to main content

Context

Struct Context 

Source
pub struct Context { /* private fields */ }
Expand description

Manager of all other Z3 objects, global configuration options, etc.

An application may use multiple Z3 contexts. Objects created in one context cannot be used in another one. However, several objects may be “translated” from one context to another.

While it is not safe to access Z3 objects from multiple threads, this library includes a safe structured abstraction for usage of Z3 objects across threads. See Synchronized.

z3.rs uses an implicit thread-local context by default, which is used in all operations. Most users will not need to create their own contexts or interact with contexts directly.

To use a context with a customized configuration (e.g. setting timeouts), use with_z3_config.

Advanced users (e.g. those performing FFI with other Z3 bindings) can unsafely create their own contexts using Context::from_raw, and then use them with with_z3_context.

§See also:

Implementations§

Source§

impl Context

Source

pub fn thread_local() -> Context

Returns a handle to the default thread-local Context.

This Context is used in all z3 operations. Custom Contexts are supported through with_z3_config, which allow for running a closure inside an environment with the provided Context

§See also:
Source

pub unsafe fn from_raw(z3_ctx: Z3_context) -> Context

Construct a Context from a raw Z3_context pointer. This is mostly useful for consumers who want to interoperate with Z3 contexts created through other means, such as the C API or other bindings such as Python.

§Safety

The caller must ensure the pointer is valid and not already managed elsewhere.

§Examples
use z3::ast::Bool;
use z3_sys::{Z3_mk_config, Z3_del_config, Z3_mk_context_rc};
use z3::Context;

// Create a raw Z3_config using the low-level API
let cfg = unsafe { Z3_mk_config() }.unwrap();
let raw_ctx = unsafe { Z3_mk_context_rc(cfg) }.unwrap();
let ctx = unsafe { Context::from_raw(raw_ctx) };
// Use `ctx` as usual...
unsafe { Z3_del_config(cfg) };
let b = Bool::from_bool(true);
assert_eq!(b.as_bool(), Some(true));
Source

pub fn get_z3_context(&self) -> Z3_context

Source

pub fn interrupt(&self)

Interrupt a solver performing a satisfiability test, a tactic processing a goal, or simplify functions.

Source

pub fn handle(&self) -> ContextHandle<'_>

Obtain a handle that can be used to interrupt computation from another thread.

§See also:
Source

pub fn update_param_value(&mut self, k: &str, v: &str)

Update a global parameter.

§See also
Source

pub fn update_bool_param_value(&mut self, k: &str, v: bool)

Update a global parameter.

This is a helper function.

§See also

Trait Implementations§

Source§

impl Clone for Context

Source§

fn clone(&self) -> Context

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Context

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Context

Source§

fn eq(&self, other: &Context) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Context

Source§

impl StructuralPartialEq for Context

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, A> IntoAst<A> for T
where T: Into<A>, A: Ast,

Source§

fn into_ast(self, _a: &A) -> A

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.