14 #ifndef OR_TOOLS_SAT_CP_CONSTRAINTS_H_
15 #define OR_TOOLS_SAT_CP_CONSTRAINTS_H_
42 : literals_(literals),
45 integer_trail_(integer_trail) {}
51 const std::vector<
Literal> literals_;
53 std::vector<
Literal> literal_reason_;
73 IntegerVariable target_var,
const absl::Span<const IntegerVariable> vars,
74 const absl::Span<const IntegerValue> offsets,
75 const absl::Span<const Literal> selectors,
76 const absl::Span<const Literal> enforcements,
Model*
model);
83 const std::vector<IntegerVariable>
vars_;
84 const std::vector<IntegerValue> offsets_;
85 const std::vector<Literal> selectors_;
86 const std::vector<Literal> enforcements_;
91 std::vector<Literal> literal_reason_;
92 std::vector<IntegerLiteral> integer_reason_;
102 const std::vector<int64>&
input) {
103 std::vector<IntegerValue> result(
input.size());
104 for (
int i = 0; i <
input.size(); ++i) {
105 result[i] = IntegerValue(
input[i]);
112 const std::vector<Literal>& literals,
bool value) {
119 model->TakeOwnership(constraint);
124 IntegerVariable target_var,
const absl::Span<const IntegerVariable> vars,
125 const absl::Span<const IntegerValue> offsets,
126 const absl::Span<const Literal> selectors) {
130 selectors, {},
model);
132 model->TakeOwnership(constraint);
137 IntegerVariable target_var,
const absl::Span<const IntegerVariable> vars,
138 const absl::Span<const IntegerValue> offsets,
139 const absl::Span<const Literal> selectors,
140 const absl::Span<const Literal> enforcements) {
144 selectors, enforcements,
model);
146 model->TakeOwnership(constraint);
160 IntegerVariable target_var,
const std::vector<IntegerVariable>& vars,
161 const std::vector<Literal>& selectors) {
162 CHECK_EQ(vars.size(), selectors.size());
164 const std::vector<IntegerValue> offsets(vars.size(), IntegerValue(0));
165 if (vars.size() > 2) {
169 if (vars.size() > 2) {
180 #endif // OR_TOOLS_SAT_CP_CONSTRAINTS_H_