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