Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/robbepop/ipasir-rs

FFI bindings for the IPASIR incremental SAT solver interface.
https://github.com/robbepop/ipasir-rs

Last synced: about 1 month ago
JSON representation

FFI bindings for the IPASIR incremental SAT solver interface.

Awesome Lists containing this project

README

        

# IPASIR interface for Rust

| Docs | Crates.io |
|:-----------------:|:--------------------:|
| [![docs][1]][2] | [![crates][3]][4] |

## What it is

IPASIR is a simple C interface to incremental SAT solvers.
(It stands for Reentrant Incremental Sat solver API, in reverse.)
This interface is supported by a few different solvers because it is used in the SAT competition's incremental track.
The IPASIR distribution, containing the interface and some sample solvers,
can be found at [this GitHub repository](https://github.com/biotomas/ipasir).
This IPASIR library is an attempt to semi-soundly allow Rust programs to interface with such SAT solver libraries.

## How the FFI is structured

For users of this FFI there are two distinct ways of usage.
Users can build their application on top of the `raw` module that offers direct but unsafe calls
into the C-API.
The recommended way to use this FFI is to use the `Solver` type that acts as safe wrapper around
the C-API.

Allocate a new solver instance with: `ipasir::Solver::init()`

## License

Licensed under either of

* Apache license, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

### Dual licence: [![badge][license-mit-badge]](LICENSE-MIT) [![badge][license-apache-badge]](LICENSE-APACHE)

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.

[license-mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[license-apache-badge]: https://img.shields.io/badge/license-APACHE-orange.svg

## Release Notes

### 0.3.1 - 12th April 2020

- Implement `Error` and `Display` for the error types of the crate.

### 0.3.0 - 10th April 2019

- Major API overhaul
- `ipasir::ffi::Solver` is now the FFI C targeting solver wrapper for Rust.
- `IpasirSolver` is the trait to be implemented by Rust IPASIR compatible solvers

### 0.2.0 - 25th April 2018

- Renamed `raw` module to `sys` to better fit with the rest of the ecosystem.
- `Lit::to_raw` is no longer publicly visible.
- Removed `LitOrEnd` and `EndOfClause`.
- Split `Solver::add` API into `Solver::add_lit` and `Solver::finalize_clause`.
- Add `Clause::len` and `Clause::get` methods.
- Add `Lit::new_unchecked` constructor.
- Add `Lit::sign` and `Sign` enum.
- Add `Lit::var` method.
- Make `SolveControl` now publicly visible. (Was accidentally private before.)

### 0.1.0 - 24th April 2018

- Initial Release

[1]: https://docs.rs/ipasir/badge.svg
[2]: https://docs.rs/ipasir/
[3]: https://img.shields.io/crates/v/ipasir.svg
[4]: https://crates.io/crates/ipasir/