delpi  0.0.1
DElta-complete LP solver
Loading...
Searching...
No Matches
Variable.h
1
7#pragma once
8
9#include <cstddef>
10#include <functional>
11#include <iosfwd>
12#include <string>
13#include <vector>
14
15namespace delpi {
16
20class Variable {
21 public:
22 using Id = std::size_t;
23
24 static const Id dummy_id;
25
41 explicit Variable(std::string name);
48 explicit Variable(Id id);
49
51 [[nodiscard]] bool is_dummy() const { return id_ == dummy_id; }
53 [[nodiscard]] Id id() const { return id_; }
55 [[nodiscard]] const std::string &name() const { return names_[id_ + 1]; }
56
58 [[nodiscard]] bool equal_to(const Variable &o) const noexcept { return id_ == o.id_; }
60 [[nodiscard]] bool less(const Variable &o) const noexcept { return id_ < o.id_; }
62 [[nodiscard]] size_t hash() const noexcept { return std::hash<Id>{}(id_); }
63
64 Variable operator+() const { return *this; }
65
66 private:
67 static std::vector<std::string> names_;
72 static Id GetNextId();
73
74 Id id_{};
75};
76
77std::ostream &operator<<(std::ostream &os, const Variable &var);
78} // namespace delpi
79
80template <>
81struct std::hash<delpi::Variable> {
82 size_t operator()(const delpi::Variable &v) const noexcept { return v.hash(); }
83};
84
85template <>
86struct std::less<delpi::Variable> {
87 bool operator()(const delpi::Variable &lhs, const delpi::Variable &rhs) const noexcept { return lhs.less(rhs); }
88};
89
90template <>
91struct std::equal_to<delpi::Variable> {
92 bool operator()(const delpi::Variable &lhs, const delpi::Variable &rhs) const noexcept { return lhs.equal_to(rhs); }
93};
94
95#ifdef DELPI_INCLUDE_FMT
96
97#include "delpi/util/logging.h"
98
99OSTREAM_FORMATTER(delpi::Variable);
100
101#endif
Real symbolic variable.
Definition Variable.h:20
static std::vector< std::string > names_
Names of all existing variables.
Definition Variable.h:67
Id id_
Unique identifier.
Definition Variable.h:74
static const Id dummy_id
ID of the dummy variable.
Definition Variable.h:24
Variable()
Construct a new dummy variable object.
Definition Variable.h:34
static Id GetNextId()
Get the next unique identifier for a variable.
Definition Variable.cpp:21
Global namespace for the delpi library.