108 lines
3.2 KiB
MQL5
108 lines
3.2 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| JsonPathVM.mqh |
| |
//| Copyright 2026, Niquel Mendoza. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#property copyright "Copyright 2026, Niquel Mendoza."
| |
#property link "https://www.mql5.com"
| |
#property strict
| |
| |
#ifndef JSONPARSERBYLEO_SRC_JSONPATHVM_MQH
| |
#define JSONPARSERBYLEO_SRC_JSONPATHVM_MQH
| |
| |
//+------------------------------------------------------------------+
| |
//| Include |
| |
//+------------------------------------------------------------------+
| |
//--- maquinaria base
| |
#include <TSN\\BSFL\\Query.mqh>
| |
//--- backend
| |
#include "JsonParser.mqh"
| |
//--- utils
| |
#include <TSN\\BSFL\\Utils.mqh>
| |
| |
//+------------------------------------------------------------------+
| |
//| Implementancion de makekeyhash para la VM |
| |
//+------------------------------------------------------------------+
| |
namespace TSN
| |
{
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
static bool CJsonParser::MakeKeyHashFNV1A64(const uchar &in[], int& i, int len, ulong& hash)
| |
{
| |
//---
| |
hash = 14695981039346656037ULL;
| |
for(;; i++) // nota aqui el " se nos garantiza pero igual en uncidoe hay que vertiicar el len
| |
{
| |
//---
| |
const uchar ch = in[i];
| |
if(ch == '\\')
| |
{
| |
const uchar next = g_tsn_table_json_unescape_table[in[++i]];
| |
switch(next)
| |
{
| |
case TSN_TABLE_UNESCAPE_UNICODE:
| |
{
| |
if(i + 4 >= len)
| |
return false;
| |
| |
//---
| |
DOMBASEULTIS_MAKESTRING_CODE(code, i)
| |
| |
//--- Vefificamos low\high surrogate
| |
if(code >= 0xD800 && code <= 0xDBFF)
| |
{
| |
if(i + 6 < len && in[i + 1] == '\\' && in[i + 2] == 'u')
| |
{
| |
int j = i + 2;
| |
DOMBASEULTIS_MAKESTRING_CODE(low, j)
| |
//---
| |
if(low >= 0xDC00 && low <= 0xDFFF)
| |
{
| |
DOMBASEULTIS_MKH_ITER(code)
| |
DOMBASEULTIS_MKH_ITER(low)
| |
i = j;
| |
break;
| |
}
| |
}
| |
//---
| |
// if(sizeof(TStrict) == JSONUNESCAPE_STRICT)
| |
// return def;
| |
DOMBASEULTIS_MKH_ITER(0xFFFD)
| |
}
| |
else
| |
if(code >= 0xDC00 && code <= 0xDFFF)
| |
{
| |
//if(sizeof(TStrict) == JSONUNESCAPE_STRICT)
| |
//return def;
| |
DOMBASEULTIS_MKH_ITER(0xFFFD)
| |
}
| |
else
| |
{
| |
DOMBASEULTIS_MKH_ITER(code)
| |
}
| |
break;
| |
}
| |
case TSN_TABLE_UNESCAPE_INVALID:
| |
return false;
| |
default:
| |
DOMBASEULTIS_MKH_ITER(next)
| |
break;
| |
}
| |
continue;
| |
}
| |
if(ch == '"')
| |
{
| |
i++; // lo dejamos luego del "
| |
return true;
| |
}
| |
| |
//---
| |
DOMBASEULTIS_MKH_ITER(ch)
| |
}
| |
return true;
| |
}
| |
| |
//---
| |
}
| |
#endif // JSONPARSERBYLEO_SRC_JSONPATHVM_MQH
|