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
|