# BBDD Manipulation package A C++ library for creating, manipulating, and analyzing **Biconditional Binary Decision Diagrams (BBDDs)**. It provides efficient data structures and algorithms for representing boolean functions in the form of BBDDs, with an intuitive API for integration into projects. --- ## 📂 Project Structure Below is an overview of the main files and directories: - `include/` - Public headers - `bbdd.hpp` - main functionality of merging and extending bbdds - `bbdd_node.hpp` - bbdd node definition, hashing function, dumping node, compare nodes - `bbdd_types.hpp` - bbdd cases, bbdd operations, and pointer sized - `chain_variable_ordering.hpp` - creating and manipulating chain variable ordering - `computed_table.hpp` - merge cache data structure - `extend_table.hpp` - extend cache data structure - `unique_table.hpp` - main storage structure with inserting and deleting functions - `examples/` - Usage demonstrations - `full_adder.cpp` - example of creating the bbdd of a full adder and writing the design to a .dot and .blif file - `CMakeLists.txt` - Build configuration (CMake project setup) - `README.md` - This file - `LICENSE` - License file --- ## Getting Started ### Installation requirements - CMAKE version >= 3.31.6 - c++ compiler (tested with g++ version 15.2.1 20250808) ### Build with CMake - Build examples ```bash git clone https://phabricator.ict.tuwien.ac.at/source/SoC_BBDD_Library.git mkdir build && cd build cmake .. make ``` - Build the docs ```bash git clone https://phabricator.ict.tuwien.ac.at/source/SoC_BBDD_Library.git mkdir build && cd build cmake .. make docs ``` ### Full adder examples ```bash ./build/example/full_adder ``` - Creates `sum.dot` - can be converted to .png using the following command ```bash dot -Tpng sum.dot -o sum.png ``` - Also created `full_adder.blif` - can for example be opened in yosys ```bash read_blif full_adder.png ```