//+------------------------------------------------------------------+ //| 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 \ class CComparationDynamic _##prefix : public IComparationValue final \ { \ public: \ IValorSimpleValue* const value1; \ IValorSimpleValue* const value2; \ CComparationDynamic_##prefix(IValor* v1, IValor* 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 \ class CComparationStatic_sd_##prefix : public IComparationValue final \ { \ public: \ IValorSimpleValue* const value1; \ IValorSimpleValue* const value2; \ CComparationDynamic_##prefix(IValor* v1, IValor* 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 \ struct ComparationStaticFirst_##prefix \ { \ T value1; \ IValor* 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 \ struct ComparationStaticSecond_##prefix \ { \ IValor* 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 //+------------------------------------------------------------------+ */