idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
CtrVersion.h
1//
2// Created by henri on 27/01/23.
3//
4
5#ifndef IDOL_CTRVERSION_H
6#define IDOL_CTRVERSION_H
7
8#include "idol/mixed-integer/modeling/objects/Version.h"
9#include "idol/mixed-integer/modeling/expressions/LinExpr.h"
10#include "idol/mixed-integer/modeling/Types.h"
11
12namespace idol {
13 class TempCtr;
14 class CtrVersion;
15}
16
17class idol::CtrVersion : public Version {
18 std::unique_ptr<LinExpr<Var>> m_lhs;
19 CtrType m_type;
20 double m_rhs = 0.;
21public:
22 CtrVersion(unsigned int t_index, TempCtr&& t_temp_ctr);
23
24 CtrVersion(unsigned int t_index, const TempCtr& t_temp_ctr);
25
26 CtrVersion(unsigned int t_index, LinExpr<Var>&& t_lhs, CtrType t_type, double t_rhs)
27 : Version(t_index),
28 m_lhs(std::make_unique<LinExpr<Var>>(std::move(t_lhs))),
29 m_type(t_type),
30 m_rhs(t_rhs)
31 {}
32
33 CtrVersion(unsigned int t_index, CtrType t_type, double t_rhs)
34 : Version(t_index),
35 m_type(t_type),
36 m_rhs(t_rhs)
37 {}
38
39 CtrVersion(const CtrVersion& t_src)
40 : Version(t_src),
41 m_lhs(t_src.m_lhs ? std::make_unique<LinExpr<Var>>(*t_src.m_lhs) : nullptr),
42 m_type(t_src.m_type),
43 m_rhs(t_src.m_rhs) {}
44
45 double rhs() const { return m_rhs; }
46
47 void set_rhs(double t_rhs) { m_rhs = t_rhs; }
48
49 CtrType type() const { return m_type; }
50
51 void set_type(CtrType t_type) { m_type = t_type; }
52
53 LinExpr<Var>& row() { return *m_lhs; }
54
55 const LinExpr<Var>& lhs() const { return *m_lhs; }
56
57 void set_row(LinExpr<Var>&& t_row) { m_lhs = std::make_unique<LinExpr<Var>>(std::move(t_row)); }
58
59 bool has_row() const { return m_lhs.operator bool(); }
60
61 void set_row(const LinExpr<Var>& t_row) { m_lhs = std::make_unique<LinExpr<Var>>(t_row); }
62
63 void reset_row() { m_lhs.reset(); }
64};
65
66#endif //IDOL_CTRVERSION_H