//+------------------------------------------------------------------+ //| 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 SETFILEBYLEO_SRC_DEF_MQH #define SETFILEBYLEO_SRC_DEF_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Neceistamos la tabla de hexponentes #ifndef TSNTABLE_USE_POWEXP_TABLE #define TSNTABLE_USE_POWEXP_TABLE #endif // TSNTABLE_USE_POWEXP_TABLE //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include #include #include #include #include #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| Implementacion de hashers para el hash perfecto | //+------------------------------------------------------------------+ class CSetFHasherGenUl : public CPerfectHashHasher { public: CSetFHasherGenUl(void) {} ~CSetFHasherGenUl(void) {} #ifdef TSN_PHBL_DESACTIVE_REF ulong Hash(const ulong v) override final // key a hash ulong #else ulong Hash(const ulong& v) override final // key a hash ulong #endif // TSN_PHBL_DESACTIVE_REF { return v; // Hasher 0 } }; //+------------------------------------------------------------------+ class CSetFHasherGenUl1 : public CPerfectHashHasherWSeed { public: CSetFHasherGenUl1(void) {} ~CSetFHasherGenUl1(void) {} #ifdef TSN_PHBL_DESACTIVE_REF ulong Hash(const ulong v, const ulong seed) override final // key a hash ulong #else ulong Hash(const ulong& v, const ulong seed) override final // key a hash ulong #endif // TSN_PHBL_DESACTIVE_REF { ulong h = v + seed * 0x9e3779b97f4a7c15; h = (h ^ (h >> 30)) * 0xbf58476d1ce4e5b9; h = (h ^ (h >> 27)) * 0x94d049bb133111eb; h ^= (h >> 31); return h; // Hasher 1 } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Extensiones extra (naming) #define TSNSETF_EXT_SETTC ("settc") //--- #define TSNSETF_RI_SET_FILE 0 #define TSNSETF_RI_SETTC_FILE 1 //--- #define TSN_SETFPARSER_SETTC_TYPE_FILE 0 #define TSN_SETFPARSER_SETTC_TYPE_EMBEBED 1 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define TSN_SETFILE_BIT_START_STR (32) #define TSN_SETFILE_BIT_START_LEN_PLAIN (4) #define TSN_SETFILE_BIT_END_TYPE (4) //--- #define TSN_SETFILE_BIT_START_JIT_TRY (36) #define TSN_SETFILE_MASK_COUNT (0xFFFFFFFF) // 32 bits: de END_TYPE(4) a START_JIT_TRY(36) #define TSN_SETFILE_MASK_JIT_TRY (0xFFFFF) // 20 bits: de START_JIT_TRY(36) hasta bit 56 //--- #ifndef TSN_SETFILE_JIT_MIN_REF_TO_HASING #define TSN_SETFILE_JIT_MIN_REF_TO_HASING (15) #endif // TSN_SETFILE_JIT_MIN_REF_TO_HASING //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ struct CSetNode; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ENUM_SETFILE_TOKENS { SETFILE_TOK_ROOT, SETFILE_TOK_INTEGER, SETFILE_TOK_REAL, SETFILE_TOK_BOOLEAN, SETFILE_TOK_STRING, SETFILE_TOK_KEY, // [type=4][is=1][len=27][start=32] SETFILE_TOK_META, // [type=4][op_type=4] }; enum ENUM_SETFILE_TOKENS_INT { SETFILE_TOKENS_INT_NUMBER, SETFILE_TOKENS_INT_STRING, SETFILE_TOKENS_INT_TRUE, SETFILE_TOKENS_INT_FALSE, SETFILE_TOKENS_INT_AFTER_TRUE_FASE_OPT, SETFILE_TOKENS_INT_KEY, SETFILE_TOKENS_INT_COMENTARIO, SETFILE_TOKENS_INT_INVALID }; enum ENUM_SETFILE_TOK_OP_TYPE { SETFILE_TOK_OP_TYPE_VAL, SETFILE_TOK_OP_TYPE_Y, SETFILE_TOK_OP_TYPE_N }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ENUM_SETFILE_PARSER_ERROR { SETFILE_PARSER_ERROR_INVALID_TOKEN, SETFILE_PARSER_ERROR_INVALID_EXT_FILE, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ const uchar g_tsn_setfile_tokens[256] = { SETFILE_TOKENS_INT_INVALID, // 0 - NUL SETFILE_TOKENS_INT_INVALID, // 1 - SOH SETFILE_TOKENS_INT_INVALID, // 2 - STX SETFILE_TOKENS_INT_INVALID, // 3 - ETX SETFILE_TOKENS_INT_INVALID, // 4 - EOT SETFILE_TOKENS_INT_INVALID, // 5 - ENQ SETFILE_TOKENS_INT_INVALID, // 6 - ACK SETFILE_TOKENS_INT_INVALID, // 7 - BEL SETFILE_TOKENS_INT_INVALID, // 8 - BS SETFILE_TOKENS_INT_INVALID, // 9 - TAB SETFILE_TOKENS_INT_INVALID, // 10 - LF (\n) SETFILE_TOKENS_INT_INVALID, // 11 - VT SETFILE_TOKENS_INT_INVALID, // 12 - FF SETFILE_TOKENS_INT_INVALID, // 13 - CR SETFILE_TOKENS_INT_INVALID, // 14 - SO SETFILE_TOKENS_INT_INVALID, // 15 - SI SETFILE_TOKENS_INT_INVALID, // 16 - DLE SETFILE_TOKENS_INT_INVALID, // 17 - DC1 SETFILE_TOKENS_INT_INVALID, // 18 - DC2 SETFILE_TOKENS_INT_INVALID, // 19 - DC3 SETFILE_TOKENS_INT_INVALID, // 20 - DC4 SETFILE_TOKENS_INT_INVALID, // 21 - NAK SETFILE_TOKENS_INT_INVALID, // 22 - SYN SETFILE_TOKENS_INT_INVALID, // 23 - ETB SETFILE_TOKENS_INT_INVALID, // 24 - CAN SETFILE_TOKENS_INT_INVALID, // 25 - EM SETFILE_TOKENS_INT_INVALID, // 26 - SUB SETFILE_TOKENS_INT_INVALID, // 27 - ESC SETFILE_TOKENS_INT_INVALID, // 28 - FS SETFILE_TOKENS_INT_INVALID, // 29 - GS SETFILE_TOKENS_INT_INVALID, // 30 - RS SETFILE_TOKENS_INT_INVALID, // 31 - US SETFILE_TOKENS_INT_INVALID, // 32 - SPACE (manejado en NEXT) SETFILE_TOKENS_INT_STRING, // 33 - ! SETFILE_TOKENS_INT_STRING, // 34 - " SETFILE_TOKENS_INT_STRING, // 35 - # SETFILE_TOKENS_INT_STRING, // 36 - $ SETFILE_TOKENS_INT_STRING, // 37 - % SETFILE_TOKENS_INT_STRING, // 38 - & SETFILE_TOKENS_INT_STRING, // 39 - ' SETFILE_TOKENS_INT_STRING, // 40 - ( SETFILE_TOKENS_INT_STRING, // 41 - ) SETFILE_TOKENS_INT_STRING, // 42 - * SETFILE_TOKENS_INT_STRING, // 43 - + SETFILE_TOKENS_INT_STRING, // 44 - , SETFILE_TOKENS_INT_NUMBER, // 45 - - SETFILE_TOKENS_INT_STRING, // 46 - . SETFILE_TOKENS_INT_STRING, // 47 - / SETFILE_TOKENS_INT_NUMBER, // 48 - 0 SETFILE_TOKENS_INT_NUMBER, // 49 - 1 SETFILE_TOKENS_INT_NUMBER, // 50 - 2 SETFILE_TOKENS_INT_NUMBER, // 51 - 3 SETFILE_TOKENS_INT_NUMBER, // 52 - 4 SETFILE_TOKENS_INT_NUMBER, // 53 - 5 SETFILE_TOKENS_INT_NUMBER, // 54 - 6 SETFILE_TOKENS_INT_NUMBER, // 55 - 7 SETFILE_TOKENS_INT_NUMBER, // 56 - 8 SETFILE_TOKENS_INT_NUMBER, // 57 - 9 SETFILE_TOKENS_INT_STRING, // 58 - : SETFILE_TOKENS_INT_COMENTARIO, // 59 - ; SETFILE_TOKENS_INT_STRING, // 60 - SETFILE_TOKENS_INT_STRING, // 61 - = SETFILE_TOKENS_INT_STRING, // 62 - > SETFILE_TOKENS_INT_STRING,// 63 - ? SETFILE_TOKENS_INT_STRING, // 64 - @ SETFILE_TOKENS_INT_STRING, // 65 - A SETFILE_TOKENS_INT_STRING, // 66 - B SETFILE_TOKENS_INT_STRING, // 67 - C SETFILE_TOKENS_INT_STRING, // 68 - D SETFILE_TOKENS_INT_STRING, // 69 - E SETFILE_TOKENS_INT_STRING, // 70 - F SETFILE_TOKENS_INT_STRING, // 71 - G SETFILE_TOKENS_INT_STRING, // 72 - H SETFILE_TOKENS_INT_STRING, // 73 - I SETFILE_TOKENS_INT_STRING, // 74 - J SETFILE_TOKENS_INT_STRING, // 75 - K SETFILE_TOKENS_INT_STRING, // 76 - L SETFILE_TOKENS_INT_STRING, // 77 - M SETFILE_TOKENS_INT_STRING, // 78 - N SETFILE_TOKENS_INT_STRING, // 79 - O SETFILE_TOKENS_INT_STRING, // 80 - P SETFILE_TOKENS_INT_STRING, // 81 - Q SETFILE_TOKENS_INT_STRING, // 82 - R SETFILE_TOKENS_INT_STRING, // 83 - S SETFILE_TOKENS_INT_STRING, // 84 - T SETFILE_TOKENS_INT_STRING, // 85 - U SETFILE_TOKENS_INT_STRING, // 86 - V SETFILE_TOKENS_INT_STRING, // 87 - W SETFILE_TOKENS_INT_STRING, // 88 - X SETFILE_TOKENS_INT_STRING, // 89 - Y SETFILE_TOKENS_INT_STRING, // 90 - Z SETFILE_TOKENS_INT_STRING, // 91 - [ SETFILE_TOKENS_INT_STRING, // 92 - '\' SETFILE_TOKENS_INT_STRING, // 93 - ] SETFILE_TOKENS_INT_STRING, // 94 - ^ SETFILE_TOKENS_INT_STRING, // 95 - _ SETFILE_TOKENS_INT_STRING, // 96 - ` SETFILE_TOKENS_INT_STRING, // 97 - a SETFILE_TOKENS_INT_STRING, // 98 - b SETFILE_TOKENS_INT_STRING, // 99 - c SETFILE_TOKENS_INT_STRING, // 100 - d SETFILE_TOKENS_INT_STRING, // 101 - e SETFILE_TOKENS_INT_FALSE, // 102 - f SETFILE_TOKENS_INT_STRING, // 103 - g SETFILE_TOKENS_INT_STRING, // 104 - h SETFILE_TOKENS_INT_STRING, // 105 - i SETFILE_TOKENS_INT_STRING, // 106 - j SETFILE_TOKENS_INT_STRING, // 107 - k SETFILE_TOKENS_INT_STRING, // 108 - l SETFILE_TOKENS_INT_STRING, // 109 - m SETFILE_TOKENS_INT_STRING, // 110 - n SETFILE_TOKENS_INT_STRING, // 111 - o SETFILE_TOKENS_INT_STRING, // 112 - p SETFILE_TOKENS_INT_STRING, // 113 - q SETFILE_TOKENS_INT_STRING, // 114 - r SETFILE_TOKENS_INT_STRING, // 115 - s SETFILE_TOKENS_INT_TRUE, // 116 - t SETFILE_TOKENS_INT_STRING, // 117 - u SETFILE_TOKENS_INT_STRING, // 118 - v SETFILE_TOKENS_INT_STRING, // 119 - w SETFILE_TOKENS_INT_STRING, // 120 - x SETFILE_TOKENS_INT_STRING, // 121 - y SETFILE_TOKENS_INT_STRING, // 122 - z SETFILE_TOKENS_INT_STRING, // 123 - { SETFILE_TOKENS_INT_STRING, // 124 - | SETFILE_TOKENS_INT_STRING, // 125 - } SETFILE_TOKENS_INT_STRING, // 126 - ~ SETFILE_TOKENS_INT_STRING, // 127 - DEL SETFILE_TOKENS_INT_STRING, // 128 SETFILE_TOKENS_INT_STRING, // 129 SETFILE_TOKENS_INT_STRING, // 130 SETFILE_TOKENS_INT_STRING, // 131 SETFILE_TOKENS_INT_STRING, // 132 SETFILE_TOKENS_INT_STRING, // 133 SETFILE_TOKENS_INT_STRING, // 134 SETFILE_TOKENS_INT_STRING, // 135 SETFILE_TOKENS_INT_STRING, // 136 SETFILE_TOKENS_INT_STRING, // 137 SETFILE_TOKENS_INT_STRING, // 138 SETFILE_TOKENS_INT_STRING, // 139 SETFILE_TOKENS_INT_STRING, // 140 SETFILE_TOKENS_INT_STRING, // 141 SETFILE_TOKENS_INT_STRING, // 142 SETFILE_TOKENS_INT_STRING, // 143 SETFILE_TOKENS_INT_STRING, // 144 SETFILE_TOKENS_INT_STRING, // 145 SETFILE_TOKENS_INT_STRING, // 146 SETFILE_TOKENS_INT_STRING, // 147 SETFILE_TOKENS_INT_STRING, // 148 SETFILE_TOKENS_INT_STRING, // 149 SETFILE_TOKENS_INT_STRING, // 150 SETFILE_TOKENS_INT_STRING, // 151 SETFILE_TOKENS_INT_STRING, // 152 SETFILE_TOKENS_INT_STRING, // 153 SETFILE_TOKENS_INT_STRING, // 154 SETFILE_TOKENS_INT_STRING, // 155 SETFILE_TOKENS_INT_STRING, // 156 SETFILE_TOKENS_INT_STRING, // 157 SETFILE_TOKENS_INT_STRING, // 158 SETFILE_TOKENS_INT_STRING, // 159 SETFILE_TOKENS_INT_STRING, // 160 SETFILE_TOKENS_INT_STRING, // 161 SETFILE_TOKENS_INT_STRING, // 162 SETFILE_TOKENS_INT_STRING, // 163 SETFILE_TOKENS_INT_STRING, // 164 SETFILE_TOKENS_INT_STRING, // 165 SETFILE_TOKENS_INT_STRING, // 166 SETFILE_TOKENS_INT_STRING, // 167 SETFILE_TOKENS_INT_STRING, // 168 SETFILE_TOKENS_INT_STRING, // 169 SETFILE_TOKENS_INT_STRING, // 170 SETFILE_TOKENS_INT_STRING, // 171 SETFILE_TOKENS_INT_STRING, // 172 SETFILE_TOKENS_INT_STRING, // 173 SETFILE_TOKENS_INT_STRING, // 174 SETFILE_TOKENS_INT_STRING, // 175 SETFILE_TOKENS_INT_STRING, // 176 SETFILE_TOKENS_INT_STRING, // 177 SETFILE_TOKENS_INT_STRING, // 178 SETFILE_TOKENS_INT_STRING, // 179 SETFILE_TOKENS_INT_STRING, // 180 SETFILE_TOKENS_INT_STRING, // 181 SETFILE_TOKENS_INT_STRING, // 182 SETFILE_TOKENS_INT_STRING, // 183 SETFILE_TOKENS_INT_STRING, // 184 SETFILE_TOKENS_INT_STRING, // 185 SETFILE_TOKENS_INT_STRING, // 186 SETFILE_TOKENS_INT_STRING, // 187 SETFILE_TOKENS_INT_STRING, // 188 SETFILE_TOKENS_INT_STRING, // 189 SETFILE_TOKENS_INT_STRING, // 190 SETFILE_TOKENS_INT_STRING, // 191 SETFILE_TOKENS_INT_STRING, // 192 SETFILE_TOKENS_INT_STRING, // 193 SETFILE_TOKENS_INT_STRING, // 194 SETFILE_TOKENS_INT_STRING, // 195 SETFILE_TOKENS_INT_STRING, // 196 SETFILE_TOKENS_INT_STRING, // 197 SETFILE_TOKENS_INT_STRING, // 198 SETFILE_TOKENS_INT_STRING, // 199 SETFILE_TOKENS_INT_STRING, // 200 SETFILE_TOKENS_INT_STRING, // 201 SETFILE_TOKENS_INT_STRING, // 202 SETFILE_TOKENS_INT_STRING, // 203 SETFILE_TOKENS_INT_STRING, // 204 SETFILE_TOKENS_INT_STRING, // 205 SETFILE_TOKENS_INT_STRING, // 206 SETFILE_TOKENS_INT_STRING, // 207 SETFILE_TOKENS_INT_STRING, // 208 SETFILE_TOKENS_INT_STRING, // 209 SETFILE_TOKENS_INT_STRING, // 210 SETFILE_TOKENS_INT_STRING, // 211 SETFILE_TOKENS_INT_STRING, // 212 SETFILE_TOKENS_INT_STRING, // 213 SETFILE_TOKENS_INT_STRING, // 214 SETFILE_TOKENS_INT_STRING, // 215 SETFILE_TOKENS_INT_STRING, // 216 SETFILE_TOKENS_INT_STRING, // 217 SETFILE_TOKENS_INT_STRING, // 218 SETFILE_TOKENS_INT_STRING, // 219 SETFILE_TOKENS_INT_STRING, // 220 SETFILE_TOKENS_INT_STRING, // 221 SETFILE_TOKENS_INT_STRING, // 222 SETFILE_TOKENS_INT_STRING, // 223 SETFILE_TOKENS_INT_STRING, // 224 SETFILE_TOKENS_INT_STRING, // 225 SETFILE_TOKENS_INT_STRING, // 226 SETFILE_TOKENS_INT_STRING, // 227 SETFILE_TOKENS_INT_STRING, // 228 SETFILE_TOKENS_INT_STRING, // 229 SETFILE_TOKENS_INT_STRING, // 230 SETFILE_TOKENS_INT_STRING, // 231 SETFILE_TOKENS_INT_STRING, // 232 SETFILE_TOKENS_INT_STRING, // 233 SETFILE_TOKENS_INT_STRING, // 234 SETFILE_TOKENS_INT_STRING, // 235 SETFILE_TOKENS_INT_STRING, // 236 SETFILE_TOKENS_INT_STRING, // 237 SETFILE_TOKENS_INT_STRING, // 238 SETFILE_TOKENS_INT_STRING, // 239 SETFILE_TOKENS_INT_STRING, // 240 SETFILE_TOKENS_INT_STRING, // 241 SETFILE_TOKENS_INT_STRING, // 242 SETFILE_TOKENS_INT_STRING, // 243 SETFILE_TOKENS_INT_STRING, // 244 SETFILE_TOKENS_INT_STRING, // 245 SETFILE_TOKENS_INT_STRING, // 246 SETFILE_TOKENS_INT_STRING, // 247 SETFILE_TOKENS_INT_STRING, // 248 SETFILE_TOKENS_INT_STRING, // 249 SETFILE_TOKENS_INT_STRING, // 250 SETFILE_TOKENS_INT_STRING, // 251 SETFILE_TOKENS_INT_STRING, // 252 SETFILE_TOKENS_INT_STRING, // 253 SETFILE_TOKENS_INT_STRING, // 254 SETFILE_TOKENS_INT_STRING // 255 }; } //+------------------------------------------------------------------+ #endif // SETFILEBYLEO_SRC_DEF_MQH