idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
Param.h
1//
2// Created by henri on 07/09/22.
3//
4
5#ifndef OPTIMIZE_PARAM_H
6#define OPTIMIZE_PARAM_H
7
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"
12#include <iostream>
13#include <variant>
14
15namespace idol {
16 class Var;
17
18 class Param;
19}
20
36 std::variant<Var, Ctr> m_value;
37public:
44 explicit Param(const Var& t_var) : m_value(t_var) {}
45
52 explicit Param(const Ctr& t_ctr) : m_value(t_ctr) {}
53
58 Param(const Param& t_param) = default;
59
64 Param(Param&& t_param) noexcept = default;
65
71 Param& operator=(const Param& t_param) = default;
72
78 Param& operator=(Param&& t_param) noexcept = default;
79
85 template<class T> [[nodiscard]] bool is() const { return std::holds_alternative<T>(m_value); }
86
99 template<class T> [[nodiscard]] T as() const { return std::get<T>(m_value); }
100
105 [[nodiscard]] unsigned int id() const { return is<Var>() ? as<Var>().id() : as<Ctr>().id(); }
106
111 [[nodiscard]] const std::string& name() const { return is<Var>() ? as<Var>().name() : as<Ctr>().name(); }
112};
113
114static idol::Param operator!(const idol::Var& t_var) { return idol::Param(t_var); }
115static idol::Param operator!(const idol::Ctr& t_ctr) { return idol::Param(t_ctr); }
116
117namespace idol {
118
119 static std::ostream &operator<<(std::ostream &t_os, const idol::Param &t_param) {
120 return t_os << '!' << t_param.name();
121 }
122
123}
124
125IDOL_MAKE_HASHABLE(Param)
126
127#endif //OPTIMIZE_IMPL_PARAM_H
T as() const
Definition Param.h:99
bool is() const
Definition Param.h:85
unsigned int id() const
Definition Param.h:105
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
Definition Param.h:111
Param(const Ctr &t_ctr)
Definition Param.h:52
Param(const Var &t_var)
Definition Param.h:44
Param(const Param &t_param)=default