TsnTables/Src/Swar/Swar.mqh
2026-07-12 19:11:01 -05:00

169 lines
4.6 KiB
MQL4

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