1#ifndef CEGAR_CARTESIAN_SET_H
2#define CEGAR_CARTESIAN_SET_H
4#include "downward/algorithms/dynamic_bitset.h"
9namespace cartesian_abstractions {
10using Bitset = dynamic_bitset::DynamicBitset<unsigned short>;
18 std::vector<Bitset> domain_subsets;
21 explicit CartesianSet(
const std::vector<int>& domain_sizes);
23 void add(
int var,
int value);
24 void set_single_value(
int var,
int value);
25 void remove(
int var,
int value);
26 void add_all(
int var);
27 void remove_all(
int var);
29 bool test(
int var,
int value)
const {
return domain_subsets[var][value]; }
31 int count(
int var)
const;
32 bool intersects(
const CartesianSet& other,
int var)
const;
33 bool is_superset_of(
const CartesianSet& other)
const;
36 operator<<(std::ostream& os,
const CartesianSet& cartesian_set);