BasesParserSLan/Src/Query/Def.mqh

235 lines
7.6 KiB
MQL5
Raw Permalink Normal View History

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)
//---
#define TSN_DOMPATH_CREATE_MASK(s, mask) (~((long)mask << s))
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
// 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