//+------------------------------------------------------------------+ //| 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 */ //+------------------------------------------------------------------+