#diagram #decision #bindings #build #tree #cudd #cu

sys cudd-sys

Bindings for CU Decision Diagram library (CUDD)

3 releases (1 stable)

Uses old Rust 2015

1.0.0 Sep 14, 2021
0.1.1 Aug 9, 2021
0.1.0 Jun 17, 2015

#1389 in Rust patterns

Used in cudd

CC0 license


Crates.io Api Docs Continuous integration

Rust Bindings for the CUDD library

This crate provides unsafe Rust bindings for the University of Colorado decision diagram package (CUDD), including the DDDMP serialisation library. It uses version 3.0.0 of CUDD available from the unofficial Github mirror and compiles on Linux and MacOS (you should be also able to build CUDD on Windows using cygwin, but the project is not set-up to do it automatically).

On Linux and macOS, you should ideally have autoconf, automake and libtool installed to build CUDD. And of course, some C/C++ compiler (clang, gcc, etc.).

In the root module, you will find declarations of the C structs and types used throughout CUDD. The main API of the CUDD package is then exported in ::cudd. However, CUDD also includes other "public" functionality (multiway-branching trees, extended double precision numbers, serialisation, ...) which can be found in the remaining modules.

In some cases, there are macro and constant definitions which cannot be directly exported to Rust. These have been re-implemented and should have their own documentation. For the functions which are re-exported without change, please refer to the original CUDD doxygen and manual. The documentation of the DDDMP library is available here.

Completeness: The main CUDD API should be fully reproduced here (except for one small issue with f128 numbers). The remaining modules may still be incomplete: if you need a function that isn't exported yet, let us know in the issues.

Correctness: Unfortunately, CUDD cannot be processed using bindgen, so the API was reproduced using a semi-automated method with a manual validation step (bunch of regexes that a human makes sure didn't break anything ;)). As such, it is possible that there are some minor problems that need to be sorted out. Please file an issue if you see any unexpected behaviour or segfaults.