Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
LogicExpressionMap.hpp
Go to the documentation of this file.
1
2#ifndef IV_SRC_LOGIC_LOGICEXPRESSIONMAP_HPP_
3#define IV_SRC_LOGIC_LOGICEXPRESSIONMAP_HPP_
4
6
7#include <optional>
8#include <vector>
9
10namespace iv::logics
11{
12
13template<typename T>
15{
16public:
17 LogicExpressionMap() = default;
18 LogicExpressionMap(const LogicExpressionMap &other) = default;
19 LogicExpressionMap(LogicExpressionMap &&other) noexcept = default;
20
22
24 LogicExpressionMap &operator=(LogicExpressionMap &&other) noexcept = default;
25
26 bool addLogicExpression(LogicExpression &logicExpression, const T &value, std::string &errorMessage);
27 std::optional<T> getResult();
28
29 std::vector<std::pair<LogicExpression, T>> m_logicExpressions;
30};
31
32template<typename T>
33bool LogicExpressionMap<T>::addLogicExpression(LogicExpression &logicExpression, const T &value,
34 std::string &errorMessage)
35{
36 if (not logicExpression.compile(errorMessage))
37 {
38 return false;
39 }
40
41 m_logicExpressions.emplace_back(logicExpression, value);
42 return true;
43}
44
45template<typename T>
47{
48 std::optional<T> result {std::nullopt};
49
50 for (auto &[logicExpression, value]: m_logicExpressions)
51 {
52 auto exprValue = logicExpression.evaluate();
53 if (not exprValue.has_value())
54 {
55 continue;
56 }
57
58 if (exprValue.value())
59 {
60 result = value;
61 break;
62 }
63 }
64
65 return result;
66}
67}// namespace iv::logics
68
69#endif//IV_SRC_LOGIC_LOGICEXPRESSIONMAP_HPP_
Definition LogicExpressionMap.hpp:15
bool addLogicExpression(LogicExpression &logicExpression, const T &value, std::string &errorMessage)
Definition LogicExpressionMap.hpp:33
LogicExpressionMap(LogicExpressionMap &&other) noexcept=default
LogicExpressionMap(const LogicExpressionMap &other)=default
std::vector< std::pair< LogicExpression, T > > m_logicExpressions
Definition LogicExpressionMap.hpp:29
std::optional< T > getResult()
Definition LogicExpressionMap.hpp:46
LogicExpressionMap & operator=(LogicExpressionMap &&other) noexcept=default
LogicExpressionMap & operator=(const LogicExpressionMap &other)=default
Definition LogicExpression.hpp:14
bool compile(std::string &errorMessage)
Definition LogicExpression.cpp:130
Definition LogicExpression.cpp:6