BasesParserSLan/Src/Def.mqh
Nique_372 5c788218fe
2026-07-20 10:26:40 -05:00

143 righe
4,9 KiB
MQL5

//+------------------------------------------------------------------+
//| 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 <TSN\\PHash\\Main.mqh>
#include <TSN/Tables/AllHashes.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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