//+------------------------------------------------------------------+ //| Def.mqh | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com/" #property strict #ifndef BASESPARSERSLAN_SRC_DEF_MQH #define BASESPARSERSLAN_SRC_DEF_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define TSN_SLF_RAW_FILE 0 #define TSN_SLF_RAW_EMBEBED 1 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define TSN_SLF_EXT_TYPE_FILE 0 #define TSN_SLF_EXT_TYPE_CACHE_FILE 1 //+------------------------------------------------------------------+ //| Implementacion de hashers para el hash perfecto | //+------------------------------------------------------------------+ class CSBLHasherGenUl { public: CSBLHasherGenUl(void) {} ~CSBLHasherGenUl(void) {} static __forceinline ulong Hash(const ulong v) { return v; // Hasher 0 } }; //+------------------------------------------------------------------+ class CSBLHasherGenUl1 { public: CSBLHasherGenUl1(void) {} ~CSBLHasherGenUl1(void) {} static ulong Hash(const ulong v, const ulong seed) { ulong h = v + seed * 0x9e3779b97f4a7c15; h = (h ^ (h >> 30)) * 0xbf58476d1ce4e5b9; h = (h ^ (h >> 27)) * 0x94d049bb133111eb; h ^= (h >> 31); return h; // Hasher 1 } }; //+------------------------------------------------------------------+ //| Layout base | //+------------------------------------------------------------------+ /* --- Notas: - cada [] = 1 slot = 64 bits = long Tabla: KEY: [tipo(4)|len(28low)<<4|start(32high)<<32] OBJ: [tipo(4)|is_jit(1)<<4|count(3)<<5|count(24)<<8|step<<32] ARR: [tipo(4)|Vacio por ahora 4 bits|count(24)<<8|step<<32] // Nota esto es para compatibilidad con obj INT: [tipo(4)] [64bit=long] FLT: [tipo(4)] [64bit=double] BOL: [tipo(4)|bool_value(1)<<4] STR: [tipo(4)|len(28low)<<4|start(32high)<<32] STR_S: --- Nota que luego el layout de yaml, etc.. para otros elemtos como ustring, etc varia... */ //+------------------------------------------------------------------+ //| Mask \ Bits start | //+------------------------------------------------------------------+ //--- General #define TSN_SBL_BIT_START_ENDTYPE (4) #define TSN_SBL_BIT_MASK_TYPE (0xF) //--- STRING 1-slot: [tipo(4)|len(28low)|start(32high)] #define TSN_SBL_BIT_STR_LEN (4) #define TSN_SBL_BIT_STR_MASK_LEN (0xFFFFFFF) #define TSN_SBL_BIT_STR_START (32) //--- Arrays\Obj numero de lementos (bit starts) #define TSN_SBL_BIT_START_NUM_C (32) #define TSN_SBL_BIT_START_NUM_EL (8) #define TSN_SBL_BIT_MASK_NUM_EL (0xFFFFFF) #define TSN_SBL_BIT_START_IS_HASING (4) #define TSN_SBL_BIT_MASK_IS_HASHSING (1) #define TSN_SBL_BIT_START_NUM_C_HASH (5) #define TSN_SBL_BIT_MASK_NUM_C_HASH (B'111') //--- #define TSN_SBL_BIT_START_BOOL (4) //+------------------------------------------------------------------+ //| Tipos base | //+------------------------------------------------------------------+ #define TSN_SBL_BASE_TYPE_KEY 0 #define TSN_SBL_BASE_TYPE_OBJ 1 #define TSN_SBL_BASE_TYPE_ARR 2 #define TSN_SBL_BASE_TYPE_INT 3 #define TSN_SBL_BASE_TYPE_FLT 4 #define TSN_SBL_BASE_TYPE_BOL 5 #define TSN_SBL_BASE_TYPE_STR 6 //--- flags base #define TSN_SBL_BASE_F_KEY 1 // 1 << 0 #define TSN_SBL_BASE_F_OBJ 2 // 1 << 1 #define TSN_SBL_BASE_F_ARR 4 // 1 << 2 #define TSN_SBL_BASE_F_INT 8 // 1 << 3 #define TSN_SBL_BASE_F_FLT 16 // 1 << 4 #define TSN_SBL_BASE_F_BOL 32 // 1 << 5 #define TSN_SBL_BASE_F_STR 64 // 1 << 6 } //+------------------------------------------------------------------+ #endif // BASESPARSERSLAN_SRC_DEF_MQH