AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
cartesian_set.h
1#ifndef CEGAR_CARTESIAN_SET_H
2#define CEGAR_CARTESIAN_SET_H
3
4#include "downward/algorithms/dynamic_bitset.h"
5
6#include <ostream>
7#include <vector>
8
9namespace cartesian_abstractions {
10using Bitset = dynamic_bitset::DynamicBitset<unsigned short>;
11
12/*
13 For each variable store a subset of its domain.
14
15 The underlying data structure is a vector of bitsets.
16*/
17class CartesianSet {
18 std::vector<Bitset> domain_subsets;
19
20public:
21 explicit CartesianSet(const std::vector<int>& domain_sizes);
22
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);
28
29 bool test(int var, int value) const { return domain_subsets[var][value]; }
30
31 int count(int var) const;
32 bool intersects(const CartesianSet& other, int var) const;
33 bool is_superset_of(const CartesianSet& other) const;
34
35 friend std::ostream&
36 operator<<(std::ostream& os, const CartesianSet& cartesian_set);
37};
38} // namespace cartesian_abstractions
39
40#endif