2026-07-23 22:03:03 -05:00
|
|
|
//+------------------------------------------------------------------+
|
2026-07-19 22:56:57 -05:00
|
|
|
//| Def.mqh |
|
|
|
|
|
//| Copyright 2026, MetaQuotes Ltd. |
|
|
|
|
|
//| https://www.mql5.com |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#property copyright "Copyright 2026, MetaQuotes Ltd."
|
|
|
|
|
#property link "https://www.mql5.com"
|
|
|
|
|
#property strict
|
|
|
|
|
|
2026-07-23 22:03:03 -05:00
|
|
|
#ifndef BASESPARSERSLAN_SRC_QUERY_DEF_MQH
|
|
|
|
|
#define BASESPARSERSLAN_SRC_QUERY_DEF_MQH
|
|
|
|
|
|
2026-07-19 22:56:57 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#include "..\\DomImp.mqh"
|
2026-07-23 11:13:47 -05:00
|
|
|
#include "Table\\T.mqh"
|
2026-07-19 22:56:57 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
namespace TSN
|
|
|
|
|
{
|
2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-24 22:33:42 -05:00
|
|
|
// PB = path bytes
|
|
|
|
|
#define TSN_DOMPATH_REGTYPE_JSONPB (0)
|
|
|
|
|
// foramto asm de path
|
|
|
|
|
#define TSN_DOMPATH_REGTYPE_JSONPASM (1)
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-23 22:12:19 -05:00
|
|
|
#define TSN_DOMPATH_MAX_DEPTH_ITER (128)
|
|
|
|
|
#define TSN_DOMPATH_MAX_SIZE_REG (512)
|
|
|
|
|
#define TSN_DOMPATH_MAX_SIZE_STR (256)
|
|
|
|
|
#define TSN_DOMPATH_MAX_SIZE_DNODES (256)
|
2026-07-19 22:56:57 -05:00
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Mascaras bits |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-19 22:56:57 -05:00
|
|
|
#define TSN_DOMPATH_MASK_INS_TYPE (0xff)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_ETYPE (8)
|
|
|
|
|
#define TSN_DOMPATH_MASK_COMPARE (0xf)
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//--- Indices de registros mascara de 28 bits siempre
|
|
|
|
|
#define TSN_DOMPATH_INS_MASK_INDEX_REG (0xfffffff)
|
2026-07-22 15:26:43 -05:00
|
|
|
#define TSN_DOMPATH_INS_MASK_INDEX_JMP (0xfffffff)
|
2026-07-20 22:44:15 -05:00
|
|
|
|
2026-07-22 15:26:43 -05:00
|
|
|
//--- Accceso index jump
|
|
|
|
|
#define TSN_DOMPATH_INS_ACCESO_INDEX_JUMP_BIT_S (36)
|
|
|
|
|
#define TSN_DOMPATH_INS_MASK_INDEX_ACCES (0xfffffff)
|
|
|
|
|
|
|
|
|
|
//--- Iteracion
|
|
|
|
|
#define TSN_DOMPATH_INS_ITER_MASK_JUMP (0xfffffff)
|
|
|
|
|
#define TSN_DOMPATH_INS_BIT_START_ITER_TYPE_ACCEP (36)
|
|
|
|
|
#define TSN_DOMPATH_INS_ITER_ALL_TYPES (0xff)
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
//--- 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)
|
2026-07-22 15:26:43 -05:00
|
|
|
#define TSN_DOMPATH_INS_MATH_BIT_START_REG_A (2)
|
|
|
|
|
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_MASK_TYPE (2)
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
|
2026-07-22 15:26:43 -05:00
|
|
|
#define TSN_DOMPATH_INS_MATH_BIT_GET_C(v) (int(v >> TSN_DOMPATH_INS_MATH_BIT_START_REG_2))
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_BIT_GET_B(v) (int(v >> TSN_DOMPATH_BIT_INS_ETYPE) & TSN_DOMPATH_INS_MASK_INDEX_REG)
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_BIT_GET_A(v) (int(v & TSN_DOMPATH_INS_MASK_INDEX_REG))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--- jump cmp
|
2026-07-20 22:44:15 -05:00
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_MASK_CMP (0xfffffff)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPFALSE (2)
|
2026-07-22 15:26:43 -05:00
|
|
|
#define TSN_DOMPATH_BIT_INS_GET_JUMP(v) (int(v >> TSN_DOMPATH_BIT_INS_JUMP_START_CMPFALSE) & TSN_DOMPATH_BIT_INS_JUMP_MASK_CMP)
|
2026-07-20 22:44:15 -05:00
|
|
|
|
2026-07-19 22:56:57 -05:00
|
|
|
|
2026-07-22 15:26:43 -05:00
|
|
|
//- mask para valor esperado cmp
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_MASK_CMP (1)
|
|
|
|
|
|
|
|
|
|
//- math jump en caos error
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_MATHERR (28)
|
|
|
|
|
|
2026-07-22 16:22:12 -05:00
|
|
|
//--
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_UNARY_MATHERR (36)
|
2026-07-22 15:26:43 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//--- IS especifico
|
2026-07-20 22:44:15 -05:00
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPIS_FALSE (36)
|
|
|
|
|
|
2026-07-22 15:26:43 -05:00
|
|
|
|
|
|
|
|
//--- save jump fail
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_SAVEPTR_JUMP_BIT_START (36)
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//--- funciones
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_BIT_START_NARGS (36)
|
2026-07-19 22:56:57 -05:00
|
|
|
|
|
|
|
|
|
2026-07-22 15:26:43 -05:00
|
|
|
//--- slicing completo
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_BIT_START_SLSTART (36)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_MASK_SLMASK (0xfffffff)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_BIT_START_SLPASO (28)
|
|
|
|
|
|
2026-07-23 10:54:27 -05:00
|
|
|
//---
|
2026-07-23 12:38:08 -05:00
|
|
|
#define TSN_DOMPATH_CREATE_MASK(s, mask) (~((long)mask << s))
|
2026-07-23 10:54:27 -05:00
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-19 22:56:57 -05:00
|
|
|
//---
|
2026-07-21 08:53:15 -05:00
|
|
|
#define DOMPATHV_TYPE_INV 6
|
|
|
|
|
#define DOMPATHV_TYPE_ARR 5
|
|
|
|
|
#define DOMPATHV_TYPE_OBJ 4
|
2026-07-20 22:44:15 -05:00
|
|
|
#define DOMPATHV_TYPE_STR 3
|
|
|
|
|
#define DOMPATHV_TYPE_FLT 2
|
|
|
|
|
#define DOMPATHV_TYPE_INT 1
|
|
|
|
|
#define DOMPATHV_TYPE_BOL 0
|
|
|
|
|
|
|
|
|
|
//---
|
2026-07-22 15:26:43 -05:00
|
|
|
#define DOMPATHV_F_INV 64
|
|
|
|
|
#define DOMPATHV_F_ARR 32
|
|
|
|
|
#define DOMPATHV_F_OBJ 16
|
|
|
|
|
#define DOMPATHV_F_STR 8
|
|
|
|
|
#define DOMPATHV_F_FLT 4
|
|
|
|
|
#define DOMPATHV_F_INT 2
|
|
|
|
|
#define DOMPATHV_F_BOL 1
|
|
|
|
|
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
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;
|
|
|
|
|
};
|
|
|
|
|
|
2026-07-19 22:56:57 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
enum ENUM_DOMPATH_QUERY_INS_TYPE
|
|
|
|
|
{
|
2026-07-22 15:26:43 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY, // 2 SLOTS: [type=8|jump=28][hash=64]
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY_F, // 2 SLOTS: [type=8][hash=64]
|
2026-07-24 14:20:05 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_IDX, // 1 SLOTS: [type=8|Index=28|Jump=28]
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_IDX_F, // 1 SLOTS: [type=8|Index=28]
|
2026-07-22 15:26:43 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_INICIAR_ITERACION, // 1 SLOT: [type=8|TipoPermitido=8]
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_ITER_ASSING, // 1 SLOT: [type=8|JumpCuandoTermina=28]
|
2026-07-24 14:20:05 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_EXIST, // 2 SLOT: [type=8|JumpEnCasoFalle=28][Hash=64]
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
// save
|
2026-07-22 15:26:43 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_SAVE, // 1 SLOT: [type=8|IndexRegistro=28|JumpFailed=28]
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_SAVE_NO_RESET, // 1 SLOT: [type=8|IndexRegistro=28|JumpFailed=28]
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
// mates
|
2026-07-22 15:26:43 -05:00
|
|
|
// 2 SLOT: [type=8|B=28|C=28][A=28|JumpFailed=28]
|
2026-07-20 22:44:15 -05:00
|
|
|
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,
|
|
|
|
|
|
2026-07-22 16:22:12 -05:00
|
|
|
// unary
|
|
|
|
|
// B=Valor base -> A = Valor final
|
2026-07-23 10:54:27 -05:00
|
|
|
// 2 SLOT: [type=8|B=28|Jump=28] [A=28]
|
2026-07-22 16:22:12 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_M_BIT_NOT,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_UNARY_NOT,
|
|
|
|
|
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
// comaradores
|
2026-07-22 15:26:43 -05:00
|
|
|
// 2 SLOT: [type=8|B=28|C=28][ValorEsperado=1|JumpFailed=28]
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_EQ,
|
2026-07-19 22:56:57 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR,
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR_EQ,
|
2026-07-22 15:26:43 -05:00
|
|
|
|
2026-07-22 16:22:12 -05:00
|
|
|
// 2 SLOT [type=8|RegistroIndex=28|JumpFailid=28] [1=Esperado]
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_IS,
|
|
|
|
|
|
|
|
|
|
//--- Funciones
|
2026-07-24 14:20:05 -05:00
|
|
|
// 2 SLOT [8type|Reg Start value params=28|28=Numero de argumentos] [Indice funcion - Name]
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_CALL,
|
|
|
|
|
|
2026-07-22 15:26:43 -05:00
|
|
|
//---
|
2026-07-22 20:08:38 -05:00
|
|
|
// 1 SLOT [8type]
|
2026-07-22 15:26:43 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_RESERVE,
|
|
|
|
|
|
|
|
|
|
//--- Slicing de arrays
|
|
|
|
|
// 2 SLOTS: [8type | 28=jump | 28=strat][28=end | 28=step]
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_SLICING,
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
// 1 SLOT: [8byt type | 28bit=jump dir]
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_JUMP,
|
2026-07-20 22:44:15 -05:00
|
|
|
|
2026-07-22 16:22:12 -05:00
|
|
|
//---
|
2026-07-22 20:08:38 -05:00
|
|
|
// 1 SLOT: [8=type|28bit=JUMP en caso de fallo ]
|
2026-07-22 16:22:12 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COPY_ALL,
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//--- extra
|
2026-07-22 15:26:43 -05:00
|
|
|
// 1 SLOT: [8=type]
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_APPEND,
|
2026-07-22 15:26:43 -05:00
|
|
|
|
|
|
|
|
// 1 SLOT: [8=type]
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_SALIDA,
|
2026-07-19 22:56:57 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-23 22:03:03 -05:00
|
|
|
#endif // BASESPARSERSLAN_SRC_QUERY_DEF_MQH
|