idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
MatrixIndices.h
1//
2// Created by henri on 22/02/23.
3//
4
5#ifndef IDOL_MATRIXINDICES_H
6#define IDOL_MATRIXINDICES_H
7
8#include <cassert>
9#include "idol/general/utils/Map.h"
10#include "idol/mixed-integer/modeling/variables/Var.h"
11#include "idol/general/utils/IteratorForward.h"
12
13namespace idol {
14 class MatrixIndices;
15}
16
18 Map<Var, unsigned int> m_indices;
19 unsigned int m_n_indices = 0;
20public:
21 MatrixIndices() = default;
22
23 void add(const Var& t_var) {
24 auto it = m_indices.find(t_var);
25 if (it != m_indices.end()) { return; }
26 m_indices.emplace(t_var, m_n_indices);
27 ++m_n_indices;
28 }
29
30 [[nodiscard]] unsigned int get(const Var& t_var) const {
31 auto it = m_indices.find(t_var);
32 assert(it != m_indices.end());
33 return it->second;
34 }
35
36 [[nodiscard]] auto indices() const { return ConstIteratorForward(m_indices); }
37
38 [[nodiscard]] unsigned int n_indices() const { return m_n_indices; }
39};
40
41#endif //IDOL_MATRIXINDICES_H