Infrared
Loading...
Searching...
No Matches
finite_domain.hpp
1#ifndef INFRARED_FINITEDOMAIN_HPP
2#define INFRARED_FINITEDOMAIN_HPP
3
4/*
5 * InfraRed --- A generic engine for Boltzmann sampling over constraint networks
6 * (C) Sebastian Will, 2018
7 *
8 * This file is part of the InfraRed source code.
9 *
10 * InfraRed provides a generic framework for tree decomposition-based
11 * Boltzmann sampling over constraint networks
12 */
13
20namespace ired {
21
30 public:
35 explicit
36 FiniteDomain(int domsize = 0)
37 : lb_(0),
38 ub_(domsize-1) {
39 }
40
47 explicit
48 FiniteDomain(std::pair<int,int> bounds)
49 : lb_(bounds.first),
50 ub_(bounds.second) {
51 }
52
60 FiniteDomain(int lb, int ub)
61 : lb_(lb),
62 ub_(ub) {
63 }
64
71 bool
72 empty() const {
73 return ub_ < lb_;
74 }
75
80 int
81 size() const {
82 if(empty())
83 return 0;
84
85 return ub_ - lb_ + 1;
86 }
87
92 int
93 lb() const {
94 return lb_;
95 }
96
101 int
102 ub() const {
103 return ub_;
104 }
105
118 void
119 inc(int & v) const {
120 assert( (lb_-1) <= v && v <= ub_ );
121 v++;
122 }
123
128 int
129 undet() const {
130 return lb() - 1;
131 }
132
138 bool
139 in(int v) const {
140 return lb_ <= v && v <= ub_;
141 }
142
143 private:
144 int lb_;
145 int ub_;
146 };
147
148 using FiniteDomainVector = std::vector<FiniteDomain>;
149
150}
151#endif
152
Definition finite_domain.hpp:29
FiniteDomain(int domsize=0)
construct as domain 0..(domain size - 1)
Definition finite_domain.hpp:36
FiniteDomain(std::pair< int, int > bounds)
construct as contiguous domain lb..ub
Definition finite_domain.hpp:48
int size() const
size of the domain
Definition finite_domain.hpp:81
int lb() const
lower bound
Definition finite_domain.hpp:93
bool empty() const
empty domain return emtpy?
Definition finite_domain.hpp:72
bool in(int v) const
test domain membership
Definition finite_domain.hpp:139
int ub() const
upper bound
Definition finite_domain.hpp:102
int undet() const
undetermined
Definition finite_domain.hpp:129
void inc(int &v) const
increment domain value
Definition finite_domain.hpp:119
FiniteDomain(int lb, int ub)
construct as contiguous domain lb..ub
Definition finite_domain.hpp:60
Definition assignment.hpp:29
std::vector< FiniteDomain > FiniteDomainVector
Definition finite_domain.hpp:148