BasesParserSLan/Src/Query/Def.mqh
Nique_372 03674500e1
2026-07-24 22:33:42 -05:00

235 lines
No EOL
7.6 KiB
MQL5

//+------------------------------------------------------------------+
//| Def.mqh |
//| Copyright 2026, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property strict
#ifndef BASESPARSERSLAN_SRC_QUERY_DEF_MQH
#define BASESPARSERSLAN_SRC_QUERY_DEF_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\DomImp.mqh"
#include "Table\\T.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// PB = path bytes
#define TSN_DOMPATH_REGTYPE_JSONPB (0)
// foramto asm de path
#define TSN_DOMPATH_REGTYPE_JSONPASM (1)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#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)
//+------------------------------------------------------------------+
//| 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)
#define TSN_DOMPATH_INS_MASK_INDEX_JMP (0xfffffff)
//--- 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)
//--- 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)
#define TSN_DOMPATH_INS_MATH_BIT_START_REG_A (2)
#define TSN_DOMPATH_INS_MATH_MASK_TYPE (2)
#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
#define TSN_DOMPATH_BIT_INS_JUMP_MASK_CMP (0xfffffff)
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPFALSE (2)
#define TSN_DOMPATH_BIT_INS_GET_JUMP(v) (int(v >> TSN_DOMPATH_BIT_INS_JUMP_START_CMPFALSE) & TSN_DOMPATH_BIT_INS_JUMP_MASK_CMP)
//- 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)
//--
#define TSN_DOMPATH_BIT_INS_JUMP_START_UNARY_MATHERR (36)
//--- IS especifico
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPIS_FALSE (36)
//--- save jump fail
#define TSN_DOMPATH_BIT_INS_SAVEPTR_JUMP_BIT_START (36)
//--- funciones
#define TSN_DOMPATH_BIT_INS_BIT_START_NARGS (36)
//--- 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))
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//---
#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
//---
#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
//---
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, // 2 SLOTS: [type=8|jump=28][hash=64]
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY_F, // 2 SLOTS: [type=8][hash=64]
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]
DOMPATH_QUERY_INS_TYPE_INICIAR_ITERACION, // 1 SLOT: [type=8|TipoPermitido=8]
DOMPATH_QUERY_INS_TYPE_ITER_ASSING, // 1 SLOT: [type=8|JumpCuandoTermina=28]
DOMPATH_QUERY_INS_TYPE_EXIST, // 2 SLOT: [type=8|JumpEnCasoFalle=28][Hash=64]
// save
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]
// mates
// 2 SLOT: [type=8|B=28|C=28][A=28|JumpFailed=28]
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,
// unary
// B=Valor base -> A = Valor final
// 2 SLOT: [type=8|B=28|Jump=28] [A=28]
DOMPATH_QUERY_INS_TYPE_M_BIT_NOT,
DOMPATH_QUERY_INS_TYPE_M_UNARY_NOT,
// comaradores
// 2 SLOT: [type=8|B=28|C=28][ValorEsperado=1|JumpFailed=28]
DOMPATH_QUERY_INS_TYPE_COMPARE_EQ,
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR,
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR_EQ,
// 2 SLOT [type=8|RegistroIndex=28|JumpFailid=28] [1=Esperado]
DOMPATH_QUERY_INS_TYPE_COMPARE_IS,
//--- Funciones
// 2 SLOT [8type|Reg Start value params=28|28=Numero de argumentos] [Indice funcion - Name]
DOMPATH_QUERY_INS_TYPE_CALL,
//---
// 1 SLOT [8type]
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,
//---
// 1 SLOT: [8=type|28bit=JUMP en caso de fallo ]
DOMPATH_QUERY_INS_TYPE_COPY_ALL,
//--- extra
// 1 SLOT: [8=type]
DOMPATH_QUERY_INS_TYPE_APPEND,
// 1 SLOT: [8=type]
DOMPATH_QUERY_INS_TYPE_SALIDA,
};
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#endif // BASESPARSERSLAN_SRC_QUERY_DEF_MQH