5#ifndef OPTIMIZE_PARAM_H
6#define OPTIMIZE_PARAM_H
8#include "idol/mixed-integer/modeling/objects/Object.h"
9#include "idol/mixed-integer/modeling/Types.h"
10#include "idol/mixed-integer/modeling/variables/Var.h"
11#include "idol/mixed-integer/modeling/constraints/Ctr.h"
36 std::variant<Var, Ctr> m_value;
44 explicit Param(
const Var& t_var) : m_value(t_var) {}
52 explicit Param(
const Ctr& t_ctr) : m_value(t_ctr) {}
85 template<
class T> [[nodiscard]]
bool is()
const {
return std::holds_alternative<T>(m_value); }
99 template<
class T> [[nodiscard]] T
as()
const {
return std::get<T>(m_value); }
105 [[nodiscard]]
unsigned int id()
const {
return is<Var>() ? as<Var>().id() : as<Ctr>().id(); }
111 [[nodiscard]]
const std::string&
name()
const {
return is<Var>() ? as<Var>().name() : as<Ctr>().name(); }
119 static std::ostream &operator<<(std::ostream &t_os,
const idol::Param &t_param) {
120 return t_os <<
'!' << t_param.
name();
125IDOL_MAKE_HASHABLE(Param)
Param & operator=(Param &&t_param) noexcept=default
Param(Param &&t_param) noexcept=default
Param & operator=(const Param &t_param)=default
const std::string & name() const
Param(const Param &t_param)=default