//+------------------------------------------------------------------+ //| Swar.mqh | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com/" #property strict #ifndef TSNTABES_SRC_SWAR_MQH #define TSNTABES_SRC_SWAR_MQH namespace TSN { //+------------------------------------------------------------------+ //| Swar | //+------------------------------------------------------------------+ // LO = 0x0101010101010101 = 72340172838076673ULL // HI = 0x8080808080808080 = 9259542123273814144ULL //--- Constante para compatarct ulongs en bits (ulong a uchar) #define TSNTABLES_MAGIC_COMPACT 0x0102040810204080 // primero los bits altos ahora son los bajos luego lo muplticalos pro la constante magica // y en los ultismo 8 bits algtos del ulong queda la mascara uchar.. #define TSNTABLES_COMPACT_UL(mask) (uchar((((mask >> 7) * TSNTABLES_MAGIC_COMPACT) >> 56) & 0xFF)) //--- #define TSNTABLES_MASK_PARES (B'01010101') #define TSNTABLES_MASK_IMPARES (B'10101010') //--- Constantes #define TSNTABLES_SWAR_LO 0x0101010101010101 #define TSNTABLES_SWAR_HI 0x8080808080808080 //--- Metodo base #define TSNTABLES_SWAR_HAS(mask) ((mask - TSNTABLES_SWAR_LO) & ~mask & TSNTABLES_SWAR_HI) //--- Mascaras especificas de chars // #define TSNTABLES_SWAR_MASK_COMILLA_APOS (0x2727272727272727) // ; #define TSNTABLES_SWAR_MASK_PUNTO_COMMA (0x3B3B3B3B3B3B3B3B) // " #define TSNTABLES_SWAR_MASK_COMILLA (0x2222222222222222) // \ #define TSNTABLES_SWAR_MASK_BACK_SLASH (0x5C5C5C5C5C5C5C5C) // ( #define TSNTABLES_SWAR_MASK_PARA_INI (0x2929292929292929) // \n #define TSNTABLES_SWAR_MASK_NEW_LINE (0x0A0A0A0A0A0A0A0A) // ] #define TSNTABLES_SWAR_MASK_COR_END (0x5D5D5D5D5D5D5D5D) // } #define TSNTABLES_SWAR_MASK_LLAVE_END (0x7D7D7D7D7D7D7D7D) // , #define TSNTABLES_SWAR_MASK_COMMA (0x2C2C2C2C2C2C2C2C) // #define TSNTABLES_SWAR_MASK_COMODIN (0x2323232323232323) // Espacio #define TSNTABLES_SWAR_MASK_ESPACIO (0x2020202020202020) // : #define TSNTABLES_SWAR_MASK_DOS_PUNTOS (0x3A3A3A3A3A3A3A3A) // = #define TSNTABLES_SWAR_MASK_IGUAL (0x3D3D3D3D3D3D3D3D) //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // Para la busquieda #define TSNTABLES_SWAR_64_CONSTANT 571740426102773010ULL #define TSNTABLES_SWAR_64_INDEX(flag_real) ((flag_real * TSNTABLES_SWAR_64_CONSTANT) >> 58) #define TSNTABLES_SWAR_64_DEJAR_SOLO_MINUS_SIG_BYTE(mask) (mask & (~mask + 1ULL)) #define TSNTABLES_SWAR_64_GET_BYTE(flag_real) (g_table_i64[TSNTABLES_SWAR_64_INDEX(flag_real)] >> 3) #define TSNTABLES_SWAR_64_GET_BIT(flag_real) (g_table_i64[TSNTABLES_SWAR_64_INDEX(flag_real)]) const char g_table_i64[64] = { 63, 0, 47, 1, 56, 48, 27, 2, 60, 57, 49, 41, 37, 28, 16, 3, 61, 54, 58, 35, 52, 50, 42, 21, 44, 38, 32, 29, 23, 17, 11, 4, 62, 46, 55, 26, 59, 40, 36, 15, 53, 34, 51, 20, 43, 31, 22, 10, 45, 25, 39, 14, 33, 19, 30, 9, 24, 13, 18, 8, 12, 7, 6, 5 }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ const uchar g_table_i8[256] = { 8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; } //+------------------------------------------------------------------+ #endif // TSNTABES_SRC_SWAR_MQH