13 friend std::hash<self_type>;
19 using node_ptr =
typename table_type::node_ptr;
26 using label_type =
typename table_type::node_type::label_type;
35 static table_type& table() {
36 static table_type instance;
40 template<
class V,
typename R,
typename ...Args>
41 R visit_result(
const Args& ...args)
const {
49 basic_combination() : _root(nullptr) {}
55 _root(table().new_var(_label))
76 _root = table().apply_change(_root, v);
84 return self_type(table().apply_change(_root, v));
93 return _root->index() == o._root->index();
102 return _root->index() != o._root->index();
109 return self_type(table().apply_union(_root, o._root));
116 _root = table().apply_union(_root, o.root);
124 return self_type(table().apply_subtract(_root, o._root));
131 _root = table().apply_subtract(_root, o.root);
139 return self_type(table().apply_intersection(_root, o._root));
146 _root = table().apply_intersection(_root, o._root);
157 _root->accept(visitor);
163 template<
class AssignT>
165 return visit_result<contain_visitor<self_type, AssignT>,
bool>(assign);
180 struct hash<
boloq::basic_combination<T>> {
181 std::hash<typename boloq::basic_combination<T>::node_ptr> hash_fn;
183 return hash_fn(bf._root);
void accept(V &visitor) const
visitorを受理します
Definition: combination.h:156
self_type & operator+=(const self_type &o)
union を適用します
Definition: combination.h:115
basic_combination(const label_type &_label)
コンストラクタ
Definition: combination.h:54
boloq の名前空間
Definition: boolean_function.h:3
static const self_type one()
0 定節点
Definition: combination.h:61
Definition: boolean_function.h:215
self_type operator-(const self_type &o) const
subtract を行った結果を返します
Definition: combination.h:123
bool operator!=(const self_type &o) const
違う組み合わせ集合を表現しているか比較します
Definition: combination.h:101
self_type & operator&=(const self_type &o)
intersection を適用します
Definition: combination.h:145
self_type & operator-=(const self_type &o)
subtract を適用します
Definition: combination.h:130
typename table_type::node_ptr node_ptr
実際に操作されるノードの型
Definition: combination.h:19
self_type operator+(const self_type &o) const
union を行った結果を返します
Definition: combination.h:108
static const self_type zero()
1 定節点
Definition: combination.h:68
self_type operator&(const self_type &o) const
intersection の結果を返します
Definition: combination.h:138
bool operator==(const self_type &o) const
同じ組み合わせ集合を表現しているか比較します
Definition: combination.h:92
bool contain(const AssignT &assign) const
組み合わせ集合を評価します
Definition: combination.h:164
self_type & change(const label_type &v)
特定のアイテムの存在を反転させます
Definition: combination.h:75
self_type changed(const label_type &v)
特定のアイテムの存在を反転させた結果を返します
Definition: combination.h:83
typename table_type::node_type::label_type label_type
ラベルの型を表します
Definition: combination.h:26
二分決定図を操作する基本的なクラスです
Definition: combination.h:9