Implement MonitorLinkExpression::result so that we can return the score as well as simply a boolean value.

pull/3808/head
Isaac Connor 2024-01-22 12:29:23 -05:00
parent 8c33c8ca2a
commit 44862adb8a
2 changed files with 18 additions and 8 deletions

View File

@ -55,7 +55,7 @@ bool MonitorLinkExpression::evaluate() {
Debug(1, "No tree");
return false;
}
MonitorLinkExpression::result result = this->visit(*tree_);
MonitorLinkExpression::Result result = this->visit(*tree_);
if (!result.success) {
Warning("%s", std::string(result.message).c_str());
return false;
@ -63,7 +63,16 @@ bool MonitorLinkExpression::evaluate() {
return result.score > 0;
}
MonitorLinkExpression::result
const MonitorLinkExpression::Result MonitorLinkExpression::result() {
if (!tree_) {
Debug(1, "No tree");
MonitorLinkExpression::Result result;
return result;
}
return this->visit(*tree_);
}
MonitorLinkExpression::Result
MonitorLinkExpression::visit(Node const & node) {
Debug(1, "visit: Node: %p Token: %d value %s",
&node,
@ -93,7 +102,7 @@ MonitorLinkExpression::visit(Node const & node) {
}
}
MonitorLinkExpression::result
MonitorLinkExpression::Result
MonitorLinkExpression::visit_logical_and(MonitorLinkExpression::Node const & node)
{
auto const left { visit(*node.left) };
@ -110,7 +119,7 @@ MonitorLinkExpression::visit_logical_and(MonitorLinkExpression::Node const & nod
};
}
MonitorLinkExpression::result
MonitorLinkExpression::Result
MonitorLinkExpression::visit_logical_or(MonitorLinkExpression::Node const & node)
{
auto const left { visit(*node.left) };

View File

@ -56,7 +56,7 @@ class MonitorLinkExpression {
~Node() noexcept = default;
};
struct result {
struct Result {
/**
* True if evaluation process is successful. Otherwise, false.
*/
@ -85,9 +85,9 @@ class MonitorLinkExpression {
return current < std::size( tokens );
}
static result visit(Node const &node);
static result visit_logical_and(Node const &node);
static result visit_logical_or(Node const &node);
static Result visit(Node const &node);
static Result visit_logical_and(Node const &node);
static Result visit_logical_or(Node const &node);
public:
MonitorLinkExpression();
@ -95,6 +95,7 @@ class MonitorLinkExpression {
};
int score() { return score_; }
bool evaluate();
const Result result();
bool parse();
private:
const std::string_view delimiters_ = "|&(),";