//+------------------------------------------------------------------+ //| Defines.mqh | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com" #property strict #ifndef TSNTRANSLATIONS_SRC_LANBACKEND_DEFINES_MQH #define TSNTRANSLATIONS_SRC_LANBACKEND_DEFINES_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- tablas solo de json #include //--- main basic #include //--- bit tricks #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- enum ENUM_TSN_JSONTRANSLATE_VTYPE { TSN_JSONTRANSLATE_VTYPE_ARR, TSN_JSONTRANSLATE_VTYPE_OBJ, TSN_JSONTRANSLATE_VTYPE_KEY, TSN_JSONTRANSLATE_VTYPE_STR, }; //--- enum ENUM_TSN_JSONTRANSLATE_TOKS { //--- TSN_JSONTRANSLATE_TOK_STRING=0u, TSN_JSONTRANSLATE_TOK_KEY, //--- TSN_JSONTRANSLATE_TOK_COMMA, //--- ini TSN_JSONTRANSLATE_TOK_LLAVE_INI, TSN_JSONTRANSLATE_TOK_COR_INI, //--- end TSN_JSONTRANSLATE_TOK_LLAVE_END, TSN_JSONTRANSLATE_TOK_COR_END, //--- TSN_JSONTRANSLATE_TOK_COMMENT_MQL, TSN_JSONTRANSLATE_TOK_EXT_NONEXT_KEY, TSN_JSONTRANSLATE_TOK_EXT_NEXT_OBJV, TSN_JSONTRANSLATE_TOK_EXT_NEXT_VV, //--- Invalid TSN_JSONTRANSLATE_TOK_INVALID, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // Hay 4 tipos // // comentario // # comentario // -- comentario // ; comentario #define TSN_JSONTRANSLATE_IS_COMMENT(C) ((C)=='/'||(C)=='-'||(C)=='#'||(C)==';') //+------------------------------------------------------------------+ //| Flags | //+------------------------------------------------------------------+ /* //--- flag create #define TSNTRANSLAN_TF(TOK) (1 << (TOK)) //--- banderas misce #define TSNTRANSLAN_F_STR (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_STRING)) #define TSNTRANSLAN_F_COMMA (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COMMA)) #define TSNTRANSLAN_F_COR_INI (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COR_INI)) #define TSNTRANSLAN_F_COR_END (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COR_END)) #define TSNTRANSLAN_F_OBJ_INI (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_LLAVE_INI)) #define TSNTRANSLAN_F_OBJ_END (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_LLAVE_END)) #define TSNTRANSLAN_F_CM_MQ (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COMMENT_MQL)) //--- #define TSN_TRANSLAN_F_ALL_COM (TSNTRANSLAN_F_CM_MQ) //--- Banderas // inicio de estrucutrales #define TSNTRANSLAN_F_STRUCTURALS_INI (TSNTRANSLAN_F_COR_INI| TSNTRANSLAN_F_OBJ_INI) // finales //--- val // Se busca un valor (por ejemplo luego del cor ini [ { o tambien "": o tambien ,) // Aqui es obligraorio el valor (por ejemplo "": ) #define TSNTRANSLAN_F_ALL_VAL_VALID (TSNTRANSLAN_F_STR | TSNTRANSLAN_F_STRUCTURALS_INI | TSN_TRANSLAN_F_ALL_COM) // After coma en obj #define TSNTRANSLAN_F_OBJ_VAL_LCOMMA (TSNTRANSLAN_F_STR | TSN_TRANSLAN_F_ALL_COM)*/ //--- // Solo los caracters finales #define TSNTRANSLAN_CTX_OBJ ('}') #define TSNTRANSLAN_CTX_ARR (']') //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ENUM_TSN_JSONTRANSLATE_ERR { TSN_JSONTRANSLATE_ERR_NOT, TSN_JSONTRANSLATE_EXPECTED_TWO_POINT_AFT_KEY, TSN_JSONTRANSLATE_MALFORMED_AFTER_VAL, TSN_JSONTRANSLATE_MALFORMED_FIND_VAL, TSN_JSONTRANSLATE_MALFORMED_AFTER_COMMA_OBJ, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ /* OBJ: [type(3)|num_el(29)<<3|cinta_saltar(31)<<32|is_jit(1)<<63][obj_index or jit attemps, si isjit=0 entonces jitattemps, si es 1 jitindex] ARR: [type(3)|num_el(29)<<3|cinta_saltar(31)<<32] KEY: [type(3)][FVN1A64_hash(64)] STR: [type(3)|LEN(30)<<3|START(31)<<33] index es el indice en el buffer de valores */ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Tipo #define TSNTRANSLAN_BITMASK_TYPE (B'111') #define TSNTRANSLAN_BITEND_TYPE (3) //--- Numero de elemtnos #define TSNTRANSLAN_BITSTART_NUMEL (TSNTRANSLAN_BITEND_TYPE) #define TSNTRANSLAN_BITMASK_NUMEL (0x1fffffff) //--- A saltar #define TSNTRANSLAN_BITSTART_CINSALTAR (32) #define TSNTRANSLAN_BITMASK_CINSALTAR (0x7fffffff) //--- Jit is #define TSNTRANSLAN_BITSTART_ISJIT (63) //--- #define TSNTRANSLAN_BITSTART_STRINDEX (TSNTRANSLAN_BITEND_TYPE) //--- Str #define TSNTRANSLAN_BITMASK_STR_LEN (0x3fffffff) #define TSNTRANSLAN_BITSTART_STR_LEN (TSNTRANSLAN_BITEND_TYPE) #define TSNTRANSLAN_BITSTART_STR_START (33) //--- // obj=1 // arr=0 #define TSNTRANSLAN_MAKESTATE(T) (']' | (uchar(T) << 5)) //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- La idea con el hash perfecto es que se aplcia por cada "namespace" y resulve key=index buff struct TSNTransLanPfh { ushort seeds[]; // Seeds.. ulong key_hash[]; // Key hash int pos_index[]; // Key->IndexTemplate + 1 = key ulong sizes; // Tamaños int table_size; // Tamaño de tabla }; /* { "valor": "valor" , } */ //--- } //+------------------------------------------------------------------+ #endif // TSNTRANSLATIONS_SRC_LANBACKEND_DEFINES_MQH //+------------------------------------------------------------------+