BasesParserSLan/Src/Query/Def.mqh
Nique_372 35010c8700
2026-07-21 08:53:15 -05:00

188 lines
5.7 KiB
MQL4

//+------------------------------------------------------------------+
//| Def.mqh |
//| Copyright 2026, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\DomImp.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define TSN_DOMPATH_MAX_DEPTH_ITER (128)
#define TSN_DOMPATH_MAX_S_RK (128)
#define TSN_DOMPATH_MAX_S_R (128)
//+------------------------------------------------------------------+
//| Mascaras bits |
//+------------------------------------------------------------------+
#define TSN_DOMPATH_MASK_INS_TYPE (0xff)
#define TSN_DOMPATH_BIT_INS_ETYPE (8)
#define TSN_DOMPATH_MASK_COMPARE (0xf)
//--- Indices de registros mascara de 28 bits siempre
#define TSN_DOMPATH_INS_MASK_INDEX_REG (0xfffffff)
//--- Instruccion save
#define TSN_DOMPATH_INS_SAVE_BIT_START_INS_IX (32)
//--- Math \ Compare
//--- form
#define TSN_DOMPATH_INS_MATH_BIT_START_REG_2 (36)
#define TSN_DOMPATH_INS_MATH_BIT_START_FORM_T (28)
//--- jump
#define TSN_DOMPATH_BIT_INS_JUMP_MASK_CMP (0xfffffff)
#define TSN_DOMPATH_BIT_INS_JUMP_START_MATHERR (2)
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPFALSE (2)
//--- compare
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMP_V (30)
//---
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPIS_FALSE (36)
//-- types
#define TSN_DOMPATH_INS_MATH_TYPE_DS (0)
#define TSN_DOMPATH_INS_MATH_TYPE_SD (1)
#define TSN_DOMPATH_INS_MATH_TYPE_DD (2)
//--- funciones
#define TSN_DOMPATH_BIT_INS_BIT_START_NARGS (36)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//---
#define DOMPATHV_TYPE_INV 6
#define DOMPATHV_TYPE_ARR 5
#define DOMPATHV_TYPE_OBJ 4
#define DOMPATHV_TYPE_STR 3
#define DOMPATHV_TYPE_FLT 2
#define DOMPATHV_TYPE_INT 1
#define DOMPATHV_TYPE_BOL 0
//---
struct DomConstantStr;
//---
struct pack(8) DomPathV
{
/*
//---
DomPathV(const long lv) : tt(DOMPATHV_TYPE_INT) { v.iv = lv; }
DomPathV(const bool lv) : tt(DOMPATHV_TYPE_BOL) { v.bv = lv; }
DomPathV(const double lv) : tt(DOMPATHV_TYPE_FLT) { v.dv = lv; }
DomPathV() : tt(DOMPATHV_TYPE_INV) {}
*/
//---
union TSNDomPathValues
{
long iv;
int ix;
double dv;
bool bv;
} v;
uchar tt;
};
//---
enum ENUM_DOMPATH_QUERY_INS_TYPE
{
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY,
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY_F,
DOMPATH_QUERY_INS_TYPE_ACCESO_IDX,
DOMPATH_QUERY_INS_TYPE_ACCESO_IDX_F,
DOMPATH_QUERY_INS_TYPE_INICIAR_ITERACION,
DOMPATH_QUERY_INS_TYPE_ITER_ASSING,
DOMPATH_QUERY_INS_TYPE_EXIST, // tal cual para elemenots.. no
// save
DOMPATH_QUERY_INS_TYPE_SAVE,
// mates
DOMPATH_QUERY_INS_TYPE_M_MUL,
DOMPATH_QUERY_INS_TYPE_M_RES,
DOMPATH_QUERY_INS_TYPE_M_DIV,
DOMPATH_QUERY_INS_TYPE_M_SUM,
DOMPATH_QUERY_INS_TYPE_M_MOD,
DOMPATH_QUERY_INS_TYPE_M_BIT_OR,
DOMPATH_QUERY_INS_TYPE_M_BIT_AND,
DOMPATH_QUERY_INS_TYPE_M_BIT_XOR,
DOMPATH_QUERY_INS_TYPE_M_BIT_DEZ_IZQ,
DOMPATH_QUERY_INS_TYPE_M_BIT_DEZ_DRC,
// comaradores
DOMPATH_QUERY_INS_TYPE_COMPARE_EQ,
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR,
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR_EQ,
DOMPATH_QUERY_INS_TYPE_COMPARE_IS,
//--- Funciones
DOMPATH_QUERY_INS_TYPE_CALL,
//--- Copia
DOMPATH_QUERY_INS_TYPE_LOADK, // pasa una constante regk a un registro dinamico
//--- extra
DOMPATH_QUERY_INS_TYPE_APPEND,
DOMPATH_QUERY_INS_TYPE_SALIDA,
};
}
//+------------------------------------------------------------------+
/*
{
"precios": {
"libro1": {"valor":542,"sumando":[],"comando":30},
"libro2": {"valor":19,"sumando":[30],"comando":2},
"libro3": {"valor":452,"sumando":[15],"comando":7}
}
}
$.precios[?(@.comando * 20 < @.valor && @.sumando.size())].sumando[*]
→ [15]
----
Nota hrabia que tener varios temporales aqui
----
ACCESO_FATAL "precios" ; Ahora mismo curr = en precios, si falla cerrar
INICIO_ITERACION
ASIGNAR CURR MOVIDA o SALIR:
; ahora mismo puntero=m_curr
; Un acceso local implia que si falla se retire a X instruccion
ACCESO_LOCAL "comando"
SAVE_PTR R0 ; (implcia un retroceso de m_curr ahora apunta a @)
MUL R0 RC(20) ; mutiplcai por 20 al registro 0
ACCESO LOCACL "valor"
SAVE_PTR R1
CMP 1, '<' R0 R1; (si cumple=1) (+1 si no cumple, +2 si cumple)
- Si no: (IMPLICITO) JUMMP: 'ASIGNAR CURR MOVIDA o SALIR'
ACCESO_LOCAL "sumando"
SAVE_PTR R1 ; Empiza en 1 dado qeu ya se reserva un slot 0 para reg donde se pone el valor
CALL R0, "size", 0
IS 1, R0 ; registro dos se compar con is este resotora un entero asi que != 0
- Si no: (IMPLICITO) JUMMP SI ES FALSE a: 'ASIGNAR CURR MOVIDA o SALIR'
APPEND curr
SALIDA
*/
//+------------------------------------------------------------------+