//+------------------------------------------------------------------+ //| 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 */ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class IValor { public: IValor(const string& type) : m_data_type(CEnumReg::GetValue(type, WRONG_VALUE)) { if(m_data_type == WRONG_VALUE) { FastLog(FUNCION_ACTUAL, FATAL_ERROR_TEXT, StringFormat("Tipo invalido = %s", type)); Remover(); } } ~IValor() {} const ENUM_DATATYPE m_data_type; // virtual __forceinline ENUM_AST_NODE_TYPE TypeValue() const = 0; // virtual string GetDoc() const = 0; }; // sumar(sumar(10, 20), 20) //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template // Numeros class IValorSimpleValue : public IValor { public: IValorSimpleValue() : IValor(typename(T)) {} ~IValorSimpleValue() {} virtual T Get() const = 0; }; //--- template // Numeros class IValorSimpleValVal : public IValorSimpleValue { private: const T m_v; public: IValorSimpleValVal(const T v) : m_v(v) {} ~IValorSimpleValVal(void) {} //--- __forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_VARIABLE; } __forceinline T Get() const override final { return m_v; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ template class IValorFuncion : public IValorSimpleValue { protected: CHashMap* m_tabla_variables; CHashMap* m_tabla_functions; public: IValorFuncion(void) {} ~IValorFuncion(void) {} //--- // Funcion para setear tablas //--- virtual bool ParseParams(const string& params) = 0; //--- __forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_FUNCTION; } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class IValString : public IValor { public: IValString(void) : IValor("string") {} ~IValString(void) {} //--- __forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_VARIABLE; } virtual bool Get(string& value) const = 0; virtual string Get() const = 0; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Nodo cast template class CCastNode : public IValorSimpleValue { IValorSimpleValue* const m_v; public: CCastNode(IValorSimpleValue* v) : m_v(v) {} ~CCastNode() { if(CheckPointer(m_v) == POINTER_DYNAMIC) delete m_v; } //--- __forceinline TO Get() const override final { return (TO)m_v.Get(); } __forceinline ENUM_AST_NODE_TYPE TypeValue() const override final { return AST_EXPVAL_NODE_TYPE_CAST_PRODUCT; } }; //+------------------------------------------------------------------+ #endif // EXPRESSEVALBYLEO_SRC_COMMON_NODE_MQH