TSNTranslations/Src/LanBackend/Defines.mqh
2026-10-27 10:48:31 -05:00
198 lines
6.6 KiB
MQL5
//+------------------------------------------------------------------+
//| Defines.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com"
#property strict
#ifndef TSNTRANSLATIONS_SRC_LANBACKEND_DEFINES_MQH
#define TSNTRANSLATIONS_SRC_LANBACKEND_DEFINES_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- tablas solo de json
#include <TSN\\Json\\UET.mqh>
//--- main basic
#include <TSN\\BSFL\\Main.mqh>
//--- bit tricks
#include <TSN\\Tables\\Bits.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//---
enum ENUM_TSN_JSONTRANSLATE_VTYPE
{
TSN_JSONTRANSLATE_VTYPE_ARR,
TSN_JSONTRANSLATE_VTYPE_OBJ,
TSN_JSONTRANSLATE_VTYPE_KEY,
TSN_JSONTRANSLATE_VTYPE_STR,
};
//---
enum ENUM_TSN_JSONTRANSLATE_TOKS
{
//---
TSN_JSONTRANSLATE_TOK_STRING=0u,
TSN_JSONTRANSLATE_TOK_KEY,
//---
TSN_JSONTRANSLATE_TOK_COMMA,
//--- ini
TSN_JSONTRANSLATE_TOK_LLAVE_INI,
TSN_JSONTRANSLATE_TOK_COR_INI,
//--- end
TSN_JSONTRANSLATE_TOK_LLAVE_END,
TSN_JSONTRANSLATE_TOK_COR_END,
//---
TSN_JSONTRANSLATE_TOK_COMMENT_MQL,
TSN_JSONTRANSLATE_TOK_EXT_NONEXT_KEY,
TSN_JSONTRANSLATE_TOK_EXT_NEXT_OBJV,
TSN_JSONTRANSLATE_TOK_EXT_NEXT_VV,
//--- Invalid
TSN_JSONTRANSLATE_TOK_INVALID,
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// Hay 4 tipos
// // comentario
// # comentario
// -- comentario
// ; comentario
#define TSN_JSONTRANSLATE_IS_COMMENT(C) ((C)=='/'||(C)=='-'||(C)=='#'||(C)==';')
//+------------------------------------------------------------------+
//| Flags |
//+------------------------------------------------------------------+
/*
//--- flag create
#define TSNTRANSLAN_TF(TOK) (1 << (TOK))
//--- banderas misce
#define TSNTRANSLAN_F_STR (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_STRING))
#define TSNTRANSLAN_F_COMMA (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COMMA))
#define TSNTRANSLAN_F_COR_INI (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COR_INI))
#define TSNTRANSLAN_F_COR_END (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COR_END))
#define TSNTRANSLAN_F_OBJ_INI (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_LLAVE_INI))
#define TSNTRANSLAN_F_OBJ_END (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_LLAVE_END))
#define TSNTRANSLAN_F_CM_MQ (TSNTRANSLAN_TF(TSN_JSONTRANSLATE_TOK_COMMENT_MQL))
//---
#define TSN_TRANSLAN_F_ALL_COM (TSNTRANSLAN_F_CM_MQ)
//--- Banderas
// inicio de estrucutrales
#define TSNTRANSLAN_F_STRUCTURALS_INI (TSNTRANSLAN_F_COR_INI| TSNTRANSLAN_F_OBJ_INI)
// finales
//--- val
// Se busca un valor (por ejemplo luego del cor ini [ { o tambien "": o tambien ,)
// Aqui es obligraorio el valor (por ejemplo "": )
#define TSNTRANSLAN_F_ALL_VAL_VALID (TSNTRANSLAN_F_STR | TSNTRANSLAN_F_STRUCTURALS_INI | TSN_TRANSLAN_F_ALL_COM)
// After coma en obj
#define TSNTRANSLAN_F_OBJ_VAL_LCOMMA (TSNTRANSLAN_F_STR | TSN_TRANSLAN_F_ALL_COM)*/
//---
// Solo los caracters finales
#define TSNTRANSLAN_CTX_OBJ ('}')
#define TSNTRANSLAN_CTX_ARR (']')
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum ENUM_TSN_JSONTRANSLATE_ERR
{
TSN_JSONTRANSLATE_ERR_NOT,
TSN_JSONTRANSLATE_EXPECTED_TWO_POINT_AFT_KEY,
TSN_JSONTRANSLATE_MALFORMED_AFTER_VAL,
TSN_JSONTRANSLATE_MALFORMED_FIND_VAL,
TSN_JSONTRANSLATE_MALFORMED_AFTER_COMMA_OBJ,
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*
OBJ: [type(3)|num_el(29)<<3|cinta_saltar(31)<<32|is_jit(1)<<63][obj_index or jit attemps, si isjit=0 entonces jitattemps, si es 1 jitindex]
ARR: [type(3)|num_el(29)<<3|cinta_saltar(31)<<32]
KEY: [type(3)][FVN1A64_hash(64)]
STR: [type(3)|LEN(30)<<3|START(31)<<33] index es el indice en el buffer de valores
*/
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- Tipo
#define TSNTRANSLAN_BITMASK_TYPE (B'111')
#define TSNTRANSLAN_BITEND_TYPE (3)
//--- Numero de elemtnos
#define TSNTRANSLAN_BITSTART_NUMEL (TSNTRANSLAN_BITEND_TYPE)
#define TSNTRANSLAN_BITMASK_NUMEL (0x1fffffff)
//--- A saltar
#define TSNTRANSLAN_BITSTART_CINSALTAR (32)
#define TSNTRANSLAN_BITMASK_CINSALTAR (0x7fffffff)
//--- Jit is
#define TSNTRANSLAN_BITSTART_ISJIT (63)
//---
#define TSNTRANSLAN_BITSTART_STRINDEX (TSNTRANSLAN_BITEND_TYPE)
//--- Str
#define TSNTRANSLAN_BITMASK_STR_LEN (0x3fffffff)
#define TSNTRANSLAN_BITSTART_STR_LEN (TSNTRANSLAN_BITEND_TYPE)
#define TSNTRANSLAN_BITSTART_STR_START (33)
//---
// obj=1
// arr=0
#define TSNTRANSLAN_MAKESTATE(T) (']' | (uchar(T) << 5))
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- La idea con el hash perfecto es que se aplcia por cada "namespace" y resulve key=index buff
struct TSNTransLanPfh
{
ushort seeds[]; // Seeds..
ulong key_hash[]; // Key hash
int pos_index[]; // Key->IndexTemplate + 1 = key
ulong sizes; // Tamaños
int table_size; // Tamaño de tabla
};
/*
{
"valor": "valor" ,
}
*/
//---
}
//+------------------------------------------------------------------+
#endif // TSNTRANSLATIONS_SRC_LANBACKEND_DEFINES_MQH
//+------------------------------------------------------------------+