18#include "absl/strings/str_format.h"
26#pragma warning(disable : 4351 4355 4804 4805)
31class IntervalVarStartExpr :
public BaseIntExpr {
33 explicit IntervalVarStartExpr(IntervalVar*
const i)
34 : BaseIntExpr(i->solver()), interval_(i) {}
35 ~IntervalVarStartExpr()
override {}
37 int64_t Min()
const override {
return interval_->StartMin(); }
39 void SetMin(int64_t m)
override { interval_->SetStartMin(m); }
41 int64_t Max()
const override {
return interval_->StartMax(); }
43 void SetMax(int64_t m)
override { interval_->SetStartMax(m); }
45 void SetRange(int64_t l, int64_t u)
override {
46 interval_->SetStartRange(l, u);
49 void SetValue(int64_t v)
override { interval_->SetStartRange(v, v); }
51 bool Bound()
const override {
52 return interval_->StartMin() == interval_->StartMax();
55 void WhenRange(Demon* d)
override { interval_->WhenStartRange(d); }
57 std::string DebugString()
const override {
58 return absl::StrFormat(
"start(%s)", interval_->DebugString());
61 void Accept(ModelVisitor*
const visitor)
const override {
68 IntervalVar* interval_;
72class IntervalVarEndExpr :
public BaseIntExpr {
74 explicit IntervalVarEndExpr(IntervalVar*
const i)
75 : BaseIntExpr(i->solver()), interval_(i) {}
76 ~IntervalVarEndExpr()
override {}
78 int64_t Min()
const override {
return interval_->EndMin(); }
80 void SetMin(int64_t m)
override { interval_->SetEndMin(m); }
82 int64_t Max()
const override {
return interval_->EndMax(); }
84 void SetMax(int64_t m)
override { interval_->SetEndMax(m); }
86 void SetRange(int64_t l, int64_t u)
override { interval_->SetEndRange(l, u); }
88 void SetValue(int64_t v)
override { interval_->SetEndRange(v, v); }
90 bool Bound()
const override {
91 return interval_->EndMin() == interval_->EndMax();
94 void WhenRange(Demon* d)
override { interval_->WhenEndRange(d); }
96 std::string DebugString()
const override {
97 return absl::StrFormat(
"end(%s)", interval_->DebugString());
100 void Accept(ModelVisitor*
const visitor)
const override {
107 IntervalVar* interval_;
111class IntervalVarDurationExpr :
public BaseIntExpr {
113 explicit IntervalVarDurationExpr(IntervalVar*
const i)
114 : BaseIntExpr(i->solver()), interval_(i) {}
115 ~IntervalVarDurationExpr()
override {}
117 int64_t Min()
const override {
return interval_->DurationMin(); }
119 void SetMin(int64_t m)
override { interval_->SetDurationMin(m); }
121 int64_t Max()
const override {
return interval_->DurationMax(); }
123 void SetMax(int64_t m)
override { interval_->SetDurationMax(m); }
125 void SetRange(int64_t l, int64_t u)
override {
126 interval_->SetDurationRange(l, u);
129 void SetValue(int64_t v)
override { interval_->SetDurationRange(v, v); }
131 bool Bound()
const override {
132 return interval_->DurationMin() == interval_->DurationMax();
135 void WhenRange(Demon* d)
override { interval_->WhenDurationRange(d); }
137 std::string DebugString()
const override {
138 return absl::StrFormat(
"duration(%s)", interval_->DebugString());
141 void Accept(ModelVisitor*
const visitor)
const override {
148 IntervalVar* interval_;
187 var->PerformedExpr()->
Var(),
var->StartExpr(), unperformed_value);
192 var->PerformedExpr()->
Var(),
var->DurationExpr(), unperformed_value);
197 var->PerformedExpr()->
Var(),
var->EndExpr(), unperformed_value);
The class IntExpr is the base of all integer expressions in constraint programming.
IntVar * Var() override
Creates a variable from the expression.
Interval variables are often used in scheduling.
static const char kIntervalArgument[]
static const char kStartExpr[]
static const char kDurationExpr[]
static const char kEndExpr[]
virtual std::string name() const
Object naming.
bool HasName() const
Returns whether the object has been named or not.
void set_name(const std::string &name)
IntExpr * RegisterIntExpr(IntExpr *const expr)
Registers a new IntExpr and wraps it inside a TraceIntExpr if necessary.
IntExpr * MakeConditionalExpression(IntVar *const condition, IntExpr *const expr, int64_t unperformed_value)
Conditional Expr condition ? expr : unperformed_value.
T * RevAlloc(T *object)
Registers the given object as being reversible.
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Collection of objects used to extend the Constraint Solver library.
IntExpr * BuildSafeEndExpr(IntervalVar *var, int64_t unperformed_value)
IntExpr * BuildEndExpr(IntervalVar *var)
IntExpr * BuildStartExpr(IntervalVar *var)
IntExpr * BuildSafeStartExpr(IntervalVar *var, int64_t unperformed_value)
IntExpr * BuildSafeDurationExpr(IntervalVar *var, int64_t unperformed_value)
IntExpr * BuildDurationExpr(IntervalVar *var)