169 lines
4.6 KiB
MQL4
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
|