19 #include "absl/container/flat_hash_map.h" 20 #include "absl/container/flat_hash_set.h" 35 type_name_ = type_name;
40 integer_argument_[arg_name] =
value;
44 const std::string& arg_name,
const std::vector<int64_t>& values) {
45 integer_array_argument_[arg_name] = values;
50 std::pair<std::string, IntTupleSet> to_insert =
51 std::make_pair(arg_name, values);
52 matrix_argument_.insert(to_insert);
57 integer_expression_argument_[arg_name] = expr;
61 const std::string& arg_name,
const std::vector<IntVar*>& vars) {
62 integer_variable_array_argument_[arg_name] = vars;
67 interval_argument_[arg_name] =
var;
71 const std::string& arg_name,
const std::vector<IntervalVar*>& vars) {
72 interval_array_argument_[arg_name] = vars;
77 sequence_argument_[arg_name] =
var;
81 const std::string& arg_name,
const std::vector<SequenceVar*>& vars) {
82 sequence_array_argument_[arg_name] = vars;
86 const std::string& arg_name)
const {
91 const std::string& arg_name)
const {
96 const std::string& arg_name, int64_t def)
const {
101 const std::string& arg_name)
const {
106 const std::string& arg_name)
const {
111 const std::string& arg_name)
const {
115 const std::vector<IntVar*>&
117 const std::string& arg_name)
const {
118 return gtl::FindOrDie(integer_variable_array_argument_, arg_name);
122 const std::string& arg_name)
const {
168 const std::string& operation,
175 const std::string& operation,
178 if (delegate !=
nullptr) {
195 const std::string& arg_name,
const std::vector<int64_t>& values) {
212 const std::string& arg_name,
const std::vector<IntVar*>& arguments) {
214 for (
int i = 0; i < arguments.size(); ++i) {
215 arguments[i]->Accept(
this);
227 const std::string& arg_name,
const std::vector<IntervalVar*>& arguments) {
229 for (
int i = 0; i < arguments.size(); ++i) {
230 arguments[i]->Accept(
this);
242 const std::string& arg_name,
const std::vector<SequenceVar*>& arguments) {
244 for (
int i = 0; i < arguments.size(); ++i) {
245 arguments[i]->Accept(
this);
254 CHECK(!holders_.empty());
255 delete holders_.back();
260 CHECK(!holders_.empty());
261 return holders_.back();
void BeginVisitConstraint(const std::string &type_name, const Constraint *const constraint) override
bool HasIntegerExpressionArgument(const std::string &arg_name) const
Checks if arguments exist.
void VisitIntervalArgument(const std::string &arg_name, IntervalVar *const argument) override
Visit interval argument.
const std::vector< int64_t > & FindIntegerArrayArgumentOrDie(const std::string &arg_name) const
void EndVisitConstraint(const std::string &type_name, const Constraint *const constraint) override
void EndVisitModel(const std::string &solver_name) override
void VisitIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &arguments) override
const std::vector< IntVar * > & FindIntegerVariableArrayArgumentOrDie(const std::string &arg_name) const
void VisitSequenceVariable(const SequenceVar *const variable) override
void VisitIntervalVariable(const IntervalVar *const variable, const std::string &operation, int64_t value, IntervalVar *const delegate) override
const std::string & TypeName() const
Type of the argument.
void BeginVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr) override
void SetSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &vars)
void VisitIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &values) override
void VisitIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values) override
A constraint is the main modeling object.
const IntTupleSet & FindIntegerMatrixArgumentOrDie(const std::string &arg_name) const
void Accept(ModelVisitor *const visitor) const override
Accepts the given visitor.
void SetIntegerExpressionArgument(const std::string &arg_name, IntExpr *const expr)
void SetIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values)
Interval variables are often used in scheduling.
IntExpr * FindIntegerExpressionArgumentOrDie(const std::string &arg_name) const
bool ContainsKey(const Collection &collection, const Key &key)
const Collection::value_type::second_type & FindOrDie(const Collection &collection, const typename Collection::value_type::first_type &key)
void EndVisitIntegerExpression(const std::string &type_name, const IntExpr *const expr) override
void SetIntervalArgument(const std::string &arg_name, IntervalVar *const var)
void VisitSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &arguments) override
Argument Holder: useful when visiting a model.
The class IntVar is a subset of IntExpr.
int64_t FindIntegerArgumentOrDie(const std::string &arg_name) const
The class IntExpr is the base of all integer expressions in constraint programming.
void VisitSequenceArgument(const std::string &arg_name, SequenceVar *const argument) override
Visit sequence argument.
void VisitIntegerArgument(const std::string &arg_name, int64_t value) override
Integer arguments.
void PushArgumentHolder()
const Collection::value_type::second_type & FindWithDefault(const Collection &collection, const typename Collection::value_type::first_type &key, const typename Collection::value_type::second_type &value)
A sequence variable is a variable whose domain is a set of possible orderings of the interval variabl...
bool HasIntegerVariableArrayArgument(const std::string &arg_name) const
void SetIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &vars)
void BeginVisitModel(const std::string &solver_name) override
Header/footers.
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
Collection of objects used to extend the Constraint Solver library.
void VisitIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &arguments) override
void SetSequenceArgument(const std::string &arg_name, SequenceVar *const var)
int64_t FindIntegerArgumentWithDefault(const std::string &arg_name, int64_t def) const
Getters.
void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *const argument) override
Variables.
void SetIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &values)
void VisitIntegerVariable(const IntVar *const variable, IntExpr *const delegate) override
void SetIntegerArgument(const std::string &arg_name, int64_t value)
Setters.
virtual void Accept(ModelVisitor *const visitor) const =0
Accepts the given visitor.
void SetIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &vars)
void SetTypeName(const std::string &type_name)
virtual void Accept(ModelVisitor *const visitor) const
Accepts the given visitor.
ArgumentHolder * Top() const