2026-05-10 22:20:05 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Ops.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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-05-14 16:54:23 -05:00
|
|
|
#include "..\\Common\\Node.mqh"
|
2026-05-10 22:20:05 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
interface IComparationValue
|
|
|
|
|
{
|
|
|
|
|
bool Resolver() const;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#define AST_NODE_COMPARATION(OP, prefix) \
|
|
|
|
|
template <typename T> \
|
2026-05-14 16:54:23 -05:00
|
|
|
class CComparationDynamic _##prefix : public IComparationValue final \
|
2026-05-10 22:20:05 -05:00
|
|
|
{ \
|
|
|
|
|
public: \
|
2026-05-14 16:54:23 -05:00
|
|
|
IValorSimpleValue<T>* const value1; \
|
|
|
|
|
IValorSimpleValue<T>* const value2; \
|
2026-05-10 22:20:05 -05:00
|
|
|
CComparationDynamic_##prefix(IValor<T>* v1, IValor<T>* v2) : value1(v1), value2(v2) {} \
|
|
|
|
|
~CComparationDynamic_##prefix() { \
|
|
|
|
|
} \
|
|
|
|
|
string ToStr() const override final { return value1.ToStr() + " " + #OP + " " + value2.ToStr(); } \
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
AST_NODE_COMPARATION(==, equal)
|
|
|
|
|
AST_NODE_COMPARATION(!=, not_equal)
|
|
|
|
|
AST_NODE_COMPARATION(>, mayor)
|
|
|
|
|
AST_NODE_COMPARATION(<, menor)
|
|
|
|
|
AST_NODE_COMPARATION(>=, mayor_equal)
|
|
|
|
|
AST_NODE_COMPARATION(<=, menor_equal)
|
|
|
|
|
#undef AST_NODE_COMPARATION
|
|
|
|
|
|
|
|
|
|
|
2026-05-14 16:54:23 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#define AST_NODE_COMPARATION(OP, prefix) \
|
|
|
|
|
template <typename T> \
|
|
|
|
|
class CComparationStatic_sd_##prefix : public IComparationValue final \
|
|
|
|
|
{ \
|
|
|
|
|
public: \
|
|
|
|
|
IValorSimpleValue<T>* const value1; \
|
|
|
|
|
IValorSimpleValue<T>* const value2; \
|
|
|
|
|
CComparationDynamic_##prefix(IValor<T>* v1, IValor<T>* v2) : value1(v1), value2(v2) {} \
|
|
|
|
|
~CComparationDynamic_##prefix() { \
|
|
|
|
|
} \
|
|
|
|
|
string ToStr() const override final { return value1.ToStr() + " " + #OP + " " + value2.ToStr(); } \
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
AST_NODE_COMPARATION(==, equal)
|
|
|
|
|
AST_NODE_COMPARATION(!=, not_equal)
|
|
|
|
|
AST_NODE_COMPARATION(>, mayor)
|
|
|
|
|
AST_NODE_COMPARATION(<, menor)
|
|
|
|
|
AST_NODE_COMPARATION(>=, mayor_equal)
|
|
|
|
|
AST_NODE_COMPARATION(<=, menor_equal)
|
|
|
|
|
#undef AST_NODE_COMPARATION
|
|
|
|
|
|
2026-05-10 22:20:05 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#define AST_NODE_COMPARATION(OP, prefix) \
|
|
|
|
|
template <typename T> \
|
|
|
|
|
struct ComparationStaticFirst_##prefix \
|
|
|
|
|
{ \
|
|
|
|
|
T value1; \
|
|
|
|
|
IValor<T>* value2; \
|
|
|
|
|
__forceinline bool Comparation() { return value1 OP value2.Valor(); } \
|
|
|
|
|
__forceinline string ToStr() { return string(value1) + " " + #OP + " " + value2.ToStr(); } \
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
AST_NODE_COMPARATION( ==, equal)
|
|
|
|
|
AST_NODE_COMPARATION( !=, not_equal)
|
|
|
|
|
AST_NODE_COMPARATION( >, mayor)
|
|
|
|
|
AST_NODE_COMPARATION( <, menor)
|
|
|
|
|
AST_NODE_COMPARATION( >=, mayor_equal)
|
|
|
|
|
AST_NODE_COMPARATION( <=, menor_equal)
|
|
|
|
|
#undef AST_NODE_COMPARATION
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#define AST_NODE_COMPARATION(OP, prefix) \
|
|
|
|
|
template <typename T> \
|
|
|
|
|
struct ComparationStaticSecond_##prefix \
|
|
|
|
|
{ \
|
|
|
|
|
IValor<T>* value1; \
|
|
|
|
|
T value2; \
|
|
|
|
|
__forceinline bool Comparation() { return value1.Valor() OP value2; }; \
|
|
|
|
|
__forceinline string ToStr() { return value1.ToStr() + " " + #OP + " " + string(value2); } \
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
AST_NODE_COMPARATION( ==, equal)
|
|
|
|
|
AST_NODE_COMPARATION( !=, not_equal)
|
|
|
|
|
AST_NODE_COMPARATION( >, mayor)
|
|
|
|
|
AST_NODE_COMPARATION( <, menor)
|
|
|
|
|
AST_NODE_COMPARATION( >=, mayor_equal)
|
|
|
|
|
AST_NODE_COMPARATION( <=, menor_equal)
|
|
|
|
|
#undef AST_NODE_COMPARATION
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
*/
|