20#include "absl/container/flat_hash_map.h"
21#include "absl/log/check.h"
33 type_name_ = type_name;
38 integer_argument_[arg_name] = value;
42 const std::string& arg_name,
const std::vector<int64_t>& values) {
43 integer_array_argument_[arg_name] = values;
48 matrix_argument_.insert(std::make_pair(arg_name, values));
53 integer_expression_argument_[arg_name] = expr;
57 const std::string& arg_name,
const std::vector<IntVar*>& vars) {
58 integer_variable_array_argument_[arg_name] = vars;
63 interval_argument_[arg_name] = var;
67 const std::string& arg_name,
const std::vector<IntervalVar*>& vars) {
68 interval_array_argument_[arg_name] = vars;
73 sequence_argument_[arg_name] = var;
77 const std::string& arg_name,
const std::vector<SequenceVar*>& vars) {
78 sequence_array_argument_[arg_name] = vars;
82 const std::string& arg_name)
const {
83 return integer_expression_argument_.contains(arg_name);
87 const std::string& arg_name)
const {
88 return integer_variable_array_argument_.contains(arg_name);
92 const std::string& arg_name, int64_t def)
const {
97 const std::string& arg_name)
const {
102 const std::string& arg_name)
const {
107 const std::string& arg_name)
const {
111const std::vector<IntVar*>&
113 const std::string& arg_name)
const {
114 return gtl::FindOrDie(integer_variable_array_argument_, arg_name);
118 const std::string& arg_name)
const {
164 const std::string& operation,
165 int64_t value,
IntVar*
const delegate) {
171 const std::string& operation,
174 if (delegate !=
nullptr) {
191 const std::string& arg_name,
const std::vector<int64_t>& values) {
208 const std::string& arg_name,
const std::vector<IntVar*>& arguments) {
210 for (
int i = 0; i < arguments.size(); ++i) {
211 arguments[i]->Accept(
this);
223 const std::string& arg_name,
const std::vector<IntervalVar*>& arguments) {
225 for (
int i = 0; i < arguments.size(); ++i) {
226 arguments[i]->Accept(
this);
238 const std::string& arg_name,
const std::vector<SequenceVar*>& arguments) {
240 for (
int i = 0; i < arguments.size(); ++i) {
241 arguments[i]->Accept(
this);
250 CHECK(!holders_.empty());
251 delete holders_.back();
256 CHECK(!holders_.empty());
257 return holders_.back();
Argument Holder: useful when visiting a model.
const IntTupleSet & FindIntegerMatrixArgumentOrDie(const std::string &arg_name) const
void SetIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &vars)
void SetIntervalArgument(const std::string &arg_name, IntervalVar *var)
void SetIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &vars)
IntExpr * FindIntegerExpressionArgumentOrDie(const std::string &arg_name) const
void SetTypeName(const std::string &type_name)
bool HasIntegerExpressionArgument(const std::string &arg_name) const
Checks if arguments exist.
void SetIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values)
const std::vector< IntVar * > & FindIntegerVariableArrayArgumentOrDie(const std::string &arg_name) const
void SetSequenceArgument(const std::string &arg_name, SequenceVar *var)
const std::string & TypeName() const
Type of the argument.
void SetIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &values)
bool HasIntegerVariableArrayArgument(const std::string &arg_name) const
const std::vector< int64_t > & FindIntegerArrayArgumentOrDie(const std::string &arg_name) const
int64_t FindIntegerArgumentOrDie(const std::string &arg_name) const
void SetIntegerArgument(const std::string &arg_name, int64_t value)
Setters.
void SetIntegerExpressionArgument(const std::string &arg_name, IntExpr *expr)
void SetSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &vars)
int64_t FindIntegerArgumentWithDefault(const std::string &arg_name, int64_t def) const
Getters.
virtual void Accept(ModelVisitor *visitor) const
Accepts the given visitor.
--— Main IntTupleSet class --—
void Accept(ModelVisitor *visitor) const override
Accepts the given visitor.
virtual void Accept(ModelVisitor *visitor) const =0
Accepts the given visitor.
void VisitIntervalArgument(const std::string &arg_name, IntervalVar *argument) override
Visit interval argument.
void VisitIntervalArrayArgument(const std::string &arg_name, const std::vector< IntervalVar * > &arguments) override
void VisitIntervalVariable(const IntervalVar *variable, const std::string &operation, int64_t value, IntervalVar *delegate) override
void VisitIntegerArgument(const std::string &arg_name, int64_t value) override
Integer arguments.
void VisitIntegerArrayArgument(const std::string &arg_name, const std::vector< int64_t > &values) override
void VisitSequenceVariable(const SequenceVar *variable) override
void BeginVisitIntegerExpression(const std::string &type_name, const IntExpr *expr) override
void VisitSequenceArgument(const std::string &arg_name, SequenceVar *argument) override
Visit sequence argument.
void VisitSequenceArrayArgument(const std::string &arg_name, const std::vector< SequenceVar * > &arguments) override
void VisitIntegerVariable(const IntVar *variable, IntExpr *delegate) override
void VisitIntegerVariableArrayArgument(const std::string &arg_name, const std::vector< IntVar * > &arguments) override
ModelParser()
-------— ModelParser ------—
void BeginVisitModel(const std::string &solver_name) override
Header/footers.
void BeginVisitConstraint(const std::string &type_name, const Constraint *constraint) override
void PushArgumentHolder()
void EndVisitConstraint(const std::string &type_name, const Constraint *constraint) override
ArgumentHolder * Top() const
void VisitIntegerMatrixArgument(const std::string &arg_name, const IntTupleSet &values) override
void EndVisitIntegerExpression(const std::string &type_name, const IntExpr *expr) override
void EndVisitModel(const std::string &solver_name) override
void VisitIntegerExpressionArgument(const std::string &arg_name, IntExpr *argument) override
Variables.
virtual void Accept(ModelVisitor *visitor) const
Accepts the given visitor.
const Collection::value_type::second_type & FindOrDie(const Collection &collection, const typename Collection::value_type::first_type &key)
const MapUtilMappedT< Collection > & FindWithDefault(const Collection &collection, const KeyType &key, const MapUtilMappedT< Collection > &value)
In SWIG mode, we don't want anything besides these top-level includes.