forked from dolphin-emu/dolphin
		
	Better separation of concerns. Relegates `ControllerInterface` to enumerating input controls, and the new `ControlReference` deals with combining inputs and configuration expression parsing.
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2013 Dolphin Emulator Project
 | |
| // Licensed under GPLv2+
 | |
| // Refer to the license.txt file included.
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <memory>
 | |
| #include <string>
 | |
| #include "InputCommon/ControllerInterface/Device.h"
 | |
| 
 | |
| namespace ciface
 | |
| {
 | |
| namespace ExpressionParser
 | |
| {
 | |
| class ControlQualifier
 | |
| {
 | |
| public:
 | |
|   bool has_device;
 | |
|   Core::DeviceQualifier device_qualifier;
 | |
|   std::string control_name;
 | |
| 
 | |
|   ControlQualifier() : has_device(false) {}
 | |
|   operator std::string()
 | |
|   {
 | |
|     if (has_device)
 | |
|       return device_qualifier.ToString() + ":" + control_name;
 | |
|     else
 | |
|       return control_name;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class ControlFinder
 | |
| {
 | |
| public:
 | |
|   ControlFinder(const Core::DeviceContainer& container_, const Core::DeviceQualifier& default_,
 | |
|                 const bool is_input_)
 | |
|       : container(container_), default_device(default_), is_input(is_input_)
 | |
|   {
 | |
|   }
 | |
|   std::shared_ptr<Core::Device> FindDevice(ControlQualifier qualifier);
 | |
|   Core::Device::Control* FindControl(ControlQualifier qualifier);
 | |
| 
 | |
| private:
 | |
|   const Core::DeviceContainer& container;
 | |
|   const Core::DeviceQualifier& default_device;
 | |
|   bool is_input;
 | |
| };
 | |
| 
 | |
| class ExpressionNode;
 | |
| class Expression
 | |
| {
 | |
| public:
 | |
|   Expression() : node(nullptr) {}
 | |
|   Expression(ExpressionNode* node);
 | |
|   ~Expression();
 | |
|   ControlState GetValue();
 | |
|   void SetValue(ControlState state);
 | |
|   int num_controls;
 | |
|   ExpressionNode* node;
 | |
| };
 | |
| 
 | |
| enum ExpressionParseStatus
 | |
| {
 | |
|   EXPRESSION_PARSE_SUCCESS = 0,
 | |
|   EXPRESSION_PARSE_SYNTAX_ERROR,
 | |
|   EXPRESSION_PARSE_NO_DEVICE,
 | |
| };
 | |
| 
 | |
| ExpressionParseStatus ParseExpression(const std::string& expr, ControlFinder& finder,
 | |
|                                       Expression** expr_out);
 | |
| }
 | |
| }
 |