1cfg_if::cfg_if! {
4 if #[cfg(feature = "manager-pointer")] {
5 pub use pointer::{BDDFunction, BDDManagerRef};
6 } else if #[cfg(feature = "manager-index")] {
7 pub use index::{BDDFunction, BDDManagerRef};
8 } else {
9 pub type BDDFunction = ();
10 pub type BDDManagerRef = ();
11 }
12}
13
14#[allow(unused_variables)]
16pub fn new_manager(
17 inner_node_capacity: usize,
18 apply_cache_capacity: usize,
19 threads: u32,
20) -> BDDManagerRef {
21 cfg_if::cfg_if! {
22 if #[cfg(feature = "manager-pointer")] {
23 pointer::BDDManagerRef::new_manager(inner_node_capacity, apply_cache_capacity, threads)
24 } else if #[cfg(feature = "manager-index")] {
25 index::BDDManagerRef::new_manager(inner_node_capacity, 2, apply_cache_capacity, threads)
26 } else {
27 unreachable!()
28 }
29 }
30}
31
32pub fn print_stats() {
34 #[cfg(not(feature = "statistics"))]
35 eprintln!("[statistics feature disabled]");
36
37 #[cfg(feature = "statistics")]
38 oxidd_rules_bdd::simple::print_stats();
39}
40
41#[cfg(all(feature = "manager-index", not(feature = "manager-pointer")))]
42mod index {
43 use oxidd_manager_index::node::fixed_arity::NodeWithLevelCons;
44 use oxidd_manager_index::terminal_manager::StaticTerminalManagerCons;
45 use oxidd_rules_bdd::simple::BDDOp;
46 use oxidd_rules_bdd::simple::BDDRules;
47 use oxidd_rules_bdd::simple::BDDTerminal;
48
49 use crate::util::type_cons::DD;
50
51 crate::util::dd_index_based!(BDD {
52 node: NodeWithLevelCons<2>,
53 edge_tag: (),
54 terminal_manager: StaticTerminalManagerCons<BDDTerminal>,
55 rules: BDDRulesCons for BDDRules,
56 manager_data: BDDManagerDataCons for BDDManagerData,
57 terminals: 2,
58 });
59
60 crate::util::manager_data!(BDDManagerData for BDD, operator: BDDOp, cache_max_arity: 3);
61
62 crate::util::manager_ref_index_based!(pub struct BDDManagerRef(<BDD as DD>::ManagerRef) with BDDManagerData);
63
64 #[cfg(not(feature = "multi-threading"))]
65 type FunctionInner = oxidd_rules_bdd::simple::BDDFunction<<BDD as DD>::Function>;
66 #[cfg(feature = "multi-threading")]
67 type FunctionInner = oxidd_rules_bdd::simple::BDDFunctionMT<<BDD as DD>::Function>;
68
69 #[derive(
71 Clone,
72 PartialEq,
73 Eq,
74 PartialOrd,
75 Ord,
76 Hash,
77 oxidd_derive::Function,
78 oxidd_derive::FunctionSubst,
79 oxidd_derive::BooleanFunction,
80 oxidd_derive::BooleanFunctionQuant,
81 )]
82 #[use_manager_ref(BDDManagerRef, BDDManagerRef(inner))]
83 pub struct BDDFunction(FunctionInner);
84 crate::util::derive_raw_function_index_based!(for: BDDFunction, inner: FunctionInner);
85
86 impl oxidd_dump::dot::DotStyle<()> for BDDFunction {}
88}
89
90#[cfg(feature = "manager-pointer")]
91mod pointer {
92 use oxidd_manager_pointer::node::fixed_arity::NodeWithLevelCons;
93 use oxidd_manager_pointer::terminal_manager::StaticTerminalManagerCons;
94 use oxidd_rules_bdd::simple::BDDOp;
95 use oxidd_rules_bdd::simple::BDDRules;
96 use oxidd_rules_bdd::simple::BDDTerminal;
97
98 use crate::util::type_cons::DD;
99
100 crate::util::dd_pointer_based!(BDD {
101 node: NodeWithLevelCons<2>,
102 edge_tag: (),
103 terminal_manager: StaticTerminalManagerCons<BDDTerminal>,
104 rules: BDDRulesCons for BDDRules,
105 manager_data: BDDManagerDataCons for BDDManagerData,
106 tag_bits: 2,
107 });
108
109 crate::util::manager_data!(BDDManagerData for BDD, operator: BDDOp, cache_max_arity: 3);
110
111 crate::util::manager_ref_pointer_based!(pub struct BDDManagerRef(<BDD as DD>::ManagerRef) with BDDManagerData);
112
113 #[cfg(not(feature = "multi-threading"))]
114 type FunctionInner = oxidd_rules_bdd::simple::BDDFunction<<BDD as DD>::Function>;
115 #[cfg(feature = "multi-threading")]
116 type FunctionInner = oxidd_rules_bdd::simple::BDDFunctionMT<<BDD as DD>::Function>;
117
118 #[derive(
120 Clone,
121 PartialEq,
122 Eq,
123 PartialOrd,
124 Ord,
125 Hash,
126 oxidd_derive::Function,
127 oxidd_derive::FunctionSubst,
128 oxidd_derive::BooleanFunction,
129 oxidd_derive::BooleanFunctionQuant,
130 )]
131 #[use_manager_ref(BDDManagerRef, BDDManagerRef(inner))]
132 pub struct BDDFunction(FunctionInner);
133 crate::util::derive_raw_function_pointer_based!(for: BDDFunction, inner: FunctionInner);
134
135 impl oxidd_dump::dot::DotStyle<()> for BDDFunction {}
137}