50 EnforcementId
id, absl::Span<const Literal> literal_reason,
51 absl::Span<const IntegerLiteral> integer_reason) {
54 for (
const Literal l : enforcement_propagator_.GetSpan(
id)) {
55 if (assignment_.LiteralIsFalse(l))
return true;
56 if (assignment_.LiteralIsTrue(l)) {
57 temp_reason_.push_back(l.Negated());
61 unique_unassigned = l.Index();
64 temp_reason_.insert(temp_reason_.end(), literal_reason.begin(),
65 literal_reason.end());
67 return integer_trail_->ReportConflict(temp_reason_, integer_reason);
72 return integer_trail_->SafeEnqueueLiteral(
73 Literal(unique_unassigned).Negated(), temp_reason_, integer_reason);
78 absl::Span<const Literal> literal_reason,
79 absl::Span<const IntegerLiteral> integer_reason) {
81 temp_reason_.insert(temp_reason_.end(), literal_reason.begin(),
82 literal_reason.end());
83 enforcement_propagator_.AddEnforcementReason(
id, &temp_reason_);
84 return integer_trail_->Enqueue(i_lit, temp_reason_, integer_reason);
97 absl::Span<const Literal> literal_reason,
98 absl::Span<const IntegerLiteral> integer_reason) {
100 temp_reason_.insert(temp_reason_.end(), literal_reason.begin(),
101 literal_reason.end());
102 enforcement_propagator_.AddEnforcementReason(
id, &temp_reason_);
103 temp_integer_reason_.clear();
104 temp_integer_reason_.insert(temp_integer_reason_.end(),
105 integer_reason.begin(), integer_reason.end());
106 return integer_trail_->ConditionalEnqueue(lit, i_lit, &temp_reason_,
107 &temp_integer_reason_);
111 EnforcementId
id,
Literal literal, absl::Span<const Literal> literal_reason,
112 absl::Span<const IntegerLiteral> integer_reason) {
113 temp_reason_.clear();
114 temp_reason_.insert(temp_reason_.end(), literal_reason.begin(),
115 literal_reason.end());
116 enforcement_propagator_.AddEnforcementReason(
id, &temp_reason_);
117 return integer_trail_->EnqueueLiteral(literal, temp_reason_, integer_reason);
121 EnforcementId
id, absl::Span<const Literal> literal_reason,
122 absl::Span<const IntegerLiteral> integer_reason) {
123 temp_reason_.clear();
124 temp_reason_.insert(temp_reason_.end(), literal_reason.begin(),
125 literal_reason.end());
126 enforcement_propagator_.AddEnforcementReason(
id, &temp_reason_);
127 return integer_trail_->ReportConflict(temp_reason_, integer_reason);