Large diffs are not rendered by default.

@@ -6,6 +6,7 @@

#include <memory>
#include <string>
#include <utility>
#include "InputCommon/ControllerInterface/Device.h"

namespace ciface
@@ -46,26 +47,24 @@ class ControlFinder
bool is_input;
};

class ExpressionNode;
class Expression
{
public:
Expression() : node(nullptr) {}
Expression(ExpressionNode* node);
~Expression();
ControlState GetValue() const;
void SetValue(ControlState state);
int num_controls;
ExpressionNode* node;
virtual ~Expression() = default;
virtual ControlState GetValue() const = 0;
virtual void SetValue(ControlState state) = 0;
virtual int CountNumControls() const = 0;
virtual void UpdateReferences(ControlFinder& finder) = 0;
virtual operator std::string() const = 0;
};

enum class ParseStatus
{
Successful,
SyntaxError,
NoDevice,
EmptyExpression,
};

ParseStatus ParseExpression(const std::string& expr, ControlFinder& finder, Expression** expr_out);
std::pair<ParseStatus, std::unique_ptr<Expression>> ParseExpression(const std::string& expr);
}
}
@@ -54,8 +54,12 @@ void ControlGroup::LoadConfig(IniFile::Section* sec, const std::string& defdev,

for (auto& c : controls)
{
// control expression
sec->Get(group + c->name, &c->control_ref->expression, "");
{
// control expression
std::string expression;
sec->Get(group + c->name, &expression, "");
c->control_ref->SetExpression(std::move(expression));
}

// range
sec->Get(group + c->name + "/Range", &c->control_ref->range, 100.0);
@@ -109,7 +113,7 @@ void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev,
for (auto& c : controls)
{
// control expression
sec->Set(group + c->name, c->control_ref->expression, "");
sec->Set(group + c->name, c->control_ref->GetExpression(), "");

// range
sec->Set(group + c->name + "/Range", c->control_ref->range * 100.0, 100.0);
@@ -128,6 +132,6 @@ void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev,

void ControlGroup::SetControlExpression(int index, const std::string& expression)
{
controls.at(index)->control_ref->expression = expression;
controls.at(index)->control_ref->SetExpression(expression);
}
} // namespace ControllerEmu