forked from nique_372/BasesParserSLan
109 lines
4.3 KiB
MQL5
109 lines
4.3 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_EXTRADEF_POINTER_DEF_MQH
| |
#define BASESPARSERSLAN_SRC_EXTRADEF_POINTER_DEF_MQH
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
#include "..\\..\\Utils\\Number.mqh"
| |
#include "..\\..\\Utils\\ErrorFormat.mqh"
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
namespace TSN
| |
{
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
struct BSFLPointerCompiler;
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
// Codigos de error sugeridos
| |
enum ENUM_BSFL_POINTER_ERR
| |
{
| |
BSFL_POINTER_ERR_NOT,
| |
BSFL_POINTER_ERR_KEY_NOT_EXIST,
| |
BSFL_POINTER_ERR_ARRAY_OUT_RANGE,
| |
BSFL_POINTER_ERR_INVALID_NODE_TYPE
| |
};
| |
| |
//+------------------------------------------------------------------+
| |
enum ENUM_BSFL_POINTER_PARSE_RES
| |
{
| |
BSFL_POINTER_PARSE_RES_EXITO,
| |
BSFL_POINTER_PARSE_RES_ERR_QUERY_MUST_START_WITH_BR, // /
| |
BSFL_POINTER_PARSE_RES_ERR_INVALID_ESCAPE,
| |
};
| |
| |
//+------------------------------------------------------------------+
| |
#define BSFLPTR_I_NUMBER (0)
| |
#define BSFLPTR_I_KEY (1)
| |
| |
| |
//+------------------------------------------------------------------+
| |
// start (16 bits de len psra setr)
| |
#define BSFLPOINTER_BIT_START_H (32)
| |
#define BSFLPOINTER_BIT_MASK_H (0xffff)
| |
#define BSFLPOINTER_BIT_GET_START(v) int((v>>BSFLPOINTER_BIT_START_H) & BSFLPOINTER_BIT_MASK_H)
| |
| |
// len (tambien 16 bits)
| |
#define BSFLPOINTER_BIT_START_LEN (48)
| |
#define BSFLPOINTER_BIT_GET_LEN(v) int(v>>BSFLPOINTER_BIT_START_LEN)
| |
| |
//#define BSFLPOINTER_BITS_START_H_MASK (0x7fff) // quizas no haga falta por que solo jala noma
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
struct BSFLPointerQuery
| |
{
| |
//---
| |
BSFLPointerQuery(const string& query, BSFLPointerCompiler& compiler);
| |
BSFLPointerQuery() : m_i(0), m_last_err(BSFL_POINTER_ERR_NOT), m_size(0) {}
| |
BSFLPointerQuery(ulong& _ins[], int _ins_size, uchar& _raw[])
| |
: m_i(0), m_last_err(BSFL_POINTER_ERR_NOT), m_size(_ins_size)
| |
{
| |
// rotamos
| |
ArraySwap(m_raw, _raw);
| |
ArraySwap(m_ins, _ins);
| |
}
| |
| |
//---
| |
uchar m_raw[]; // texto crudo (opcional para debugging print de erroers hacer swap con el compíoler para zero copy)
| |
ulong m_ins[]; // instrucciones
| |
int m_size; // tamaño de instrucciones
| |
ENUM_BSFL_POINTER_ERR m_last_err; // ultimo err
| |
int m_i; // indice de iteracion
| |
| |
| |
//---
| |
void ErrorFormat(string& desc);
| |
void ErrorInfo();
| |
| |
//---
| |
void CintaTypesInfo();
| |
__forceinline void Set(const string& query, BSFLPointerCompiler& compiler);
| |
| |
//---
| |
const static BSFLPointerQuery EMPTY_QUERY;
| |
};
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
const BSFLPointerQuery BSFLPointerQuery::EMPTY_QUERY;
| |
| |
//---
| |
}
| |
#endif // BASESPARSERSLAN_SRC_EXTRADEF_POINTER_DEF_MQH
| |
//+------------------------------------------------------------------+
|