ExpressEvalByLeo/Src/Common/Node.mqh

158 lines
5.5 KiB
MQL5
Raw Permalink Normal View History

2026-05-13 16:28:35 -05:00
//+------------------------------------------------------------------+
//| Node.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372"
#property strict
#ifndef EXPRESSEVALBYLEO_SRC_COMMON_NODE_MQH
#define EXPRESSEVALBYLEO_SRC_COMMON_NODE_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "Def.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_BOOL = 1
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_CHAR = 2
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_UCHAR = 3
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_SHORT = 4
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_USHORT = 5
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_COLOR = 6
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_INT = 7
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_UINT = 8
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_DATETIME = 9
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_LONG = 10
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_ULONG = 11
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_FLOAT = 12
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_DOUBLE = 13
2026.04.13 12:36:25.128 tas (EURUSD,H1) TYPE_STRING = 14
// $valor / 2 / 1 + 4 * 3
*/
2026-05-14 11:13:22 -05:00
2026-05-13 16:28:35 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class IValor
{
public:
2026-05-14 14:13:20 -05:00
IValor(const string& type) : m_data_type(CEnumReg::GetValue<ENUM_DATATYPE>(type, WRONG_VALUE))
{
if(m_data_type == WRONG_VALUE)
{
FastLog(FUNCION_ACTUAL, FATAL_ERROR_TEXT, StringFormat("Tipo invalido = %s", type));
Remover();
}
}
2026-05-13 16:28:35 -05:00
~IValor() {}
const ENUM_DATATYPE m_data_type; //
2026-05-14 14:13:20 -05:00
virtual __forceinline ENUM_AST_NODE_TYPE TypeValue() const = 0;
2026-05-14 11:13:22 -05:00
// virtual string GetDoc() const = 0;
2026-05-13 16:28:35 -05:00
};
2026-05-14 11:13:22 -05:00
// sumar(sumar(10, 20), 20)
2026-05-13 16:28:35 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
template <typename T> // Numeros
class IValorSimpleValue : public IValor
{
public:
2026-05-14 11:13:22 -05:00
IValorSimpleValue() : IValor(typename(T)) {}
~IValorSimpleValue() {}
2026-05-13 16:28:35 -05:00
virtual T Get() const = 0;
};
//---
2026-05-14 14:13:20 -05:00
2026-05-13 16:28:35 -05:00
template <typename T> // Numeros
class IValorSimpleValVal : public IValorSimpleValue<T>
{
private:
2026-05-14 11:13:22 -05:00
const T m_v;
2026-05-13 16:28:35 -05:00
public:
2026-05-14 11:13:22 -05:00
IValorSimpleValVal(const T v) : m_v(v) {}
2026-05-13 16:28:35 -05:00
~IValorSimpleValVal(void) {}
2026-05-14 14:13:20 -05:00
//---
__forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_VARIABLE; }
2026-05-13 16:28:35 -05:00
__forceinline T Get() const override final { return m_v; }
};
2026-05-14 11:13:22 -05:00
2026-05-13 16:28:35 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-05-14 11:13:22 -05:00
template <typename T>
class IValorFuncion : public IValorSimpleValue<T>
2026-05-13 16:28:35 -05:00
{
2026-05-14 11:13:22 -05:00
protected:
CHashMap<string, IValor*>* m_tabla_variables;
CHashMap<string, IValorFuncion*>* m_tabla_functions;
2026-05-13 16:28:35 -05:00
public:
2026-05-14 11:13:22 -05:00
IValorFuncion(void) {}
~IValorFuncion(void) {}
2026-05-13 16:28:35 -05:00
//---
2026-05-14 11:13:22 -05:00
// Funcion para setear tablas
2026-05-13 16:28:35 -05:00
2026-05-14 11:13:22 -05:00
//---
virtual bool ParseParams(const string& params) = 0;
2026-05-14 14:13:20 -05:00
//---
__forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_FUNCTION; }
2026-05-13 16:28:35 -05:00
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-05-14 11:13:22 -05:00
class IValString : public IValor
{
public:
2026-05-14 14:13:20 -05:00
IValString(void) : IValor("string") {}
~IValString(void) {}
2026-05-13 16:28:35 -05:00
2026-05-14 11:13:22 -05:00
//---
2026-05-14 16:54:23 -05:00
__forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_VARIABLE; }
2026-05-14 11:13:22 -05:00
virtual bool Get(string& value) const = 0;
virtual string Get() const = 0;
};
2026-05-13 16:28:35 -05:00
2026-05-14 16:54:23 -05:00
2026-05-13 16:28:35 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-05-14 11:13:22 -05:00
//--- Nodo cast
template<typename FROM, typename TO>
class CCastNode : public IValorSimpleValue<TO>
{
IValorSimpleValue<FROM>* const m_v;
public:
CCastNode(IValorSimpleValue<FROM>* v) : m_v(v) {}
~CCastNode() { if(CheckPointer(m_v) == POINTER_DYNAMIC) delete m_v; }
2026-05-13 16:28:35 -05:00
2026-05-14 14:13:20 -05:00
//---
2026-05-14 11:13:22 -05:00
__forceinline TO Get() const override final { return (TO)m_v.Get(); }
2026-05-14 14:13:20 -05:00
__forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_CAST_PRODUCT; }
2026-05-14 11:13:22 -05:00
};
2026-05-13 16:28:35 -05:00
//+------------------------------------------------------------------+
#endif // EXPRESSEVALBYLEO_SRC_COMMON_NODE_MQH