ExpressEvalByLeo/Src/BoleanEval/Ops.mqh
Nique_372 68d060365e
2026-05-14 16:54:23 -05:00

122 lines
No EOL
4.6 KiB
MQL5

//+------------------------------------------------------------------+
//| 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
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\Common\\Node.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
interface IComparationValue
{
bool Resolver() const;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define AST_NODE_COMPARATION(OP, prefix) \
template <typename T> \
class CComparationDynamic _##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
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#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
/*
//+------------------------------------------------------------------+
#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
//+------------------------------------------------------------------+
*/